Universelle Heizungssteuerung

Komplex ist das nicht … ich habe zur Zeit eine Variable in die ich um 00:01 die Zeiten schreibe (aus einer Datei) und dann vom Script auslesen lasse.
Die Dateien mit den Zeiten pflege ich zur Manuell :rolleyes:

Den Teil mit dem Wohnzimmer und dem Ofenscript denk dir einfach mal weg :wink:


<?
$Liste = IPS_GetChildrenIDs(48294 /*[1Wire\Temperatursensoren\Regelbar]*/);
$AntriebID = 24864 /*[1Wire\Temperatursensoren\Ventile]*/;
$Heizungsstatus = GetValueString(56924 /*[1Wire\Temperatursensoren\Heizungsstatus]*/);
$jetzt = time();

foreach($Liste as $Raum)
	{
	   $Name = IPS_GetName($Raum);
		$IST = GetValueFloat(IPS_GetVariableIDByName("IST_".$Name, $Raum));
				//$IST = sprintf("%4.1f", $IST);
				//echo $Name.": ".$IST."°C"."
";
		$SOLL = GetValueFloat(IPS_GetVariableIDByName("SOLL_".$Name, $Raum));
		$Absenk = GetValueFloat(IPS_GetVariableIDByName("Absenk_".$Name, $Raum));
		$Manuell = GetValueBoolean(IPS_GetVariableIDByName("Manuell_".$Name, $Raum));
		$Pin = GetValueInteger(IPS_GetVariableIDByName("Ventile_Pin", $Raum));
		$Antrieb = GetValueBoolean(IPS_GetVariableIDByName("Status Pin ".$Pin, $AntriebID));
		$Befehl = IPS_GetVariableIDByName("Befehl_".$Name, $Raum);
      $Zeiten = GetValueString(IPS_GetVariableIDByName("Zeiten_".$Name, $Raum));
      $Zeiten = explode(",", $Zeiten);
		
		//echo $Name."-BefehlsID: ".$Befehl."
";

		if($Heizungsstatus == "Absenk")
		      {
				 	$SOLL = $Absenk;
					//echo "Absenk Fest: ".$SOLL;
				}

		if(($jetzt >= $Zeiten[0] AND $jetzt <= $Zeiten[1]) OR ($jetzt >= $Zeiten[2] AND $jetzt <= $Zeiten[3]))
				{
					$SOLL = $SOLL;
					//echo "SOLL: ".$SOLL."
";
					//echo "Normal ".$Name.": ".$jetzt.",".$Zeiten[2].",".$Zeiten[3]."
";
				}
		else 	{
					$SOLL = $Absenk;
					//echo "Absenk: ".$SOLL."
";
					//echo "Absenk ".$Name.": ".$jetzt.",".$Zeiten[2].",".$Zeiten[3]."
";
				}
		
      if(($IST <= ($SOLL - 0.5)) AND (!$Antrieb))											// IST/SOLL ?, wenn IST <= SOLL
			//{TMEX_F29_SetPin($AntriebID, $Pin, FALSE);}									// Antrieb öffnen
			{SetValueBoolean($Befehl, TRUE);}													// Antrieb öffnen
			
		if($Name == "Wohnzimmer")
			{
			$Ofen = GetValue(58516 /*[1Wire\Temperatursensoren\Tempinfo\Kaminofen\IST_Kaminofen]*/);
			$diff_tmp = $Ofen - $IST;
			$last = GetValue(12487 /*[1Wire\Temperatursensoren\Ofenscript\Ofen_LastRun]*/);
			$now = time();
			$diff_time = $now - $last;
			
		   	if(($diff_tmp >= 3) AND ($diff_time >= 3600) AND (!$Antrieb) AND ($Heizungsstatus != "Absenk"))
         		{
         		echo "Ofenscript wird gestartet";
		   		Ips_SetScriptTimer(39962 /*[1Wire\Temperatursensoren\Ofenscript]*/, 600);
		   		SetValue(56613 /*[1Wire\Temperatursensoren\Ofenscript\Ofentimer]*/, 600);
            	SetValue(29992 /*[1Wire\Temperatursensoren\Regelbar\Wohnzimmer\Befehl_Wohnzimmer]*/, TRUE);
            	SetValue(12487 /*[1Wire\Temperatursensoren\Ofenscript\Ofen_LastRun]*/, $now);
					}
				$Ofenstatus = GetValue(56613 /*[1Wire\Temperatursensoren\Ofenscript\Ofentimer]*/);
				if(($IST > ($SOLL + 0.2)) AND ($Antrieb) AND ($Ofenstatus == 0))	// IST/SOLL ?
					{
					   //echo "IST:".$IST."
";
						SetValue(29992 /*[1Wire\Temperatursensoren\Regelbar\Wohnzimmer\Befehl_Wohnzimmer]*/, FALSE);
						
					}													
			}

			
		if(($IST > ($SOLL + 0.3)) AND ($Antrieb) AND ($Name != "Wohnzimmer"))		// IST/SOLL ?
			{
				SetValue($Befehl, FALSE);															// Antrieb schließen
				echo $Befehl."
";
			}
			
		IPS_sleep(100);
			
	}

