NEWS
[gelöst]Lichtersteuerung auf Smartphone
-
Ja, wäre so richtig (wenn du die im Anschluss richtig ansprichst)
Wie viele Dimensionen brauchst du?
Einfaches Array:
a_meinArray = [ "Wert1", "Wert2", "Wert3" ]; // Abruf der Werte in einer Schleife: for (var i = 0; i < a_meinArray .length; i++) { let s_currentValue = a_meinArray[i]; // etwas mit den Werten machen }Mit mehreren Dimensionen
a_meinArrayMD = [ [ "Wert1 A", "Wert1 B", 21 ], [ "Wert2 A", "Wert2 B", 42 ], [ "Wert3 A", "Wert3 B", 63 ] ]; // Abruf der Werte in einer Schleife: for (var i = 0; i < a_meinArrayMD .length; i++) { let s_WertA = a_meinArrayMD [i][0]; let s_WertB = a_meinArrayMD [i][1]; let s_WertZahl = a_meinArrayMD [i][2]; // etwas mit den Werten machen }@bananajoe Hi, ich habe jetzt mal ein JS Skript erstellt und den folgenden Code eingeben. Leider bringt er mir schon Ober bei der Variable sehr viele Fehler. (siehe Bild.)!
// Hier werden alle Lampen, die mit der Zentralen Steuerung geschalten werden aufgelistet. // Variable [ "Name", "Eigener Datenpunkt", "Datenpunkt Lampe ONOFF", "Datenpunkt Lampe RGB" ] let a_lightcontrol = ["WZ-Kaminlicht", "0_userdata.0.Lights.WZ-Kaminlicht", "zigbee.0.04cd15fffedb3087.state", "zigbee.0.04cd15fffedb3087.color"], ["WZ-Couch", "0_userdata.0.Lights.WZ-Couch", "zigbee.0.842e14fffe36885f.state"], ["WZ-Stehlampe", "0_userdata.0.Lights.WZ-Stehlampe", "zigbee.0.9035eafffe04994d.state", "zigbee.0.9035eafffe04994d.color"], ["Kü-Ambiente", "0_userdata.0.Lights.Kü-Ambiente"], ["KZ-Ambiente", "0_userdata.0.Lights.KZ-Ambiente"], ["Bad-Ambiente", "0_userdata.0.Lights.Bad-Ambiente", "zigbee.0.04cd15fffedb28e3.state", "zigbee.0.04cd15fffedb28e3.color"], ]; // Abruf der Werte in einer Schleife: for (var i = 0; i < a_lightcontrol.length; i++) { let s_currentName = a_lightcontrol[i][0]; let s_currentData = a_lightcontrol[i][1]; let s_currentState = a_lightcontrol[i][2]; let s_currentColor = a_lightcontrol[i][3]; } // OnOff wurde geändert on({id: "0_userdata.0.Lights.control-onoff"/*control-onoff*/, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; setState(s_currentState/*Switch state*/, getState("0_userdata.0.Lights.control-onoff").val); setStateDelayed("0_userdata.0.Lights.control-onoff"/*control-onoff*/, '', 1000, true); }); // RGB wurde geändert on({id: "0_userdata.0.Lights.controll-rgb"/*controll-rgb*/, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; // Kamin Licht if (getState(s_currentData).val == true) { setState(s_currentColor/*Color*/, getState("0_userdata.0.Lights.controll-rgb").val); });
Danke für deine/eure Hilfe.
-
@bananajoe Hi, ich habe jetzt mal ein JS Skript erstellt und den folgenden Code eingeben. Leider bringt er mir schon Ober bei der Variable sehr viele Fehler. (siehe Bild.)!
// Hier werden alle Lampen, die mit der Zentralen Steuerung geschalten werden aufgelistet. // Variable [ "Name", "Eigener Datenpunkt", "Datenpunkt Lampe ONOFF", "Datenpunkt Lampe RGB" ] let a_lightcontrol = ["WZ-Kaminlicht", "0_userdata.0.Lights.WZ-Kaminlicht", "zigbee.0.04cd15fffedb3087.state", "zigbee.0.04cd15fffedb3087.color"], ["WZ-Couch", "0_userdata.0.Lights.WZ-Couch", "zigbee.0.842e14fffe36885f.state"], ["WZ-Stehlampe", "0_userdata.0.Lights.WZ-Stehlampe", "zigbee.0.9035eafffe04994d.state", "zigbee.0.9035eafffe04994d.color"], ["Kü-Ambiente", "0_userdata.0.Lights.Kü-Ambiente"], ["KZ-Ambiente", "0_userdata.0.Lights.KZ-Ambiente"], ["Bad-Ambiente", "0_userdata.0.Lights.Bad-Ambiente", "zigbee.0.04cd15fffedb28e3.state", "zigbee.0.04cd15fffedb28e3.color"], ]; // Abruf der Werte in einer Schleife: for (var i = 0; i < a_lightcontrol.length; i++) { let s_currentName = a_lightcontrol[i][0]; let s_currentData = a_lightcontrol[i][1]; let s_currentState = a_lightcontrol[i][2]; let s_currentColor = a_lightcontrol[i][3]; } // OnOff wurde geändert on({id: "0_userdata.0.Lights.control-onoff"/*control-onoff*/, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; setState(s_currentState/*Switch state*/, getState("0_userdata.0.Lights.control-onoff").val); setStateDelayed("0_userdata.0.Lights.control-onoff"/*control-onoff*/, '', 1000, true); }); // RGB wurde geändert on({id: "0_userdata.0.Lights.controll-rgb"/*controll-rgb*/, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; // Kamin Licht if (getState(s_currentData).val == true) { setState(s_currentColor/*Color*/, getState("0_userdata.0.Lights.controll-rgb").val); });
Danke für deine/eure Hilfe.
-
@bananajoe Hi, ich habe jetzt mal ein JS Skript erstellt und den folgenden Code eingeben. Leider bringt er mir schon Ober bei der Variable sehr viele Fehler. (siehe Bild.)!
// Hier werden alle Lampen, die mit der Zentralen Steuerung geschalten werden aufgelistet. // Variable [ "Name", "Eigener Datenpunkt", "Datenpunkt Lampe ONOFF", "Datenpunkt Lampe RGB" ] let a_lightcontrol = ["WZ-Kaminlicht", "0_userdata.0.Lights.WZ-Kaminlicht", "zigbee.0.04cd15fffedb3087.state", "zigbee.0.04cd15fffedb3087.color"], ["WZ-Couch", "0_userdata.0.Lights.WZ-Couch", "zigbee.0.842e14fffe36885f.state"], ["WZ-Stehlampe", "0_userdata.0.Lights.WZ-Stehlampe", "zigbee.0.9035eafffe04994d.state", "zigbee.0.9035eafffe04994d.color"], ["Kü-Ambiente", "0_userdata.0.Lights.Kü-Ambiente"], ["KZ-Ambiente", "0_userdata.0.Lights.KZ-Ambiente"], ["Bad-Ambiente", "0_userdata.0.Lights.Bad-Ambiente", "zigbee.0.04cd15fffedb28e3.state", "zigbee.0.04cd15fffedb28e3.color"], ]; // Abruf der Werte in einer Schleife: for (var i = 0; i < a_lightcontrol.length; i++) { let s_currentName = a_lightcontrol[i][0]; let s_currentData = a_lightcontrol[i][1]; let s_currentState = a_lightcontrol[i][2]; let s_currentColor = a_lightcontrol[i][3]; } // OnOff wurde geändert on({id: "0_userdata.0.Lights.control-onoff"/*control-onoff*/, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; setState(s_currentState/*Switch state*/, getState("0_userdata.0.Lights.control-onoff").val); setStateDelayed("0_userdata.0.Lights.control-onoff"/*control-onoff*/, '', 1000, true); }); // RGB wurde geändert on({id: "0_userdata.0.Lights.controll-rgb"/*controll-rgb*/, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; // Kamin Licht if (getState(s_currentData).val == true) { setState(s_currentColor/*Color*/, getState("0_userdata.0.Lights.controll-rgb").val); });
Danke für deine/eure Hilfe.
@meikie Und Du greifst nachher auf s_currentState und andere Variablen zu, die da nicht mehr existieren. Diese existieren nur innerhalb der for-Schleife.
Du musst dementsprechend die for-Schleife in Deine Trigger ziehen und überlegen, welche der Elemente Du schalten möchtest. -
@meikie Und Du greifst nachher auf s_currentState und andere Variablen zu, die da nicht mehr existieren. Diese existieren nur innerhalb der for-Schleife.
Du musst dementsprechend die for-Schleife in Deine Trigger ziehen und überlegen, welche der Elemente Du schalten möchtest.@zarello Vielen Dank. Ja die kleine Fehler mit Kommas, Klammern usw.
Kann ich dann in der for-Schleife die Trigger mit einbauen? Also einfach das, was ich unten habe mit in die for-schleife bauen? Oder geht es einfacher in dem ich die Variable Global erstelle. Geht das?Vielen Dank.
-
@zarello Vielen Dank. Ja die kleine Fehler mit Kommas, Klammern usw.
Kann ich dann in der for-Schleife die Trigger mit einbauen? Also einfach das, was ich unten habe mit in die for-schleife bauen? Oder geht es einfacher in dem ich die Variable Global erstelle. Geht das?Vielen Dank.
@meikie Die Trigger in die For-Schleife zu ziehen ist in dem Fall keine gute Idee, das verbraucht nur unnötig Resourcen.
Die Variablen global erstellen bringt Dir auch nichts. Die For-Schleife wird dann am Anfang einmal durchlaufen und dann stehen die Werte auf dem letzten Eintrag und bleiben dort. Wenn ein Trigger ausgelöst wird, wird er dementsprechend nur den letzten Eintrag verwenden.
-
@meikie Die Trigger in die For-Schleife zu ziehen ist in dem Fall keine gute Idee, das verbraucht nur unnötig Resourcen.
Die Variablen global erstellen bringt Dir auch nichts. Die For-Schleife wird dann am Anfang einmal durchlaufen und dann stehen die Werte auf dem letzten Eintrag und bleiben dort. Wenn ein Trigger ausgelöst wird, wird er dementsprechend nur den letzten Eintrag verwenden.
-
@meikie Sowas wie:
// Hier werden alle Lampen, die mit der Zentralen Steuerung geschalten werden aufgelistet. // Variable [ "Name", "Eigener Datenpunkt", "Datenpunkt Lampe ONOFF", "Datenpunkt Lampe RGB" ] let a_lightcontrol = [ ["WZ-Kaminlicht", "0_userdata.0.Lights.WZ-Kaminlicht", "zigbee.0.04cd15fffedb3087.state", "zigbee.0.04cd15fffedb3087.color"], ["WZ-Couch", "0_userdata.0.Lights.WZ-Couch", "zigbee.0.842e14fffe36885f.state"], ["WZ-Stehlampe", "0_userdata.0.Lights.WZ-Stehlampe", "zigbee.0.9035eafffe04994d.state", "zigbee.0.9035eafffe04994d.color"], ["Kü-Ambiente", "0_userdata.0.Lights.Kü-Ambiente", "hier fehlt noch eine ID"], ["KZ-Ambiente", "0_userdata.0.Lights.KZ-Ambiente", "hier fehlt noch eine ID"], ["Bad-Ambiente", "0_userdata.0.Lights.Bad-Ambiente", "zigbee.0.04cd15fffedb28e3.state", "zigbee.0.04cd15fffedb28e3.color"] ]; // OnOff wurde geändert on({id: "0_userdata.0.Lights.control-onoff"/*control-onoff*/, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; // Abruf der Werte in einer Schleife: for (var i = 0; i < a_lightcontrol.length; i++) { let s_currentName = a_lightcontrol[i][0]; let s_currentData = a_lightcontrol[i][1]; let s_currentState = a_lightcontrol[i][2]; // Ich bin mir nicht sicher, was Du hier erreichen wolltest. Ich habe mal geraten: if (getState (s_currentData).val) { setState(s_currentState/*Switch state*/, value); if (!value) { setStateDelayed("0_userdata.0.Lights.control-onoff"/*control-onoff*/, '', 1000, true); } } } });Ich habe gerade keine Möglichkeit das zu testen, es könnten also noch Fehler vorhanden sein.
Versuch mal herauszufinden, was da dann wann und wie passiert. Tipp: if (!value) bedeutet: Wenn in value der Wert false steht. -
@meikie Sowas wie:
// Hier werden alle Lampen, die mit der Zentralen Steuerung geschalten werden aufgelistet. // Variable [ "Name", "Eigener Datenpunkt", "Datenpunkt Lampe ONOFF", "Datenpunkt Lampe RGB" ] let a_lightcontrol = [ ["WZ-Kaminlicht", "0_userdata.0.Lights.WZ-Kaminlicht", "zigbee.0.04cd15fffedb3087.state", "zigbee.0.04cd15fffedb3087.color"], ["WZ-Couch", "0_userdata.0.Lights.WZ-Couch", "zigbee.0.842e14fffe36885f.state"], ["WZ-Stehlampe", "0_userdata.0.Lights.WZ-Stehlampe", "zigbee.0.9035eafffe04994d.state", "zigbee.0.9035eafffe04994d.color"], ["Kü-Ambiente", "0_userdata.0.Lights.Kü-Ambiente", "hier fehlt noch eine ID"], ["KZ-Ambiente", "0_userdata.0.Lights.KZ-Ambiente", "hier fehlt noch eine ID"], ["Bad-Ambiente", "0_userdata.0.Lights.Bad-Ambiente", "zigbee.0.04cd15fffedb28e3.state", "zigbee.0.04cd15fffedb28e3.color"] ]; // OnOff wurde geändert on({id: "0_userdata.0.Lights.control-onoff"/*control-onoff*/, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; // Abruf der Werte in einer Schleife: for (var i = 0; i < a_lightcontrol.length; i++) { let s_currentName = a_lightcontrol[i][0]; let s_currentData = a_lightcontrol[i][1]; let s_currentState = a_lightcontrol[i][2]; // Ich bin mir nicht sicher, was Du hier erreichen wolltest. Ich habe mal geraten: if (getState (s_currentData).val) { setState(s_currentState/*Switch state*/, value); if (!value) { setStateDelayed("0_userdata.0.Lights.control-onoff"/*control-onoff*/, '', 1000, true); } } } });Ich habe gerade keine Möglichkeit das zu testen, es könnten also noch Fehler vorhanden sein.
Versuch mal herauszufinden, was da dann wann und wie passiert. Tipp: if (!value) bedeutet: Wenn in value der Wert false steht. -
@zarello Hi, danke für den Code. Leider kann ich ihn selbst auch noch nicht testen. Er sagt nämlich die ganze Zeit, dass in Zeile 3
let a_lightcontrol = [Ein Fehler wäre.
Ich finde dieses aber nicht. -
@zarello Jetzt habe ich es einmal bei mir laufen lassen: Das funktioniert, egal ob mit oder ohne Komma am Ende der neunten Zeile.
Gibt es evtl. eine zweite Variable a_lightcontrol in Deinem Skript, also eine zweite Zeile, die mit let a_lightcontrol anfängt?
Um was sinnvolles dazu sagen zu können müsstest Du nochmals Dein Skript in der aktuellen Fassung komplett hier einstellen inklusive der Fehlermeldungen die Du bekommst.
-
@zarello Jetzt habe ich es einmal bei mir laufen lassen: Das funktioniert, egal ob mit oder ohne Komma am Ende der neunten Zeile.
Gibt es evtl. eine zweite Variable a_lightcontrol in Deinem Skript, also eine zweite Zeile, die mit let a_lightcontrol anfängt?
Um was sinnvolles dazu sagen zu können müsstest Du nochmals Dein Skript in der aktuellen Fassung komplett hier einstellen inklusive der Fehlermeldungen die Du bekommst.
@zarello Hey, vielen Dank für deine Hilfe. Jetzt habe ich es soweit hinbekommen. Nur folgender Code bekomme ich nicht zum laufen.
let a_lightcontrol = [ [/*"WZ-Kaminlicht"*/ "WZ", "0_userdata.0.Lights.WZ-Kaminlicht", "zigbee.0.04cd15fffedb3087.state", "zigbee.0.04cd15fffedb3087.color"], [/*"WZ-Couch"*/ "WZ", "0_userdata.0.Lights.WZ-Couch", "zigbee.0.842e14fffe36885f.state"], [/*"WZ-Stehlampe"*/ "WZ", "0_userdata.0.Lights.WZ-Stehlampe", "zigbee.0.9035eafffe04994d.state", "zigbee.0.9035eafffe04994d.color"], [/*"Bad-Ambiente"*/ "Bad", "0_userdata.0.Lights.Bad-Ambiente", "zigbee.0.04cd15fffedb28e3.state", "zigbee.0.04cd15fffedb28e3.color"] ]; // Wohnzimmer komplett selektieren / deselektieren on({id: "0_userdata.0.Lights.control-wz"/*control-wz*/, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; // Abruf der Werte in einer Schleife: for (var i = 0; i < a_lightcontrol.length; i++) { let s_currentRoom = a_lightcontrol[i][0]; let s_currentData = a_lightcontrol[i][1]; // Alle Lampen im Wohnzimmer auswählen console.log(s_currentRoom); if (getState (s_currentRoom).val == "WZ") { setState(s_currentData/*Switch state*/, getState("0_userdata.0.Lights.control-wz").val); } } /*Kaminlicht*/ //setState("0_userdata.0.Lights.WZ-Kaminlicht", value); /*Stehlampe*/ //setState("0_userdata.0.Lights.WZ-Stehlampe", value); /*Couch*/ //setState("0_userdata.0.Lights.WZ-Couch", value); });Folgende Fehlermeldung steht im Protokoll.
javascript.0 782 2023-02-24 14:18:16.917 warn at processImmediate (node:internal/timers:466:21) javascript.0 782 2023-02-24 14:18:16.917 warn at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:5916:56) javascript.0 782 2023-02-24 14:18:16.917 warn at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:593:29) javascript.0 782 2023-02-24 14:18:16.917 warn at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1244:38) javascript.0 782 2023-02-24 14:18:16.917 warn at Object.<anonymous> (script.js.Ambiente.LichtsteuerungJS:66:13) javascript.0 782 2023-02-24 14:18:16.916 warn getState "WZ" not found (3) javascript.0 782 2023-02-24 14:18:16.915 info script.js.Ambiente.LichtsteuerungJS: WZWas habe ich hier falsch? Vielen Dank für deine Hilfe.
Liebe Grüße
Michael -
@zarello Hey, vielen Dank für deine Hilfe. Jetzt habe ich es soweit hinbekommen. Nur folgender Code bekomme ich nicht zum laufen.
let a_lightcontrol = [ [/*"WZ-Kaminlicht"*/ "WZ", "0_userdata.0.Lights.WZ-Kaminlicht", "zigbee.0.04cd15fffedb3087.state", "zigbee.0.04cd15fffedb3087.color"], [/*"WZ-Couch"*/ "WZ", "0_userdata.0.Lights.WZ-Couch", "zigbee.0.842e14fffe36885f.state"], [/*"WZ-Stehlampe"*/ "WZ", "0_userdata.0.Lights.WZ-Stehlampe", "zigbee.0.9035eafffe04994d.state", "zigbee.0.9035eafffe04994d.color"], [/*"Bad-Ambiente"*/ "Bad", "0_userdata.0.Lights.Bad-Ambiente", "zigbee.0.04cd15fffedb28e3.state", "zigbee.0.04cd15fffedb28e3.color"] ]; // Wohnzimmer komplett selektieren / deselektieren on({id: "0_userdata.0.Lights.control-wz"/*control-wz*/, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; // Abruf der Werte in einer Schleife: for (var i = 0; i < a_lightcontrol.length; i++) { let s_currentRoom = a_lightcontrol[i][0]; let s_currentData = a_lightcontrol[i][1]; // Alle Lampen im Wohnzimmer auswählen console.log(s_currentRoom); if (getState (s_currentRoom).val == "WZ") { setState(s_currentData/*Switch state*/, getState("0_userdata.0.Lights.control-wz").val); } } /*Kaminlicht*/ //setState("0_userdata.0.Lights.WZ-Kaminlicht", value); /*Stehlampe*/ //setState("0_userdata.0.Lights.WZ-Stehlampe", value); /*Couch*/ //setState("0_userdata.0.Lights.WZ-Couch", value); });Folgende Fehlermeldung steht im Protokoll.
javascript.0 782 2023-02-24 14:18:16.917 warn at processImmediate (node:internal/timers:466:21) javascript.0 782 2023-02-24 14:18:16.917 warn at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:5916:56) javascript.0 782 2023-02-24 14:18:16.917 warn at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:593:29) javascript.0 782 2023-02-24 14:18:16.917 warn at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1244:38) javascript.0 782 2023-02-24 14:18:16.917 warn at Object.<anonymous> (script.js.Ambiente.LichtsteuerungJS:66:13) javascript.0 782 2023-02-24 14:18:16.916 warn getState "WZ" not found (3) javascript.0 782 2023-02-24 14:18:16.915 info script.js.Ambiente.LichtsteuerungJS: WZWas habe ich hier falsch? Vielen Dank für deine Hilfe.
Liebe Grüße
Michael@meikie sagte in [gelöst]Lichtersteuerung auf Smartphone:
let s_currentRoom = a_lightcontrol[i][0];0 ist
WZ, 1 wäre0_userdata.0.Lights.WZ-KaminlichtUnd ich mag es ja mit vielen Kommentaren ... aber warum musst du die auch immer unbedingt da mitten in den Text schreiben. Bei deinem Array - das packe doch in 0 die Beschreibung die du als Kommentar nutzt, und wenn es dann ein Feld mehr ist. Ist dann auch beim Debuggen praktisch weil man dann die Beschreibung mit ausgeben könnte
-
@meikie sagte in [gelöst]Lichtersteuerung auf Smartphone:
let s_currentRoom = a_lightcontrol[i][0];0 ist
WZ, 1 wäre0_userdata.0.Lights.WZ-KaminlichtUnd ich mag es ja mit vielen Kommentaren ... aber warum musst du die auch immer unbedingt da mitten in den Text schreiben. Bei deinem Array - das packe doch in 0 die Beschreibung die du als Kommentar nutzt, und wenn es dann ein Feld mehr ist. Ist dann auch beim Debuggen praktisch weil man dann die Beschreibung mit ausgeben könnte
-
Hey,
sehe es mir nach. Ich bin ganz neu in diesem Metier :-)0 ist WZ, 1 wäre 0_userdata.0.Lights.WZ-Kaminlicht
Genau so sollte es sein. Kannst du einen Fehler finden und mir sagen?
Vielen Dank. -
@meikie War jetzt noch eine Frage offen? Denn der Titel dieser Diskussion ist ja inzwischen auf gelöst gesetzt.
-
@zarello Hey, vielen Dank für deine Hilfe. Jetzt habe ich es soweit hinbekommen. Nur folgender Code bekomme ich nicht zum laufen.
let a_lightcontrol = [ [/*"WZ-Kaminlicht"*/ "WZ", "0_userdata.0.Lights.WZ-Kaminlicht", "zigbee.0.04cd15fffedb3087.state", "zigbee.0.04cd15fffedb3087.color"], [/*"WZ-Couch"*/ "WZ", "0_userdata.0.Lights.WZ-Couch", "zigbee.0.842e14fffe36885f.state"], [/*"WZ-Stehlampe"*/ "WZ", "0_userdata.0.Lights.WZ-Stehlampe", "zigbee.0.9035eafffe04994d.state", "zigbee.0.9035eafffe04994d.color"], [/*"Bad-Ambiente"*/ "Bad", "0_userdata.0.Lights.Bad-Ambiente", "zigbee.0.04cd15fffedb28e3.state", "zigbee.0.04cd15fffedb28e3.color"] ]; // Wohnzimmer komplett selektieren / deselektieren on({id: "0_userdata.0.Lights.control-wz"/*control-wz*/, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; // Abruf der Werte in einer Schleife: for (var i = 0; i < a_lightcontrol.length; i++) { let s_currentRoom = a_lightcontrol[i][0]; let s_currentData = a_lightcontrol[i][1]; // Alle Lampen im Wohnzimmer auswählen console.log(s_currentRoom); if (getState (s_currentRoom).val == "WZ") { setState(s_currentData/*Switch state*/, getState("0_userdata.0.Lights.control-wz").val); } } /*Kaminlicht*/ //setState("0_userdata.0.Lights.WZ-Kaminlicht", value); /*Stehlampe*/ //setState("0_userdata.0.Lights.WZ-Stehlampe", value); /*Couch*/ //setState("0_userdata.0.Lights.WZ-Couch", value); });Folgende Fehlermeldung steht im Protokoll.
javascript.0 782 2023-02-24 14:18:16.917 warn at processImmediate (node:internal/timers:466:21) javascript.0 782 2023-02-24 14:18:16.917 warn at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:5916:56) javascript.0 782 2023-02-24 14:18:16.917 warn at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:593:29) javascript.0 782 2023-02-24 14:18:16.917 warn at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1244:38) javascript.0 782 2023-02-24 14:18:16.917 warn at Object.<anonymous> (script.js.Ambiente.LichtsteuerungJS:66:13) javascript.0 782 2023-02-24 14:18:16.916 warn getState "WZ" not found (3) javascript.0 782 2023-02-24 14:18:16.915 info script.js.Ambiente.LichtsteuerungJS: WZWas habe ich hier falsch? Vielen Dank für deine Hilfe.
Liebe Grüße
Michael@meikie sagte in [gelöst]Lichtersteuerung auf Smartphone:
let s_currentRoom = a_lightcontrol[i][0]; let s_currentData = a_lightcontrol[i][1]; // Alle Lampen im Wohnzimmer auswählen console.log(s_currentRoom); if (getState (s_currentRoom).val == "WZ") { setState(s_currentData/*Switch state*/, getState("0_userdata.0.Lights.control-wz").val); }Folgende Fehlermeldung steht im Protokoll.
javascript.0 782 2023-02-24 14:18:16.917 warn at Object.<anonymous> (script.js.Ambiente.LichtsteuerungJS:66:13) javascript.0 782 2023-02-24 14:18:16.916 warn getState "WZ" not found (3) javascript.0 782 2023-02-24 14:18:16.915 info script.js.Ambiente.LichtsteuerungJS: WZCode und Log habe ich hier mal auf die wesentlichen Stellen gekürzt, die man benötigt um das Problem zu verstehen. Die folgenden Zeilennummern beziehen sich auf meinen gekürzten Ausschnitt:
In Zeile 4 gibst Du s_currentRoom im Log aus. Das ist auch zu sehen in Zeile 3 des Logs.
Der Wert von s_currentRoom is "WZ".
Dann versuchst Du in Zeile 5 getState aufzurufen. Das System gibt Dir dazu völlig richtig die Antwort in Zeile 2 im Log: Ein Datenpunkt mit Namen "WZ" existiert nicht, denn getState versucht ja immer Werte aus einem Datenpunkt zu lesen.
In Zeile 1 des Logs findest Du dann übrigens den Hinweis, wo die entsprechende Stelle zu suchen ist: Im Script Ambiente.LichtsteuerungJS, Zeile 66, Spalte 13.
Eigentlich wolltest Du vermutlich einfach überprüfen ob Dein Tabelleneintrag zum Wohnzimmer gehört.
Das wäre dann:if (s_currentRoom == "WZ") {Ich hoffe, das hilft Dir etwas weiter.
Edit: Logzeile mit Hinweis auf Position ergänzt und beschrieben.
-
@meikie sagte in [gelöst]Lichtersteuerung auf Smartphone:
let s_currentRoom = a_lightcontrol[i][0]; let s_currentData = a_lightcontrol[i][1]; // Alle Lampen im Wohnzimmer auswählen console.log(s_currentRoom); if (getState (s_currentRoom).val == "WZ") { setState(s_currentData/*Switch state*/, getState("0_userdata.0.Lights.control-wz").val); }Folgende Fehlermeldung steht im Protokoll.
javascript.0 782 2023-02-24 14:18:16.917 warn at Object.<anonymous> (script.js.Ambiente.LichtsteuerungJS:66:13) javascript.0 782 2023-02-24 14:18:16.916 warn getState "WZ" not found (3) javascript.0 782 2023-02-24 14:18:16.915 info script.js.Ambiente.LichtsteuerungJS: WZCode und Log habe ich hier mal auf die wesentlichen Stellen gekürzt, die man benötigt um das Problem zu verstehen. Die folgenden Zeilennummern beziehen sich auf meinen gekürzten Ausschnitt:
In Zeile 4 gibst Du s_currentRoom im Log aus. Das ist auch zu sehen in Zeile 3 des Logs.
Der Wert von s_currentRoom is "WZ".
Dann versuchst Du in Zeile 5 getState aufzurufen. Das System gibt Dir dazu völlig richtig die Antwort in Zeile 2 im Log: Ein Datenpunkt mit Namen "WZ" existiert nicht, denn getState versucht ja immer Werte aus einem Datenpunkt zu lesen.
In Zeile 1 des Logs findest Du dann übrigens den Hinweis, wo die entsprechende Stelle zu suchen ist: Im Script Ambiente.LichtsteuerungJS, Zeile 66, Spalte 13.
Eigentlich wolltest Du vermutlich einfach überprüfen ob Dein Tabelleneintrag zum Wohnzimmer gehört.
Das wäre dann:if (s_currentRoom == "WZ") {Ich hoffe, das hilft Dir etwas weiter.
Edit: Logzeile mit Hinweis auf Position ergänzt und beschrieben.