Heizungssteuerung mit Parameterdatei - IPS v2.x

Weil doch immer wieder nachgefragt wird hier eine kleine Anleitung wie man meine ursprüngliche Heizungsstuerung mit Parameterdatei auf die IPS v2.x portiert, bzw. hier neu anlegt.

Die Stuerung besteht aus mehreren Scripten (sicher geht das alles einfacher, es ist aber damals so „gewwachsen“ und ich habe mit nicht mehr die Mühe gemacht es kompakter zu gestalten - es geht ja ;-))
Das Beispiel zeige ich für 2 FHT’s (eine Ergänzung um weitere ist dann selbsterklärend).

Allgemeine Scripte (für alle FHT’s nur ein mal nötig):

  • Heizungssteueruzng automatik
  • Heuzungssteuerung manuell

FHT-spezifische Scripte (jeweils pro FHT notwendig):
Heizungssteuerung reset (fürs Bad)
Heizungssteuerung reset (fürs Wohnzimmer)
ich habe das bei der Version 2.x so gemacht, dass es eine Kategorie für den Raum gibt (Bad, Wohnzimmer) und eine Kategorie Heizung. Die allgemeinen Scripte sind bei „Heizung“ die spezifischen bei dem jeweiligen Raum.

Als Variable für jedes FHT wird noch „Parameter Temperature“ als FLOAT benötigt.
Weiterhin sollte man für jedes angelegte FHT noch eine weitere Variable „Mode“ als Boolean anlegen. Warum? Ich habe gemerkt, dass sich die FHZ etwas schwer tut, den MODE an die FHT’s zu senden. Damit nicht immer was im Buffer hängen bleibt benutze ich eine eigene Variable für den Mode.
Dieser wird ja verwendet, wenn man manuell eine Temperatur (abweichend der Parameterdatei) angibt.

