NEWS
[Vorlage] LightControl
-
@schmakus sagte in [Vorlage] LightControl:
Ja, diesen Fall hatte ich auch schon. Mir gehts es z.B. darum, dass ich "all.Power" mit meiner Alarmanlage oder Rauchmelder verknüpfe. Wenn der Alarm dann zurückgesetzt wird, sollen alle Lampen wieder in den Zustand, welchen sie vor dem Alarm hatten. Aber das ist wirklich nice to have.
Dafür hab ich das blink in jeder Gruppe, das speichert auch den vorherigen Zustand. Wär evtl. ne Überlegung nochn all.blink zu machen.
Ok, dann werde ich die Funktion des Putzlichts so nicht nutzen. Mein Gedanke ist, dass ich ein Licht auf Dauer-Ein schalten möchte, wenn z.B. Gäste im Haus.
Es heisst ja Putzlicht und nicht Gästelicht und ist eben wirklich nur zum putzen gedacht.
-
@Pittini
Ich bekomme eine Fehler im Javascript. Dieser Fehler führt sporadisch zum Neustart der Instanz und macht das Script extrem langsam.
Version: 2.0.15
js-controller: 3.3.18
Node-js: 12.22.6Hier die Zeilen 1085 - 1121 aus dem Script:
/* ------------------------- FUNCTIONS FOR Switching Off --------------------------------- */ async function AutoOffLux(Group) {//Handling für AutoOffLux if (logging) log("Reaching AutoOffLux, for Group=" + Group + " =" + LightGroups[Group].description) if (LightGroups[Group].autoOffLux.operator == "<" && LightGroups[Group].actualLux < LightGroups[Group].autoOffLux.minLux && LightGroups[Group].autoOffLux.enabled && LightGroups[Group].power && !LightGroups[Group].autoOffLux.dailyLock) { GroupPowerOnOff(Group, false); LightGroups[Group].autoOffLux.dailyLock = true; await setStateAsync(praefix + "." + Group + ".autoOffLux.dailyLock", true, true); } else if (LightGroups[Group].autoOffLux.operator == ">" && LightGroups[Group].actualLux > LightGroups[Group].autoOffLux.minLux && LightGroups[Group].autoOffLux.enabled && LightGroups[Group].power && !LightGroups[Group].autoOffLux.dailyLock) { GroupPowerOnOff(Group, false); LightGroups[Group].autoOffLux.dailyLock = true; await setStateAsync(praefix + "." + Group + ".autoOffLux.dailyLock", true, true); }; if (LightGroups[Group].autoOffLux.operator == "<") { //DailyLock resetten if (LightGroups[Group].actualLux > LightGroups[Group].autoOffLux.minLux && LightGroups[Group].autoOffLux.dailyLock) { LightGroups[Group].autoOffLux.dailyLockCounter++; if (LightGroups[Group].autoOffLux.dailyLockCounter >= 5) { LightGroups[Group].autoOffLux.dailyLock = false; await setStateAsync(praefix + "." + Group + ".autoOffLux.dailyLock", false, true); LightGroups[Group].autoOffLux.dailyLockCounter = 0; }; }; } else if (LightGroups[Group].autoOffLux.operator == ">") { if (LightGroups[Group].actualLux < LightGroups[Group].autoOffLux.minLux && LightGroups[Group].autoOffLux.dailyLock) { LightGroups[Group].autoOfLux.dailyLockCounter++; if (LightGroups[Group].autoOnLux.dailyLockCounter >= 5) { LightGroups[Group].autoOffLux.dailyLock = false; await setStateAsync(praefix + "." + Group + ".autoOffLux.dailyLock", false, true); LightGroups[Group].autoOffLux.dailyLockCounter = 0; }; }; }; }
Hier die Zeilen 263 - 280 aus dem Script:
LightGroups[Group][prop1][z] = (await getStateAsync(GroupTemplate[prop1][z].id)).val; //Daten in Lightgroups einlesen (auch wenn neu erzeugt), dann if (GroupTemplate[prop1][z].common.write) { // log("Setting Trigger for: " + GroupTemplate[prop1][z].id) on({ id: GroupTemplate[prop1][z].id, change: "any", ack: false }, function (dp) { //Trigger erstellen if (logging) log("Triggered " + dp.id + " new value is " + dp.state.val) LightGroups[Group][prop1][z] = dp.state.val; Controller(Group, prop1 + "." + z, dp.oldState.val, dp.state.val); }); }; }; if (!await existsObjectAsync(praefix + "." + Group + "." + prop1)) { // Channel erstellen wenn noch nicht vorhanden await setObjectAsync(praefix + "." + Group + "." + prop1, { type: 'channel', common: { name: LightGroups[Group].description + " " + prop1 }, native: {} }); log("Init: Subchannel " + praefix + "." + Group + "." + prop1 + " created"); };
-
@schmakus Hmm, ich denke nicht dass das ein Skriptfehler ist, sonst hätte ich den Fehler auch, und auch jeder andere der AutoOffLux verwendet. Kann den Fehler auch nicht reproduzieren. Bitte mal genau zeigen/schreiben was da eingestellt ist und dazu ein Log posten, idealerweise mit aktiviertem logging. Aber bitte keinen Programmcode posten, weil....den kenn ich
-
@pittini ok, werde ich morgen in Ruhe nochmal testen. Hab jetzt AutoOffLux mal deaktiviert.
-
Erledigt.
-
kann mir jemand erklären wie ich sowas installiere, bin da ein neuling drin?
-
@denjo Du erstellst unter „Scripte“ ein neues Jacascript - idealerweise mit dem Namen „LightControl2“ - und kopierst den Inhalt der „LightControl.js“ welche auf GitHub liegt (link im ersten Post) in dein angelegtes Script.
-
@schmakus das habe ich gemacht und hab mal die werte von kugel lampe angepasst, wenn ich dann den script starte kommt folgende fehler meldung
12:11:08.584 error javascript.0 (6766) script.js.Lampen.LightControl2: TypeError: Cannot read property 'val' of null 12:11:08.585 error javascript.0 (6766) at GlobalPresenceHandling (script.js.Lampen.LightControl2:473:70) 12:11:08.587 error javascript.0 (6766) at main (script.js.Lampen.LightControl2:1397:5)
-
@denjo Du mußt natürlich alle anderen Gruppen und Lampen löschen, sonst versucht er die anzusteuern was natürlich nen Fehler wirft.
Haste nur eine Gruppe, mit 2 Lampen, würde die Def so aussehen:
const LightGroups = { 0: { description: "Flur Eg.", lights: { 0: { description: "Strahler1", power: { oid: "zigbee.0.ec1bbdfffe32de48.state", onVal: true, offVal: false }, bri: { oid: "zigbee.0.ec1bbdfffe32de48.brightness", minVal: 0, maxVal: 100, defaultVal: 100 }, ct: { oid: "zigbee.0.ec1bbdfffe32de48.colortemp", minVal: 454, maxVal: 250 }, sat: { oid: "", minVal: null, maxVal: null }, modeswitch: { oid: "", whiteModeVal: false, colorModeVal: true }, color: { oid: "", type: "", default: "" } }, 1: { description: "Strahler2", power: { oid: "zigbee.0.680ae2fffe0ca671.state", onVal: true, offVal: false }, bri: { oid: "zigbee.0.680ae2fffe0ca671.brightness", minVal: 0, maxVal: 100, defaultVal: 100 }, ct: { oid: "zigbee.0.680ae2fffe0ca671.colortemp", minVal: 454, maxVal: 250 }, sat: { oid: "", minVal: null, maxVal: null }, modeswitch: { oid: "", whiteModeVal: false, colorModeVal: true }, color: { oid: "", type: "", default: "" } } }, sensors: { 0: { id: 'linkeddevices.0.Bewegungsmelder.Flur_EG.0.IsMotion', motionVal: true, noMotionVal: false } } } };
-
@pittini ich habe jetzt zum testen alles andere gelöscht und nur eine lampe drin, funktioniert trotzdem leider nicht
const Version = "2.0.15" //vom 23.11.2021 - Skript um Lichter in Helligkeit, Farbe und Farbtemp global zu steuern - Git: https://github.com/Pittini/iobroker-LightControl - Forum: https://forum.iobroker.net/topic/36578/vorlage-lightcontrol log("starting LightControl V." + Version); const praefix = "javascript.0.LightControl2" // Skriptordner const IsPresenceDp = "javascript.0.Anwesenheit_jemand_da"; // Datenpunkt für Anwesenheit (true/false) const logging = false; // Logging an/aus const RampSteps = 10; //Wieviele Schritte zum dimmen? Bitte nicht zu hoch setzen, wird zwar smoother, kann aber zu timing Problemen führen wenn gleichzeitig eine kurze Zeit in den Objekten gewählt. const minCt = 2700; //Regelbereich für Farbtemperatur in Kelvin const maxCt = 6500;//Regelbereich für Farbtemperatur in Kelvin const LightGroups = { 0: { description: "Wohnzimmer", lights: { 0: { description: "Kugellampe", power: { oid: "zigbee.0.d0cf5efffe2aa970.state", onVal: true, offVal: false }, bri: { oid: "zigbee.0.d0cf5efffe2aa970.brightness", minVal: 0, maxVal: 100, defaultVal: 60 }, ct: { oid: "", minVal: 6500, maxVal: 2700 }, sat: { oid: "", minVal: 0, maxVal: 100 }, modeswitch: { oid: "", whiteModeVal: false, colorModeVal: true }, color: { oid: "zigbee.0.d0cf5efffe2aa970.color", type: "hex", default: "#FF0000", warmWhiteColor: "#FFA500", dayLightColor: "#FFE4B5" } }, };
13:19:10.898 error javascript.0 (6766) script.js.Lampen.LightControl2 compile failed: at script.js.Lampen.LightControl2:26
-
@pittini was mache ich denn falsch, jetzt habe ich zwei lampen und ein bewegungsmelder drin und immer noch die fehler meldung.
es werden auch keine objekte angelegt wenn ich auf play drücke???const Version = "2.0.15" //vom 23.11.2021 - Skript um Lichter in Helligkeit, Farbe und Farbtemp global zu steuern - Git: https://github.com/Pittini/iobroker-LightControl - Forum: https://forum.iobroker.net/topic/36578/vorlage-lightcontrol log("starting LightControl V." + Version); const praefix = "javascript.0.LightControl2" // Skriptordner const IsPresenceDp = "javascript.0.Anwesenheit_jemand_da"; // Datenpunkt für Anwesenheit (true/false) const logging = false; // Logging an/aus const RampSteps = 10; //Wieviele Schritte zum dimmen? Bitte nicht zu hoch setzen, wird zwar smoother, kann aber zu timing Problemen führen wenn gleichzeitig eine kurze Zeit in den Objekten gewählt. const minCt = 2700; //Regelbereich für Farbtemperatur in Kelvin const maxCt = 6500;//Regelbereich für Farbtemperatur in Kelvin const LightGroups = { 0: { description: "Kugeln", lights: { 0: { description: "Große Kugel", power: { oid: "zigbee.0.d0cf5efffe2aa970.state", onVal: true, offVal: false }, bri: { oid: "zigbee.0.d0cf5efffe2aa970.brightness", minVal: 0, maxVal: 100, defaultVal: 60 }, ct: { oid: "", minVal: 6500, maxVal: 2700 }, sat: { oid: "", minVal: 0, maxVal: 100 }, modeswitch: { oid: "", whiteModeVal: false, colorModeVal: true }, color: { o id: "zigbee.0.d0cf5efffe2aa970.color", type: "hex", default: "#FF0000", warmWhiteColor: "#FFA500", dayLightColor: "#FFE4B5" } }, 1: { description: "Kleine Kugel", power: { oid: "zigbee.0.90fd9ffffe20a7ba.state", onVal: true, offVal: false }, bri: { oid: "zigbee.0.90fd9ffffe20a7ba.brightness", minVal: 0, maxVal: 100, defaultVal: 60 }, ct: { oid: "", minVal: 6500, maxVal: 2700 }, sat: { oid: "", minVal: 0, maxVal: 100 }, modeswitch: { oid: "", whiteModeVal: false, colorModeVal: true }, color: { o id: "zigbee.0.90fd9ffffe20a7ba.color", type: "hex", default: "#FF0000", warmWhiteColor: "#FFA500", dayLightColor: "#FFE4B5" } } }, sensors: { 0: { id: 'zigbee.0.00158d00029a9bfb.occupancy', motionVal: true, noMotionVal: false }, } } };
Fehler Meldung
15:08:44.554 error javascript.0 (6766) script.js.Lampen.LightControl2 compile failed: at script.js.Lampen.LightControl2:24
-
@denjo Bei beiden color die 1000 Leerzeichen bei oid weg. Komma nach dem Sensor weg.
Sollte dann so aussehen:
const Version = "2.0.15" //vom 23.11.2021 - Skript um Lichter in Helligkeit, Farbe und Farbtemp global zu steuern - Git: https://github.com/Pittini/iobroker-LightControl - Forum: https://forum.iobroker.net/topic/36578/vorlage-lightcontrol log("starting LightControl V." + Version); const praefix = "javascript.0.LightControl2" // Skriptordner const IsPresenceDp = "javascript.0.Anwesenheit_jemand_da"; // Datenpunkt für Anwesenheit (true/false) const logging = false; // Logging an/aus const RampSteps = 10; //Wieviele Schritte zum dimmen? Bitte nicht zu hoch setzen, wird zwar smoother, kann aber zu timing Problemen führen wenn gleichzeitig eine kurze Zeit in den Objekten gewählt. const minCt = 2700; //Regelbereich für Farbtemperatur in Kelvin const maxCt = 6500;//Regelbereich für Farbtemperatur in Kelvin const LightGroups = { 0: { description: "Kugeln", lights: { 0: { description: "Große Kugel", power: { oid: "zigbee.0.d0cf5efffe2aa970.state", onVal: true, offVal: false }, bri: { oid: "zigbee.0.d0cf5efffe2aa970.brightness", minVal: 0, maxVal: 100, defaultVal: 60 }, ct: { oid: "", minVal: 6500, maxVal: 2700 }, sat: { oid: "", minVal: 0, maxVal: 100 }, modeswitch: { oid: "", whiteModeVal: false, colorModeVal: true }, color: { oid: "zigbee.0.d0cf5efffe2aa970.color", type: "hex", default: "#FF0000", warmWhiteColor: "#FFA500", dayLightColor: "#FFE4B5" } }, 1: { description: "Kleine Kugel", power: { oid: "zigbee.0.90fd9ffffe20a7ba.state", onVal: true, offVal: false }, bri: { oid: "zigbee.0.90fd9ffffe20a7ba.brightness", minVal: 0, maxVal: 100, defaultVal: 60 }, ct: { oid: "", minVal: 6500, maxVal: 2700 }, sat: { oid: "", minVal: 0, maxVal: 100 }, modeswitch: { oid: "", whiteModeVal: false, colorModeVal: true }, color: { oid: "zigbee.0.90fd9ffffe20a7ba.color", type: "hex", default: "#FF0000", warmWhiteColor: "#FFA500", dayLightColor: "#FFE4B5" } } }, sensors: { 0: { id: 'zigbee.0.00158d00029a9bfb.occupancy', motionVal: true, noMotionVal: false } } } };
-
@pittini said in [Vorlage] LightControl:
@schmakus Hmm, ich denke nicht dass das ein Skriptfehler ist, sonst hätte ich den Fehler auch, und auch jeder andere der AutoOffLux verwendet. Kann den Fehler auch nicht reproduzieren. Bitte mal genau zeigen/schreiben was da eingestellt ist und dazu ein Log posten, idealerweise mit aktiviertem logging. Aber bitte keinen Programmcode posten, weil....den kenn ich
Hier das logging. Der Fehler tritt auf, wenn sich der Lux-Wert ändert. AutoOffLux ist deaktiviert, aber es kommen warnings ohne Ende.
2021-11-29 17:12:12.874 info script.js.common.Licht.LightControl2: GroupPowerOnOff: A Switching 0 deconz.0.Groups.9.on to: true javascript.0 2021-11-29 17:12:12.828 info script.js.common.Licht.LightControl2: GroupPowerOnOff: Normales anschalten ohne Ramping für Diele Decke javascript.0 2021-11-29 17:12:12.828 info script.js.common.Licht.LightControl2: Reaching GroupPowerOnOff for Group 0 (Diele Decke), OnOff=true rampOn=false - {"enabled":false,"time":2,"switchOutletsLast":true} rampOff=false - {"enabled":false,"time":2,"switchOutletsLast":false} javascript.0 2021-11-29 17:12:12.828 info script.js.common.Licht.LightControl2: Motion for Group 0 detected, switching on javascript.0 2021-11-29 17:12:12.827 info script.js.common.Licht.LightControl2: Controller: Motion detected, restarting AutoOff Timer for Group 0 javascript.0 2021-11-29 17:12:12.747 error at processImmediate (internal/timers.js:464:21) javascript.0 2021-11-29 17:12:12.747 error at Immediate.<anonymous> (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5706:41) javascript.0 2021-11-29 17:12:12.747 error at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:530:29) javascript.0 2021-11-29 17:12:12.747 error at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1087:38) javascript.0 2021-11-29 17:12:12.747 error at Object.<anonymous> (script.js.common.Licht.LightControl2:459:17) javascript.0 2021-11-29 17:12:12.747 error at Controller (script.js.common.Licht.LightControl2:1157:13) javascript.0 2021-11-29 17:12:12.747 error at AutoOffLux (script.js.common.Licht.LightControl2:1111:32) javascript.0 2021-11-29 17:12:12.747 error script.js.common.Licht.LightControl2: TypeError: Cannot read property 'dailyLockCounter' of undefined javascript.0 2021-11-29 17:12:12.746 info script.js.common.Licht.LightControl2: Triggered individual luxsensor deconz.0.Sensors.38.lux new value is 5 javascript.0 2021-11-29 17:12:12.746 info script.js.common.Licht.LightControl2: Triggered individual luxsensor deconz.0.Sensors.38.lux new value is 5 javascript.0 2021-11-29 17:12:06.090 info script.js.common.Licht.LightControl2: GroupPowerOnOff: A Switching 0 deconz.0.Groups.9.on to: true javascript.0 2021-11-29 17:12:06.037 info script.js.common.Licht.LightControl2: GroupPowerOnOff: Normales anschalten ohne Ramping für Diele Decke javascript.0 2021-11-29 17:12:06.037 info script.js.common.Licht.LightControl2: Reaching GroupPowerOnOff for Group 0 (Diele Decke), OnOff=true rampOn=false - {"enabled":false,"time":2,"switchOutletsLast":true} rampOff=false - {"enabled":false,"time":2,"switchOutletsLast":false} javascript.0 2021-11-29 17:12:06.037 info script.js.common.Licht.LightControl2: Motion for Group 0 detected, switching on javascript.0 2021-11-29 17:12:06.037 info script.js.common.Licht.LightControl2: Controller: Motion detected, restarting AutoOff Timer for Group 0 javascript.0 2021-11-29 17:12:06.036 error at processImmediate (internal/timers.js:464:21) javascript.0 2021-11-29 17:12:06.036 error at Immediate.<anonymous> (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5706:41) javascript.0 2021-11-29 17:12:06.035 error at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:530:29) javascript.0 2021-11-29 17:12:06.035 error at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1087:38) javascript.0 2021-11-29 17:12:06.035 error at Object.<anonymous> (script.js.common.Licht.LightControl2:459:17) javascript.0 2021-11-29 17:12:06.035 error at Controller (script.js.common.Licht.LightControl2:1157:13) javascript.0 2021-11-29 17:12:06.035 error at AutoOffLux (script.js.common.Licht.LightControl2:1111:32) javascript.0 2021-11-29 17:12:06.035 error script.js.common.Licht.LightControl2: TypeError: Cannot read property 'dailyLockCounter' of undefined javascript.0 2021-11-29 17:12:06.034 info script.js.common.Licht.LightControl2: Triggered individual luxsensor deconz.0.Sensors.38.lux new value is 6 javascript.0 2021-11-29 17:12:06.033 info script.js.common.Licht.LightControl2: Triggered individual luxsensor deconz.0.Sensors.38.lux new value is 6
Einstellungen von AutoOffLux:
-
@schmakus Jetzt konnte ich das auch reproduzieren und beheben. Versuchs mal mit der 2.0.16
-
Also mein Vorhaben habe ich ganz leicht geschafft. Datenpunkt "transitiontime" setzen und das level neu bestimmen und schon funktioniert der Zauber !
-
@pittini said in [Vorlage] LightControl:
Ok, dann werde ich die Funktion des Putzlichts so nicht nutzen. Mein Gedanke ist, dass ich ein Licht auf Dauer-Ein schalten möchte, wenn z.B. Gäste im Haus.
Es heisst ja Putzlicht und nicht Gästelicht und ist eben wirklich nur zum putzen gedacht.
Das Thema lässt mir keine Ruhe....
Nachvollziehbar die Funktion "Putzlicht". Aber wäre es möglich ein AutoOff für die Auslösung per BWM und ein AutoOff bei Verwendung des "power" Datenpunkts anzuwenden? Quasi ein AutoOffPowerOn?
So hätte man die Möglichkeit, ein Licht per Taster zu aktivieren und dies für z.B. 1h an zu lassen. Gleiche Parameter wie das jetzige AutoOff.
So hätte man seinen Standard mit BWM (z.B. 3 Minuten) und übergeordnet z.B. 1 Stunde mit Taster.Kannst dir ja mal überlegen. Hatte versucht, es in dein Script einzubauen, aber wie auf den ersten Blick gesehen habe, unterscheidest du aktuell nicht zwischen Auslösung durch BWM oder durch Power-DP. Dein AutoOff läuft los, wenn PowerOn.
-
@pittini said in [Vorlage] LightControl:
@schmakus Jetzt konnte ich das auch reproduzieren und beheben. Versuchs mal mit der 2.0.16
Scheint bis jetzt ok zu sein, danke!
-
@schmakus sagte in [Vorlage] LightControl:
Das Thema lässt mir keine Ruhe....
Nur so als spontane Idee: Warum probierst nicht mal einfach die Gruppe doppelt anzulegen, dann hast 2 separte Sets (die aber natürlich nicht miteinander interagieren).
-
@pittini könnte ich versuchen.
Was macht deine Logik, wenn die Lampen schon an sind? Bedeutet, ich schalte die zweite Gruppe per Taster power on, autoOff nach 3600s.
Jetzt löst BWM der ersten Gruppe aus. Setzt der BWM der ersten Gruppe dann seinen AutoOff Timer (z.B. 180s) zurück und startet neu? Wenn ja, würde ja das Licht dann spätestens nach 180s ausgehen. Wobei gleichzeitig der BWM der zweiten Gruppe ja auch seinen AutoOff timer zurücksetzen würde…….
Ich teste das einfach mal. -
@Pittini: Was mir auch noch auffällt ist, dass du zuerst die Lampen über den jeweiligen "on" Datenpunkt einschaltest und anschließend die Helligkeit der jeweilen Lampe. Das führt - zumindest bei - dazu, dass die Lampe meist zuerst mit der zuletzt eingestellten Helligkeit an geht und dann die Helligkeit von deinem Script nachgeregelt wird.
In meinen Skripten habe ich das einfach so gelöst, dass ich die Lampen (meist Zigbee) ausschließlich über den Helligkeits-Datenpunkt steuere und gar nicht den jeweiligen Power on Datenpunkt verwende.
Wenn es jedoch Lampen gibt, bei denen das nicht geht (Shellys wären mir bekannt), dann sollte es eine Möglichkeit geben, das Schaltverhalten wählbar zu machen.
Eine andere Möglichkeit wäre z.B. die Lampen zuerst auf Helligkeit 0% zu setzen und dann auszuschalten.