NEWS
2 Heizkörper synchron steuern
-
Hallo,
ich komme einfach nicht weiter.
Im Wohnzimmer habe ich 2 Heizkörper, die ich gerne synchron steuern möchte. Mit meinem Skript bei Türöffnung funktioniert das schon mal ganz gut, aber wenn ich am Regelrad von HK 1 die Temperatur einstelle soll die Temperatur bei HK 2 auch angepasst werden, und anders rum.
Mit meiner Idee (rechtes Skript) lande ich in einem Loop und ich muß den Javascript- und Zigbee2Mqtt Adapter neu starten.
Termostate sind Sonoff TRVZBWie bekomme ich denn beide HK synchron gesteuert?

-
Hallo,
ich komme einfach nicht weiter.
Im Wohnzimmer habe ich 2 Heizkörper, die ich gerne synchron steuern möchte. Mit meinem Skript bei Türöffnung funktioniert das schon mal ganz gut, aber wenn ich am Regelrad von HK 1 die Temperatur einstelle soll die Temperatur bei HK 2 auch angepasst werden, und anders rum.
Mit meiner Idee (rechtes Skript) lande ich in einem Loop und ich muß den Javascript- und Zigbee2Mqtt Adapter neu starten.
Termostate sind Sonoff TRVZBWie bekomme ich denn beide HK synchron gesteuert?

-
Hallo,
ich komme einfach nicht weiter.
Im Wohnzimmer habe ich 2 Heizkörper, die ich gerne synchron steuern möchte. Mit meinem Skript bei Türöffnung funktioniert das schon mal ganz gut, aber wenn ich am Regelrad von HK 1 die Temperatur einstelle soll die Temperatur bei HK 2 auch angepasst werden, und anders rum.
Mit meiner Idee (rechtes Skript) lande ich in einem Loop und ich muß den Javascript- und Zigbee2Mqtt Adapter neu starten.
Termostate sind Sonoff TRVZBWie bekomme ich denn beide HK synchron gesteuert?

@georg2608
nicht schön, aber funktioniert:// Heizung: Philipp - Werte übertragen auf die andere Heizung var logging = true; var vHeiz_L = "alias.0.HM.Heizung.Philipp L.SET_TEMPERATURE"; var vHeiz_R = "alias.0.HM.Heizung.Philipp R.SET_TEMPERATURE"; function weiter1() { //Wert übertragen if (getState(vHeiz_L).val != getState(vHeiz_R).val) { if (logging) log("(1) Heizung links aktuell: " + getState(vHeiz_L).val + "°C // Heizung rechts aktuell: " + getState(vHeiz_R).val + "°C"); setTimeout(function() { if (logging) setState(vHeiz_R, getState(vHeiz_L).val); }, 500); if (logging) log("Der links neu eingestellte Wert wurde auf die rechte Heizung übertragen."); setTimeout(function() { if (logging) log("(2) Heizung links aktuell: " + getState(vHeiz_L).val + "°C // Heizung rechts aktuell: " + getState(vHeiz_R).val + "°C"); }, 2000); } } function weiter2() { //Wert übertragen if (getState(vHeiz_L).val != getState(vHeiz_R).val) { if (logging) log("(3) Heizung links aktuell: " + getState(vHeiz_L).val + "°C // Heizung rechts aktuell: " + getState(vHeiz_R).val + "°C"); setTimeout(function() { if (logging) setState(vHeiz_R, getState(vHeiz_R).val); }, 500); if (logging) log("Der links neu eingestellte Wert wurde auf die rechte Heizung übertragen."); setTimeout(function() { if (logging) log("(4) Heizung links aktuell: " + getState(vHeiz_L).val + "°C // Heizung rechts aktuell: " + getState(vHeiz_R).val + "°C"); }, 2000); } } on(vHeiz_L, function() { //Heizung links geändert setTimeout(function() { weiter1() }, 2000); }); on(vHeiz_R, function() { //Heizung rechts geändert setTimeout(function() { weiter2() }, 2000); }); -
@georg2608 sagte in 2 Heizkörper synchron steuern:
Mit meiner Idee (rechtes Skript) lande ich in einem Loop
Alternative zum Vorschlag von @Asgothian: Man prüft die Quelle.

