NEWS
States aus einer Liste in Datenpunkte zurück schreiben
-
Hallo zusammen,
ich hab mir über den Ping Adapter ein schönes Abwesenheits-Blockly gebastelt welches einen Datenpunkt setzt falls alle Handys nicht mehr im Haus sind und XX Minunten ohne Anwesenheit Aktionen startet. Soweit so gut ...Ich würde nun gerne mehrere Geräte und Lichter ausschalten bei der detektierten Abwesenheit aller Kinder die immer das Licht brennen lassen 8)- hierzu würde ich aber gerne die "States" sichern und bei "Wiedereintritt" eines Geräts den Originalzustand zurück schreiben so das alle Lichter / Geräte wieder angehen wie vor dem Energie-Sparen.
Das Schreiben der States in eine Liste klappt bereits - nur wie bekomme ich nun die Daten wieder zurück geschrieben ?
Das Script unten wirft im Protokoll schon :
alexa2.0.Smart-Home-Devices.XXXXXXXXXX.powerState,false,yeelight-2.0.color-0xXXXXXXXXXXXX.control.power,false
Also Object-ID und State werden schon in der Liste hinterlegt - nur was kommt in "für jeden Wert i in der Liste" ?
Später will ich die Erstellung der Liste der Geräte evtl. noch über Function und IDs vom Selektor automatisieren.
Für jeden Tipp bin ich sehr dankbar ... evtl. hat das ja schon jemand gebastelt ...
Viele Grüße -
@fog Deine Liste ist ein Array und somit ein Objekt. Generell sollte man Objekte als JSON Strings abspeichern und acuh bei Lesen wieder zurückverwandeln.
Dieses Teil sollte einen String aus Deinem Array machen, den Du dann in den Datenpunkt schreiben kannst.
An Deiner Stelle hätte ich aber statt eines flachen Arrays - Objekte geschrieben und diese in ein Array geschrieben.
Also:
[ { "alexa2.0.Smart-Home-Devices.XXXXXXXXXX.powerState":false}, { "yeelight-2.0.color-0xXXXXXXXXXXXX.control.power": false} ]
aber da muss der Blockly Guru sagen, wie das geht. Ich bin da überfragt.
-
@mickym Hey - schon mal vielen vielen Dank ... JSON hab ich mich noch nicht so tief beschäftigt - aber als IOBroker Verfallener schau ich da natürlich gerne mal drauf.
Dank dir !
-
ich mache das aktuell so.... es funktioniert zwar aber ist nicht wunderunschön...
gibt es da keine schönere Lösung? Ein Blockly um Listen direkt in Objekten zu bearbeiten und zurück zu speichern? -
@mickym sagte: Generell sollte man Objekte als JSON Strings abspeichern und acuh bei Lesen wieder zurückverwandeln.
Das macht der Javascript-Adapter selbst, wenn der Datenpunkt vom Typ "array" ist.
@mickym sagte in States aus einer Liste in Datenpunkte zurück schreiben:
statt eines flachen Arrays - Objekte geschrieben und diese in ein Array geschrieben.
Genau das ist in Blockly nicht so einfach. Man benötigt eine Javascript-Funktion.
-
@fog sagte: wie bekomme ich nun die Daten wieder zurück geschrieben ?
Du verwendest ein zweidimensionales Array.
-
@paul53 Super - vielen Dank !!!!