MQTT readingList Json zweite Ebene

Begonnen von appi, 23 Mai 2024, 16:42:44

Vorheriges Thema - Nächstes Thema

appi

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


Beta-User

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...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

appi

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

appi

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

Beta-User

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 }
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files