?>

das sieht auf den ersten Blick ziemlich stark nach den beiden bisherigen Implementationen meiner Raumsteuerungs-Techniker aus setTemperatur() in trigger.class aus.

Wenn ich die in der config beschriebenen bisher nicht implementiert Überschapp-Delta Steuerungstechnik als Soll-Ist Vergleich schreibe, dann sollten wir die dafür anwenden können.

Mit einer Switch-Variable sollten wir dann noch einstellen, ob eine gewünschte Temperatur (HomeMatic) oder 0/1 (Wango/1-Wire) an die Heizung gesendet werden soll.

Das sollte sich mit vertretbarem Aufwand implementieren lassen.

Ich schreibe in den nächsten Tagen mal den Soll-Ist Vergleich.

Ich habe zwar nur die Hälfte davon verstanden, aber es hört sich toll an :slight_smile: :wink:

Danke dir schon mal für die Mühe!

Hallo Jens,

ich finde nach Weihnachten endlich Zeit, mich an die Wango/1-wire Anbindung meines Scripts zu machen.

Meine aktuelle Frage ist die, ob es in deinem Heizungssystem eine Variable im Thermostat gibt, wo die aktuele SOLL-Temperatur gespeichert wird? Wenn ich deinen Beiträge richtig gelesen habe, musst Du Dir die SOLL-Temperatur selbst im IPS Baum merken, oder?

Nur die IST-Temperatur kannst vom Thermostat holen.

Sehe ich das richtig?

Gruß,

ernie

P.S.: Hoffen wird, dass es nochmal kalt wird, damit wir das noch ausgiebig testen können… Bei uns ist es aktuell so um die 10°

Hallo Ernie,

einen Thermostaten habe ich in dem Sinne ja gar nicht, sondern nur 1-Wire Temp.Sensoren. Die Sollwerte existieren als Variable als Normal und Absenkwerte und werden über ein Script täglich gesetzt.
Je nachdem ob Heizzeit ist wird dann auf die passende Variable geguckt…

Und ja … das wird gaaaanz sicher noch wieder kalt … so richtig mit Schnee und so :wink:

Gruß
Jens

Hi Ernie,

ich dachte mir ich sei schon soweit, mit mit komplexeren Sripten zu befassen und diese zu implementieren. Scheint aber nicht so zu sein :mad:

Nach nun 4 Stunden Script anlegen, Variablen in die config eintragen und Fehlersuche brauch ich wohl doch Hilfe.

Vielleicht fang ich mal mit ein paar Grundsatzfragen an, vielleicht bringt mich das auf die richtige Spur:

  1. Frage: in den Screenshots im WIKI sind 8 Scripte zu sehen, diese habe ich angelegt und ins Unterverzeichnis …\scripts\heizungssteuerung verschoben. Überschrieben habe ich die Scripte mit dem Download erniesHeizungssteuerung_revision02.zip überschrieben. im Download 2010.11.06 - ernies heizungssteuerung (version 0.02).zip sind aber andere Scripte, die offensichtlich von den schon importierten benötigt werden. Welche Scripte werden nun für die Erstinstallation benötigt?

  2. Frage: welches Script soll als erstes ausgeführt werden ? Ich denke, dieses soll die Variablen in den Wochentags-Kategorieen anlegen ? das WIKI verstehe ich so, das es das createHeizplanForOneWeek.class.ips.php-Script sein soll. Das finde ich aber in keinem der beiden Downloads ( es gibt nur das createHeizplanForOneWeek.ips.php-Script). Wenn ich das ausführe bekomme ich Fehlermeldungen die mich wuschig machen:


Warning:  include(heizungssteuerung_includes.ips.php) [function.include]: failed to open stream: No such file or directory in C:\IP-Symcon\scripts\heizungssteuerung\createHeizplanForOneWeek.ips.php on line 5

