Hallo,
Ich binde grade meine Vaillant Heizung über ebusd und MQTT an. Der Ebusd publisht eine ganze Hierarchie von Topics, die einzelnen Topics sind dann als json encodiert. Aktuell habe ich eine riesige Readinglist:
....
ebusd/ehp/ActualEnvironmentPower:.* { json2nameValue($EVENT, 'ehp_ActualEnvironmentPower_', ) }
ebusd/ehp/ActualEnvironmentPowerPercentage:.* { json2nameValue($EVENT, 'ehp_ActualEnvironmentPowerPercentage_', ) }
ebusd/ehp/currenterror:.* { json2nameValue($EVENT, 'ehp_currenterror_', ) }
ebusd/ehp/EnergyBalancingRelease:.* { json2nameValue($EVENT, 'ehp_EnergyBalancingRelease_', ) }
....
Frage: Kann man das vereinfachen z.B. so:
ebusd/ehp.* { json2nameValue($EVENT, 'ehp_', ) }
und er würde untertopics zu ebusd/ehp/* automatisch an ehp_ anlegen, also ein topic
ebusd/ehp/ActualEnvironmentPower würde zum reading ehp_ActualEnvironmentPower_xxxx wobei xxxx dann die einzelnen geparsten Json Werte sind?
Geht das?
Danke.
Tom
ZitatGeht das?
Es kommt auf einem Versuch an.
Danke ... das ist ermutigend wenns vom Chef persönlich kommt. :)
Ich werds mal so probieren ...
Ok, einen Versuch gestartet ... ganz so klappt es nicht. Aus der MQTT Message:
ebusd/broadcast/datetime {
"outsidetemp": {"value": 6.688},
"time": {"value": "11:52:03"},
"date": {"value": "12.02.2019"}
}
werden mit der Readinglist:
ebusd/broadcast.* { json2nameValue($EVENT, 'broadcast_', ) }
die Readings:
broadcast_date_value 12.02.2019
broadcast_outsidetemp_value 6.688
Es fehlt also der sub-topic im reading, hier wäre das z.B. "datetime".
Was mach ich falsch?
Nichts, es hat einen Grund, warum die Voreinstellung die letzten Stellen des Topics als Prefix nimmt.
Bzw. genommen hat, die aktuelle Version macht es nicht mehr, weil man mich ueberredet hat es wegzulassen.
Du hast mehrere Stellschrauben:
- fuer jedes Topic eine explizite Zeile in readingsList anlegen, mit eindeutigen zweiten Parameter in json2nameValue.
- in json2nameValue den dritten Parameter als $JSONMAP definieren, und in jsonMap Attribut diese passend fuellen (siehe auch commandref)
Danke ... ich werde den Weg über JSONMAP gehen ...
Schade das es nicht generisch lösbar ist.