[httpmod] Body vor dem Dekodieren modifizieren / bzw Invalid JSON ExtractALL

Begonnen von GunterB, 07 Juni 2026, 15:32:52

Vorheriges Thema - Nächstes Thema

GunterB

Hallo zusammen,

ich möchte einen Batteriespeicher über HTTP abfragen.
Dieser antwortet allerdings mit einem ungültigen JSON, indem ein doppelter Key "SN" vorhanden ist:

error while parsing JSON data: Duplicate keys not allowed, at character offset ... at lib/FHEM/HTTPMOD/Utils.pm line 701.

Bevor ich jetzt für alle 60 Keys eigene Readings anlege, wäre die Frage, ob es eine Möglichkeit gibt, den Body vor dem JSON extract zu modifizieren.

Ich würde per Regex das erste Vorkommen von "SN" mit "SN1" austauschen und danach ExtractAll drüber laufen lassen.

Kann man sowas bewerkstelligen?

Code (JSON) Auswählen
{"state":{"reported":{"WR":-80,"WS":"WLAN","GS":0,"IS":2400,"SI":20,"SA":90,"SI1":5,"SA1":5,"SO":10,"PT":15,"RT":0,"LM":1,"MM":0,"MP":0,"PM":0,"FP":2400,"GO":0,"UO":0,"UG":0,"UP":2400,"US":5,"ST":2,"IW":714,"OP":488,"LD":45,"GD1":1,"GD2":2849,"ES":"1.1.10","EH":"1.0.2","SN":"1234567890","MS":0,"IP":"10.1.30.212","COM":80,"LP":0,"GP":488,"AS":"1.1.10","AH":"1.0.4","PV":714,"VP1":266,"II1":131,"PV1":349,"VP2":264,"II2":138,"PV2":365,"VP3":0,"II3":0,"PV3":0,"VP4":0,"II4":0,"PV4":0,"BP":692,"DS":"1.1.10","DH":"1.0.4","SC":89,"ON":1,"SC0":89,"BS0":"1.1.10","DevType":"SunEnergyXT 500 PRO","SN":"1234567890","timestamp":1780831583150}}}

betateilchen

#1
Kann man, dafür gibt es das Attribut preProcessRegex das dabei hilft.

Aber warum nimmst Du nicht JsonMod, wenn die Daten eh schon in json vorliegen?

Dein json habe ich mal in eine Testdatei gepackt und dann probiert.
JsonMod hat kein Problem mit dem doppelten SN, zumal da ja beide Male der gleiche Wert drinsteht.

defmod tj JsonMod file:///tmp/test.json
attr tj readingList complete()

liefert:

setstate tj 2026-06-07 16:01:47 state.reported.AH 1.0.4
setstate tj 2026-06-07 16:01:47 state.reported.AS 1.1.10
setstate tj 2026-06-07 16:01:47 state.reported.BP 692
setstate tj 2026-06-07 16:01:47 state.reported.BS0 1.1.10
setstate tj 2026-06-07 16:01:47 state.reported.COM 80
setstate tj 2026-06-07 16:01:47 state.reported.DH 1.0.4
setstate tj 2026-06-07 16:01:47 state.reported.DS 1.1.10
setstate tj 2026-06-07 16:01:47 state.reported.DevType SunEnergyXT 500 PRO
setstate tj 2026-06-07 16:01:47 state.reported.EH 1.0.2
setstate tj 2026-06-07 16:01:47 state.reported.ES 1.1.10
setstate tj 2026-06-07 16:01:47 state.reported.FP 2400
setstate tj 2026-06-07 16:01:47 state.reported.GD1 1
setstate tj 2026-06-07 16:01:47 state.reported.GD2 2849
setstate tj 2026-06-07 16:01:47 state.reported.GO 0
setstate tj 2026-06-07 16:01:47 state.reported.GP 488
setstate tj 2026-06-07 16:01:47 state.reported.GS 0
setstate tj 2026-06-07 16:01:47 state.reported.II1 131
setstate tj 2026-06-07 16:01:47 state.reported.II2 138
setstate tj 2026-06-07 16:01:47 state.reported.II3 0
setstate tj 2026-06-07 16:01:47 state.reported.II4 0
setstate tj 2026-06-07 16:01:47 state.reported.IP 10.1.30.212
setstate tj 2026-06-07 16:01:47 state.reported.IS 2400
setstate tj 2026-06-07 16:01:47 state.reported.IW 714
setstate tj 2026-06-07 16:01:47 state.reported.LD 45
setstate tj 2026-06-07 16:01:47 state.reported.LM 1
setstate tj 2026-06-07 16:01:47 state.reported.LP 0
setstate tj 2026-06-07 16:01:47 state.reported.MM 0
setstate tj 2026-06-07 16:01:47 state.reported.MP 0
setstate tj 2026-06-07 16:01:47 state.reported.MS 0
setstate tj 2026-06-07 16:01:47 state.reported.ON 1
setstate tj 2026-06-07 16:01:47 state.reported.OP 488
setstate tj 2026-06-07 16:01:47 state.reported.PM 0
setstate tj 2026-06-07 16:01:47 state.reported.PT 15
setstate tj 2026-06-07 16:01:47 state.reported.PV 714
setstate tj 2026-06-07 16:01:47 state.reported.PV1 349
setstate tj 2026-06-07 16:01:47 state.reported.PV2 365
setstate tj 2026-06-07 16:01:47 state.reported.PV3 0
setstate tj 2026-06-07 16:01:47 state.reported.PV4 0
setstate tj 2026-06-07 16:01:47 state.reported.RT 0
setstate tj 2026-06-07 16:01:47 state.reported.SA 90
setstate tj 2026-06-07 16:01:47 state.reported.SA1 5
setstate tj 2026-06-07 16:01:47 state.reported.SC 89
setstate tj 2026-06-07 16:01:47 state.reported.SC0 89
setstate tj 2026-06-07 16:01:47 state.reported.SI 20
setstate tj 2026-06-07 16:01:47 state.reported.SI1 5
setstate tj 2026-06-07 16:01:47 state.reported.SN 1234567890
setstate tj 2026-06-07 16:01:47 state.reported.SO 10
setstate tj 2026-06-07 16:01:47 state.reported.ST 2
setstate tj 2026-06-07 16:01:47 state.reported.UG 0
setstate tj 2026-06-07 16:01:47 state.reported.UO 0
setstate tj 2026-06-07 16:01:47 state.reported.UP 2400
setstate tj 2026-06-07 16:01:47 state.reported.US 5
setstate tj 2026-06-07 16:01:47 state.reported.VP1 266
setstate tj 2026-06-07 16:01:47 state.reported.VP2 264
setstate tj 2026-06-07 16:01:47 state.reported.VP3 0
setstate tj 2026-06-07 16:01:47 state.reported.VP4 0
setstate tj 2026-06-07 16:01:47 state.reported.WR -80
setstate tj 2026-06-07 16:01:47 state.reported.WS WLAN
setstate tj 2026-06-07 16:01:47 state.reported.timestamp 1780831583150

Das Ausgabeformat lässt sich natürlich nach eigenen Wünschen gestalten, complete() dient immer dem ersten Überblick.



Das ist hier übrigens das falsche Unterforum, sowohl für Fragen zu httpmod als auch für jsonmod.
Den Button zum Verschieben in den richtigen Bereich findest Du unten links.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: GunterB am 07 Juni 2026, 15:32:52Dieser antwortet allerdings mit einem ungültigen JSON, indem ein doppelter Key "SN" vorhanden ist:

Ein doppelter key in einem json macht das json noch lange nicht ungültig.

RFC8259 sagt dazu: "The names within an object SHOULD be unique."

Es ist also eher ein Problem des parsers, der damit nicht zurechtkommt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

GunterB

Besten Dank!!!

defmod Batt1 JsonMod http://10.1.30.212:80/read
attr Batt1 readingList complete()

