NEWS
Verstehe die Fehlermeldung nicht
-
Vielen Dank @ciddi89 ,
leider will es aber trotzdem nicht. Jetzt ist die Meldung
21:44:14.756 warn javascript.0 (448) at script.js.Aussenbeleuchtung.Aussenbeleuchtung_Türen:47:5 21:44:14.756 warn javascript.0 (448) at script.js.Aussenbeleuchtung.Aussenbeleuchtung_Türen:69:3 21:44:14.756 info javascript.0 (448) script.js.Aussenbeleuchtung.Aussenbeleuchtung_Türen: getState(id=undefined, timerId=undefined) => not found 21:44:14.758 warn javascript.0 (448) at script.js.Aussenbeleuchtung.Aussenbeleuchtung_Türen:57:5 21:44:14.758 warn javascript.0 (448) at script.js.Aussenbeleuchtung.Aussenbeleuchtung_Türen:69:3 21:44:14.758 info javascript.0 (448) script.js.Aussenbeleuchtung.Aussenbeleuchtung_Türen: registered 0 subscriptions, 5 schedules, 0 messages, 0 logs and 0 file subscriptions
Das Licht schaltet nicht. Ich sehe aber durchaus den Bewegungsmelder, also der Input wechselt auf true...
Edit: Ich glaube die Variable ist undefined. Das kann jetzt natürlich sein, die wird ja nur über Astro gesetzt. Wie löse ich das denn jetzt? In Javascript geht es iwie nicht (das ist jetzt schreibgeschützt)
-
@matze78 bei den definitionen ist der jetzige fehler:
getState(IstNacht).val
Das getState und das .val kannst dz weglassen also nur
IstNacht === true
Genau so wie mit hintertueran das sind variabeln und brauchen daher nicht die funktion getState
if (IstNacht == true) { if (getState('shelly.2.SHSW-PM#BCFF4DFCBAF5#1.Relay0.Input').val == true) { if (getState('0_userdata.0.Automatiken.Außenbeleuchtung').val == true) { setState("shelly.2.SHSW-PM#BCFF4DFCBAF5#1.Relay0.Switch"/*Switch*/, true); if (HintertuerAn == false) { setState("shelly.1.shellypro4pm#083af27d18d4#1.Relay1.Switch"/*Switch*/, true); } } } } if (IstNacht == true) { if (getState('shelly.2.SHSW-PM#BCFF4DFCBAF5#1.Relay0.Input').val == false) { if (getState('0_userdata.0.Automatiken.Außenbeleuchtung').val == true) { setState("shelly.2.SHSW-PM#BCFF4DFCBAF5#1.Relay0.Switch"/*Switch*/, false); if (HintertuerAn == false) { setState("shelly.1.shellypro4pm#083af27d18d4#1.Relay1.Switch"/*Switch*/, false); } } } }
-
@matze78 sagte: wo ich einen Namen definiere, damit ich im Blockly nicht zig mal "Switch" sehe
Im Tab "Objekte" rechts auf dem Bleistift (Objekt bearbeiten) klicken und den Namen ändern.
-
Ok @ciddi89, da hatte ich bei Blockly ein falsches Element genommen, das passt jetzt.
Das einzige Problem ist jetzt die nicht gesetzte Variable. Ich setze bei Sonnenuntergang-Anfang -10 die "istNacht" auf an. Wenn ich das Script jetzt neu starte kommt er an diesen Punkt natürlich nicht mehr. Wie kann ich diesen Wert danach füllen?
-
@paul53
Das habe ich eigentlich, in den Objekten steht ja auch der Name - nur in den Scripten nicht. -
@matze78 einfach ein falls Block einbauen der den aktuellen Stand prüft. Dies erfordert kein trigger und wird beim script start ausgeführt. ich habe in einigen Skripts sowas wie im Screenshot laufen. Somit kann man variablen neu setzen falls das Script oder iobroker Neustartet. Der timeout muss nicht sein es geht auch ohne.
-
@matze78 sagte: in den Objekten steht ja auch der Name - nur in den Scripten nicht.
Ich sehe zum Datenpunkt nur den Namen "Switch", der geändert werden sollte. Den Kanalnamen sieht man im Blockly-Skript nicht.
-
@matze78 sagte: Bewegungsmelder an Eingang,
Für den BWM fehlt der Trigger.
Habe den Trigger ergänzt (hoffe, dass es der richtige Datenpunkt ist) und das Skript vereinfacht:var IstNacht = compareTime(getAstroDate("sunriseEnd", undefined, 10), getAstroDate("sunsetStart", undefined, -10), "not between", null); var HintertuerAn = getState("shelly.1.shellypro4pm#083af27d18d4#1.Relay1.Switch").val; schedule({astro: "sunriseEnd", shift: 10}, function () { if (getState('0_userdata.0.Automatiken.Außenbeleuchtung').val) { setState("shelly.1.shellypro4pm#083af27d18d4#1.Relay0.Switch"/*Switch*/, false); setState("shelly.1.shellypro4pm#083af27d18d4#1.Relay1.Switch"/*Switch*/, false); setState("shelly.2.SHSW-PM#BCFF4DFCBAF5#1.Relay0.Switch"/*Switch*/, false); HintertuerAn = false; } IstNacht = false; }); schedule({astro: "sunsetStart", shift: -10}, function () { if (getState('0_userdata.0.Automatiken.Außenbeleuchtung').val) { setState("shelly.1.shellypro4pm#083af27d18d4#1.Relay0.Switch"/*Switch*/, true); setState("shelly.1.shellypro4pm#083af27d18d4#1.Relay1.Switch"/*Switch*/, true); HintertuerAn = true; } IstNacht = true; }); schedule('0 2 * * *', function () { if (getState('0_userdata.0.Automatiken.Außenbeleuchtung').val) { setState("shelly.1.shellypro4pm#083af27d18d4#1.Relay0.Switch"/*Switch*/, false); } }); schedule('0 20 * * *', function () { if (getState('0_userdata.0.Automatiken.Außenbeleuchtung').val) { setState("shelly.1.shellypro4pm#083af27d18d4#1.Relay1.Switch"/*Switch*/, false); HintertuerAn = false; } }); schedule('30 6 * * *', function () { if (getState('0_userdata.0.Automatiken.Außenbeleuchtung').val) { setState("shelly.1.shellypro4pm#083af27d18d4#1.Relay0.Switch"/*Switch*/, true); setState("shelly.1.shellypro4pm#083af27d18d4#1.Relay1.Switch"/*Switch*/, true); HintertuerAn = true; } }); on('shelly.2.SHSW-PM#BCFF4DFCBAF5#1.Relay0.Input', function(dp) { if (IstNacht && getState('0_userdata.0.Automatiken.Außenbeleuchtung').val) { setState("shelly.2.SHSW-PM#BCFF4DFCBAF5#1.Relay0.Switch"/*Switch*/, dp.state.val); if(!HintertuerAn) { setState("shelly.1.shellypro4pm#083af27d18d4#1.Relay1.Switch"/*Switch*/, dp.state.val); } } });
Den Sinn der Abfrage von
HintertuerAn
verstehe ich allerdings nicht. -
HintertuerAn ist ein Relikt aus alten Zeiten @paul53
Das Licht an der Hintertür soll bis 20 Uhr an bleiben, dann spare ich mir das Licht untem im Flur. Damit der Bewegungsmelder das Licht nun aber nicht abschaltet soll er sich merken, ob er es abschalten soll oder eben nicht.@ciddi89 Ich habe jetzt versucht die Variablen vorzubelegen. Die Nacht wird leider nicht erkannt, das zwischen 20 Uhr und 6:30 allerdings schon...
-
@matze78 sagte: Die Nacht wird leider nicht erkannt
Vergleich von Astrozeiten funktioniert nicht über Mitternacht, weshalb man "nicht zwischen SA und SU" verwendet.
-
Danke @paul53 , das macht natürlich Sinn...
-
@matze78 geht nur mit „ist nicht zwischen aufgang und untergang“ wie paul schon schrieb
-
@matze78 sagte: Das Licht an der Hintertür soll bis 20 Uhr an bleiben
Was soll um 2:00 Uhr passieren?
-
@matze78 sagte: Ich habe jetzt versucht die Variablen vorzubelegen.
So ist es vollkommen ausreichend:
-
@paul53 ab 2 Uhr soll das Licht an der Haustür ausbleiben. Da kommt die Zeitung bei den Nachbarn an und unser Hund schläft im Flur direkt im Lichtkegel
-
Danke schön @ciddi89 und @paul53, jetzt tut´s