NEWS
JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen
-
Hallo @mickym,
erst mal Danke für den Flow, habe aber noch ein paar Probleme die bestimmt vor dem Bildschirm sitzen zu aller erst mal das sind meine ersten steh und geh versuche mit NodeRed, also bitte nicht schlagen
habe vor nach und nach alles auf Mqtt zu ändern, da sich so einiges angesammelt hat (sonoff, schelly, owtrack,....) evtl.dann im Winter noch Zigbee.
Habe am Wochenende mal einen Test IOBoker aufgesetzt, um mal zu schauen was auf mich zu kommt...
Habe jetzt den Flow mal soweit eingerichtet, läuft auch fast gut. Als Topic habe ich erstmal nur # genommen, macht das sinn? möchte ja im Prinzip erst alles haben, oder mache ich besser für jedes Gerät der jede Gruppe einen eigenen Flow. Bekomme einige Fehler im Log da er alle States als readonly anlegt, das muss ich bestimmt irgendwo ändern, nur wo ?
dann habe ich bei den shellys ein komisches verhalten, da legt er 2 Ordner für jeden shelly an habe mal ein par Bilder angefügt wie es unter Userdata.0 aussieht und im MQTT Adapter. Bestimmt ist da auch nu was falsch eingestellt
Hier erst mal die Bilder
Userdata.0
MQTT Adapter
könntest du bitte etwas licht ins dunkle bringen
Vielen Dank
Gruß Frank -
Hallo erstmal - ist immer bissi schwierig das herauszufinden, das herauszufinden.
Habe jetzt den Flow mal soweit eingerichtet, läuft auch fast gut. Als Topic habe ich erstmal nur # genommen, macht das sinn?
Vielleicht solltest Du auch nicht gleich mit # anfangen, um nicht gleich alles zu laden. Aber das nur am Rande.
Ich gehe mal davon aus, dass Du einen mit # das Subscribe Pattern des mqtt Adapters mit einem externen Broker meinst? Oder nutzt Du die mqtt-Nodes ...
Bekomme einige Fehler im Log da er alle States als readonly anlegt, das muss ich bestimmt irgendwo ändern, nur wo ?
Nun das machst Du nur in der iobroker-Out Node - hat mit dem Flow selbst nichts zu tun.
Einfach da fix eintragen. - Ich hätte das zwar auch in dem Flow machen können, aber so ist man ggf. flexibler:dann habe ich bei den shellys ein komisches verhalten, da legt er 2 Ordner für jeden shelly an habe mal ein par Bilder angefügt wie es unter Userdata.0 aussieht und im MQTT Adapter.
Ich hab den Flow überarbeitet, damit sollte der Fehler nicht mehr auftreten. Bitte die Node aus dem nachfolgenden Post importieren und den Subflow wie beschrieben ersetzen.
@frank579 - also vielen Dank - für das Beschreiben des Bugs - das mit dem 2. Ordner sollte nicht mehr auftreten. So wird der Flow immer besser. - Ich empfehle Dir nochmal den ganzen Objektbaum unter 0_userdata.0 zu löschen, der von dem Flow angelegt wurde und neu zu erstellen - auch wegen den Schreibrechten - ich werde solche Einstellungen aber nicht in dem Flow festlegen, so dass man selbst entscheiden kann über die iobroker-Out Node.
-
@mickym So ich habe es nun selbst getestet und die Änderung durchgeführt.
Hier ist nun eine neue Version des Subflows:
Für alle die, die Node bereits benutzen - wie folgt vorgehen.
- Den Code normal in die Zwischenablage kopieren und dann importieren.
- Da das System erkennst, dass es diesen Subflow/Nodes bereits gibt - bitte auf "Zeige Nodes ... " gehen.
- Anschließend braucht man nur den Subflow ersetzen.
- Nach dem man auf "Importiere Auswahl" geklickt hat, wird einem angezeigt, wieviele Nodes ersetzt wurden. Dann noch auf Deploy.
-
@mickym sagte in JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen:
@mickym So ich habe es nun selbst getestet und die Änderung durchgeführt.
Hier ist nun eine neue Version des Subflows:Wow vielen Dank, sorry war gestern nochmal unterwegs, habs gerade mal schnell getestet sieht auf den ersten Blick sehr gut aus, Danke
-
@mickym sagte in JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen:
Ich gehe mal davon aus, dass Du einen mit # das Subscribe Pattern des mqtt Adapters mit einem externen Broker meinst? Oder nutzt Du die mqtt-Nodes ...
Ja genau habe einen Mosquitto server laufen, da laufen aktuell aber erst mal zum testen nur die drei Geräte.
Aber hier komme ich jetzt erst mal weiter die Json zu zerlegen und ich alle Infos schon mal in eigenen Datenpunkten habe.
Muss jetzt mal schauen wie ich das alles umsetze, auch nachher mit der Ansteuerung der Datenpunkte. -
Hallo @mickym,
bin endlich mal dazu gekommen hier weiter zu machen, mit Tasmota funktioniert es seit damals einwandfrei.
Jetzt habe ich gerade mal versucht das gleiche mit meinem Shelly 3EM zu testen, da wirft er mir aber das log voll für jeden datenpunkt des 3EM.node-red.0 2022-11-01 11:35:37.209 error The id "0_userdata.0.MQTT.shellies.3EM_Hauptverteiler.emeter.0.total_returned." is invalid. Ids are not allowed to end in "." node-red.0 2022-11-01 11:35:37.209 error Error: The id "0_userdata.0.MQTT.shellies.3EM_Hauptverteiler.emeter.0.total_returned." is invalid. Ids are not allowed to end in "." at Utils.validateId (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/build/lib/adapter/utils.js:148:23) at Adapter.setForeignState (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/build/lib/adapter/adapter.js:6030:23) at /opt/iobroker/node_modules/@iobroker/js-controller-common/lib/common/tools.js:2116:16 at new Promise (<anonymous>) at Adapter.setForeignStateAsync (/opt/iobroker/node_modules/@iobroker/js-controller-common/lib/common/tools.js:2115:16) at Immediate.<anonymous> (/opt/iobroker/node_modules/iobroker.node-red/nodes/ioBroker.js:252:59) node-red.0 2022-11-01 11:35:37.209 error unhandled promise rejection: The id "0_userdata.0.MQTT.shellies.3EM_Hauptverteiler.emeter.0.total_returned." is invalid. Ids are not allowed to end in "." node-red.0 2022-11-01 11:35:37.209 error Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
aus der debug node:
1.11.2022, 13:01:42node: debug 1 0_userdata.0.MQTT.shellies.3EM_Hauptverteiler.emeter.2.power. : msg.payload : string[5] "47.54"
der "." ist also wirklich Zuviel wie bekomme ich den weg?
Gruß Frank
-
@frank579 Kannst Du mal den JSON des kompletten Datenpunktes posten und hier in CodeTags einbetten?
-
@mickym
sorry lag an mir hatte das ganze Topic drin wenn ich nur den /Info nehme klappte es bei den anderen ist es ja auch kein JSONTrotzdem danke
-
@frank579 sagte in JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen:
@mickym
sorry lag an mir hatte das ganze Topic drin wenn ich nur den /Info nehme klappte es bei den anderen ist es ja auch kein JSONTrotzdem danke
Hmm aber eigentlich darf es gar keine topics geben, die mit . enden. Was meinst Du mit ganzem topic?
-
@mickym
Ich hatte in er node shellies/3EM/# eingetragen teilweise legt der mqtt Adapter die aber selbst schon als datenpunkt an, dacht es läge daran.
so siehts im MQTT aus
-
@frank579 Ich hab den Fehler schon gefunden - ich werkle gerade an einer neuen Version.
-
So einen neue Version des Subflows - hat sich sogar vereinfacht.
Einfach mal testen:
Dann wie unten vorgehen: https://forum.iobroker.net/post/856928
Dort ist ja auch noch die bisherige Version vorhanden.
EDIT: Sorry waren die Debug Nodes noch drin.
-
@mickym
Habe es mal schnell getestet irgend was passt jetzt nicht mehr, kann natürlich auch bei mir sein die Werte der Tasmota Steckdose werden nicht mehr aktualisiert...
aus der debug Node kommt0_userdata.0.objRoot.ENERGY.Total : msg.payload : number 2.689
ist das objRoot richtig da stand vorher der Name vom gerät ...
-
@frank579 Na dann hast Du leider Deine ganze Node ersetzt - Du solltest eigentlich nur wie unter beschrieben den Subflow nehmen.
-
@mickym hatte ich auch so gemacht, dacht ich ... schaue ich direkt mal nach
-
@frank579 sagte in JSON oder JavaScript Objekt in iobroker Datenpunkte zerlegen:
@mickym hatte ich auch so gemacht, dacht ich ... schaue ich direkt mal nach
Standardmässig steht in der Node
Daher das objRoot.
Da musst Du wieder den eigenen Namen eintragen unter dem das unter 0_userdata.0 auftauchen soll und wenn Du einen ganzen Baum schreiben willst, muss das keepTopic auf true.
-
@mickym genau so war es.
wenn ich jetzt wieder den ganzen baum vom 3EM haben möchte bekomme ich immer den im log :1 Nov 15:55:58 - [error] [json:6908c423c0496cdd] Unexpected token o in JSON at position 0
hast du eine idee was das sein könnte komme aber auch so klar benötige ja eigentlich nicht den ganzen Baum ist ja in den Mqtt-Adapter Datenpunkten schon drin, aber evtl. käme ich dann ohne den für die shellies klar nur mit node red, evtl. nehme ich mir auch was viel vor
-
@frank579 Ja hab noch einen Fehler gefunden - das Problem ist, dass er Zahlen als JSON Objekte erkennt, Strings aber nicht, da kommt dann dieser Fehler. Nächste Version folgt.
-
@frank579 So nächste Version. - Ist wieder etwas komplexer, aber ich hoffe jetzt passt es:
Außerdem werden jetzt (!!!) wenn gar kein topic gesetzt ist, das topic gelöscht werden soll und von Anfang an skalare Werte übergeben werden, einfach als topic der Datentyp gesetzt. Damit sollte das mit dem . am Ende nicht mehr vorkommen. Das lag an skalaren Typen ohne topic.
Ich hoffe passt jetzt.
@Frank579 - eine kurze Rückmeldung wäre Klasse, dann ändere ich den Flow im 1. Post wieder.
-
@mickym
Auf den ersten Blick sieht alles gut aus, log bleibt sauber
Top Arbeit von dir