setstate Batt1 2026-06-07 17:01:16 .computedReadings state.reported.FP,state.reported.RT,state.reported.SC0,state.reported.II2,state.reported.IW,state.reported.MP,state.reported.PV2,state.reported.MM,state.reported.US,state.reported.IS,state.reported.SA1,state.reported.BP,state.reported.PV,state.reported.LM,state.reported.LP,state.reported.LD,state.reported.VP2,state.reported.BS0,state.reported.SN,state.reported.GS,state.reported.ST,state.reported.ON,state.reported.SI,state.reported.WR,state.reported.UG,state.reported.PT,state.reported.GD1,state.reported.SO,state.reported.PV3,state.reported.II4,state.reported.SA,state.reported.OP,state.reported.UP,state.reported.PV4,state.reported.II3,state.reported.timestamp,state.reported.IP,state.reported.GD2,state.reported.MS,state.reported.SC,state.reported.DS,state.reported.COM,state.reported.VP1,state.reported.ES,state.reported.AH,state.reported.PM,state.reported.UO,state.reported.AS,state.reported.VP3,state.reported.WS,state.reported.EH,state.reported.GP,state.reported.VP4,state.reported.SI1,state.reported.DH,state.reported.II1,state.reported.DevType,state.reported.PV1,state.reported.GO
setstate Batt1 2026-06-07 17:01:16 state.reported.AH 1.0.4
setstate Batt1 2026-06-07 17:01:16 state.reported.AS 1.1.10
setstate Batt1 2026-06-07 17:01:16 state.reported.BP 10
setstate Batt1 2026-06-07 17:01:16 state.reported.BS0 1.1.10
setstate Batt1 2026-06-07 17:01:16 state.reported.COM 80
setstate Batt1 2026-06-07 17:01:16 state.reported.DH 1.0.4
setstate Batt1 2026-06-07 17:01:16 state.reported.DS 1.1.10
setstate Batt1 2026-06-07 17:01:16 state.reported.DevType SunEnergyXT 500 PRO
setstate Batt1 2026-06-07 17:01:16 state.reported.EH 1.0.2
setstate Batt1 2026-06-07 17:01:16 state.reported.ES 1.1.10
setstate Batt1 2026-06-07 17:01:16 state.reported.FP 2400
setstate Batt1 2026-06-07 17:01:16 state.reported.GD1 1
setstate Batt1 2026-06-07 17:01:16 state.reported.GD2 4367
setstate Batt1 2026-06-07 17:01:16 state.reported.GO 0
setstate Batt1 2026-06-07 17:01:16 state.reported.GP 312
setstate Batt1 2026-06-07 17:01:16 state.reported.GS 0
setstate Batt1 2026-06-07 17:01:16 state.reported.II1 0
setstate Batt1 2026-06-07 17:01:16 state.reported.II2 6
setstate Batt1 2026-06-07 17:01:16 state.reported.II3 0
setstate Batt1 2026-06-07 17:01:16 state.reported.II4 0
setstate Batt1 2026-06-07 17:01:16 state.reported.IP 10.1.30.212
setstate Batt1 2026-06-07 17:01:16 state.reported.IS 2400
setstate Batt1 2026-06-07 17:01:16 state.reported.IW 20
setstate Batt1 2026-06-07 17:01:16 state.reported.LD 45
setstate Batt1 2026-06-07 17:01:16 state.reported.LM 1
setstate Batt1 2026-06-07 17:01:16 state.reported.LP 0
setstate Batt1 2026-06-07 17:01:16 state.reported.MM 0
setstate Batt1 2026-06-07 17:01:16 state.reported.MP 0
setstate Batt1 2026-06-07 17:01:16 state.reported.MS 0
setstate Batt1 2026-06-07 17:01:16 state.reported.ON 1
setstate Batt1 2026-06-07 17:01:16 state.reported.OP 312
setstate Batt1 2026-06-07 17:01:16 state.reported.PM 0
setstate Batt1 2026-06-07 17:01:16 state.reported.PT 15
setstate Batt1 2026-06-07 17:01:16 state.reported.PV 20
setstate Batt1 2026-06-07 17:01:16 state.reported.PV1 0
setstate Batt1 2026-06-07 17:01:16 state.reported.PV2 20
setstate Batt1 2026-06-07 17:01:16 state.reported.PV3 0
setstate Batt1 2026-06-07 17:01:16 state.reported.PV4 0
setstate Batt1 2026-06-07 17:01:16 state.reported.RT 0
setstate Batt1 2026-06-07 17:01:16 state.reported.SA 90
setstate Batt1 2026-06-07 17:01:16 state.reported.SA1 5
setstate Batt1 2026-06-07 17:01:16 state.reported.SC 100
setstate Batt1 2026-06-07 17:01:16 state.reported.SC0 100
setstate Batt1 2026-06-07 17:01:16 state.reported.SI 20
setstate Batt1 2026-06-07 17:01:16 state.reported.SI1 5
setstate Batt1 2026-06-07 17:01:16 state.reported.SN 1234567890
setstate Batt1 2026-06-07 17:01:16 state.reported.SO 10
setstate Batt1 2026-06-07 17:01:16 state.reported.ST 2
setstate Batt1 2026-06-07 17:01:16 state.reported.UG 0
setstate Batt1 2026-06-07 17:01:16 state.reported.UO 0
setstate Batt1 2026-06-07 17:01:16 state.reported.UP 2400
setstate Batt1 2026-06-07 17:01:16 state.reported.US 5
setstate Batt1 2026-06-07 17:01:16 state.reported.VP1 322
setstate Batt1 2026-06-07 17:01:16 state.reported.VP2 326
setstate Batt1 2026-06-07 17:01:16 state.reported.VP3 0
setstate Batt1 2026-06-07 17:01:16 state.reported.VP4 0
setstate Batt1 2026-06-07 17:01:16 state.reported.WR -81
setstate Batt1 2026-06-07 17:01:16 state.reported.WS WLAN1234567890
setstate Batt1 2026-06-07 17:01:16 state.reported.timestamp 1780844476580

GunterB