Warning:  include() [function.include]: Failed opening 'heizungssteuerung_includes.ips.php' for inclusion (include_path='.;C:\php5\pear') in C:\IP-Symcon\scripts\heizungssteuerung\createHeizplanForOneWeek.ips.php on line 5

Fatal error:  Class 'de\IPSymcon\ernie\CreateHeizplan' not found in C:\IP-Symcon\scripts\heizungssteuerung\createHeizplanForOneWeek.ips.php on line 7

Vielleicht hast Du etwas Geduld um mir hier auf die Sprünge zu helfen?

herzlichen Dank :wink:

Hallo,

grundsätzlich habe ich seit vorgestern eine Revision 3 fertig, die viele Änderungen beinhaltet. U.a. wird jetzt zum Beispiel getestet, ob alle Config-Objekte richtig eingetragen sind, damit beim ausführen der Scripte keine Fehler passieren. Weiterhin habe ich eine WAGO-EinsWire Interface geschrieben, dass man das Script nicht nur mit HomeMatic benutzen kann. Und diverse andere Kleinigkeiten.

Ich werde aber leider erst Freitag Abend dazu kommen, das Wiki upzudaten. Vorher ist noch Land-Unter bei mir.

Wenn Du noch so lange Gelduld hast, macht es Sinn, dass Du gleich diese Version installierst. Dann sehen wir gleich, ob dann alles im Wiki erwähnt ist.

Ich werde auch die hier angesprochenen Dinge noch einmal prüfen, ob ich irgendetwas vergessen habe.

Aber zumindest einige Kommerntare zu deinen Fragen:

Nein, Revision 1 wird nicht benötigt! Es reicht aus, erniesHeizungssteuerung_revision02.zip alleine zu installieren, wenn Du Revision 1 nicht genutzt hast.

Zur Bearbeitung in IPS müssen nur die 4 oben im Wiki angesprochen Scripte eingerichtet sein.

Schreib mir mal die Diskrepanzen, dann sage ich was dazu.

aktionsScripte-createHeizplan.ips.php erstellt den heizplan für einen Tag. Das muss erst mal alleine funktionieren.

Siehe Wiki

Um eventuell nicht zu viele Fehler zu generieren, sollte man erst einmal schauen, ob der Aufruf des Scripts aktionsScripte-createHeizplan.ips.php den Heizplan für den gestrigen Tag korrekt erstellt.

[quote=„Raketenschnecke,post:26,topic:23414“]


Warning:  include(heizungssteuerung_includes.ips.php) [function.include]: failed to open stream: No such file or directory in C:\IP-Symcon\scripts\heizungssteuerung\createHeizplanForOneWeek.ips.php on line 5

Warning:  include() [function.include]: Failed opening 'heizungssteuerung_includes.ips.php' for inclusion (include_path='.;C:\php5\pear') in C:\IP-Symcon\scripts\heizungssteuerung\createHeizplanForOneWeek.ips.php on line 5

Fatal error:  Class 'de\IPSymcon\ernie\CreateHeizplan' not found in C:\IP-Symcon\scripts\heizungssteuerung\createHeizplanForOneWeek.ips.php on line 7

Das sagt eindeutig aus, dass die Datei createHeizplanForOneWeek.ips.php nicht vorhanden ist … Daher kann er im 3. Fehler das Objekt für CreateHeizplan nicht erstellen.

Schau mal nach, ob die nicht fehlt.

Immer doch, gerne :slight_smile:

Hi Ernie,

na das hört sich ja sehr gut en (Rev. 3), klasse! Solange kann ich noch warten (die Heizung funktioniert momentan ausschliesslich per Abwesenheitsüberwachung und Heizprogrammen in den HM-Wandthermostaten, und das tut sie perfekt).

unten mal ein Screenshot des Folders für die Scripte, die createHeizplanForOneWeek.ips.php liegt drin! (da liegen zwar auch die der ersten Version drin, sollte aber nicht stören).

Muss man hier irgendwo noch Pfade anpassen? Das aktionsScripte-createHeizplan.ips.php hatte ich natürlich auch gestartet, gleiches Resultat.

tschuldigung, dass ich die Fehlermeldung nicht richtig gelesen habe …

Sie sagt aus, dass die Datei „heizungssteuerung_includes.ips.php“ nicht gefunden wird, die es gar nicht gibt. Es muss „includes.ips.php“ heißen.

Deshalb FALSCH:

include("heizungssteuerung_includes.ips.php");

