NEWS
Blockly-Script Thermostat/Heizung
-
Hallo zusammen,
ich benötige eure Hilfe bei einem Blockly-Script.
Ich habe im Badezimmer eine Heizung, die an einen Wlan-Stecker angeschlossen ist. Zusätzlich ein Thermostat von Homematic.
Nun möchte ich gerne immer eine Grundtemperatur haben (<17 Grad an, >18 Grad aus) aber zusätzlich die Möglichkeit, beim/vor'm Duschen die Heizung manuell am Wlan-Stecker einzuschalten. Diese könnte dann manuell wieder augeschaltet werden, nach dem Duschen durch öffnen des Fensters (Fensterkontakt) oder beim erreichen von z.B. >21 Grad. Eine zeitliche Steuerung fällt weg, da die Dusch-,Badezeiten immer unterschiedlich sind.
Habt ihr eine Idee, wie ich das realisieren könnte?
Danke & vG
Marius -
Das ganze lässt sich am besten mit einer Variable / einem benutzerdefinierten State "Automatik_Aktiv" lösen, den du am Anfang einmal auf wahr setzt. Dazu wird diese Logik benutzt:
-
wenn du die Heizung von Hand einschaltest setzt Du den State auf falsch.
-
wenn du die Heizung von Hand wieder ausschaltest setzt Du den State auf wahr.
-
wenn das Fenster geschlossen wird (Wichtig!!!) setzt du den Start auf wahr.
-
wenn das Fenster geöffnet wird setzt du den State auf falsch und die Heizung auf aus.
Mit diesen Beiden Bedingungen hast du auch gleich sichergestellt das du nicht versuchst die Aussenwelt mit zu heizen
In deinem eigentlichen Skript fehlt dann noch die Berücksichtigung des States - sowohl das einschalten als auch das ausschalten sollten nur bei "Automatik_Aktiv=wahr" passieren. Zusätzlich kommt dann noch ein "falls temp > 21" dann Heizung aus, Automaitk_aktiv auf wahr
A.
-
-
@asgothian
Ich danke dir für deine Antwort.
Würde das nicht aber nur funktionieren, wenn der Wlan-Stecker eine ID für die manuelle Betätigung hätte? Ich kann leider nur die ID, State, true/false auslesen. -
@kaba sagte: Duschen die Heizung manuell am Wlan-Stecker einzuschalten. Diese könnte dann manuell wieder augeschaltet werden, nach dem Duschen durch öffnen des Fensters (Fensterkontakt) oder beim erreichen von z.B. >21 Grad.
Vorschlag:
Wert und Ursprung findet man unter "Trigger"
-
@kaba da wo ich "Heizung von hand einschalten" sage meine ich natürlich den Schalter mit dem du die Heizung ein oder ausschalten willst. So etwas musst du ja haben wenn du "vorwärmen" willst, sei es mit einem physikalischen Taster oder einem Button auf einer Visualisierung
A.
-
Danke für deine Mühe und deinen Vorschlag. Nach 20 Mal angucken verstehe ich ihn allerdings immer noch nicht. Z.B. auf was bei dem Temperaturblock die Variable "heizung" triggert...
-
Ja genau, ich habe einen physikalischen Schalter am Wlan-Stecker. Da ich aber nur eine ID des States true/false habe, würde dieser ja immer geändert werden. Sei es über die Variable als auch über den Schalter. Oder stehe ich komplett auf dem Schlauch...?
-
-
@asgothian
Ich verstehe den Aufbau bzw. die Logik dahinter nicht
Wo kommt rechts die Variable "heizung" her und was tut sie? Unten muss erneut auf den Fenstersensor getriggert werden?Ich habe es einfach mal nach gebaut, macht es vielleicht einfacher: -
@kaba die Logik ist recht einfach:
Wenn die Temperatur sich ändert (der temp. Trigger) wird erst geschaut ob das Fenster offen ist. Wenn ja, dann nix machen, damit du nicht die Umwelt heizt.
Die Variable Heizung dient nur dazu den soll Zustand der Heizung zu ermitteln. Sie wird innerhalb des triggers gesetzt und ausgewertet.
Der trigger auf “Heizung Bad” dient der Erkennung des “einschalten von Hand”. Wenn das Skript die Heizung schaltet dann ist der Ursprung System.adapter.JavaScript.0. Wenn wer anders das tut (eine visualisierung, oder der Button an der Steckdose) dann ist der Ursprung anders gesetzt.
Der trigger auf das offene Fenster dient dazu die Heizung abzuschalten. Da hast du in deiner Variante einen Fehler, das steuere muss auf “heizungBad” gehen, nicht auf “Sensor_Bad_is_open”
Auch da wo du “Fenster?” Dran geschrieben hast muss “HeizungBad” rein
A.
-
@kaba
Habe mal "Objekt ID" an den 4 Stellen ersetzt:- Der Trigger links oben schaltet die Heizung beim Öffnen des Fensters aus.
- Der Trigger links unten stellt fest, dass die Heizung manuell eingeschaltet wurde und passt den Sollwert an
- Der Trigger rechts enthält den 2-Punkt-Regler für die Temperatur, der bei offenem Fenster gesperrt wird.
-
Ich danke Euch! Nun verstanden, umgebaut und getestet
Da wäre ich alleine nicht drauf gekommen!
Nur noch eine kurze Frage - müsste es unten links nicht, mache 17, sonst 21 sein? -
@kaba sagte: müsste es unten links nicht, mache 17, sonst 21 sein?
Nein, beim Duschen (Heizung manuell ein) soll der höhere Sollwert greifen.
@kaba sagte in Blockly-Script Thermostat/Heizung:
beim/vor'm Duschen die Heizung manuell am Wlan-Stecker einzuschalten.
-
@paul53
Danke -
Guten Morgen zusammen, ich noch einmal.
Nachdem das Script nun ein bisschen lief, ist mir aufgefallen, dass die Heizung zwar bei 17 Grad einschaltet (bzw. <17), jedoch nicht mehr abschaltet. -
@kaba sagte Heizung zwar bei 17 Grad einschaltet (bzw. <17), jedoch nicht mehr abschaltet.
Sie muss bei >= 18 °C abschalten.
-
@paul53
Ja, das tut sie leider nicht. Sie schaltet gar nicht mehr ab. -
@kaba sagte: tut sie leider nicht.
Poste bitte den erzeugten Javascript-Code ohne die letzte Zeile in Code tags.
-
var BadezimmerSollwert, heizung; BadezimmerSollwert = 16; // Fenster on({id: 'zigbee.0.00158d0003a00d06.opened', change: "gt"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; setState("hs100.0.192_168_178_33.state"/*HeizungBad*/, false); }); // Heizung on({id: 'hs100.0.192_168_178_33.state', change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if ((obj.state ? obj.state.val : "") && (obj.state ? obj.state.from : "") != 'system.adapter.javascript.0') { BadezimmerSollwert = 19; } else { BadezimmerSollwert = 16; } }); // Temperatur on({id: 'hm-rpc.1.000E5BE9A77AD0.1.ACTUAL_TEMPERATURE', change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (!getState("zigbee.0.00158d0003a00d06.opened").val) { if ((obj.state ? obj.state.val : "") <= BadezimmerSollwert) { heizung = true; } else if ((obj.state ? obj.state.val : "") >= parseFloat(BadezimmerSollwert) + 1) { heizung = false; } if (heizung != getState("hs100.0.192_168_178_33.state").val) { setState("hs100.0.192_168_178_33.state"/*HeizungBad*/, heizung); } } }); on({id: 'zigbee.0.00158d0003a00d06.opened', change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("zigbee.0.00158d0003a00d06.opened").val == true && getState("hm-rpc.1.00115A4996E621.4.LEVEL").val < 100) { setState("hm-rpc.1.00115A4996E621.4.LEVEL"/*RA_Bad:4.LEVEL*/, 100); } });
-
Ich habe die Temperatur noch angepasst und ergänzt, dass wenn Abends das Rollo schon geschlossen ist, es beim öffnen des Fensters hoch fährt.