-
@georg2608 sagte in 2 Heizkörper synchron steuern:
Mit meiner Idee (rechtes Skript) lande ich in einem Loop
Alternative zum Vorschlag von @Asgothian: Man prüft die Quelle.

Vielen Dank erstmal!
Aber egal was ich probiere: ob bestätigte Änderung, das JS oder Ursprung, funktioniert das nur one-way. Also ich kann HK 1 steuern und HK 2 passt sich an.
Wie sollte das Skript denn aussehen, wenn dasa zusätzlich auch andersrum funktionieren soll?
Sobald ich das deaktivierte Skript laufen lasse, bin ich wieder in einem Loop:
-
Vielen Dank erstmal!
Aber egal was ich probiere: ob bestätigte Änderung, das JS oder Ursprung, funktioniert das nur one-way. Also ich kann HK 1 steuern und HK 2 passt sich an.
Wie sollte das Skript denn aussehen, wenn dasa zusätzlich auch andersrum funktionieren soll?
Sobald ich das deaktivierte Skript laufen lasse, bin ich wieder in einem Loop:
@georg2608 sagte: Wie sollte das Skript denn aussehen, wenn dasa zusätzlich auch andersrum funktionieren soll?
Du vergleichst mit dem falschen Ausdruck (Sollwert ist nicht der Ursprung). Versuche es mal so:

-
@georg2608 sagte: Wie sollte das Skript denn aussehen, wenn dasa zusätzlich auch andersrum funktionieren soll?
Du vergleichst mit dem falschen Ausdruck (Sollwert ist nicht der Ursprung). Versuche es mal so:

@paul53 hm, also das klappt auch irgendwie nicht. Der erste Block geht. ist aber wieder one-way.
Sobald der 2. Block aktiviert ist und ich am HK 1 stelle komme ich wieder in einen Loop.Würde es evtl Sinn machen per Blockly die Datenpunkte zusammenzufassen und die beiden HK's als Gruppe zu behandeln?

-
@paul53 hm, also das klappt auch irgendwie nicht. Der erste Block geht. ist aber wieder one-way.
Sobald der 2. Block aktiviert ist und ich am HK 1 stelle komme ich wieder in einen Loop.Würde es evtl Sinn machen per Blockly die Datenpunkte zusammenzufassen und die beiden HK's als Gruppe zu behandeln?

@georg2608 sagte: Sobald der 2. Block aktiviert ist und ich am HK 1 stelle komme ich wieder in einen Loop.
Wirklich? Füge mal einen Debug-Log ein:

Kann es sein, dass der Sollwert nach dem Schreiben des neuen Wertes erst wieder auf den alten Wert zurück geht und dann verzögert den neuen Wert bestätigt?
-
@georg2608 sagte: Sobald der 2. Block aktiviert ist und ich am HK 1 stelle komme ich wieder in einen Loop.
Wirklich? Füge mal einen Debug-Log ein:

Kann es sein, dass der Sollwert nach dem Schreiben des neuen Wertes erst wieder auf den alten Wert zurück geht und dann verzögert den neuen Wert bestätigt?
@paul53
Bei meinen Tests ist "Name des Scripts" = "undefined".@georg2608
Versuchs mit dem Ursprung. Aber mach das dann auch so wie gezeigt - also der Zeichenfolge "system.adapter.javascript.0" und nicht mit "Wert von xyz" (wie kommt man eigentlich auf sowas? Das Beispiel ist doch eindeutig).
-
@paul53
Bei meinen Tests ist "Name des Scripts" = "undefined".@georg2608
Versuchs mit dem Ursprung. Aber mach das dann auch so wie gezeigt - also der Zeichenfolge "system.adapter.javascript.0" und nicht mit "Wert von xyz" (wie kommt man eigentlich auf sowas? Das Beispiel ist doch eindeutig).
@codierknecht sagte: Bei meinen Tests ist "Name des Scripts" = "undefined".
Du meinst den Kommentar, wenn der Ursprung nicht ein Skript ist. In dem Fall wird "steuere" ausgeführt. Wenn der Ursprung das Skript ist, enthält der Kommentar den Skriptnamen.
-
@georg2608 sagte: Sobald der 2. Block aktiviert ist und ich am HK 1 stelle komme ich wieder in einen Loop.
Wirklich? Füge mal einen Debug-Log ein:

