NEWS
OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON
-
@ofbeqnpolkkl6mby5e13 sagte in OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON:
{"Time":"2022-10-11T14:44:54","ENERGY":{"TotalStartTime":"2022-09-24T09:13:58","Total":0.602,"Yesterday":0.044,"Today":0.056,"Period": 0,"Power": 2,"ApparentPower": 5,"ReactivePower": 5,"Factor":0.40,"Voltage":229,"Current":0.023}}
Na so muss es eigentlich schon funktionieren - wie Du es anfangs gehabt hast.
JSON.parse(val).ENERGY.Current
Die Frage ist halt, ob die Werte immer so kommen oder ob da zwischendrin (null) oder skalare Werte kommen.
-
@mickym sagte in OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON:
Die Frage ist halt, ob die Werte immer so kommen oder ob da zwischendrin (null) oder skalare Werte kommen.
Das nehme ich auch an. Ich probiere das von oben mal, wie bereits geschrieben. Mir reicht es, wenn die Fehlermeldung weg ist, ob da jetzt immer ein Wert übermittelt wird, ist egal.
-
Ich verstehe das nicht, hatte noch ein NodeMcu V3 rumliegen, alles aufgebaut. Jetzt sogar eine Antenne sprich Draht dran mit einem RX470 Modul und trotzdem empfängt er nur meine Elro Steckdosen und Fernbedienung. Habe sogar extra in der aktuellen Tasmota das Nexus Protocol in der rcswitch.cpp hinzugefügt und mit RfProtocol36 1 aktiviert = Wenn ich an der Wetterstation den Knopf zum senden drücke passiert nichts :(. Mal schauen ob diese Woche mein RXB8 kommt der sollte genug Leistung haben. Also Software Fehler im Bezug auf OpenMQTT kann ich wohl ausschliessen!
-
@mickym sagte in OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON:
Ja aber das Admin Interface finde ich inzwischen bestens geeignet.
Hi Micky
Ich wollte das gerade bei einem JSON versuchen, um daraus 1 Preis vom Diesel zu filtern.
Problem ist, dass der Name vom Wert öfter vorkommt.price
{ "Super Plus": { "title": "Super Plus", "date": "05.12.2022-11.12.2022", "price": "1,642 EUR" }, "Super": { "title": "Super", "date": "05.12.2022-11.12.2022", "price": "1,498 EUR" }, "Normal": { "title": "Normal", "date": "05.12.2022-11.12.2022", "price": "1,498 EUR" }, "Diesel": { "title": "Diesel", "date": "05.12.2022-11.12.2022", "price": "1,685 EUR" }, "Premium Diesel": { "title": "Premium Diesel", "date": "05.12.2022-11.12.2022", "price": "1,919 EUR" } }
Ich hab den
alias.0.IQ-Preis.Diesel
angelegt.
Dort0_userdata.0.IQ_Sprit.IQ_Sprit
hinterlegt.
Dann wollte ichalias.0.IQ-Preis.Diesel
bearbeiten. BeiKonverter beim Lesen
hab ichJSON.parse(val).price
verwendet.
Nach dem speichern hats mir den ioB gekillt.
Konnte nur mit Schnelligkeit auf einen anderen DP klicken und dann den Alias löschen.Was hab ich da falsch gemacht?
javascript.1 2022-12-08 21:41:40.333 error Error: Cannot read properties of undefined (reading 'toString') javascript.1 2022-12-08 21:41:40.333 error An error happened which is most likely from one of your scripts, but the originating script could not be detected. host.ioBroker 2022-12-08 21:41:17.690 error instance system.adapter.javascript.0 terminated with code 1 (JS_CONTROLLER_STOPPED) host.ioBroker 2022-12-08 21:41:17.690 error Caught by controller[0]: at processImmediate (node:internal/timers:468:21) host.ioBroker 2022-12-08 21:41:17.690 error Caught by controller[0]: at Immediate.<anonymous> (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:7439:39) host.ioBroker 2022-12-08 21:41:17.690 error Caught by controller[0]: at Object.formatAliasValue (/opt/iobroker/node_modules/@iobroker/js-controller-common/lib/common/tools.js:2555:35) host.ioBroker 2022-12-08 21:41:17.690 error Caught by controller[0]: TypeError: Cannot read properties of undefined (reading 'toString') javascript.0 2022-12-08 21:41:17.485 error TypeError: Cannot read properties of undefined (reading 'toString') at Object.formatAliasValue (/opt/iobroker/node_modules/@iobroker/js-controller-common/lib/common/tools.js:2555:35) at Immediate.<anonymous> (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:7439:39) at processImmediate (node:internal/timers:468:21) javascript.0 2022-12-08 21:41:17.485 error Error: Cannot read properties of undefined (reading 'toString')
-
@negalein Ist ja auch nicht price - sondern Du musst schon den ganzen Pfad eingeben und der Wert muss eindeutig sein.
Wenn Du den Dieselpreis haben willst, dann musst Du das auch halt angeben
JSON.parse(val).Diesel.price
-
@negalein sagte: alias.0.IQ-Preis.Diesel bearbeiten. Bei Konverter beim Lesen hab ich JSON.parse(val).price verwendet.
JSON.parse(val).Diesel.price
Der Alias muss vom Typ "string" sein.
-
@paul53 schneller
-
@mickym sagte in OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON:
Wenn Du den Dieselpreis haben willst, dann musst Du das auch halt angeben
@paul53 sagte in OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON:
Der Alias muss vom Typ "string" sein.
Danke euch Zwei. Dann probier ich es gleich nochmal.
-
@mickym sagte in OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON:
@paul53 schneller
Hi Micky
Das JSON hat sich wegen neuem Script geändert und sieht nun auszugsweise (der relevante Teil für mich) so aus.
{ "ÖSTERREICH": { "services": { "Super Plus": [ { "date": "05.12.2022-11.12.2022:", "price": "1,642 EUR" } ], "Super": [ { "date": "05.12.2022-11.12.2022:", "price": "1,498 EUR" } ], "Normal": [ { "date": "05.12.2022-11.12.2022:", "price": "1,498 EUR" } ], "Diesel": [ { "date": "05.12.2022-11.12.2022:", "price": "1,685 EUR" } ],
JSON.parse(val).Diesel.price
muss es nun so lauten?
JSON.parse(val).ÖSTERREICH.services.Diesel.price
-
@negalein ja
-
@mickym ist ein Ö sinnvoll?
-
@negalein sagte: muss es nun so lauten?
Nein, es ist noch ein Array mit einem Element hinzu gekommen.
JSON.parse(val)['ÖSTERREICH'].services.Diesel[0].price
-
@homoran na besser ist ohne, aber da hat man ja oft keinen Einfluss darauf. Wenn das Teil streikt dann die Klammernotation mit Gänsefüßchen nutzen.
Und mit dem Array stimmt auch - diesmal ist paul schneller. Richtig müsste es heißen:
JSON.parse(val)["ÖSTERREICH"].services.Diesel[0].price
aber ich sehe ja, dass genügend geballte Kompetenz vorhanden ist.
-
@mickym sagte: Richtig müsste es heißen:
Mit Anführungszeichen funktioniert es nicht.
-
@paul53 Doch funktioniert
habs ja getestet-
-
@mickym sagte: habs ja getestet-
Wie sieht es in RAW-Ansicht (JSON) aus?
-
Da werden sie auskommentiert - funktioniert aber:
{ "common": { "name": "jsonState", "desc": "Manuell erzeugt", "role": "state", "type": "string", "read": true, "write": true, "def": "", "alias": { "id": { "read": "0_userdata.0.Test.jsonState", "write": "0_userdata.0.Test.jsonState.set" }, "read": "JSON.parse(val)[\"ÖSTERREICH\"].services.Diesel[0].price" } }, "type": "state", "native": {}, "_id": "alias.0.test.jsonState", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" }, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1670692903249 }
-
@mickym
Ja, mit Backslash davor funktioniert es. -
@mickym sagte in OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON:
Richtig müsste es heißen:
bekomme das im Log (Alias-DP wurden aber aktualisiert)
web.0 2022-12-10 18:28:58.193 error Invalid read function for undefined: JSON.parse(val).Diesel.date => Cannot read properties of undefined (reading 'date') web.0 2022-12-10 18:28:58.192 error Invalid read function for undefined: JSON.parse(val).Diesel.price => Cannot read properties of undefined (reading 'price') javascript.0 2022-12-10 18:28:50.637 error Invalid read function for undefined: JSON.parse(val)["ÖSTERREICH"].services.Diesel[0].date => Cannot read properties of undefined (reading 'services') javascript.1 2022-12-10 18:28:50.634 error Invalid read function for undefined: JSON.parse(val)["ÖSTERREICH"].services.Diesel[0].date => Cannot read properties of undefined (reading 'services') javascript.0 2022-12-10 18:28:07.912 error Invalid read function for undefined: JSON.parse(val)["ÖSTERREICH"].services.Diesel[0].price => Cannot read properties of undefined (reading 'services') javascript.1 2022-12-10 18:28:07.912 error Invalid read function for undefined: JSON.parse(val)["ÖSTERREICH"].services.Diesel[0].price => Cannot read properties of undefined (reading 'services')
So ist das komplette JSON
{ "ÖSTERREICH": { "services": { "Super Plus": [ { "date": "05.12.2022-11.12.2022:", "price": "1,642 EUR" } ], "Super": [ { "date": "05.12.2022-11.12.2022:", "price": "1,498 EUR" } ], "Normal": [ { "date": "05.12.2022-11.12.2022:", "price": "1,498 EUR" } ], "Diesel": [ { "date": "05.12.2022-11.12.2022:", "price": "1,685 EUR" } ], "Premium Diesel": [ { "date": "05.12.2022-11.12.2022:", "price": "1,919 EUR" } ], "IQ Motoröle und Chemie": "10 % Rabatt", "Autowäsche": "10 % Rabatt" }, "info": "", "countryname": "ÖSTERREICH" }, "BOSNIEN UND HERZEGOWINA": { "services": {}, "info": "Sie tanken zum aktuellen Pumpenabgabepreis", "countryname": "BOSNIEN UND HERZEGOWINA" }, "BELGIEN": { "services": {}, "info": "Sie tanken zum aktuellen Pumpenabgabepreis", "countryname": "BELGIEN" }, "BULGARIEN": { "services": {}, "info": "Sie tanken zum aktuellen Pumpenabgabepreis", "countryname": "BULGARIEN" }, "DEUTSCHLAND": { "services": {}, "info": "Sie tanken zum aktuellen Pumpenabgabepreis", "countryname": "DEUTSCHLAND" }, "DÄNEMARK": { "services": {}, "info": "Sie tanken zum aktuellen Pumpenabgabepreis", "countryname": "DÄNEMARK" }, "SPANIEN": { "services": {}, "info": "Sie tanken zum aktuellen Pumpenabgabepreis", "countryname": "SPANIEN" }, "FRANKREICH": { "services": {}, "info": "Sie tanken zum aktuellen Pumpenabgabepreis", "countryname": "FRANKREICH" }, "GROßBRITANNIEN": { "services": {}, "info": "Sie tanken zum aktuellen Pumpenabgabepreis", "countryname": "GROßBRITANNIEN" }, "UNGARN": { "services": {}, "info": "Sie tanken zum aktuellen Pumpenabgabepreis", "countryname": "UNGARN" }, "ITALIEN": { "services": {}, "info": "Sie tanken zum aktuellen Pumpenabgabepreis", "countryname": "ITALIEN" }, "LITAUEN": { "services": {}, "info": "Sie tanken zum aktuellen Pumpenabgabepreis", "countryname": "LITAUEN" }, "LUXEMBURG": { "services": {}, "info": "Sie tanken zum aktuellen Pumpenabgabepreis", "countryname": "LUXEMBURG" }, "NIEDERLANDE": { "services": {}, "info": "Sie tanken zum aktuellen Pumpenabgabepreis", "countryname": "NIEDERLANDE" }, "NORWEGEN": { "services": {}, "info": "Sie tanken zum aktuellen Pumpenabgabepreis", "countryname": "NORWEGEN" }, "POLEN": { "services": {}, "info": "Sie tanken zum aktuellen Pumpenabgabepreis", "countryname": "POLEN" }, "RUMÄNIEN": { "services": {}, "info": "Sie tanken zum aktuellen Pumpenabgabepreis", "countryname": "RUMÄNIEN" }, "SLOWENIEN": { "services": {}, "info": "Sie tanken zum aktuellen Pumpenabgabepreis", "countryname": "SLOWENIEN" } }
-
@negalein Ich bekomme Deinen Fehler wie gesagt nicht. Auch nicht im Log. Hab deinen kompletten JSON bei mir reinkopiert. Insofern schwierig für mich nachzuvollziehen. Du kannst ja auch mit einfachen Hochkomma nutzen, Du musst es halt in der Maske eintragen und nicht in dem Common Objekt, sonst musst halt mit \ die Gänsefüsschen maskieren.
Bei mir tut das in der Maske eingegeben ohne Probleme:
Dein zuerst gepostetes JSON war ja unvollständig, aber mit dem vollständigen funktioniert es auch.