NEWS
[gelöst]Lichtersteuerung auf Smartphone
-
@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.