NEWS
[gelöst] Fensterkontakt steuert Thermostat - Logikfehler?
-
Ich habe gerade meine "Fenster offen und Heizung aus" Script für ein anderes Zimmer einrichten wollen und bin dann bei diesem Blockly stutzig geworden. Ich denke mal das ich einen Fehler in diesem Blockly habe, der sich erst im Sommer bemerkbar machen wird.
Wenn er erkennt das Fenster wieder zu ist soll Heizung wieder starten, in der Heizperiode (wie jetzt) super, aber was ist im Sommer ? Schaltet er mir ja jedes Mal die Heizung wieder ein, obwohl ich dies nicht brauche. Schön im Sommer die Zimmer auf 20 Grad gekühlt und die Heizung meint müsste jetzt heizen, weil es keine 22 Grad im Raum mehr sind.
Wie kann ich dies umgehen, außer den Script im Sommer zu deaktivieren?Oder schaltet er mir die Heizung nicht ein, weil ja die erste Bedingung schon nicht zu trifft? Wenn Heizung ein, dann...
-
@Slowman grundsätzlich könntest du das blockly etwas kürzer/eleganter gestalten. Trigger ist "Fenster offen gaeste wc state" und dann kommt "falls wert von objektid...=wahr", da reicht ein "falls wert" die Objektid hat er ja schon aus dem Trigger und "=wahr" kannst du weglassen.
Zur Frage: Ich habe das bei mir anders gelöst indem ich eine globale Variable "Heizperiode" angelegt habe und die setze ich manuell (im Frühjar geht die auf "aus" und im Herbst auf "an"). Und dann steuere ich Heizungen/Fensterkontakte immer nur wenn Heizperiode=True ist.
-
Danke für deine Antwort.
Sieht jetzt so aus der Script, richtig?
Mit dem Datenpunkt Heizungsperiode meinst du es so hier?
-
@Slowman sagte:
Mit dem Datenpunkt Heizungsperiode meinst du es so hier?
So funktioniert es nicht. Besser so:
-
Buh, da muss ich erst mal durchblicken.
Du hast mir den Blockly von mir in eine bessere Variante umgeschrieben?Er schaltet ja dann die komplette Heizung und nicht nur das Thermostat.
Muss ich mir später noch mal anschauen.
-
@Slowman sagte:
Er schaltet ja dann die komplette Heizung und nicht nur das Thermostat.
Nein, der zu schaltende Datenpunkt soll sich nicht ändern.
@Slowman sagte in Fensterkontakt steuert Thermostat - Logikfehler?:
in eine bessere Variante umgeschrieben?
Die Verwendung von Variablen spart Ressourcen.
Bei Ende der Heizperiode muss auch ausgeschaltet werden, da sonst evtl. den ganzen Sommer durchgeheizt wird. -
Danke, werde jetzt mal den Blockly für mich anpassen und dann mal zur Kontrolle posten.
Der 2. kleine Blockly ist ein extra Blockly oder mit rein- -
@Slowman sagte:
oder mit rein-
Der zweite Trigger muss in das gleiche Skript, da die Übergabe der Heizperiode an die erste Trigger-Funktion über eine Variable erfolgt.
Wert findet man unter "Trigger".
-
So mal nach gebaut, aber so richtig sehe ich noch nicht durch. So richtig? Wie mache ich das mit der Heizperiode an/aus. Müsste ja ein extra Script sein.
Aber glaube nicht mehr ganz so blind. Zu der Heizung noch ne Erklärung ist ein Tado, dort habe ich beim alten Script, zu erst Power eingeschaltet bzw. aus und Automatik springt ins Programm zurück.
-
@Slowman sagte:
Zu der Heizung noch ne Erklärung ist ein Tado
Kenne ich nur vom "hören sagen".
@Slowman sagte in Fensterkontakt steuert Thermostat - Logikfehler?:
Wie mache ich das mit der Heizperiode an/aus.
Ein eigener Datenpunkt (unter "0_userdata.0"), der z.B. per Vis geschaltet werden kann.
@Slowman sagte in Fensterkontakt steuert Thermostat - Logikfehler?:
So richtig?
Der Vergleich muss mit dem Wert des Datenpunktes "Power" (Heizung on) erfolgen.
-
Schaue bitte noch mal rüber:
Wie gesagt ich schalte erst das Thermostat an und danach auf Automatikprogramm von Tado.
Sollte der Script so jetzt laufen?
-
@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.