Wettervorhersage und Heizungssteuerung koppeln

Hallo Leute,

seit einiger Zeit treibt mich folgender Gedanke an. Ich möchte meiner Wärmepumpe beibringen, dass sie sich mit der Wettervorhersage zusammentut und wirklich „smart“ die Fußbodenheizung steuert. Nun habe ich folgenden Beitrag gefunden der mir aus der Seele spricht Wettervorhersage und Heizungssteuerrung koppeln mit IP-Symconblog.stromhaltig
Da ich allerdings immer noch Programmierneuling bin brauche ich „etwas“ Hilfestellung von euch.
So sieht momentan das Skript aus.

<?
/**
  EnergyForecast hilft die Energiesteuerung mit Hilfe einer Wettervorhersage zu optimieren.
*/

// Ändern

$api_key_wunderground="ccf17a647c97l08b5785";  // Erhältlich unter http://www.wunderground.com/?apiref=71977f1e65815792
$zmw_location ="zmw:00000.33.10982"; // Ortsagangabe - findet sich bei Wunderground - oder nach Aufruf von


// Keine Änderungen nach dieser Zeile notwendig...

function savetoIPS($day,$name,$value) {
		global $IPS_SELF;
		$id=@IPS_GetObjectIDByName("day_".$day."_".$name,$IPS_SELF);
		if($id===FALSE) {
		         	$dg_id=IPS_CreateVariable(2);
						IPS_SetName($dg_id,"day_".$day."_".$name);
						IPS_SetParent($dg_id,$IPS_SELF);
						if(($name=="low")||($name=="high")||($name=="hgt")||($name=="avg")) {
							IPS_SetVariableProfileValues("Temperatur", -30, 50, 0.5);
						}
						$id=$dg_id;
		}
		SetValue($id,$value);
}

function updateForecast() {
	global $api_key_wunderground,$zmw_location;
	$content=json_decode(Sys_GetURLContent("http://api.wunderground.com/api/".$api_key_wunderground."/forecast10day/q/".$zmw_location.".json"));

	$i=0;
	foreach($content->forecast->simpleforecast->forecastday as $day) {
	            $high=$day->high->celsius;
	            $low=$day->low->celsius;
					$avg=round(($high+$low)/2,1);
					$hgt=15-$avg; // Heizgrenze von 15 Tag zur Berechnung der Gradtagzahl!
					$skyc=$day->skyicon;
					$sky=0;
					switch($skyc) {
					   case "sunny":
					      $sky=1;
					      break;
					   case "mostlysunny":
					      $sky=7/8;
					      break;
					   case "partlycloudy":
					      $sky=6/8;
					      break;
					   case "mostlycloudy":
					      $sky=2/8;
					      break;
					}
  	            if($hgt<0) $hgt=0;
  	            // Speichern der Werte als IPS Variablen
  	            savetoIPS($i,"low",$low);
  	            savetoIPS($i,"high",$high);
  	            savetoIPS($i,"hgt",$hgt);
 	            savetoIPS($i,"avg",$avg);
 	            savetoIPS($i,"sky",$sky);
 	            if($i>0) {
 	                  $change_t=$old_hgt-$hgt;
 	                  $change_s=$old_sky-$sky;
        	            savetoIPS($i,"trend_temp",$change_t);
       	            savetoIPS($i,"trend_solar",$change_s);
 	            }
 	            $old_hgt=$hgt;
 	            $old_sky=$sky;
  	            $i++;
	}
}

updateForecast();

?>

und so die Fehlermeldung

[i]Warning: Variablenprofil #Temperatur existiert nicht in C:\IP-Symcon\scripts\18436.ips.php on line 22

Warning: Variablenprofil #Temperatur existiert nicht in C:\IP-Symcon\scripts\18436.ips.php on line 22

Warning: Variablenprofil #Temperatur existiert nicht in C:\IP-Symcon\scripts\18436.ips.php on line 22

Warning: Variablenprofil #Temperatur existiert nicht in C:\IP-Symcon\scripts\18436.ips.php on line 22

Warning: Variablenprofil #Temperatur existiert nicht in C:\IP-Symcon\scripts\18436.ips.php on line 22

Warning: Variablenprofil #Temperatur existiert nicht in C:\IP-Symcon\scripts\18436.ips.php on line 22

Warning: Variablenprofil #Temperatur existiert nicht in C:\IP-Symcon\scripts\18436.ips.php on line 22

Warning: Variablenprofil #Temperatur existiert nicht in C:\IP-Symcon\scripts\18436.ips.php on line 22

Warning: Variablenprofil #Temperatur existiert nicht in C:\IP-Symcon\scripts\18436.ips.php on line 22

Warning: Variablenprofil #Temperatur existiert nicht in C:\IP-Symcon\scripts\18436.ips.php on line 22
Abort Processing during exceed of maximal ErrorCount: Variablenprofil #Temperatur existiert nicht
Error in Script C:\IP-Symcon\scripts\18436.ips.php on Line 22[/i]

