NEWS
gelöst js: wie felxible "states" in werteliste
-
könnte mir bitte jmd erklären, wie man die states in einem werteliste-datenpunkt flexible hält bzw schreibt
im raw sieht der datenpunkt so aus:
{ "from": "system.adapter.javascript.2", "user": "system.user.admin", "ts": 1568636996464, "common": { "name": "Unifi Wifi Vouchers_ValueCodeList", "role": "state", "type": "string", "states": "CODE01:123456;CODE02:654321", "read": true, "write": true }, "native": {}, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 }, "_id": "javascript.2.WLANUnifi.Wifi_Vouchers_ValueCodeList", "type": "state" }
so sehen die daten aus, welche sich ändern: "CODE01:5d7f846397578401a0612dc6;CODE02:5d7f846397578401a0612dc5;CODE03:5d7ce0c197578401cf117f25"
so versuche ich es - bekomme aber eine syntax warnung
im log steht zwar das richtige
aber irgendwie traue ich der sache nicht -
im raw des datenpunktes stehen die daten aber nicht drin - da sind immer noch die alten drin, die beim anlegen genommen wurdenfehlt das
setObject(dpPrefix + "WLANUnifi.Wifi_Vouchers_ValueCodeList", obj);
dann steht auch im raw alles richtig drin : frage bleibt - ist das richtig obwohl es "bemängelt" wird
-
@liv-in-sky sagte:
im raw sieht der datenpunkt so aus:
Wertelisten (multistate) sind normalerweise Datenpunkte vom Typ "number" mit den Zahlenwerten zugeordneten Zustandstexten (states).
Das statische Objekt sollte per Skript nur in Ausnahmefällen geändert werden. Für dynamische Werte ist setState() und getState() zu verwenden; Datenpunkt-Typ "object" oder für JSON Typ "string".
-
@paul53 danke dir, dass du die zeit nimmst - aber ich glaube, ich versteh das nicht ganz
mein problem ist , dass ich diese datenpunkt genau so brauche - ich möchte ihn in iqontrol nutzen , um etwas auszuführen - in iqontrol kann ich nur so, aus verschiedenen möglichkeiten auswählen - anschliessend ist in meinem script noch ein trigger auf den val dieses datenpunktes- wird der also ausgewählt (einer der states) ändert sich der val und mein script kann sofort an die arbeit gehen
also die datenunkte kann auf "number" ändern - sieht dann so aus
{ "common": { "name": "Unifi Wifi Vouchers_ValueCodeList", "role": "state", "type": "number", "states": "1:5d7fa5ab97578401a0612f6e;2:5d7fa5ab97578401a0612f6b;", "read": true, "write": true }, "native": {}, "type": "state", "from": "system.adapter.javascript.2", "user": "system.user.admin", "ts": 1568645584287, "_id": "javascript.2.WLANUnifi.Wifi_Vouchers_ValueCodeList", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }
leider funktioniert dann die werteliste in iqontrol nicht mehr mit number (muss ich mal in dessen threat nachfragen) - funktioniert aber mit mit datentyp "string" - so wie es es vorher hatte
wie soll ich dieses problem lösen - mit getState oder setState kann ich das zwar umsetzen , und dies kann ich auch mit für die vis gebrauchen - aber eben nicht für iqontrol - was passiert, wenn ich es mit string nutze - kann es zu fehlern kommen?
ist den das mit dem ändern des statischen objects ein problem - es wird nicht oft verwendet
die erklärung für die werteliste in iqontrol sieht so aus https://github.com/sbormann/ioBroker.iqontrol :
hilft das irgendwie, um es anders zu lösen
-
@liv-in-sky sagte:
funktioniert aber mit mit datentyp "string"
Wenn iqontrol es so haben will, dann mache es so.
@liv-in-sky sagte in js: wie felxible "states" in einer werteliste:
ist das richtig obwohl es "bemängelt" wird
Der Javascript-Editor bemängelt alles, was er nicht kennt, wie z.B. common.states. Man sollte es ignorieren.
-
@paul53 danke