Ankündigung

Einklappen
Keine Ankündigung bisher.

Plugin gesucht für Erkennung Sommer/Winter für Heizungssteuerung

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • haegar80
    antwortet
    Zitat von henfri Beitrag anzeigen
    Och, mir ist da selbst schon der Kopf -naja, die Ohren- lang gezogen worden.
    Da mach ich mir nix draus.
    Wenn es dich interessiert, dann schau mal in mein Profil. Ich bin deswegen heute noch sauer, weil ich wegen Innovationsfreude abgestraft wurde. Ich denke, das ich die dort zerredete Lösung noch diesen Winter zum Laufen bekomme...

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Zitat von haegar80 Beitrag anzeigen
    Ja habe ich, mein Plugin für Wetter.com sieht so aus:
    Danke. Die GAs passen sogar in mein Schema ;-)


    Werd ich machen. Ich hoffe ihr reißt mir in dem Thread nicht den Kopf ab ...
    Och, mir ist da selbst schon der Kopf -naja, die Ohren- lang gezogen worden.
    Da mach ich mir nix draus.

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • haegar80
    antwortet
    Zitat von henfri Beitrag anzeigen
    Das obige Plugin hast du dann aber noch um die Abfrage für morgen und übermorgen erweitert, oder?

    Ja habe ich, mein Plugin für Wetter.com sieht so aus:
    Code:
    # Plugin für Wettervorhersage von Wetter.com
    # Link für Aufruf XML-Datei http://api.wetter.com/forecast/weather/city/DE0008685063/project/knxbus/cs/4d6650c1fb7a78ed8dc83e29d34c5186
    
    ### Definitionen
    
    ##Gruppenadressen für Wetterwerte
    ## h = Heute 
    ## m = Morgen
    ## u = Übermorgen
    ## Morgen = 6-11 Uhr
    ## Mittag = 11-17 Uhr
    ## Abend = 17- 23 Uhr
    ## Nacht = 23 -6 Uhr  
    
    # Gruppenadressen für Temperatur 
    my $h_morgen_temp_ga = '5/7/11';
    my $h_mittag_temp_ga = '5/7/31';
    my $h_abend_temp_ga = '5/7/51';
    my $h_nacht_temp_ga = '5/7/71';
    my $m_morgen_temp_ga = '5/7/91';
    my $m_mittag_temp_ga = '5/7/111';
    my $m_abend_temp_ga = '5/7/131';
    my $m_nacht_temp_ga = '5/7/151';
    my $u_morgen_temp_ga = '5/7/171';
    my $u_mittag_temp_ga = '5/7/191';
    my $u_abend_temp_ga = '5/7/211';
    my $u_nacht_temp_ga = '5/7/231';
    
    # Gruppenadressen für Temperatur Minimum
    my $h_morgen_tn_ga = '5/7/12';
    my $h_mittag_tn_ga = '5/7/32';
    my $h_abend_tn_ga = '5/7/52';
    my $h_nacht_tn_ga = '5/7/72';
    my $m_morgen_tn_ga = '5/7/92';
    my $m_mittag_tn_ga = '5/7/112';
    my $m_abend_tn_ga = '5/7/132';
    my $m_nacht_tn_ga = '5/7/152';
    my $u_morgen_tn_ga = '5/7/172';
    my $u_mittag_tn_ga = '5/7/192';
    my $u_abend_tn_ga = '5/7/212';
    my $u_nacht_tn_ga = '5/7/232';
    
    # Gruppenadressen für Temperatur Maximum
    my $h_morgen_tx_ga = '5/7/13';
    my $h_mittag_tx_ga = '5/7/33';
    my $h_abend_tx_ga = '5/7/53';
    my $h_nacht_tx_ga = '5/7/73';
    my $m_morgen_tx_ga = '5/7/93';
    my $m_mittag_tx_ga = '5/7/113';
    my $m_abend_tx_ga = '5/7/133';
    my $m_nacht_tx_ga = '5/7/153';
    my $u_morgen_tx_ga = '5/7/173';
    my $u_mittag_tx_ga = '5/7/193';
    my $u_abend_tx_ga = '5/7/213';
    my $u_nacht_tx_ga = '5/7/233';
    
    # Gruppenadressen für Wetterzustand (Code)
    #   0 = heiter
    #   1 = leicht bewölkt
    #   2 = partiell bewölkt
    #   3 = bewölkt
    #   4 = neblig
    #   5 = Nieselregen
    #   6 = Regen
    #   7 = Schnee
    #   8 = Regenschauer
    #   9 = Gewitter
    my $h_morgen_w_ga = '5/7/15';
    my $h_mittag_w_ga = '5/7/35';
    my $h_abend_w_ga = '5/7/55';
    my $h_nacht_w_ga = '5/7/75';
    my $m_morgen_w_ga = '5/7/95';
    my $m_mittag_w_ga = '5/7/115';
    my $m_abend_w_ga = '5/7/135';
    my $m_nacht_w_ga = '5/7/155';
    my $u_morgen_w_ga = '5/7/175';
    my $u_mittag_w_ga = '5/7/195';
    my $u_abend_w_ga = '5/7/215';
    my $u_nacht_w_ga = '5/7/235';
    
    # Gruppenadressen für Wetterzustand Textbeschreibung
    my $h_morgen_wtxt_ga = '5/7/16';
    my $h_mittag_wtxt_ga = '5/7/36';
    my $h_abend_wtxt_ga = '5/7/56';
    my $h_nacht_wtxt_ga = '5/7/76';
    my $m_morgen_wtxt_ga = '5/7/96';
    my $m_mittag_wtxt_ga = '5/7/116';
    my $m_abend_wtxt_ga = '5/7/136';
    my $m_nacht_wtxt_ga = '5/7/156';
    my $u_morgen_wtxt_ga = '5/7/176';
    my $u_mittag_wtxt_ga = '5/7/196';
    my $u_abend_wtxt_ga = '5/7/216';
    my $u_nacht_wtxt_ga = '5/7/236';
    
    # Gruppenadressen für Niederschlagswahrscheinlichkeit in %
    my $h_morgen_pc_ga = '5/7/21';
    my $h_mittag_pc_ga = '5/7/41';
    my $h_abend_pc_ga = '5/7/61';
    my $h_nacht_pc_ga = '5/7/81';
    my $m_morgen_pc_ga = '5/7/101';
    my $m_mittag_pc_ga = '5/7/121';
    my $m_abend_pc_ga = '5/7/141';
    my $m_nacht_pc_ga = '5/7/161';
    my $u_morgen_pc_ga = '5/7/181';
    my $u_mittag_pc_ga = '5/7/201';
    my $u_abend_pc_ga = '5/7/221';
    my $u_nacht_pc_ga = '5/7/241';
    
    # Gruppenadressen für Windgeschwindigkeit in km/h
    my $h_morgen_ws_ga = '5/7/25';
    my $h_mittag_ws_ga = '5/7/45';
    my $h_abend_ws_ga = '5/7/65';
    my $h_nacht_ws_ga = '5/7/85';
    my $m_morgen_ws_ga = '5/7/105';
    my $m_mittag_ws_ga = '5/7/125';
    my $m_abend_ws_ga = '5/7/145';
    my $m_nacht_ws_ga = '5/7/165';
    my $u_morgen_ws_ga = '5/7/185';
    my $u_mittag_ws_ga = '5/7/205';
    my $u_abend_ws_ga = '5/7/225';
    my $u_nacht_ws_ga = '5/7/245';
    
    # Gruppenadressen für Windrichtung in Grad (360 = Norden)
    my $h_morgen_wd_ga = '5/7/26';
    my $h_mittag_wd_ga = '5/7/46';
    my $h_abend_wd_ga = '5/7/66';
    my $h_nacht_wd_ga = '5/7/86';
    my $m_morgen_wd_ga = '5/7/106';
    my $m_mittag_wd_ga = '5/7/126';
    my $m_abend_wd_ga = '5/7/146';
    my $m_nacht_wd_ga = '5/7/166';
    my $u_morgen_wd_ga = '5/7/186';
    my $u_mittag_wd_ga = '5/7/206';
    my $u_abend_wd_ga = '5/7/226';
    my $u_nacht_wd_ga = '5/7/246';
    
    
    my $temp_ausgabe = "Mittel"; # Darstellung der Temperaturanzeige (Groß- und Kleinschreibung beachten!)
                                 # Möglich ist: Mittel - Mittelwert zwischen der minimalen und maximalen Temperatur
                                 #              Min    - Minimale Temperatur
                                 #              Max    - Maximale Temperatur
                                 #              Extrem - Bei postiven Temperaturwerten die höchste und
                                 #                       bei negativen Temperaturen die tiefste Temperatur
    
    # Benötigte Daten für die Webabfrage bei wetter.com (Der Link zur API ist ganz unten rechts auf der Seite) 
    my $ProjektName = "knxbus";  # Name des Projekts bei wetter.com
    my $ApiKey      = "d3ef8a276029dc007dd0f1abea02bd17"; # API Key des Projektes
    my $StadtCode    = "DE0008685063"; # Stadt-Code z.B. durch Suchen einer Stadt und Kopieren des Codes aus der URL von wetter.com
    ### Ende Definitionen
    
    #   XML-Tags von wetter.com
    #    <du>	UTC Zeit (Unix Timestamp)
    #    <d>	Lokale Zeit (Unix Timestamp)
    #    <dhu>	UTC Zeit (ISO 8601)
    #    <dhl> 	Lokale Zeit (ISO 8601)
    #    <p>	Gültigkeitszeitraum der Prognose
    #    <w> 	Code fuer den Wetterzustand
    #    <pc> 	Niederschlagswahrscheinlichkeit in Prozent
    #    <tn> 	Minimaltemperatur in Grad Celsius
    #    <tx> 	Maximaltemperatur in Grad Celsius
    #    <wd> 	Windrichtung in Grad
    #    <ws> 	Windgeschwindigkeit in km/h
    #    <w_txt> 	Wetter in Textform
    #    <wd_txt> 	Windrichtung Text
    
    use LWP::Simple;
    use XML::Simple;
    use Digest::MD5 "md5_hex";
    
    # Eigenen Aufruf-Zyklus setzen
    $plugin_info{$plugname.'_cycle'} = 60*60*1;
    
    my $SeitenURL	= "http://api.wetter.com/forecast/weather";
    # Generieren der Checksumme, diese wird für jede Stadt neu berechnet
    my $Checksumme	= md5_hex($ProjektName.$ApiKey.$StadtCode); # Berechnen der Checksumme
    my $URL         = $SeitenURL."/city/".$StadtCode."/project/".$ProjektName."/cs/".$Checksumme; # Komplette URL zum Abruf der XML-Infos
    my $xml         = XMLin( get($URL) ); # Globales Array das die abgerufenen Wetterinformationen enthält
    
    
    ## Wetterauswertung heute
    # Morgen
    knx_write($h_morgen_w_ga,		substr($xml->{forecast}->{date}->[0]->{time}->[0]->{w},0,1));
    knx_write($h_morgen_pc_ga,		$xml->{forecast}->{date}->[0]->{time}->[0]->{pc});
    my $temp_min	= $xml->{forecast}->{date}->[0]->{time}->[0]->{tn};
    my $temp_max	= $xml->{forecast}->{date}->[0]->{time}->[0]->{tx};
    knx_write($h_morgen_temp_ga,	ausgabe_temp($temp_min, $temp_max));
    knx_write($h_morgen_tn_ga,		$temp_min);
    knx_write($h_morgen_tx_ga,		$temp_max);
    knx_write($h_morgen_wd_ga,		$xml->{forecast}->{date}->[0]->{time}->[0]->{wd});
    knx_write($h_morgen_ws_ga,		round($xml->{forecast}->{date}->[0]->{time}->[0]->{ws}));
    knx_write($h_morgen_wtxt_ga,	$xml->{forecast}->{date}->[0]->{time}->[0]->{w_txt});
    # Mittag
    knx_write($h_mittag_w_ga,		substr($xml->{forecast}->{date}->[0]->{time}->[1]->{w},0,1));
    knx_write($h_mittag_pc_ga,		$xml->{forecast}->{date}->[0]->{time}->[1]->{pc});
    my $temp_min	= $xml->{forecast}->{date}->[0]->{time}->[1]->{tn};
    my $temp_max	= $xml->{forecast}->{date}->[0]->{time}->[1]->{tx};
    knx_write($h_mittag_temp_ga,	ausgabe_temp($temp_min, $temp_max));
    knx_write($h_mittag_tn_ga,		$temp_min);
    knx_write($h_mittag_tx_ga,		$temp_max); 
    knx_write($h_mittag_wd_ga,		$xml->{forecast}->{date}->[0]->{time}->[1]->{wd});
    knx_write($h_mittag_ws_ga,		round($xml->{forecast}->{date}->[0]->{time}->[1]->{ws}));
    knx_write($h_mittag_wtxt_ga,	$xml->{forecast}->{date}->[0]->{time}->[1]->{w_txt});
    # Abend 
    knx_write($h_abend_w_ga,		substr($xml->{forecast}->{date}->[0]->{time}->[2]->{w},0,1));
    knx_write($h_abend_pc_ga,		$xml->{forecast}->{date}->[0]->{time}->[2]->{pc});
    my $temp_min	= $xml->{forecast}->{date}->[0]->{time}->[2]->{tn};
    my $temp_max	= $xml->{forecast}->{date}->[0]->{time}->[2]->{tx};
    knx_write($h_abend_temp_ga,		ausgabe_temp($temp_min, $temp_max));
    knx_write($h_abend_tn_ga,		$temp_min);
    knx_write($h_abend_tx_ga,		$temp_max);  
    knx_write($h_abend_wd_ga,		$xml->{forecast}->{date}->[0]->{time}->[2]->{wd});
    knx_write($h_abend_ws_ga,		round($xml->{forecast}->{date}->[0]->{time}->[2]->{ws}));
    knx_write($h_abend_wtxt_ga,		$xml->{forecast}->{date}->[0]->{time}->[2]->{w_txt});
    # Nacht 
    knx_write($h_nacht_w_ga,		substr($xml->{forecast}->{date}->[0]->{time}->[3]->{w},0,1));
    knx_write($h_nacht_pc_ga,		$xml->{forecast}->{date}->[0]->{time}->[3]->{pc});
    my $temp_min	= $xml->{forecast}->{date}->[0]->{time}->[3]->{tn};
    my $temp_max	= $xml->{forecast}->{date}->[0]->{time}->[3]->{tx};
    knx_write($h_nacht_temp_ga,		ausgabe_temp($temp_min, $temp_max));
    knx_write($h_nacht_tn_ga,		$temp_min);
    knx_write($h_nacht_tx_ga,		$temp_max);  
    knx_write($h_nacht_wd_ga,		$xml->{forecast}->{date}->[0]->{time}->[3]->{wd});
    knx_write($h_nacht_ws_ga,		round($xml->{forecast}->{date}->[0]->{time}->[3]->{ws}));
    knx_write($h_nacht_wtxt_ga,		$xml->{forecast}->{date}->[0]->{time}->[3]->{w_txt});
    
     
    ## Wetterauswertung morgen
    # Morgen
    knx_write($m_morgen_w_ga,		substr($xml->{forecast}->{date}->[1]->{time}->[0]->{w},0,1));
    knx_write($m_morgen_pc_ga, 		$xml->{forecast}->{date}->[1]->{time}->[0]->{pc});
    my $temp_min	= $xml->{forecast}->{date}->[1]->{time}->[0]->{tn};
    my $temp_max	= $xml->{forecast}->{date}->[1]->{time}->[0]->{tx};
    knx_write($m_morgen_temp_ga,	ausgabe_temp($temp_min, $temp_max));
    knx_write($m_morgen_tn_ga,		$temp_min);
    knx_write($m_morgen_tx_ga,		$temp_max);
    knx_write($m_morgen_wd_ga,		$xml->{forecast}->{date}->[1]->{time}->[0]->{wd});
    knx_write($m_morgen_ws_ga,		round($xml->{forecast}->{date}->[1]->{time}->[0]->{ws}));
    knx_write($m_morgen_wtxt_ga,	$xml->{forecast}->{date}->[1]->{time}->[0]->{w_txt});
    # Nachmittag
    knx_write($m_mittag_w_ga,		substr($xml->{forecast}->{date}->[1]->{time}->[1]->{w},0,1));
    knx_write($m_mittag_pc_ga,		$xml->{forecast}->{date}->[1]->{time}->[1]->{pc});
    my $temp_min	= $xml->{forecast}->{date}->[1]->{time}->[1]->{tn};
    my $temp_max	= $xml->{forecast}->{date}->[1]->{time}->[1]->{tx};
    knx_write($m_mittag_temp_ga,	ausgabe_temp($temp_min, $temp_max));
    knx_write($m_mittag_tn_ga,		$temp_min);
    knx_write($m_mittag_tx_ga,		$temp_max);  
    knx_write($m_mittag_wd_ga,		$xml->{forecast}->{date}->[1]->{time}->[1]->{wd});
    knx_write($m_mittag_ws_ga,		round($xml->{forecast}->{date}->[1]->{time}->[1]->{ws}));
    knx_write($m_mittag_wtxt_ga,	$xml->{forecast}->{date}->[1]->{time}->[1]->{w_txt});
    # Abend
    knx_write($m_abend_w_ga,		substr($xml->{forecast}->{date}->[1]->{time}->[2]->{w},0,1));
    knx_write($m_abend_pc_ga,	$xml->{forecast}->{date}->[1]->{time}->[2]->{pc});
    my $temp_min	= $xml->{forecast}->{date}->[1]->{time}->[2]->{tn};
    my $temp_max	= $xml->{forecast}->{date}->[1]->{time}->[2]->{tx};
    knx_write($m_abend_temp_ga,		ausgabe_temp($temp_min, $temp_max));
    knx_write($m_abend_tn_ga,		$temp_min);
    knx_write($m_abend_tx_ga,		$temp_max);  
    knx_write($m_abend_wd_ga,		$xml->{forecast}->{date}->[1]->{time}->[2]->{wd});
    knx_write($m_abend_ws_ga,		round($xml->{forecast}->{date}->[1]->{time}->[2]->{ws}));
    knx_write($m_abend_wtxt_ga,		$xml->{forecast}->{date}->[1]->{time}->[2]->{w_txt});
    # Nacht
    knx_write($m_nacht_w_ga,		substr($xml->{forecast}->{date}->[1]->{time}->[3]->{w},0,1));
    knx_write($m_nacht_pc_ga,		$xml->{forecast}->{date}->[1]->{time}->[3]->{pc});
    my $temp_min	= $xml->{forecast}->{date}->[1]->{time}->[3]->{tn};
    my $temp_max	= $xml->{forecast}->{date}->[1]->{time}->[3]->{tx};
    knx_write($m_nacht_temp_ga,		ausgabe_temp($temp_min, $temp_max));
    knx_write($m_nacht_tn_ga,		$temp_min);
    knx_write($m_nacht_tx_ga,		$temp_max);   
    knx_write($m_nacht_wd_ga,		$xml->{forecast}->{date}->[1]->{time}->[3]->{wd});
    knx_write($m_nacht_ws_ga,		round($xml->{forecast}->{date}->[1]->{time}->[3]->{ws}));
    knx_write($m_nacht_wtxt_ga,		$xml->{forecast}->{date}->[1]->{time}->[3]->{w_txt});
    
    
    ## Wetterauswertung uebermorgen
    # Morgen
    knx_write($u_morgen_w_ga,		substr($xml->{forecast}->{date}->[2]->{time}->[0]->{w},0,1));
    knx_write($u_morgen_pc_ga, $xml->{forecast}->{date}->[2]->{time}->[0]->{pc});
    my $temp_min	= $xml->{forecast}->{date}->[2]->{time}->[0]->{tn};
    my $temp_max	= $xml->{forecast}->{date}->[2]->{time}->[0]->{tx};
    knx_write($u_morgen_temp_ga,	ausgabe_temp($temp_min, $temp_max));
    knx_write($u_morgen_tn_ga,		$temp_min,);
    knx_write($u_morgen_tx_ga,		$temp_max,);
    knx_write($u_morgen_wd_ga,		$xml->{forecast}->{date}->[2]->{time}->[0]->{wd});
    knx_write($u_morgen_ws_ga,		round($xml->{forecast}->{date}->[2]->{time}->[0]->{ws}));
    knx_write($u_morgen_wtxt_ga,	$xml->{forecast}->{date}->[2]->{time}->[0]->{w_txt});
    # Nachmittag
    knx_write($u_mittag_w_ga,		substr($xml->{forecast}->{date}->[2]->{time}->[1]->{w},0,1));
    knx_write($u_mittag_pc_ga,		$xml->{forecast}->{date}->[2]->{time}->[1]->{pc});
    my $temp_min	= $xml->{forecast}->{date}->[2]->{time}->[1]->{tn};
    my $temp_max	= $xml->{forecast}->{date}->[2]->{time}->[1]->{tx};
    knx_write($u_mittag_temp_ga,	ausgabe_temp($temp_min, $temp_max));
    knx_write($u_mittag_tn_ga,		$temp_min);
    knx_write($u_mittag_tx_ga,		$temp_max); 
    knx_write($u_mittag_wd_ga,		$xml->{forecast}->{date}->[2]->{time}->[1]->{wd});
    knx_write($u_mittag_ws_ga,		round($xml->{forecast}->{date}->[2]->{time}->[1]->{ws}));
    knx_write($u_mittag_wtxt_ga,	$xml->{forecast}->{date}->[2]->{time}->[1]->{w_txt});
    # Abend
    knx_write($u_abend_w_ga,		substr($xml->{forecast}->{date}->[2]->{time}->[2]->{w},0,1));
    knx_write($u_abend_pc_ga,		$xml->{forecast}->{date}->[2]->{time}->[2]->{pc});
    my $temp_min	= $xml->{forecast}->{date}->[2]->{time}->[2]->{tn};
    my $temp_max	= $xml->{forecast}->{date}->[2]->{time}->[2]->{tx};
    knx_write($u_abend_temp_ga,		ausgabe_temp($temp_min, $temp_max));
    knx_write($u_abend_tn_ga,		$temp_min);
    knx_write($u_abend_tx_ga,		$temp_max); 
    knx_write($u_abend_wd_ga,		$xml->{forecast}->{date}->[2]->{time}->[2]->{wd});
    knx_write($u_abend_ws_ga,		round($xml->{forecast}->{date}->[2]->{time}->[2]->{ws}));
    knx_write($u_abend_wtxt_ga,		$xml->{forecast}->{date}->[2]->{time}->[2]->{w_txt});
    # Nacht
    knx_write($u_nacht_w_ga,		substr($xml->{forecast}->{date}->[2]->{time}->[3]->{w},0,1));
    knx_write($u_nacht_pc_ga,		$xml->{forecast}->{date}->[2]->{time}->[3]->{pc});
    my $temp_min	= $xml->{forecast}->{date}->[2]->{time}->[3]->{tn};
    my $temp_max	= $xml->{forecast}->{date}->[2]->{time}->[3]->{tx};
    knx_write($u_nacht_temp_ga,		ausgabe_temp($temp_min, $temp_max));
    knx_write($u_nacht_tn_ga,		$temp_min);
    knx_write($u_nacht_tx_ga,		$temp_max);  
    knx_write($u_nacht_wd_ga,		$xml->{forecast}->{date}->[2]->{time}->[3]->{wd});
    knx_write($u_nacht_ws_ga,		round($xml->{forecast}->{date}->[2]->{time}->[3]->{ws}));
    knx_write($u_nacht_wtxt_ga,		$xml->{forecast}->{date}->[2]->{time}->[3]->{w_txt});
    
    
    sub ausgabe_temp {
        my $temp_min = shift;
        my $temp_max = shift;
        my $rueck_temp_value;
        my $temp;
        # Abfrage welche Temperaturen zurückgegebe werden soll
        if ( $temp_ausgabe eq "Max" ) { $temp = $temp_max; }
        elsif ($temp_ausgabe eq "Min" ) { $temp = $temp_min; }
        elsif ($temp_ausgabe eq "Extrem" ) 
        {
           if ( abs( $temp_min ) >= abs( $temp_max ) ) { $temp = $temp_min; }
           else { $temp = $temp_max; }
        }
        else { $temp = round ( ($temp_min + $temp_max) / 2 ); }
        # Aufbereiten der negativen Temperaturwerte für den rueck one
        if ( $temp < 0 ) { $rueck_temp_value = 256 + $temp; } 
        else { $rueck_temp_value = $temp; }
        return $rueck_temp_value;
        }
    
    sub round {
        my $value = shift;          # 1. Wert enthält die Zahl die gerundet werden soll
        my $precision = int(shift); # 2. Wert enthält die Anzahl der Stellen nach dem Komma, auf die gerundet werden soll.
    
        # Speichert das Vorzeichen und setzt value auf den Absolutwert.
        my $sign = 1;
        if($value < 0) 
            { $sign = -1; }
        $value = abs($value);
    
        # Berrechnet den Genauigkeitsfaktor
        my $pFactor = 10 ** $precision;
        
        # Rundet den Wert
        $value = int(($value * $pFactor) + 0.5) / $pFactor;
        
        # Berücksichtigt das ursprüngliche Vorzeichen
        $value *= $sign;
        
        return $value;
        }
    Zitat von henfri Beitrag anzeigen
    Und dann noch die Frage, wofür dies:
    Code:
            $plugin_info{$plugname.'_Sommer'} = 0;                # Status merken
    Das ist ne Altlast im meinem Plugin, weil ich den Wert bei der späteren Optimierung immer wieder brauche. Das ist ein Zwischenspeichern, so daß der Wert beim nächsten Aufruf nicht neu ermittelt werden muss. Weiter unten im Plugin kommt ja noch mein sonstiges tunen der Kesselsteuerung.


    Zitat von henfri Beitrag anzeigen
    Oh, das klingt interessant. Dazu habe ich gerade nebenan einen Thread aufgemacht (https://knx-user-forum.de/gebaeudete...er-regeln.html). Hast du deine Heizungssteuerung hier irgendwo vorgestellt/hättest du Lust dazu?
    Werd ich machen. Ich hoffe ihr reißt mir in dem Thread nicht den Kopf ab ...
    (Hab leider auch schon schlechte Erfahrungen hier im Forum gemacht)

    Gruß
    Sascha

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hi Sascha,
    Zitat von haegar80 Beitrag anzeigen
    Hallo Hendrik,
    ich habe das auf Basis des oben genannten Plugins zur Abfage bei Wetter.com im meinem Plugin zur Optimierung der Heizung eingebaut:
    Das obige Plugin hast du dann aber noch um die Abfrage für morgen und übermorgen erweitert, oder?

    Und dann noch die Frage, wofür dies:
    Code:
            $plugin_info{$plugname.'_Sommer'} = 0;                # Status merken
    ?


    Das ist aber nur ein kleiner Baustein der Heizungssteuerung. Bei mir fließt zusätzlich noch die größte Stellgröße aller Heizkreise ein. Somit ist die Sommer/Winter Umschaltung "nur" ein Schutz gegen ungewolltes Aufzeizen des Estrichs bei kurzzeitigen Temperaturschwankungen.
    Oh, das klingt interessant. Dazu habe ich gerade nebenan einen Thread aufgemacht (https://knx-user-forum.de/gebaeudete...er-regeln.html). Hast du deine Heizungssteuerung hier irgendwo vorgestellt/hättest du Lust dazu?

    Gruß,
    Hendrik




    Ich glaube zum Anfangen, gibt es Plugins die geeigneter sind...
    Versuch doch erst einmal die Wettervorhersage auf den Bus zu bekommen.

    Gruß
    Sascha[/QUOTE]

    Einen Kommentar schreiben:


  • haegar80
    antwortet
    Zitat von henfri Beitrag anzeigen
    Hallo,

    hat hier schon jemand weiter gemacht?
    Hallo Hendrik,
    ich habe das auf Basis des oben genannten Plugins zur Abfage bei Wetter.com im meinem Plugin zur Optimierung der Heizung eingebaut:
    Code:
    $plugin_subscribe{$GA_T_SommerWinter}{$plugname} = 1;
    my $H_T = (knx_read($GA_H_T_7)+knx_read($GA_H_T_14)+knx_read($GA_H_T_22)+knx_read($GA_H_T_22))/4;
    my $M_T = (knx_read($GA_M_T_7)+knx_read($GA_M_T_14)+knx_read($GA_M_T_22)+knx_read($GA_M_T_22))/4;
    my $U_T = (knx_read($GA_U_T_7)+knx_read($GA_U_T_14)+knx_read($GA_U_T_22)+knx_read($GA_U_T_22))/4;
    my $TempSommerWinter = ($H_T+$M_T+$M_T+$U_T)/4;
    if (! ($H_T == 0 and $M_T == 0 and $U_T == 0 )) {
        plugin_log($plugname,"RRD-Update für Vorhersagetemperatur Heute: ".$H_T."°C - Morgen: ".$M_T."°C - Übermorgen: ".$U_T."°C");
        update_rrd($RRD_T_SommerWinter,"",$TempSommerWinter);
        if ($TempSommerWinter < knx_read($GA_T_SommerWinter)) {    # Vorhersagetemperatur < Grenzwert 
            knx_write($GA_Sommer, 00, 1);                         # Sommerstatus auf GA zurücksetzen
            $plugin_info{$plugname.'_Sommer'} = 0;                # Status merken
            plugin_log($plugname,"Winterbetrieb");    
        } else {                                                # sonst Sommerbetrieb
            knx_write($GA_Sommer, 01, 1);                        # Sommerstatus auf GA schreiben
            $plugin_info{$plugname.'_Sommer'} = 1;              # Status merken
            plugin_log($plugname,"Sommerbetrieb + Heizkreise Aus");        
        }  
    }
    Ich stelle in der CV dann die Grenztemperatur für die Sommer/Winter Umschaltung ein.

    Das ist aber nur ein kleiner Baustein der Heizungssteuerung. Bei mir fließt zusätzlich noch die größte Stellgröße aller Heizkreise ein. Somit ist die Sommer/Winter Umschaltung "nur" ein Schutz gegen ungewolltes Aufzeizen des Estrichs bei kurzzeitigen Temperaturschwankungen.

    Zitat von henfri Beitrag anzeigen
    Ich habe mich gerade an einem anderen Plugin versucht und verstanden, dass ich ganz langsam damit anfangen muss Sprich: Dies ist eine Nummer zu groß für mich.

    Gruß,
    Hendrik
    Ich glaube zum Anfangen, gibt es Plugins die geeigneter sind...
    Versuch doch erst einmal die Wettervorhersage auf den Bus zu bekommen.

    Gruß
    Sascha

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    hat hier schon jemand weiter gemacht?

    Ich habe mich gerade an einem anderen Plugin versucht und verstanden, dass ich ganz langsam damit anfangen muss Sprich: Dies ist eine Nummer zu groß für mich.

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • NetFritz
    antwortet
    Hallo

    Code:
    @henfri
    würdest du den Code für die Wetterabfrage hier posten?
    Hatte ich hier schon.
    Für Früh,Mittag,Abend,Nacht und morgen Früh.
    Der Rest muss nur noch angefügt werden, siehe auch die XML aus Post 27.
    https://knx-user-forum.de/236505-post26.html

    Gruß NetFritz

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo Netfritz,

    würdest du den Code für die Wetterabfrage hier posten?

    Gruß&Danke,
    HEndrik

    Einen Kommentar schreiben:


  • NetFritz
    antwortet
    Hallo

    Mit einem WG Plugin, kann man mit Hilfe der API Wetter.com ,die Temp. im 6Std. Rhythmus 3Tage im voraus abfragen.
    Daraus kann man dann sicherlich eine Erkennung der Sommer/Winter Umschaltung bauen.

    Ich nutze die API Abfrage mit einem WG Plugin zur Beeinflussung der Sollwert Temp. meiner AI-WP.
    Auf meiner WAGO wird ein linearer Interpolations Baustein mit den Temp. gefüttert.
    Der Baustein wird mit 5Std. Vorlauf betrieben und sendet seine Temp. Werte
    an einem Sollertwertbaustein der dann die Sollwerttemp. meiner WP beeinflusst.
    Der Sollwert wird auf die Temp. verstellt, die der erst in 5Std. gültig ist.

    Gruß Netfritz

    Einen Kommentar schreiben:


  • haegar80
    antwortet
    Zitat von mknx Beitrag anzeigen
    Hi,
    ist diese DIN-Norm bzw. der Algorithmus nicht 90er?
    In einem smarten Home hat man doch ganz andere Möglichkeiten als die Heizungssteuerung mit einem PT1000. Ich denke da an Zulauftemperatur der KWL, Behaglichkeitsfelder der Wohnräume (Wz, Kinderz, Büro) und die Wettervorhersage.
    Unter reinen Komfort Gesichtspunkten ist das richtig. Da steuert man nur nach Bedarf und gut ist. Meine Anforderung geht aber in die Richtung Energiesparen (wird ja immer teurer). Und da spielt es eine Rolle, ob eine kurzzeitige Komforterfüllung mit dem Aufwand gerechtfertigt ist.
    Und da kann man eigentlich nur die Prognose (Wettervorhersage) als Quelle nutzen und diese mit einer geschickten Formel einbeziehen.
    Also DIN-Temperatur (in visu variabel einstellbar) in den nächsten 2 Tagen erfüllt, dann ist der Komfort zweitrangig

    Zitat von mknx Beitrag anzeigen
    Weiterhin ist es wahrscheinlich sinnvoll zwischen vier Status zu unterscheiden: heizen, kwl ohne bypass, kwl mit Bypass und kühlen.
    Schon klar, aber KWL und Heizung werden technisch unabhängig voneinander geregelt, also 2 Optimierungsregeln auf Basis teilweise gemeinsamer Messwerte.

    Einen Kommentar schreiben:


  • makki
    antwortet
    Zitat von mknx Beitrag anzeigen
    ist diese DIN-Norm bzw. der Algorithmus nicht 90er?
    Nö, mit 4 Jahren Betriebserfahrung muss ich das so sagen: Wetterfrosch ist Wetterfrosch (Wünschelrute, whatever), gemessene Temperatur ist was sehr reales; 90er ist nur das raten von Zuknunftswerten oder eine "schleppende" Nachführung so wie meine WP das tut (aber nicht darf)

    Makki

    Einen Kommentar schreiben:


  • callidomus
    antwortet
    Hi,
    ist diese DIN-Norm bzw. der Algorithmus nicht 90er?
    In einem smarten Home hat man doch ganz andere Möglichkeiten als die Heizungssteuerung mit einem PT1000. Ich denke da an Zulauftemperatur der KWL, Behaglichkeitsfelder der Wohnräume (Wz, Kinderz, Büro) und die Wettervorhersage.

    Weiterhin ist es wahrscheinlich sinnvoll zwischen vier Status zu unterscheiden: heizen, kwl ohne bypass, kwl mit Bypass und kühlen.

    So Long

    Marcus

    Einen Kommentar schreiben:


  • haegar80
    antwortet
    Zitat von NetFritz Beitrag anzeigen
    Wetter.com hat eine API mit der man die Daten abfragen kann.
    Man muss sich dafür kostenlos anmelden.
    https://knx-user-forum.de/code-schni...denro-one.html
    Das kenne ich und das ist auch meine Vorlage. Ich muß das "nur" noch ans Laufen bringen und die GA richtig einrichten.

    Einen Kommentar schreiben:


  • haegar80
    antwortet
    Zitat von greentux Beitrag anzeigen
    Kann ich so nicht mehr nachvollziehen. Derzeit NICHT auf Somemrbetrieb sieht so aus.
    Also im Grunde auch nur Warmwasser und kühlt dann über den Tag langsam ab.
    Logo, dafür greift bei warmen Tagen die Heizgrenze, die schaltet den Heizkreis bei Außentemperatur > x aus. Deswegen kommt es zur Zeit nicht zu dem takten obwohl keine Wärme abgenommen wird. an sonnigen Herbsttagen kommts wieder, versprochen.

    Einen Kommentar schreiben:


  • greentux
    antwortet
    Bei greentux geht das nicht, weil er keine RTR hat. Deswegen hat er auch nen höheren Pelletsverbrauch, weil der Kessel auf StandBy Temperatur rumnudelt, obwohl keine Wärme abgenommen wird.
    Kann ich so nicht mehr nachvollziehen. Derzeit NICHT auf Somemrbetrieb sieht so aus.
    Also im Grunde auch nur Warmwasser und kühlt dann über den Tag langsam ab.
    Angehängte Dateien

    Einen Kommentar schreiben:

Lädt...
X