NEWS
Problem beim Parsen eines JSON-Objektes aus Tasmota (MQTT)
-
Ich habe folgende Frage:
An welche Stelle (welcher Adapter ist hier zuständig) gehört folgender Fehler adressiert/gemeldet?Kurze Beschreibung:
Ich verarbeite Sensordaten aus Tasmota per Objekte.Alias (nicht Alias-Manager) weiter, indem ich die Sensorwerte aus dem jeweiligen JSON-Objekt der MQTT-Message parse. (z.B. so: JSON.parse(val).ADS1115.A0) das funktioniert soweit super, solange nur ein Sensor gleichen Typs existiert. Ab dem 2. Sensor sendet Tasmota zur Identifizierung des entsprechenden Sensors im Property die I2C-Adresse des Sensors mit, also statt ADS1115 nun z.B. ADS1115-48 (0x48 ist die I2C-Adresse). Dummerweise kann man den Sensornamen in Tasmota nicht ohne Eingriffe im Quellcode ändern (soweit mir bekannt). Iobroker wiederum stößt sich (wahrscheinlich) am Bindestrich im Property.
Wenn ich die Lesefunktion unter Objekte/Alias nun auf das korrekte Property ADS1115-48.A0 ändere, schlägt das Lesen des Wertes fehl.das steht im Protokoll (Pfad gekürzt):
2024-05-16 17:31:24.315 - [31merror[39m: admin.0 (607) Invalid read function for "alias.0.xxxx.Zisterne_Messwert": "JSON.parse(val).ADS1115-48.A0" => Invalid or unexpected token
2024-05-16 17:31:24.315 - [31merror[39m: javascript.0 (637) Invalid read function for "alias.0.xxxx.Zisterne_Messwert": "JSON.parse(val).ADS1115-48.A0" => Invalid or unexpected tokenWohin muss ich den Fehler melden? JS-Adapter? Admin-Adapter? Welcher Bereich in Iobroker ist für das Parsen in den Alias-Objekten zuständig.
Vielleicht kann mir jemand einen Tipp geben, Vielen Dank schon mal.
-
@hualex sagte: einen Tipp
JSON.parse(val)['ADS1115-48'].A0
-
das werde ich sofort ausprobieren, Danke schon mal!
-
@paul53 said in Problem beim Parsen eines JSON-Objektes aus Tasmota (MQTT):
JSON.parse(val)['ADS1115-48'].A0
Habe meine Platine kurz umgebaut und: Das funktioniert! Vielen lieben Dank!!!
Jetzt wüsste ich nur gern, warum... Was macht ['xxx']?
-
@hualex sagte: Was macht ['xxx']?
Das ist eine alternative Schreibweise zur Punkt-Notation, die erforderlich ist, wenn unzulässige Zeichen enthalten sind. Man kann auch schreiben
JSON.parse(val)['ADS1115-48']['A0']
-
Das werde ich mir "sowas" von einprägen
Nochmal ganz herzlichen Dank, du hast mir meinen Abend gerettet und mehrere Probleme gelöst. -
-
@homoran
an das "Rechenzeichen" hatte ich noch gar nicht gedacht, macht das Verhalten von iob für mich aber plausibel(er) -
@hualex sagte: das Verhalten von iob
Das Verhalten von Javascript.
-
@hualex sagte in Problem beim Parsen eines JSON-Objektes aus Tasmota (MQTT):
"alias.0.xxxx.Zisterne_Messwert": "JSON.parse(val).ADS1115-48.A0"
du hattest hier ja weder eckige Klammern noch Hochkommata drin
-
@homoran
man (ich) muss die mögliche Fehlinterpretation nur eben erst einmal erkennen und wissen, wie man dem begegnet... ich habe heute gelernt, dass hinter einem fx... nicht nur ein schnöder Pfad zum gewünschten Wert erwartet werden kann.
Vielen Dank nochmal an euch für die schnelle und lehrreiche Hilfe!