Kann es sein, dass der Sollwert nach dem Schreiben des neuen Wertes erst wieder auf den alten Wert zurück geht und dann verzögert den neuen Wert bestätigt?
-
@paul53
Bei meinen Tests ist "Name des Scripts" = "undefined".@georg2608
Versuchs mit dem Ursprung. Aber mach das dann auch so wie gezeigt - also der Zeichenfolge "system.adapter.javascript.0" und nicht mit "Wert von xyz" (wie kommt man eigentlich auf sowas? Das Beispiel ist doch eindeutig).
@codierknecht hm, selbst bei der Angabe: "system.adapter.javascript" kommt der Loop. Sorry, für mich ist das nicht wirklich eindeutig, warum der da so reagiert.

-
@codierknecht hm, selbst bei der Angabe: "system.adapter.javascript" kommt der Loop. Sorry, für mich ist das nicht wirklich eindeutig, warum der da so reagiert.

@georg2608
Der Text für den Debug-Block für HK2 sollte auch "HK2" lauten.
So kann man das nicht auseinanderhalten. -
@paul53 Ich hab das mal nach Deiner Vorlage nachgebaut. Aber es kommen immer wieder Dauermeldungen und der Loop

@georg2608
Ändere es mal mit Deaktivierung von "steuern" im unteren Tigger, um die Loop zu vermeiden und korrigiere den String "javascript":
-
@georg2608
Ändere es mal mit Deaktivierung von "steuern" im unteren Tigger, um die Loop zu vermeiden und korrigiere den String "javascript":
-
@paul53
Also so bekomme ich keinen Loop mehr und wenn ich HK 1 steuere passt sich HK 2 an. Nur beim ändern von HK 2 ändert sich an HK 1 nichts (Screenshot mit Ausgabe)

Der 2. Screenshot ist die Ausgabe wenn ich HK 1 stelle.

@georg2608 sagte: Ausgabe wenn ich HK 1 stelle.
Wie vermutet: Bevor der neue Wert (24) bestätigt wird, wird der alte Wert (26) gesendet. Das führt zur Loop.
-
@georg2608 sagte: Ausgabe wenn ich HK 1 stelle.
Wie vermutet: Bevor der neue Wert (24) bestätigt wird, wird der alte Wert (26) gesendet. Das führt zur Loop.
-
Ich werf mal das „Binde“ Objekt in den Raum.
Kannst du da nicht einfach beide Objekte miteinander verbinden?
Also du brauchst das Binde Objekt zweimal untereinander.Einmal HK1 -> HK2 und einmal HK2 -> HK1
Und den Haken bei „nur Änderungen“ setzen.
Klappt das ohne einen Loop zu erzeugen? -
Ich werf mal das „Binde“ Objekt in den Raum.
Kannst du da nicht einfach beide Objekte miteinander verbinden?
Also du brauchst das Binde Objekt zweimal untereinander.Einmal HK1 -> HK2 und einmal HK2 -> HK1
Und den Haken bei „nur Änderungen“ setzen.
Klappt das ohne einen Loop zu erzeugen?@black-falcon87 sagte in 2 Heizkörper synchron steuern:
Ich werf mal das „Binde“ Objekt in den Raum.
Das macht unter der Haube auch nix anders.
on({ id: 'Object ID 1', change: 'ne' }, (obj) => { setState('Object ID 2', obj.state.val); }); -
@paul53 Okay verstanden. Aber wie kann ich das umgehen?
Macht es Sinn einen timeout einzu bauen?@georg2608 sagte: Macht es Sinn einen timeout einzu bauen?
Ein so hässliches Verhalten (bedanke dich in China) kann man per Timer-Sperre überbrücken.

Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden