GELÖST: Hilfe für Json2namevalue: Errorhistory aus eBus in Readings einlesen

Begonnen von mike1969bln, 03 September 2022, 12:44:25

Vorheriges Thema - Nächstes Thema

mike1969bln

Hallo in die Runde,

ich habe meine Vaillant-Heizung an einem eBus mit MQTT.

Im Topic ebusd/ehp/errorhistory bekomme ich folgendes JSON.

{
     "index": {"value": 7},
     "status": {"value": 2},
     "time2": {"value": "17:06"},
     "date": {"value": "01.11.2021"},
     "error": {"value": 580}}


Der Value von Index zählt von 0-9.

Ich hätte die gerne schön in Readings nach dem Muster

Error_1_status_value
Error_1_time2_value
Error_1_date_value
..
Error_9_error_value

Irgendwie bekomme ich das mit Json2namevalue nicht hin.

Wer kann freundlicherweise helfen?

Danke!

Beta-User

ebus und json2nameValue() sind m.E. nicht unbedingt die ideale Kombi, du hast vermutlich gesehen, dass es deswegen "Sondercode" gibt, um die JSON sinnvoll auszupacken.
Die error hatte ich dabei erst mal ausgespart, weil das mühsam ist....

Vermutlich solltest du den json mit JSON->new->decode() auspacken und die einzelnen Datenelemente dann mit Perl-Code auslesen und manuell zusammentackern, ich übernehme das dann gerne in den myUtils-Code zur allgemeinen Verteilung.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

mike1969bln

Ich hatte es befürchtet.

Allerdings reichen meine Perl-Kenntnisse dafür nicht aus.

Beta-User

Na ja, tut mir leid, wie gesagt war es mir den Aufwand nicht wert (ich habe kein ebus-Gerät!). Dürfte aber nicht sooo schwierig sein, ggf. kann ich unterstützen.

Die von mir genannte Funktion bricht den JSON auf, und zwar ähnlich wie das Tools wie (willkürlich gewählt) https://jsonformatter.org/json-parser tun. Dann muss man sich die Datenpunkte halt zusammenstupfen, ähnlich wie das die in der myUtils-File enthaltene Funktion für die Berechnung der on/off-Zeit-Paare aus weekprofile tut. Ist eher eine (gefahrgeneigte) Fleißarbeit...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

rudolfkoenig

ZitatIch hätte die gerne schön in Readings nach dem Muster
Wenn Du ein komplettes JSON hier anhaengst, kann ich was versuchen.

mike1969bln

Hallo Rudi,

danke für dein freundliches Angebot. Ich bin ja ein großer FHEM-Fan. Danke für deinen langjährigen Einsatz in dem Thema.

Nun zu den JSONS:

Sie kommen auf dem Topic : ebusd/ehp/errorhistory
und variieren durch den Index:
Error-Index 1

{
     "index": {"value": 1},
     "status": {"value": 2},
     "time2": {"value": "17:32"},
     "date": {"value": "08.11.2021"},
     "error": {"value": 580}}

Error-Index 6{
     "index": {"value": 6},
     "status": {"value": 2},
     "time2": {"value": "06:47"},
     "date": {"value": "02.11.2021"},
     "error": {"value": 580}}

Error-Index 7{
     "index": {"value": 7},
     "status": {"value": 2},
     "time2": {"value": "17:06"},
     "date": {"value": "01.11.2021"},
     "error": {"value": 580}}
 
So geht das von 0 - 9

rudolfkoenig

Mit
attr MQTT2_eBus readingList eBus:ebusd/ehp/errorhistory:.* { my $h1=json2nameValue($EVENT);; my $idx=$h1->{index_value};; my %h2=map {("Error_${idx}_$_", $h1->{$_})} keys %{$h1};; \%h2 }

erzeugt
mosquitto_pub -i eBus -t ebusd/ehp/errorhistory -m '{ "index": {"value": 1}, "status": {"value": 2}, "time2": {"value": "17:32"}, "date": {"value": "08.11.2021"}, "error": {"value": 580} }'

folgende Readings:
Zitat2022-09-06 11:19:15   Error_1_date_value 08.11.2021
     2022-09-06 11:19:15   Error_1_error_value 580
     2022-09-06 11:19:15   Error_1_index_value 1
     2022-09-06 11:19:15   Error_1_status_value 2
     2022-09-06 11:19:15   Error_1_time2_value 17:32

mike1969bln