Nun denke ich mir, dass ich wohl Variable(n) erstellen muß, oder? Bitte seid so nett und schreibt nicht nur Ja, oder Nein, sondern auch etwas für Dummies dazu (wie ich eine Variable anlege kann ich natürlich nachlesen).

Der nächste Schritt ist dann natürlich die Wärmepumpe über die Vorhersagewerte zu steuern. Hier wäre ich sehr dankbar für mögliche Wege wie das zu realisieren wäre. Ich kann über IP auf die WP zugreifen und viele Werte ansehen. Brauche ich da noch irgendwelche ?Codes? vom Hersteller zur Steuerung über IPS?

Ich denke das ist wohl eher ein Großprojekt, jedoch st es mir sehr wichtig, da hier einfach viele Geld zum Fenster rausgeheitzt wird und ich das optimieren möchte.
Bitte versteht mich nicht so, dass ich etwas vorgekaut haben möchte, mir fehlen nur die Ansatzpunkte in welche Richtung es geht.

Vielen Dank

Bruno

Hallo Bruno,

Also so wie ich es sehe versucht das Script ein vorhandenes Variablenprofil zu bearbeiten! Leider ist dieses scheinbar bei dir noch nicht angelegt! Dazu geh einfach auf eine beliebige Instanz in deinem Objektbaum. Klicke diese nun doppelt an und es öffnet sich das Fenster „Variable editieren“. Anschließend auf „Profile verwalten“ und dort legst du ein neues Profil(Typ Float) an mit dem exakten Namen „Temperatur“. Anschließend mit Profil speichern bestätigen, schließen und dann sollte dieser Fehler beseitigt sein.

So nun zum steuern. Code Schnipsel vom Hersteller sind deutlich hilfreicher, als selber erstmal die Kommunikation mitzuschneiden und zu erraten wie es gemacht wird.

Gruß Bernd

PS: ich bin mir nicht sicher, aber die Befehle savetoIPS könnten noch Probleme machen. Schau in dem Falle mal bei setvalue nach.

Zum PS: „savetoIPS“ passt schon, dass ist eine Funktion die oben im Skript definiert ist und dann ein SetValue usw. macht :slight_smile:

Das einzige was beim schnellen Überfliegen zu fehlen scheint, bei dir, ist das Variablenprofil mit Namen „Temperatur“. Das muss noch als FLOAT-Variablenprofil angelegt werden.

Und du solltest mal deinen API-Key aus dem Skript entfernen :wink: :smiley:

Grüße,
Chris

1 „Gefällt mir“

Servus
ich versuche schon lange etwas ähnliches umzusetzen.
Und zwar wollte das Batteriemanagement meiner Insel-PV Anlage an den zu erwartenden Ertrag des nächsten Tages oder auch nur der nächsten Stunden anpassen.

Bis jetzt muß ich allerdings leider sagen ein kompletter Fehlschlag. Die Wettervorhersage (insbesondere von Wunderground) ist dazu leider noch viel zu unpräzise.
Ich lade die Bewölkungs-Tagesvorschau, die jeweils aktualisierten Bewölkungs-Stundenvorschau den aktuellen Wert und vergleiche dies mit dem tatsächlichen Ertrag der PV -> nope das passt nur während konstanten Schönwetterperioden.
Ansonsten Fehlanzeige da ist viel zu wenig Korrelation. Zumindest mal in meiner Wohngegend, mag vielleicht bei euch anders sein.

Der nächste Versuch wird sein einfach mittels gleitendem Mittelwert den zu erwartenden Ertrag vorherzusagen.
Kurzfristige Änderungen kann ich damit auch nicht abdecken, aber wenn ich mir meine Logging Daten so ansehe, wird das besser als mittels Wonderground Vorhersage.

Laß hören was du so im Detail vorhast
bb

tatsächlich irgendwo? Cool werd ich probieren.

keine Angst, der ist nicht mehr ganz original :wink:

Auf die Frage von bbernhard. Was ich konkret vorhabe ist folgendes.
Beispielszenario: Morgen ist es draußen 2 Grad wärmer als heute, die Wärmepumpe bekommt diese Info (über IPS) von der Wettervorhersage. Daraufhin wird die Temperatur gesenkt. Ebenso bei einer Wetterverschlechterung/Temperaturabsenkung der Aussentemperatur. Nun ist also einerseits die Vorhersage für meinen Ort in IPS zu bekommen und aus IPS heraus im nächsten Schritt die Wärmepumpe zu steuern. Hier möchte ich nochmal anmerken das ich absoluter Anfänger im PHP Bereich bin.
Ich denke nun ist klar wo ich hinwill, oder? PV-Anlage haben wir übrigens keine, es geht mir lediglich um die Temperatur.

Schonmal vielen Dank für eure Antworten. Were wohl im nächsten Schritt die Temperatur anlegen und den Hersteller wegen der Codes anschreiben.

LG

Bruno