NEWS
OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON
-
@mickym sagte in OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON:
Ich hab Dir die Screenshots im letzten Post gepostet.
Ich habs jetzt genau so gemacht
Aber trotzdem kommt
web.0 2022-12-10 19:13:28.743 error Invalid read function for undefined: JSON.parse(val).Diesel.price => Cannot read properties of undefined (reading 'price')
-
@negalein Bei Lesen sehe ich 2mal IQ_Sprit???
-
@mickym sagte in OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON:
Bei Lesen sehe ich 2mal IQ_Sprit???
Ja, das passt
Was mich wundert, dass im Log immer
JSON.parse(val).Diesel.price
anstattJSON.parse(val)['ÖSTERREICH'].services.Diesel[0].price
steht. -
@negalein sagte: im Log immer JSON.parse(val).Diesel.price
Ein vergessener Alias? Wenn nicht, starte mal ioBroker neu.
-
-
@mickym sagte in OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON:
Schau mal dass das common Objekt so aussieht, wie ich gepostet habe. Es muss diese unterschiedliche IDs für Lesen und Schreiben angehakt sein.
Ja, das passt
oder mal neu starten.
schon dabei
-
@paul53 sagte in OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON:
Wenn nicht, starte mal ioBroker neu.
@mickym sagte in OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON:
oder mal neu starten.
Läuft
Ein Reboot tut gut
-
@negalein Wie gesagt Du musst suchen, ob Du noch woanders ein fehlerhaften Alias definiert hast.
Diese Meldung ist noch was altes:
JSON.parse(val).Diesel.price
Da hattest Du noch kein Array angegeben.
Wie gesagt der Bug in der Alias Funktion ist, dass sie den originären Datenpunkt überschreibt auch wenn read-only angegeben ist.
-
@mickym sagte in OpenMQTT Gateway Wetterstation Iobroker Datenpunkt JSON:
Diese Meldung ist noch was altes:
Ja, das war vom alten Script. Da sah das JSON anders aus.
Den dürfte er trotz Änderung (sind ja nur 1 oorig. JSON und 2 Alias-DP verschluckt haben.Jetzt nach reboot kommt auch keine Fehlermeldung.
-
Na ist trotzdem ein Bug drin in der Alias funktion. Wenn ich den Alias auf Read-Only setze dann darf der nix in den originalen Datenpunkt schreiben.
Ansonsten muss man das ganze Objekt in die Schreibfunktion eingeben. Das funktioniert zwar - ist aber unübersichtlich:
{ "common": { "name": "jsonState", "desc": "Manuell erzeugt", "role": "state", "type": "string", "read": true, "write": true, "def": "", "alias": { "id": "0_userdata.0.Test.jsonState", "read": "JSON.parse(val)['ÖSTERREICH'].services.Diesel[0].price", "write": "JSON.stringify({ \"Ö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\": val } ], \"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\" } })" } }, "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": 1670697253009 }
Du siehst man muss das gesamte Objekt mitgeben. Ist ziemlich unübersichtlich.
Ich würde mal ein Issue erstellen - es DARF nicht SEIN, dass ein Alias den ich auf ReadOnly setze, dann was in den Datenpunkt geschrieben wird und damit den JSON zerstört - was natürlich passiert, wenn ich nicht den ganzen JSON neu schreibe.