RICHTIG:

include("includes.ips.php");

Datei: heizungssteuerung\createHeizplanForOneWeek.ips.php

In allen anderen Dateien ist es schon glaube ich schon korrigiert.

Funktioniert es damit?

ich habs abgeändert, immer noch Fehlermeldung:


Warning:  include(../debugger.class.ips.php) [function.include]: failed to open stream: No such file or directory in C:\IP-Symcon\scripts\heizungssteuerung\includes.ips.php on line 6

Warning:  include() [function.include]: Failed opening '../debugger.class.ips.php' for inclusion (include_path='.;C:\php5\pear') in C:\IP-Symcon\scripts\heizungssteuerung\includes.ips.php on line 6

Fatal error:  Interface 'de\IPSymcon\ernie\EnvironmentDebugger' not found in C:\IP-Symcon\scripts\heizungssteuerung\config.class.ips.php on line 24


was ich nicht verstehe: die debugger.class.ips.php ist im Download Rev2 gar nicht enthalten, die includes.ips.php verweist aber eindeutig auf diese Datei?!

includes.ips.php:


<?php
	namespace de\IPSymcon\ernie;

	if (!defined("INCLUDED_DEBUGGER")) {
		DEFINE("INCLUDED_DEBUGGER",TRUE);
		include("../debugger.class.ips.php");
		}

	if (!defined("PRAEFIX_HEIZUNG")) {
      // DEFINE ("PRAEFIX_HEIZUNG","heizungssteuerung/");
      DEFINE ("PRAEFIX_HEIZUNG","");
      }

	// heizungssteuerung
	// config.class.php implements classes from debugger.php
	if (!defined("INCLUDED_CONFIG")) {
		DEFINE("INCLUDED_CONFIG",TRUE);
		include(PRAEFIX_HEIZUNG . "config.class.ips.php");
		}

	$configObject = new Config("0.09");

	if (!defined("INCLUDED_INTERFACE")) {
		DEFINE("INCLUDED_INTERFACE",TRUE);
		include(PRAEFIX_HEIZUNG . "INTERFACES_Heizungskomponenten.ips.php");
		}

	if (!defined("INCLUDED_TRIGGER")) {
		DEFINE("INCLUDED_TRIGGER",TRUE);
		include(PRAEFIX_HEIZUNG . "trigger.class.ips.php");
		}
	
	if (!defined("INCLUDED_HEIZPLAN")) {
		DEFINE("INCLUDED_HEIZPLAN",TRUE);
		include(PRAEFIX_HEIZUNG . "createHeizplan.class.ips.php");
		}

	?>


Hi,

es ist zwar immer noch ein Fehler, aber nicht mehr der gleicht wie vorhin :wink:

Jetzt fehlt eben die debugger.php …

Ich habe den include Fehler und die vergessene Datei trotz der fertigen Revision 3 noch mal als Version 2.1 (im ersten Post) online gestellt.

Hol Dir da einfach die fehlende debugger.php da raus.

das blöde dabei ist: die debugger.class.ips.php lag schon im Verzeichnis drin (ich hatte gestern sicherheitshalber alle Dateien aus deiner 1. Version mit rein kopiert).
Ich hab sie jetzt nochmal reinkopiert (direkt aus deinem neuesten Download), gleiche Fehlermeldung wie im vorherigen Post.:confused:

hast Du beachtest, dass die debugger.php die einzige Datei ist, die nicht im Unterverzeichnis heizungssteuerung liegen darf?

Dadruch, dass die debugger Klasse bei mir Systemweit genutzt wird, liegt Sie im Haupt-Scipt-Ordner und nicht in den Unterordnern der einzelnen Projekte …

    if (!defined("INCLUDED_DEBUGGER")) { 
        DEFINE("INCLUDED_DEBUGGER",TRUE); 
        include("../debugger.class.ips.php"); 
        }

Man beachten die zwei unscheinbaren Punkte vor debugger.class.ips.php. Die gibt es bei allen anderen Dateien nicht …

hm, natürlich nicht (wäre nicht schlecht wenn das auch im WIKI erwähnt wird). Hab die datei ins scripts-Verzeichnis verschoben.

nach Ausführung der aktionsScripte-createHeizplan bekomm ich nun folgende Fehlermeldung:


Warning:  Profil mit Namen "b_Anwesend-Abwesend" existiert nicht in C:\IP-Symcon\scripts\heizungssteuerung\createHeizplan.class.ips.php on line 91
die by setting CustomProfile 39766 to DynamicVariable b_Anwesend-Abwesend

