NEWS
AutoOFF nach bestimmter Zeit
-
Guten Morgen Zusammen,
in meiner Wohnung habe ich mir in allen Schalter Shellys 1 eingebaut und bin mit sehr glücklich mit der AutoOff-Funktion.
Über meiner Visu kann ich jeden Schalter per Minuteneingabe automatisch ausschalten lassen.Jetzt musste ich aber aus technischen Gründen bei einer Kreuzschaltung einen Meross Schalter einbauen, der sich auch sehr einfach in Iobroker integrieren lässt - aber leider ohne AutoOff Datenpunkt.
Jetzt war meine Idee, diese AutoOff Funktion über Blockly selbst zu realisieren.
Tja und jetzt bin ich hierLeider hatte ich mir das einfacher vorgestellt.
Die AutoOff Blockly Skripte die ich im Netz gefunden hatte, wollen bei mir nicht funktionieren.
Gibt es eine Möglichkeit in Blockly per Datenpunkt (Beispiel: 10 Minuten) - eine Lampe sobald diese eingeschaltet wurde - nach einer selbst bestimmt Zeit (Minuten) ausschalten zu lassen.
Für eure Hilfe schonmal vorab vielen Dank.
Gruß
-
@Brunoz sagte in AutoOFF nach bestimmter Zeit:
Leider hatte ich mir das einfacher vorgestellt.
Die AutoOff Blockly Skripte die ich im Netz gefunden hatte, wollen bei mir nicht funktionieren.Beispiel ?
Gibt es eine Möglichkeit in Blockly per Datenpunkt (Beispiel: 10 Minuten) - eine Lampe sobald diese eingeschaltet wurde - nach einer selbst bestimmt Zeit (Minuten) ausschalten zu lassen.
gibt es
Für eure Hilfe schonmal vorab vielen Dank.
Jetzt mal Details, zumindest für ein Beispiel, sonst wird das nichts mit der Hilfe:
- Welche Datenpunkte hast du (bei dem Beispiel) ?
- Welches Verhalten soll genau entstehen ?
Zum Thema "variable" timeouts in Blockly - das ist leider schlecht dokumentiert, aber:
Man kann sowohl beim Timeout Block als auch beim Intervall Block an Stelle der Zahl auch den Namen einer Variable eintragen. Es wird dann der Wert dieser Variablen genutzt. Das gibt natürlich Probleme wenn die Variable keine Zahl beinhaltet.
-
@Asgothian
Vielen Dank!
Hab es gerade versucht.Aber leider scheint er die Variable zu setzen aber der Timeout mit Variable funktioniert nicht.
Der Code innerhalb der Timeout Funktion wird sofort ausgeführt.
Wie in meinem Beispiel - sollte die Lampe erst nach 21 Minuten ausgeschaltet werden.
-
welche Version des JS Adapters nutzt du ?
poste bitte den JS code deines Skriptes (bekommst du angezeigt wenn du da drauf clickst
-
@Asgothian
Ich verwende die JS Script Engine 4.10.1var Autooff, timeout; on({id: 'meross.0.2001108949566790807948e1e916cd6c.0', change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("0_userdata.0.Technik.Beleuchtung.Flur.AutoOFF_Minuten").val > 0) { setState("0_userdata.0.Technik.Beleuchtung.Flur.AutoOff"/*Beleuchtung.Flur.AutoOff*/, true); } else { setState("0_userdata.0.Technik.Beleuchtung.Flur.AutoOff"/*Beleuchtung.Flur.AutoOff*/, false); } }); on({id: '0_userdata.0.Technik.Beleuchtung.Flur.AutoOff', val: true}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; console.log((obj.state ? obj.state.val : "")); Autooff = parseFloat(getState("0_userdata.0.Technik.Beleuchtung.Flur.AutoOFF_Minuten").val); timeout = setTimeout(async function () { console.log(Autooff); }, Autooff); });
-
@Brunoz
Seltsam. Nach dem JS das du gepostet hast muss es eigentlich gehen.Kannst Du mal bitte eine Debug-Ausgabe der Variable "Autooff" vor dem Timeout einfügen, nicht das da 0 steht ?
Auch: es kann sein das du dem Timeout einen "integer", also eine Zahl ohne Nachkommastellen mitgeben musst.
A.
-
var Autooff, timeout; on({id: 'meross.0.2001108949566790807948e1e916cd6c.0', change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("0_userdata.0.Technik.Beleuchtung.Flur.AutoOFF_Minuten").val > 0) { setState("0_userdata.0.Technik.Beleuchtung.Flur.AutoOff"/*Beleuchtung.Flur.AutoOff*/, true); } else { setState("0_userdata.0.Technik.Beleuchtung.Flur.AutoOff"/*Beleuchtung.Flur.AutoOff*/, false); } }); on({id: '0_userdata.0.Technik.Beleuchtung.Flur.AutoOff', val: true}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; console.log((obj.state ? obj.state.val : "")); Autooff = parseFloat(getState("0_userdata.0.Technik.Beleuchtung.Flur.AutoOFF_Minuten").val); console.log(Autooff); timeout = setTimeout(async function () { console.log('LAMPE AUS!!!'); }, Autooff); });
-
-
@Asgothian sagte:
Timeout einen "integer", also eine Zahl ohne Nachkommastellen mitgeben musst.
Ja, mit dem Faktor 60000 (min --> ms).
-
Vielen herzlichen Dank!
Da war tatsächlich der Wurm drin!
Jetzt funktioniert es.