Ganze Topic Hierarchie automatisch als readings ...

Begonnen von tomleitner, 12 Februar 2019, 11:21:14

Vorheriges Thema - Nächstes Thema

tomleitner

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

rudolfkoenig


tomleitner

Danke ... das ist ermutigend wenns vom Chef persönlich kommt.   :)

Ich werds mal so probieren ...

tomleitner

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?

rudolfkoenig

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)

tomleitner

Danke ... ich werde den Weg über JSONMAP gehen ...

Schade das es nicht generisch lösbar ist.