in der createHeizplan.class findet sich in Zeile 9 folgendes:


DEFINE ("VARIABLE_CUSTOMACTION" , 	36933 /*[Objekt #36933 existiert nicht]*/);
DEFINE ("VARIABLE_CUSTOMPROFILE", 	"b_Anwesend-Abwesend");

was ist denn das für eine Variable ? Ist diese speziell für deine Heizungssteuerung bzw. schreiben dir Scripte da rein oder lesen die nur?
Wenn es das ist, was ich vermute (nämlich nur lesend) würde ich eine vorhandene Variable für Abwesenheitserkennung eintragen…

Diesen eventuellen Fehler hatte ich selbst schon in den TODOs fürs Wiki stehen. Kommt am Freitag mit rein.

Das ist das Variablen-Profil, dass für die Dynamischen Variablen verwendet wird. Damit im WebFront nicht „An“ und „Aus“ sondern „Anwesend“ und „Abwesend“ steht.

Entweder kannst Du hier wie im Screenshot das Profil anlegen oder du schreibst „~Switch“ rein, dann wir das normale „An“ / „Aus“ verwendet.

In Revision 3 gibt es einen Config-Schalter, wo man das einfach auswählen kann.

Außerdem habe ich noch die Datei changeWebFrontVariable.php vergessen in das .zip zu packen. Version 2.2 beinhaltet die auch noch (wieder im 1. Post).

Das ist die Datei, die mit der Variablen für den Button zum wechseln des Zustands im WebFront benötigt wird.

Diese ID muss in Revision 2 leider noch in der Datei createHeizplan.class selbst eingetragen werden.

In Revision 3 wird diese auch global im configScripte definiert.

DEFINE ("VARIABLE_CUSTOMACTION" , 	36933);

Da muss die ID hin, die das Script aktionsScripte-changeWebfrontVariable.ips.php bekommen hat.

Auch

DEFINE ("VARIABLE_CUSTOMPROFILE", 	"b_Anwesend-Abwesend");

steht in diesem Script.

Dies ist auch in Revision 3 in die Config gewandert.

Hi Ernie,

danke für deine Mühe und Geduld. Ich hab nun auch die letzten Ergänzungen übernommen, nun funktionieren die Scripte auch.
Evtl. sollte aber die WIKI-Doku überarbeitet werden :wink:

ich befasse mich jetzt mal weiter mit der Heizungssteuerung um zu verstehen was da passiert :smiley:

Wie gesagt, Revision 3 ist an sich fertig. Vor der Veröffentlichung will ich nur noch das WIKI aktualisieren. Es gab viele Verbesserungen …

Viele der Revisions 2 Fehler können in Revision 3 nicht mehr vorkommen bzw. werden mit besseren Fehlermeldungen abgefangen.

Alle WAGO-EinsWire Heizungs-Fans können sich schon jetzt aufs Wochenende freuen :wink:

kein Stress, ich bin zwar ganz gespannt auf die 3. Version, aber die paar tage kann ich auch noch warten. Blöd ist nur wenn der Nächste in die selbe Falle rennt :wink:

Hi Ernie,

ich bin gerade dabei, meine Heizungssteuerung auf den Sommer vorzubereiten. Mir schwebt vor, die Temperatur-Forecasts für die kommenden 2 Tage von einer Website zu pasren (hab ich bereits fertig). Wenn die Forecast-Temperaturen für den kommenden Tag bestimmte Schwellwerte (individuell für jeden Raum konfigurierbar) überschreiten darf die Heizung nicht mehr heizen. Auch wenn es grade nur 18°C statt der eingestellten 20°C sind.
Das Szenario, wo sowas Sinn macht ist folgendes: Frühjahr/Sommer: die morgendlichen Temperaturen sind recht gering (im Gebäude) oder für den kommenden Tag ist eine Hitzewelle im Anmarsch. Das kann ich aus dem Forecast schon einen Tag vorher erkennen. Nun sollen die Räume (hauptsächlich morgens) schon gar nicht mehr beheizt werden weil es tagsüber heiß wird.

Dafür lege ich mir neben Komforttemperatur und Absenktemperatur pro Raum eine 3.Variable für den Schwellwert Aussentemperatur an (wenn Forecast für den kommenden Tag XX°C überschreitet dann Heizungsverbot).

Frage: hast du sowas schon berücksichtigt bzw. planst du sowas in deine Steuerung einzubauen?