NEWS
[gelöst] Kann state nicht setzen
-
// gelöst durch update aller Adapter und reboot.
Hallo zusammen,
ich Mühe mich seit Stunden ab, einen State zu setzen.
Ich habe eine Oberfläche (einen POC), auf welcher ich mehrere Radiosender auf einem Musiccast Gerät abspiele: Der aktuell laufender Sender soll in einem Widget erkannt werden. Dazu habe ich für jeden Radiosender einen State angelegt und mit dem entsprechenden Widget verbunden (true/ false). Wenn ein Radiosender gewechselt wird (der aktuell laufender Sender steht im State musiccast.0.WX-010_026D5843.netusb.artist), dann werden alle boolean-Variablen auf false gesetzt (alle Widgets sind orange) und im weiteren Verlauf des Scriptes wird dann nur der eine Radiosender-state auf true gestellt, wodurch genau ein Widget auf grün sprint und den aktuellen Radiosender markiert.
Die VIS sieht aktuell so aus:
Das Problem, für den Radiosender WDR2 und NDR2 funktioniert die o.g. Logik. Der aktuelle Wert des switches stehen unten drunter.
Aber für den Radiosender EinsLive klappt das nicht. Man erkennt auch unter dem Widget, dass der state überaupt keinen Wert hat. Auch nach einem Wechsel des Radiosenders nimmt der state keinen Wert an, d.h. der state kann nicht gesetzt werden (so die erste Vermutung). Das folgende Script verwende ich dazu:
on({id: "musiccast.0.WX-010_026D5843.netusb.artist"/*artist*/}, function (obj) { // Neuen Namen des Radiosender bestimmen var newStation = obj.newState.val; console.log("New Station: " + newStation); // erstmal alle boolean variablen auf false setzen setStateDelayed("javascript.0.YamahaKueche_EinsLIVE"/*YamahaKueche_EinsLIVE*/, false ,false, 0, false); setStateDelayed("javascript.0.YamahaKueche_WDR2"/*YamahaKueche_WDR2*/, false ,false, 0, false); setStateDelayed("javascript.0.YamahaKueche_NDR2"/*YamahaKueche_NDR2*/, false ,false, 0, false); // Nun den neuen Radiosender auf true setzen switch(newStation) { case "1LIVE": setStateDelayed("javascript.0.YamahaKueche_EinsLIVE"/*YamahaKueche_EinsLIVE*/, true , false, 10, false); console.log("1Live ausgeführt"); break; case "WDR 2 Münsterland": setStateDelayed("javascript.0.YamahaKueche_WDR2"/*YamahaKueche_WDR2*/, true , false, 10, false); console.log("WDR2 ausgeführt"); break; case "NDR 2 (HH)": setStateDelayed("javascript.0.YamahaKueche_NDR2"/*YamahaKueche_NDR2*/, true , false, 10, false); console.log("NDR2 ausgeführt"); break; } });
Der Log sieht wie folgt aus:
22:16:24.259 [info] javascript.0 script.js.common.cVIS.Translate_YamahaKuecheRadioStation: New Station: 1LIVE 22:16:24.260 [info] javascript.0 script.js.common.cVIS.Translate_YamahaKuecheRadioStation: 1Live ausgeführt
Hier noch die Definition von zwei states (vielleicht ist da etwas aufällig).
{ "common": { "name": "YamahaKueche_EinsLIVE", "type": "boolean", "role": "switch", "def": false, "read": true, "write": true }, "native": {}, "type": "state", "from": "system.adapter.javascript.0", "ts": 1541096910081, "_id": "javascript.0.YamahaKueche_EinsLIVE", "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 } }
und
{ "common": { "def": false, "type": "boolean", "read": true, "write": true, "name": "YamahaKueche_WDR2", "role": "switch" }, "native": {}, "type": "state", "from": "system.adapter.javascript.0", "ts": 1541021681946, "_id": "javascript.0.YamahaKueche_WDR2", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }
In der Objektübersicht sehe ich jedoch, dass der state einen Wert hat!!
Die Farbe der states wechselt zwischen rot und grün.
Das Widget habe ich bereits gelöscht und neu angelget, hat aber nix gebracht:
Daher habe ich keine IDee mehr, was ich jetzt noch tun könnte und bin auf eure Ratschläge gespannt. Im Kern sieht es so aus, dass das Widget mit der state nicht zurecht kommt.
Danke und Gruß,
Christian
-
Nachdem ich einfach mal alle Adapter aktualisiert habe und zwei mal neu gestartet habe, fuktioniert es nun.
Gruß,
Christian