Universelle Heizungssteuerung

Hallo,

Herzlichen Dank :slight_smile:

@Dirk75
Bist du sicher, die richtigen Variablen genommen zu haben, da sind mit zuviele „[Objekt #42715 existiert nicht]“ Meldungen im Script oben.

Wenn du will, kann ich dir gerne mal meine Config schicken mit einem Screenshot des Hardware-Baums, wo du die Variablen vergleichen kannst, damit du einen Anhaltspunkt hast.

An dem Punkt bin ich damals auch hängengeblieben und der hat mich einige Zeit Fehlersuche gekostet.

Super gerne. Vielen Dank für das Angebot. Ich habe mittlerweile auch schon aufgehört die Stunden zu zählen :smiley:

schon mal super, kannst Du bitte auch noch die HomeMatic Komponenten als Screenshot posten …

Dann können wir die IDs sehen und vergleichen, ob Sie richtig sind …

Hallo,

sorry, habs fast verpennt.

hier ein Screenshot der HM-Variablen am Beispiel Arbeitszimmer. Wundere dich nicht über die teilweise unterschiedlichen Namen zu ggf. deinen, ich habe die umbenannt. Aber die Funktion sollte ersichtlich sein. Dazu meine aktuell laufende Winter-Konfig.

config.class.ips.rar (6.84 KB)

Hallo Dirk,

ich hab’s einfach noch nicht geschafft, die config mit deinen Screenshots zu vergleichen :frowning: Leider liegen auf meinem Schreibtisch für heute Abend noch diverse Dinge, die ich nicht schieben kann :frowning:

Schau mal, ob Du mit Tuxtom007’s Beispiel selbst den Fehler entdeckst. Ansonsten finde ich hoffentlich morgen Abend Zeit, deine mal zu vergleichen und den Fehler zu suchen :slight_smile:

Sag noch mal Bescheid …

Hallo ihr Beiden,

ich habe mal die Config´s verglichen (Vielen Dank nochmal dafür :slight_smile: ) und bei der Variable writeRaumSollTemperatur auch einen Fehler gefunden. Habe die Einträge korrigiert und prompt ne neue Meldung erhalten:


Parse error:  syntax error, unexpected '$this' (T_VARIABLE) in C:\IP-Symcon\scripts\heizungssteuerung\config.class.ips.php on line 349

Hier direkt mal die entsprechenden Zeilen aus meiner Config:


$this->heizungssteuerung['raumSteuerungsTechnik'] = array();
		$this->heizungssteuerung['raumSteuerungsTechnik']['Bad'] 			= "SIMPLE-DELTA";
  		$this->heizungssteuerung['raumSteuerungsTechnik']['Sophie'] 			= "KEINE";
		$this->heizungssteuerung['raumSteuerungsTechnik']['Juli'] 	= "SIMPLE-DELTA";
/*		$this->heizungssteuerung['raumSteuerungsTechnik']['Wohnzimmer'] 	= "SIMPLE-DELTA";
		$this->heizungssteuerung['raumSteuerungsTechnik']['Schlafzimmer']	= "SIMPLE-DELTA";    */
		// ### Test-Szenario CHANGE CHANGE CHANGE 3/3
		$this->heizungssteuerung['raumSteuerungsTechnik']['Bad'] 			= "SOLL-IST-VERGLEICH";
    	$this->heizungssteuerung['raumSteuerungsTechnik']['Sophie'] 		= "SOLL-IST-VERGLEICH";
		$this->heizungssteuerung['raumSteuerungsTechnik']['Juli'] 			= "SOLL-IST-VERGLEICH";
	/*	$this->heizungssteuerung['raumSteuerungsTechnik']['Wohnzimmer'] 	= "SOLL-IST-VERGLEICH";
		$this->heizungssteuerung['raumSteuerungsTechnik']['Schlafzimmer']	= "SOLL-IST-VERGLEICH";   */

ich seh’ zwar gerade keinen Fehler, aber poste mal die Zeilen 345 bis 355 aus deiner aktuellen config.php (mit einer Zeilennummer am Anfang, damit man zählen kann …)

Da PHP ja mit uns spricht hat es auf jeden Fall etwas mit 348, 349 oder Zeile 350 zu tun …

da muss ein Syntax-Fehler sein …


345		// ###    Eventuelle DELTA-Werte aus SIMPLE-DELTA werden auch hier beachtet
346
347		// Welche Technik soll für welchen Raum benutzt werden?
348		// LAST CHANGE IN REVISION 3
349		$this->heizungssteuerung['raumSteuerungsTechnik'] = array();
350		$this->heizungssteuerung['raumSteuerungsTechnik']['Bad'] 			= "SIMPLE-DELTA";
351  		$this->heizungssteuerung['raumSteuerungsTechnik']['Sophie'] 			= "KEINE";
352		$this->heizungssteuerung['raumSteuerungsTechnik']['Juli'] 	= "SIMPLE-DELTA";
353/*		$this->heizungssteuerung['raumSteuerungsTechnik']['Wohnzimmer'] 	= "SIMPLE-DELTA";
354		$this->heizungssteuerung['raumSteuerungsTechnik']['Schlafzimmer']	= "SIMPLE-DELTA";    */
355		// ### Test-Szenario CHANGE CHANGE CHANGE 3/3
356		$this->heizungssteuerung['raumSteuerungsTechnik']['Bad'] 			= "SOLL-IST-VERGLEICH";
357    	$this->heizungssteuerung['raumSteuerungsTechnik']['Sophie'] 		= "SOLL-IST-VERGLEICH";
358		$this->heizungssteuerung['raumSteuerungsTechnik']['Juli'] 			= "SOLL-IST-VERGLEICH";

okay, es war nicht genau genug ausgedrückt :wink:

Jetzt sollten wir die Zeile (die nicht auskommentiert ist) sehen können, die vor 349 kommt …

Ein Fehler kann (wenn zum Beispiel ein Semikolon fehlt), auch in der Zeile über der stehen, die PHP als Fehler ausspuckt. Bei Dir also weiter oben, wo wir es gerade noch nicht sehen …

Ich habe mal direkt ein paar Zeilen mehr reingepackt, da ich unmittelbar darüber alles auskommentiert habe :wink:


274		// ### Raum Definitionen - Juli
275		$this->heizungssteuerung['zeitProfile']['Julo'] = array();
276		$this->heizungssteuerung['zeitProfile']['Juli'][0] = "07:00 bis 23:00 Uhr - Einheitlich";
277		$this->heizungssteuerung['standardZuordnung']['Juli'] = array();
278		$this->heizungssteuerung['standardZuordnung']['Juli']['Werktags'] = array();
279		$this->heizungssteuerung['standardZuordnung']['Juli']['Wochenende'] = array();
280		$this->heizungssteuerung['standardZuordnung']['Juli']['Werktags']["07:00 bis 23:00 Uhr - Einheitlich"] = FALSE;
281		$this->heizungssteuerung['standardZuordnung']['Juli']['Wochenende']["07:00 bis 23:00 Uhr - Einheitlich"] = FALSE;
282
283		// ### Raum Definitionen - Schlafzimmer
284	/*	$this->heizungssteuerung['zeitProfile']['Schlafzimmer'] = array();
285		$this->heizungssteuerung['zeitProfile']['Schlafzimmer'][0] = "07:00 bis 18:00 Uhr - Tagsüber";
286		$this->heizungssteuerung['zeitProfile']['Schlafzimmer'][1] = "18:00 bis 23:00 Uhr - Abends";
287		$this->heizungssteuerung['zeitProfile']['Schlafzimmer'][2] = "23:00 bis 23:59 Uhr - Nachts";
288		$this->heizungssteuerung['standardZuordnung']['Schlafzimmer'] = array();
289		$this->heizungssteuerung['standardZuordnung']['Schlafzimmer']['Werktags'] = array();
290		$this->heizungssteuerung['standardZuordnung']['Schlafzimmer']['Wochenende'] = array();
291		$this->heizungssteuerung['standardZuordnung']['Schlafzimmer']['Werktags']["07:00 bis 18:00 Uhr - Tagsüber"] = FALSE;
292		$this->heizungssteuerung['standardZuordnung']['Schlafzimmer']['Werktags']["18:00 bis 23:00 Uhr - Abends"] = TRUE;
293		$this->heizungssteuerung['standardZuordnung']['Schlafzimmer']['Werktags']["23:00 bis 23:59 Uhr - Nachts"] = FALSE;
294		$this->heizungssteuerung['standardZuordnung']['Schlafzimmer']['Wochenende']["07:00 bis 18:00 Uhr - Tagsüber"] = FALSE;
295		$this->heizungssteuerung['standardZuordnung']['Schlafzimmer']['Wochenende']["18:00 bis 23:00 Uhr - Abends"] = TRUE;
296		$this->heizungssteuerung['standardZuordnung']['Schlafzimmer']['Wochenende']["23:00 bis 23:59 Uhr - Nachts"] = FALSE;
297
298		// ### Raum Definitionen - Wohnzimmer
299		$this->heizungssteuerung['zeitProfile']['Wohnzimmer'] = array();
300		$this->heizungssteuerung['zeitProfile']['Wohnzimmer'][0] = "07:00 bis 12:00 Uhr - Morgens";
301		$this->heizungssteuerung['zeitProfile']['Wohnzimmer'][1] = "12:00 bis 18:00 Uhr - Mittags";
302		$this->heizungssteuerung['zeitProfile']['Wohnzimmer'][2] = "18:00 bis 23:00 Uhr - Abends";
303		$this->heizungssteuerung['standardZuordnung']['Wohnzimmer'] = array();
304		$this->heizungssteuerung['standardZuordnung']['Wohnzimmer']['Werktags'] = array();
305		$this->heizungssteuerung['standardZuordnung']['Wohnzimmer']['Wochenende'] = array();
306		$this->heizungssteuerung['standardZuordnung']['Wohnzimmer']['Werktags']["07:00 bis 12:00 Uhr - Morgens"] 	= FALSE;
307		$this->heizungssteuerung['standardZuordnung']['Wohnzimmer']['Werktags']["12:00 bis 18:00 Uhr - Mittags"] 	= FALSE;
308		$this->heizungssteuerung['standardZuordnung']['Wohnzimmer']['Werktags']["18:00 bis 23:00 Uhr - Abends"] 		= FALSE;
309		$this->heizungssteuerung['standardZuordnung']['Wohnzimmer']['Wochenende']["07:00 bis 12:00 Uhr - Morgens"] 	= TRUE;
310		$this->heizungssteuerung['standardZuordnung']['Wohnzimmer']['Wochenende']["12:00 bis 18:00 Uhr - Mittags"] 	= TRUE;
311		$this->heizungssteuerung['standardZuordnung']['Wohnzimmer']['Wochenende']["18:00 bis 23:00 Uhr - Abends"] 	= TRUE;  */
312
313		// ############################################################################################
314		// ###
315		// ### Raum-Steuerungstechniken definieren:
316		// ###
317		// ### KEINE Erweiterte Raum-Steuerungstechnik
318		// ###    Das Raum-Thermostat wird einfach auf die Wunsch-Temperatur gesetzt
319		// ###
320		// ### SIMPLE-DELTA Raumsteuerungstechnik
321		// ###    Da einige Systeme den Raum höher heizen als gewünscht, kann
322		// ###    hier ein DELTA-Wert angegeben werden, der auf von allen
323		// ###    Wunsch-Temperaturen abgezogen wird
324		// ###
325		// ### SOLL-IST-VERGLEICH Raumsteuerungstechnik
326		// ###    Sollte das Thermostat nur Heizen Ja/Nein unterstützen
327		// ###    oder die Thermostatssteuerung zu schlecht sein, kann mit
328		// ###    dieser Steuerungstechnik die Soll Temperatur permanent mit
329		// ###    der Ist-Temperatur verglichen und angepasst werden
330		// ###    Solange die Wunsch-Temperatur plus die Delta-Temperatur im
331		// ###    Raum noch nicht erreicht ist, wird diese als Soll-Temperatur gesetzt
332		// ###    Wenn diese Temperatur erreicht ist, wird die Soll-Temperatur auf die
333		// ###    Wunsch-Temperatur minus die Delta-Temperatur gesetzt.
334		// ###    Dies gilt so lange, bis die Ist-Temperatur diese neue
335		// ###    Soll-Temperatur unterschreitet
336		// ###
337		// ###    Eventuelle DELTA-Werte aus SIMPLE-DELTA werden auch hier beachtet
338		// ###
339		// ### ÜBERSCHWAPPT-DELTA Raumstuéuerungstechik (aktuell noch NICHT implementiert)
340		// ###    Hier der Raum erst auf die Wunsch-Temperatur minus den jeweiligen Delta Wert
341		// ###    hochheizt. Dann wird die tatsächliche Wunsch-Temperatur gesetzt.
342		// ###    Damit soll verhindert werden, dass die Raumtemperatur "überschwappt" bevor sich die
343		// ###    Stellantriebe bei der Wunsch-Temperatur schließen
344		// ###
345		// ###    Eventuelle DELTA-Werte aus SIMPLE-DELTA werden auch hier beachtet
346
347		// Welche Technik soll für welchen Raum benutzt werden?
348		// LAST CHANGE IN REVISION 3
349		$this->heizungssteuerung['raumSteuerungsTechnik'] = array();
350		$this->heizungssteuerung['raumSteuerungsTechnik']['Bad'] 			= "SIMPLE-DELTA";
351  		$this->heizungssteuerung['raumSteuerungsTechnik']['Sophie'] 			= "KEINE";
352		$this->heizungssteuerung['raumSteuerungsTechnik']['Juli'] 	= "SIMPLE-DELTA";

Hi,

Zeile 284: /*

Gefällt mir nicht, könnte der Fehler sein

Gesendet von meinem ASUS Transformer Pad TF700T mit Tapatalk 2

Hi Ernie,

irgendwie fühle ich mich ein wenig ignoriert, oder hast du bereits irgendwo geantwortet und ich habs überlesen? :confused:

Davon abgesehen bin ich heute auf einen Fehler gestossen, der mir vorher nicht aufgefallen war:

Notice:  Undefined offset: 1 in D:\IP-Symcon\scripts\heizungssteuerung	rigger.class.ips.php on line 68

Notice:  Undefined offset: 1 in D:\IP-Symcon\scripts\heizungssteuerung	rigger.class.ips.php on line 78

Notice:  Undefined offset: 2 in D:\IP-Symcon\scripts\heizungssteuerung	rigger.class.ips.php on line 79

Notice:  Undefined offset: 1 in D:\IP-Symcon\scripts\heizungssteuerung	rigger.class.ips.php on line 81

Warning:  mktime() expects parameter 1 to be long, string given in D:\IP-Symcon\scripts\heizungssteuerung	rigger.class.ips.php on line 83

Warning:  mktime() expects parameter 1 to be long, string given in D:\IP-Symcon\scripts\heizungssteuerung	rigger.class.ips.php on line 84

Ne Idee was das verursacht?

Gruß
Jens

Mmh,damit habe ich eigentlich nur mehrere Zeilen auskommentiert. Der Kommentar wird in Zeile 311 eigentlich wieder beendet…

Habe gerade mal zeilenweise auskommentiert. Jetzt passt es :slight_smile:
Danke für den Tipp.

Guten Abend,

Erstmal Danke an Ernie für diese Wunderbare Steuerung!!
Einrichtungszeit für die Grundkonfig waren so ca. 3h bei PHP Anfängerkenntnisse.

Nun hab ich am Wochende Angefangen die Fenster mit Reed Sensoren Auszustatten , diese werden mit dem HomeMatic 12fach-Schließerkontakt-Sensor (HMW-Sen-SC-12-DR) Ausgewertet.

Die Script hab ich passend für die Bool werte angepasst, hinweise hierauf gab es ja in diesem Thread. Nur funktioniert das leider nicht wie es soll, sobald ich die Fenster Kontakte in die Config einfüge, senkt das Script die Temperatur ab und Meldet Fenster geöffnet. Unabhänig von der Postion des Fensters.

Hier mal auszüge aus der Config.

config.class:

		// ### Definition der ObjectIDs der Fenster-Kontakte
		// ### LAST CHANGE IN IN REVISION 2
		$this->heizungssteuerung['rootNodesFenster'] = array();
		$this->heizungssteuerung['rootNodesFenster']['Küche & Büro'] = array();
		$this->heizungssteuerung['rootNodesFenster']['Küche & Büro'][0] 				= 28196 /*[Geräte\Erdgeschoss\Küche & Büro\Fenster\SENSOR]*/ ; // cAOIDs ok
		$this->heizungssteuerung['rootNodesFenster']['Wohn & Esszimmer'] = array();
		$this->heizungssteuerung['rootNodesFenster']['Wohn & Esszimmer'][0] 				= 11984 /*[Geräte\Erdgeschoss\Flur & Esszimmer\Fenster Esszimmer\SENSOR]*/ ; // cAOIDs ok
		$this->heizungssteuerung['rootNodesFenster']['Wohn & Esszimmer'][1] 				= 56485 /*[Geräte\Erdgeschoss\Flur & Esszimmer\Fenster Flur\SENSOR]*/ ; // cAOIDs ok

Interface (Zeile 100-106):

	public function getWindowStatus ($objectID) {return GetValue($objectID);}

	// Fenster Stati-Funktionen für HomeMatic

	public function getOpendWindowValue() {return 1;} // $FENSTER_OFFEN = 1;

	public function getClosedWindowValue() {return 0;}// $FENSTER_GESCHLOSSEN = 0;

Hat jemand eine Idee an was das liegen könnte? finden den Fehler leider Gerade nicht.

Danke,
Gruß Daniel

Ignoriert nicht, aber deine Frage lässt sich ja leider nicht mit ja oder nein in 2min beantworten :frowning: Für eine ausführliche Antwort hat die Zeit einfach noch nicht gereicht :frowning:

Für den trigger-Fehler ist entweder ein PHP-Update verantwortlich (was hast Du für ein IPS? Ich habe noch 2.5 …) oder ein Fehler in der config (eher unwahrscheinlich, da es bei Dir schon so lange läuft …).

Was steht in deiner trigger.class ab den Zeilen 60 bis 80? Meine muss nicht mit deiner übereinstimmen, eventuell habe ich schon daran rumgeschrieben …

Ich hatte beim anschauen auch keinen Fehler entdeckt … Gerade wollte den Code-Teil mal in meiner config testen, aber das entfällt ja jetzt erst mal, oder?

Das es ein falsches /* ist, ist irgendwie komisch … Da müssen auch mehrzeilige Kommentare funktionieren. Aber whatever, schön, dass jetzt dieser Fehler behoben ist …

Hallo Daniel,

schön das Dir das Script gefällt :slight_smile:

Und 56485 - Geräte\Erdgeschoss\Flur & Esszimmer\Fenster Flur\SENSOR ist ein Boolean-Wert, der TRUE oder FALSE sein kann?

Zusätzlich zur Fehlersuche kannst Du mal jeweils ein echo „0“; und ein echo „1“; vor dem return Statement in das Interface in beiden Funktionen schreiben. Ohne es nachgeschaut zu haben, könnte ich mir vorstellen, dass eventuell ein anderes Interface aufgerufen wird.

Bekommst Du die echos im LOG, der Console oder der Script-Ausgabe angezeigt, wenn Du den trigger manuell aufrust?

Ich bin mittlerweile bei 2.6 … wird sicher daran liegen.

Das sind die Zeilen 59 - 84

		// Alle Heizplan Variablen durchgehen
		for ($i = 0; $i < count($childrenIDsToday); $i++) {
		   // die Variablen werden nach ObjectIDs durchgegangen, also UNSORTIERT
			$actualVariableName = IPS_GetName($childrenIDsToday[$i]);
			$this->configObject->showEnvironmentDebugMessage("   ". $actualVariableName ,"heizungssteuerung_trigger.class[showActualHeizplan]",9);

			// Raum und Zeit bestimmen
			$actualRaumUndZeit = explode("-",$actualVariableName);
			$actualRaum = trim($actualRaumUndZeit[0]);
			$actualZeitString = trim($actualRaumUndZeit[1]);
			$actualZeitName = "";
			$actualHeizplanConfigConstantsArray = $this->configObject->getCreateHeizplanConfigConstantsArray();
			if (!$actualHeizplanConfigConstantsArray['CreateShortHeizplanVariablen']) {
				$actualZeitName = trim($actualRaumUndZeit[2]);
				}

			$actualZeit = explode(" ",$actualZeitString);
			$actualZeitStart = explode(":",$actualZeit[0]);
			$actualZeitStartHour = $actualZeitStart[0];
			$actualZeitStartMinute = $actualZeitStart[1];
			$actualZeitStop = explode(":",$actualZeit[2]);
			$actualZeitStopHour = $actualZeitStop[0];
			$actualZeitStopMinute = $actualZeitStop[1];
			
			$timeStart = mktime($actualZeitStartHour,$actualZeitStartMinute);
			$timeStop = mktime($actualZeitStopHour,$actualZeitStopMinute);

Und was die andere Sache an geht, ist ja halb so schlimm … dachte es wäre eben über eine kleine Erweiterung möglich alles auf einmal zu ändern. Im Notfall bastle ich das eben manuell Tag für Tag zurecht. So lange das nicht durch irgendetwas überschrieben wird, ist mir das den Aufwand wert.

Hallo Ernie,

Und 56485 - Geräte\Erdgeschoss\Flur & Esszimmer\Fenster Flur\SENSOR ist ein Boolean-Wert, der TRUE oder FALSE sein kann?

Das hast du Richtig Erkannt hatte ich vergessen dazu zu schreiben. Der Sensor Liefert True & False Werte.

Bei ausgeführetn Trigger steht folgendes in der Log:

05.11.2012 22:25:25.512 | 57901 | MESSAGE | VariableManager      | [Geräte\Erdgeschoss\Küche & Büro\CLIMATECONTROL_REGULATOR\SETPOINT] = 18
05.11.2012 22:25:25.512 |     0 | CUSTOM  | HomeMaticKomponenten.class | Temperatur für Heizkörper Küche & Büro auf 18° gesetzt; Grund: Temperaturänderung durch Offenens/Gekipptes Fenster auf Abwesenheits-Temperatur herabgesetzt (NORMALE Steuerung)

Zusätzlich zur Fehlersuche kannst Du mal jeweils ein echo „0“; und ein echo „1“; vor dem return Statement in das Interface in beiden Funktionen schreiben. Ohne es nachgeschaut zu haben, könnte ich mir vorstellen, dass eventuell ein anderes Interface aufgerufen wird.

Enschuldige das ich so doof nachfrage aber wo genau soll ich das Echo einfügen? Komm grad nicht drauf.
Habe auch mal die anderen Interface angepasst, ist das selbe Ergebnis.