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!
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.
Ich hatte es befürchtet.
Allerdings reichen meine Perl-Kenntnisse dafür nicht aus.
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...
ZitatIch hätte die gerne schön in Readings nach dem Muster
Wenn Du ein komplettes JSON hier anhaengst, kann ich was versuchen.
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
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
Super, es funktioniert. Vielen Dank!!!