NEWS
[gelöst] Fensterkontakt steuert Thermostat - Logikfehler?
-
@Slowman sagte:
Sollte der Script so jetzt laufen?
Der Trigger für die Heizperiode verwendet sicherlich einen falschen Datenpunkt. Ansonsten sieht es aus Blockly-Ansicht plausibel aus. Um es genau beurteilen zu können, poste bitte den erzeugten Javascript-Code ohne die letzte Zeile in Code tags.
-
Den Datenpunkt mit true (aktiv) erstellt, aber wie greift der Script darauf zu?
und die Javaausgabe :
var Heizperiode, Heizung, Meldung; // Fensterkontakt on({id: 'zigbee.0.00158d0004524503.opened', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (Heizperiode) { if ((obj.state ? obj.state.val : "")) { // Variablen Heizung = 'OFF'; Meldung = 'Fenster offen'; } else { Heizung = 'ON'; Meldung = 'Fenster geschlossen'; // Heizung wird auf Automatik gestellt setStateDelayed("tado.0.125400.Rooms.8.overlay.clearZoneOverlay"/*Clear Zone Overlay*/, true, 120000, false); } if (getState("tado.0.125400.Rooms.8.setting.power").val != Heizung) { // Heizung on setStateDelayed("tado.0.125400.Rooms.8.setting.power"/*Power*/, Heizung, 60000, false); } sendTo("telegram", "send", { text: Meldung }); } }); on({id: 'tado.0.125400.Rooms.8.setting.power', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; Heizperiode = (obj.state ? obj.state.val : ""); if (!Heizperiode) { // Heizung on setState("tado.0.125400.Rooms.8.setting.power"/*Power*/, 'OFF'); } }); // Heizung on off Tado Datenpunkt
-
@Slowman sagte:
on({id: 'tado.0.125400.Rooms.8.setting.power', change: "ne"}, function (obj) {
Wie schon gesagt: Der Datenpunkt taugt nicht für die Heizperiode. Der Rest passt.
Bei den Verzögerungen sollte man den Haken bei "löschen falls läuft" setzen, da sonst mehrere Timer laufen können.@Slowman sagte in Fensterkontakt steuert Thermostat - Logikfehler?:
aber wie greift der Script darauf zu?
Den Datenpunkt dem zweiten Trigger per Select ID zuweisen.
-
So, denke mal da sich es verstanden habe, was du geschrieben hast. Dürfte jetzt korrekt sein.
var Heizperiode, Heizung, Meldung; // Fensterkontakt on({id: 'zigbee.0.00158d0004524503.opened', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (Heizperiode) { if ((obj.state ? obj.state.val : "")) { // Variablen Heizung = 'OFF'; Meldung = 'Fenster offen'; } else { Heizung = 'ON'; Meldung = 'Fenster geschlossen'; // Heizung wird auf Automatik gestellt setStateDelayed("tado.0.125400.Rooms.8.overlay.clearZoneOverlay"/*Clear Zone Overlay*/, true, 120000, true); } if (getState("tado.0.125400.Rooms.8.setting.power").val != Heizung) { // Heizung on setStateDelayed("tado.0.125400.Rooms.8.setting.power"/*Power*/, Heizung, 60000, true); } sendTo("telegram", "send", { text: Meldung }); } }); on({id: 'javascript.0.Eigene_Datenpunkte.Heizung.Heizperiode', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; Heizperiode = (obj.state ? obj.state.val : ""); if (!Heizperiode) { // Heizung on setState("tado.0.125400.Rooms.8.setting.power"/*Power*/, 'OFF'); } }); // Heiperiode Datenpunkt gesetzt
Der letzte Blockly ist dafür da, das wenn DP Heizperiode false ist, der obrige Blockly gar nicht erst gestartet wird, richtig?
-
-
Keine Auschaltung, keine Meldung per Telegram. Kann der Fehler vielelicht daran liegen das ich einmal auf Automatikprogramm Trigger und ein mal auf Power? Den Trigger auf das Automatikprogramm brauche ich auch.
-
@Slowman sagte:
Keine Auschaltung, keine Meldung per Telegram.
Initialisiere die Variable Heizperiode bei Skript-Start.
-
Funktioniert jetzt, vielen Dank für die Hilfe und natürlich die Geduld
Für mich zum Verständnis, man sollte nicht so viele Datenpunkte anlegen (was ich gemacht habe), sondern lieber mit Variablen arbeiten, damit man das ioBroker System nicht so belastet? Wenn ich den Script jetzt mir anschaue, habe ich nur die "Hardware" DP abgefasst und nur einen DP angelegt.
-
@Slowman sagte:
sondern lieber mit Variablen arbeiten, damit man das ioBroker System nicht so belastet?
Ja.
-
Kleines kosmetisches Problem noch, wenn ich mehrere Fenster in einem Raum öffne bekomme ich für jedes geöffnete Fenster im Raum eine Benachrichtigung.
-
@Slowman Das ist aber nur bedingt ein "Problem". Wenn du das nicht willst müsstest du dir noch ne Variable "fenster_auf" spendieren und die auf true setzen sobald ein Fenster geöffnet ist. und dann darfst du die Benachrichtigung nur bei "fenster_auf"=True senden.
Ich hab das bei mir nicht gemacht, weil Fenster auf zum einen die Heizung runterfährt, bei mir aber auch die Alarmanlage auslöst wenn niemand im Haus ist. Und da will ich für jedes Fenster wissen ob es geöffnet wurde, egal ob schon eins auf ist. -
@Slowman sagte:
bekomme ich für jedes geöffnete Fenster im Raum eine Benachrichtigung.
Wenn das nicht gewollt ist, schiebe Telegram in in den falls-Block "Wert von Power != Heizung".
-
Habe jetzt einiges rumprobiert und klappt nicht. Also gelesen ja, nur die Umsetzung des Typen für dem Bildschirm hapert es.
In diesen Block kommen die
Funzt nicht, denke mal falsche Stelle und die Meldung Fenster im Raum geschlossen auch erst, wenn alle Fenster zu sind sind.
-
@Slowman sagte:
klappt nicht.
Was klappt nicht ? Bitte das ganze Blockly zeigen.
@Slowman sagte in [gelöst] Fensterkontakt steuert Thermostat - Logikfehler?:
Meldung Fenster im Raum geschlossen auch erst, wenn alle Fenster zu sind sind.
So soll es sein ?
-
Also, es wird immer noh je geöffneten Fenster eine Meldung per Telegram ausgegeben und auch beim Schliessen von jedem Fenster. Es sollte so sein, das wenn 1 Fenster geöffnet ist und das 2 dazu geöffnet wird nur eine Meldung kommt, auch beim Schliessen eine Meldung kommt, wenn das letzte Fenster geschlossen wird. Die Heizung startet ja lt. Script sowieso erst, wenn alle Fenster geschlossen sind und schaltet sich aus, wenn 1 Fenster geöffnet ist.
-
@Slowman
Man kann Wert nicht verwenden, wenn mehr als ein Datenpunkt als Trigger dient. Man muss beide Fensterwerte per ODER verknüpfen. -
Danke, aber will nicht so, schmeißt jetzt 3x die Meldung raus (denke mal 1 Fenster geöffnet, 2. Fenster geöffnet, ein Fenster geschlossen) und wenn das letzte offene Fenster geschlossen wird, kommt die geschlossenen Meldung.
Habe mir jetzt meinen alten Script nochmal angeschaut, warum ich dort nicht die Meldung für jedes einzelne Fenster bekommen hatte. Da war ja ein Datenpunkt true und der hat nur auf false geschaltet, wenn alle Fenster zu waren. Hänge ich unten nochmal ran, muss ja auch ohen DP gehen
var Heizperiode, Heizung, Meldung; // Fensterkontakt Heizperiode = getState("javascript.0.Eigene_Datenpunkte.Heizung.Heizperiode").val; on({id: new RegExp('zigbee\\.0\\.00158d00047e6700\\.opened' + "|" + 'zigbee\\.0\\.00158d00049fb32f\\.opened'), change: "ne"}, function (obj) { if (Heizperiode) { if (getState("zigbee.0.00158d00047e6700.opened").val || getState("zigbee.0.00158d00049fb32f.opened").val) { // Variablen Heizung = 'OFF'; Meldung = ' 🛌 😴 Fenster 🔓 und Heizung ❄️ 📴 '; } else { Heizung = 'ON'; Meldung = ' 🛌 😴 Fenster 🔒 und Heizung ♨️ 🔛 '; // Heizung wird auf Automatik gestellt setStateDelayed("tado.0.125400.Rooms.7.overlay.clearZoneOverlay"/*Clear Zone Overlay*/, true, 120000, true); } if (getState("tado.0.125400.Rooms.7.setting.power").val != Heizung) { // Heizung on setStateDelayed("tado.0.125400.Rooms.7.setting.power"/*Power*/, Heizung, 60000, true); } } sendTo("telegram", "send", { text: Meldung }); }); on({id: 'javascript.0.Eigene_Datenpunkte.Heizung.Heizperiode', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; Heizperiode = (obj.state ? obj.state.val : ""); if (!Heizperiode) { // Heizung on setState("tado.0.125400.Rooms.7.setting.power"/*Power*/, 'OFF'); } });
-
-
Geändert, wenn ich richtig sehen wird die Fenster geschlossen Meldung erst "losgeschickt" wenn die Heizung anspringt. Mit den Fenster öffnen die 3x Meldungen sind geblieben.
-
@Slowman sagte:
Mit den Fenster öffnen die 3x Meldungen sind geblieben.
Aber nur, wenn die Fenster innerhalb von einer Minute geöffnet werden. Ist die Verzögerung für die Heizung erforderlich ?