Hallo
trotz intensiver such im Forum und im Web kriege ich den folgenen Json vom Brocker nicht richtig ausgepack.....
{"Sensor":[{"timestamp":1716474782,"date":"23/05/2024 16:33:02","mac":"7C:D9:F4:18:1C:11","name":"Womo_D007AA","rssi":-72,"data":"{\"magnetic field\":\"undetected\",\"temperature\":\"11.84\",\"humidity\":\"75\",\"move count\":\"171\",\"moving state\":\"0\",\"pitch\":\"0\",\"roll\":\"0\",\"voltage(mV)\":\"3100\"}"}]}
list Device ergibt:
Internals:
CFGFN
CID my_extern_Broker_2
DEF my_extern_Broker_2
FUUID 664f524e-f33f-3337-be24-26bdeef8f9f4b49a
IODev my_extern_Broker_2
LASTInputDev my_extern_Broker_2
MSGCNT 35
NAME Womo_Teltonika_Eye1
NR 120
STATE ???
TYPE MQTT2_DEVICE
eventCount 35
my_extern_Broker_2_MSGCNT 35
my_extern_Broker_2_TIME 2024-05-23 16:39:03
READINGS:
2024-05-23 16:27:26 IODev my_extern_Broker_2
2024-05-23 16:39:03 Sensor_1_data {"magnetic field":"undetected","temperature":"11.74","humidity":"75","move count":"171","moving state":"0","pitch":"0","roll":"0","voltage(mV)":"3100"}
2024-05-23 16:39:03 Sensor_1_date 23/05/2024 16:38:56
2024-05-23 16:39:03 Sensor_1_mac 7C:D9:F4:18:1C:11
2024-05-23 16:39:03 Sensor_1_name Womo_D007AA
2024-05-23 16:39:03 Sensor_1_rssi -72
2024-05-23 16:39:03 Sensor_1_timestamp 1716475136
2024-05-23 16:39:03 Sensor_2_data {"magnetic field":"undetected","temperature":"11.74","humidity":"75","move count":"171","moving state":"0","pitch":"0","roll":"0","voltage(mV)":"3100"}
2024-05-23 16:39:03 Sensor_2_date 23/05/2024 16:38:45
2024-05-23 16:39:03 Sensor_2_mac 7C:D9:F4:18:1C:11
2024-05-23 16:39:03 Sensor_2_name Womo_D007AA
2024-05-23 16:39:03 Sensor_2_rssi -72
2024-05-23 16:39:03 Sensor_2_timestamp 1716475125
Attributes:
IODev my_extern_Broker_2
autocreate 0
icon hue_filled_outlet
readingList Womo/Eye_1:.* { json2nameValue($EVENT) }
room Womo
Hat mir jemand einen guten Tipp wie die readingList aussehen müsste um die Temperatur und die Luftfeuchtigkeit als Reading zu erhalten.
Danke und Gruss
Hmmm, "eigentlich" macht FHEM alles richtig - schau mal, wie z.B. https://jsonformatter.org/json-parser mit dem sehr seltsamen input umgeht, den deine Gegenstelle da produziert...
Anscheinend ist dann aber wieder der Reading-Inhalt von "Sensor_1_data" ein gültiger JSON. Ausgehend davon könnte sowas funktionieren:
readingList Womo/Eye_1:.* { my $ret=json2nameValue($EVENT); if (defined $ret->{Sensor_1_data}) {my $ret2=json2nameValue($ret->{Sensor_1_data},'Sensor_1_data_'); delete $ret->{Sensor_1_data}; for ( keys %{$ret2} ) { $ret->{$_}=$ret2->{$_};}} return $ret }
Aber Achtung: Das ist eine Trockenübung, und es besteht durchaus das Risiko, dass dabei grundlegend was schief geht (ich meine, fhem.pl würde das ggf. abfangen, wenn die Referenzierung nicht paßt, aber garantieren kann ich das nicht!).
Wenn das dann klappt, müßte man es vermutlich generalisieren, damit das auch klappt, wenn das Array mehrere Elemente enthält oder was anderes wie den Typ "Sensor"...
Oder eben besser beim Lieferanten des "JSON" nachfragen, ob er nicht was gültiges bauen will...
top,hätte ich nie hingekriegt, besten Dank
Internals:
CFGFN
CID my_extern_Broker_2
DEF my_extern_Broker_2
FUUID 664f7537-f33f-3337-4566-f1c6321589f81049
IODev my_extern_Broker_2
LASTInputDev my_extern_Broker_2
MSGCNT 9
NAME Womo_Teltonika_Eye1
NR 162
STATE ???
TYPE MQTT2_DEVICE
eventCount 9
my_extern_Broker_2_MSGCNT 9
my_extern_Broker_2_TIME 2024-05-23 18:59:11
READINGS:
2024-05-23 18:56:23 IODev my_extern_Broker_2
2024-05-23 18:59:11 Sensor_1_data {"magnetic field":"undetected","temperature":"13.05","humidity":"74","move count":"171","moving state":"0","pitch":"0","roll":"0","voltage(mV)":"3110"}
2024-05-23 18:59:11 Sensor_1_data_humidity 74
2024-05-23 18:59:11 Sensor_1_data_magnetic_field undetected
2024-05-23 18:59:11 Sensor_1_data_move_count 171
2024-05-23 18:59:11 Sensor_1_data_moving_state 0
2024-05-23 18:59:11 Sensor_1_data_pitch 0
2024-05-23 18:59:11 Sensor_1_data_roll 0
2024-05-23 18:59:11 Sensor_1_data_temperature 13.05
2024-05-23 18:59:11 Sensor_1_data_voltage_mV_ 3110
2024-05-23 18:59:11 Sensor_1_date 23/05/2024 18:58:53
2024-05-23 18:59:11 Sensor_1_mac 7C:D9:F4:18:1C:11
2024-05-23 18:59:11 Sensor_1_name Womo_D007AA
2024-05-23 18:59:11 Sensor_1_rssi -77
2024-05-23 18:59:11 Sensor_1_timestamp 1716483533
2024-05-23 18:59:11 Sensor_2_data {"magnetic field":"undetected","temperature":"13.01","humidity":"74","move count":"171","moving state":"0","pitch":"0","roll":"0","voltage(mV)":"3110"}
2024-05-23 18:59:11 Sensor_2_date 23/05/2024 18:59:03
2024-05-23 18:59:11 Sensor_2_mac 7C:D9:F4:18:1C:11
2024-05-23 18:59:11 Sensor_2_name Womo_D007AA
2024-05-23 18:59:11 Sensor_2_rssi -77
2024-05-23 18:59:11 Sensor_2_timestamp 1716483543
Attributes:
IODev my_extern_Broker_2
autocreate 0
icon hue_filled_outlet
readingList Womo/Eye_1:.* { json2nameValue($EVENT) }
Womo/Eye_1:.* { my $ret=json2nameValue($EVENT); if (defined $ret->{Sensor_1_data}) {my $ret2=json2nameValue($ret->{Sensor_1_data},'Sensor_1_data_'); delete $ret->{Sensor_1_data}; for ( keys %{$ret2} ) { $ret->{$_}=$ret2->{$_};}} return $ret }
room Womo
das Einzige was noch auszuschliessen wäre, sind die Readings:
2024-05-23 18:59:11 Sensor_2_data {"magnetic field":"undetected","temperature":"13.01","humidity":"74","move count":"171","moving state":"0","pitch":"0","roll":"0","voltage(mV)":"3110"}
2024-05-23 18:59:11 Sensor_2_date 23/05/2024 18:59:03
2024-05-23 18:59:11 Sensor_2_mac 7C:D9:F4:18:1C:11
2024-05-23 18:59:11 Sensor_2_name Womo_D007AA
2024-05-23 18:59:11 Sensor_2_rssi -77
2024-05-23 18:59:11 Sensor_2_timestamp 1716483543
da sie doppelt sind. Ist aber nur kosmetisch.
Für mich so ok
nur für's Verständnis
- Ich betreibe Fhem in meinem Wohnmobil auf einem Teltonika RUTX11
- auf dem Router RUTX11 läuft auch der MQTT Broker
- für die Aussen-Klima Werte nutze ich einen BLE Puk auch von Teltonika dessen Daten vom RUTX11 empfangen werden und via MQTT Brocker an Fhem weitergeben werden
- GPS Daten kommen auch vom RUTX11 und per MQTT an Fhem
- etc, etc
Zitat von: appi am 23 Mai 2024, 19:12:34nur für's Verständnis
- Ich betreibe Fhem in meinem Wohnmobil auf einem Teltonika RUTX11
- auf dem Router RUTX11 läuft auch der MQTT Broker
- für die Aussen-Klima Werte nutze ich einen BLE Puk auch von Teltonika dessen Daten vom RUTX11 empfangen werden und via MQTT Brocker an Fhem weitergeben werden
- GPS Daten kommen auch vom RUTX11 und per MQTT an Fhem
- etc, etc
...ohne Doku-Verweise kann zumindest ich mir nichts darunter vorstellen, und ich bleibe auch dabei, dass der JSON eigentlich "kaputt" ist, der so erzeugt wird...
Macht aber nichts :) .
Zitat von: appi am 23 Mai 2024, 19:04:57top,hätte ich nie hingekriegt, besten Dank
Danke zurück für die Rückmeldung, aber sag niemals "nie"...
Die Doppelung bzw. die Belassung des "data"-JSON dürfte von der Doppelung in der readingList kommen, da sollte eine Zeile genügen ;) . Wieder als Trockenübung mit generischem Schleifenversuch:
readingList Womo/Eye_1:.* { my $ret=json2nameValue($EVENT); for ( my $okey keys %{$ret} {if ($okey =~ m{_data}) { my $ret2=json2nameValue($ret->{$okey},"${okey}_data_"); delete $ret->{$okey}; for ( keys %{$ret2} ) { $ret->{$_}=$ret2->{$_};}}} return $ret }