Vorab die Parameterdateien (man benötigt für jedes FHT eine eigene Datei - es sei denn die Zeiten und Temperaturen sind identisch):
eine Textdatei mit der Endung .par (kann man aber auch anders nennen, man muss nachher nur die richtige öffen.
Die Dateien habe ich für meine Steuerung in folgendem Pfad abgelegt (Beispiel Wohnzimmer-Parameterdatei)


C:/IP-SYMCON/parameter/Heizung_Wohn.par

Folgender Inhalt der Parameterdateien:

Montag;05:10;22.5
Montag;06:30;16.0
Montag;21:10;22.5
Montag;21:40;16.0
Dienstag;05:10;22.5
Dienstag;06:30;16.0
Dienstag;21:10;22.5
Dienstag;21:40;16.0
Mittwoch;05:10;22.5
Mittwoch;06:30;16.0
Mittwoch;21:10;22.5
Mittwoch;21:40;16.0
Donnerstag;05:20;22.5
Donnerstag;06:30;16.0
Donnerstag;21:10;22.5
Donnerstag;21:40;16.0
Freitag;05:10;22.5
Freitag;06:10;16.0
Freitag;21:10;22.5
Freitag;21:40;16.0
Samstag;07:30;22.5
Samstag;08:30;16.0
Samstag;21:10;22.5
Samstag;21:40;16.0
Sonntag;07:45;22.5
Sonntag;08:30;16.0
Sonntag;21:10;22.5
Sonntag;21:40;16.0

die beiden allgemeinen Scripte.
Alle IPS-ID’s habe ich durch „deineID“ ersetzt. der Kommentartext zeigt welche ID von deinem IPS benötigt wird.
Heizungssteuerung automatik:


<?
$hour=date("H");
$minute=date("i");
$time = $hour.":".$minute;
$heute = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
$tag = date("w");


//Badezimmer OG
$temp_mode=GetValueBoolean(deineID /*[Badezimmer Oben\FHT80b\Mode]*/);
if($temp_mode==false)   //Heizung im Automatikbetrieb
{
   $newtemp=GetValueFloat(deineID /*[Badezimmer Oben\FHT80b\Target Temperature]*/); //Alten Zustand einlesen - nur für erste Zeit am Tag wichtig

   $handle = fopen("C:/Programme/IP-SYMCON/web/Parameter/Heizung_Bad.par","r");
   while ($line = fgets($handle, 1000))
   {
     $parameter = explode(";", $line);	//[0]-Tag, [1]-(Ab)Zeit, [2]-Temperatur
     $day=$parameter[0];
	  $switchtime=$parameter[1];
	  $temp=$parameter[2];
	  if($day == $heute[$tag])	//Tag erkannt
	  {
         if($time > $switchtime)
           $newtemp = $temp;
     }
   }
   if($newtemp != GetValueFloat(deineID /*[Badezimmer Oben\FHT80b\Target Temperature]*/))
   {
      echo "Sollwert Temperatur Bad [°C]: ".$newtemp;
      SetValueFloat(deineID /*[Badezimmer Oben\FHT80b\Parameter Temperature]*/, (float)$newtemp);
      FHT_SetTemperature(deineID /*[Badezimmer Oben\FHT80b]*/, (float)$newtemp);
   }
   fclose($handle);
}

//Wohnzimmer
$temp_mode=GetValueBoolean(deineID /*[Wohnzimmer\FHT80b\Mode]*/);
if($temp_mode==false)  //Heizung im Automatikbetrieb
{
   $newtemp=GetValueFloat(deineID /*[Wohnzimmer\FHT80b\Target Temperature]*/); //Alten Zustand einlesen - nur für erste Zeit am Tag wichtig
   $handle = fopen("C:/IP-SYMCON/parameter/Heizung_Wohn.par","r");
   while ($line = fgets($handle, 1000))
   {
     $parameter = explode(";", $line);	//[0]-Tag, [1]-(Ab)Zeit, [2]-Temperatur
	  $day=$parameter[0];
	  $switchtime=$parameter[1];
   	$temp=$parameter[2];
      if($day == $heute[$tag])	//Tag erkannt
   	{
        	if($time > $switchtime)
            $newtemp = $temp;
   	}
   }
   if($newtemp != GetValueFloat(deineID /*[Wohnzimmer\FHT80b\Target Temperature]*/))
   {
      echo "Sollwert Temperatur Wohnzimmer [°C]: ".$newtemp;
      SetValueFloat(deineID /*[Wohnzimmer\FHT80b\Parameter Temperature]*/, (float)$newtemp);
      FHT_SetTemperature(deineID /*[Wohnzimmer\FHT80b]*/, (float)$newtemp);
   }
   fclose($handle);
}
?>

WICHTIG - diese Zeile im Script anpassen, wenn die Datei anders von dir benannt wurde, oder in einem anderen Verzeichnis liegt.


$handle = fopen("C:/IP-SYMCON/parameter/Heizung_Wohn.par","r");

Heizungssteuerung manuell:


<?
if($IPS_SENDER=="Variable")
{
   switch($IPS_VARIABLE)
   {
      case deineID:   //ID von [Wohnzimmer\FHT80b\Target Temperature]
      if(GetValueFloat(40874 /*[Wohnzimmer\FHT80b\Target Temperature]*/)!=GetValueFloat(deineID /*[Wohnzimmer\FHT80b\Parameter Temperature]*/))
      {
			SetValueBoolean(deineID /*[Wohnzimmer\FHT80b\Mode]*/,true); //in Manuell Mode
         IPS_SetScriptTimer(deineID /*[Wohnzimmer\FHT80b\Heizungssteuerung reset]*/,7000);  //ca. 2h halten
      }
      else
      {
			SetValueBoolean(deineID /*[Wohnzimmer\FHT80b\Mode]*/, false); //in Automatik Mode
         IPS_SetScriptTimer(deineID /*[Wohnzimmer\FHT80b\Heizungssteuerung reset]*/,0);  //Timer stoppen
      }
      break;

     case deineID:   //ID von [Badezimmer Oben\FHT80b\Target Temperature]
      if(GetValueFloat(deineID /*[Badezimmer Oben\FHT80b\Target Temperature]*/)!=GetValueFloat(deineID /*[Badezimmer Oben\FHT80b\Parameter Temperature]*/))
      {
			SetValueBoolean(deineID /*[Badezimmer Oben\FHT80b\Mode]*/,true);
         IPS_SetScriptTimer(deineID /*[Badezimmer Oben\FHT80b\Heizungssteuerung reset]*/,7000);  //ca. 2h halten
      }
      else
      {
         SetValueBoolean(deineID /*[Badezimmer Oben\FHT80b\Mode]*/,false);
         IPS_SetScriptTimer(deineID /*[Badezimmer Oben\FHT80b\Heizungssteuerung reset]*/,0);  //Timer stoppen
      }
      break;
   }
}
?>

Das spezifische Script nur fürs Bad (das andere ist dementsprechend):


<?
SetValueBoolean(deineID /*[Badezimmer Oben\FHT80b\Mode]*/, false); //in Automatik Mode
IPS_SetScriptTimer(deineID /*[Badezimmer Oben\FHT80b\Heizungssteuerung reset]*/,0);   //Timer aus
IPS_RunScript(deineID /*[Energie\Heizung\Heizungssteuerung automatik]*/);
?>

jetzt noch die wichtigesten Einstellungen - die Trigger für die Scripte:
Heizungssteuerung automatik:

  • Täglich - alle 30 min. aufrufen

Heizungssteuerung manuell:
bei Variablenänderung - Badezimmer Oben\FHT80b\Target Temperature
bei Variablenänderung - Wohnzimmer\FHT80b\Target Temperature

FHT-spezifisch - Heizungssteuerung reset:
Täglich - alle 7000 Sekunden
(dieser Timer wird dann von den anderen Scripten gestartet und gestoppt)

das sollte es eigentlich gewesen sein.
Ich hoffe noch auf ein Feedback von Horst ob’s denn so klappt.
Wenn noch Fragen sind könnt Ihr euch auch gerne melden.

Hallo Renè,

ich habe das Script mal ausprobiert. Wenn die Solltemp. über Parameterdatei (Automatik) geändert wird, geht die Heizung in den manuell-Modus. Ist das Richtig oder habe ich da irgendwo einen Fehler gemacht?

sollte eigentlich nicht passieren, denn

 if(GetValueFloat(40874 /*[Wohnzimmer\FHT80b\Target Temperature]*/)!=GetValueFloat(deineID /*[Wohnzimmer\FHT80b\Parameter Temperature]*/))

diese Zeile im Script Heizungssteuerung manuell schließt das aus. Es wird nur in Manuell-Mode geschaltet, wenn Parameter-Temperatur und Target-Temperatur UNGLEICH sind. Es wird sogar bei GLEICHEIT der beiden Werte wirder in den Automatikbetrieb gewechselt.
Dies hat den Vorteil, wenn man z.B. das Fenster öffnet wird die Parametertemperatur verlassen und auf z.B. 12° abgesenkt. Dies heißt im ersten Moment Wechsel für 2h in den Manuell-Mode. Das FHT welchselt beim Fenster schließen wieder auf die ursrüngliche Temperatur. Das Script bekommt dann mit, dass Parameter-Temp und Target-Temp GLEICH sind und wechselt direkt in den Automatik-Betrieb.

Also laut Code dürfte der Fall, dass bei einer Temperautvorgabe der Parameterdatei das Script in Manuell Modus wechselt nicht passieren. Ich prüfe das aber auch bei mir nochmal.

Naja, wenn Du sagst das sollte so nicht sein habe ich evtl. ja doch irgendwo einen Fehler gemacht. Ich werde mir das auch nochmal ansehen.

Habe, glaube ich, den Fehler gefunden. Ich hatte noch ein Teil der alten Scripte aktiv. Werde es mal weiter beobachten.

Hallo,

so habe das Script jetzt 4 Tage getestet und muss sagen „Läuft bisher absolut einwandfrei“.

Nochmals vielen Dank an Renè :wink: