[gelöst] Readingslist vereinfachen

Begonnen von Nighthawk, 19 März 2022, 19:54:37

Vorheriges Thema - Nächstes Thema

Nighthawk

Hallo zusammen,

ich habe endlich meine Weisshaupt Therme (leider mit CAN und nicht mit EBUS) über einen langen Umweg (mittels Homeassistant https://github.com/dm82m/hass-WEM-Portal und versenden der Daten über MQTT) in's FHEM gebracht.
Im Homeassistant versende ich (mangels tieferer Erfahrung mit HASS und JSON) jeden Wert einzeln:

data_template:
  payload_template: '{{ states.sensor.aussentemperatur.state }}'
  topic: hass/heizung/aussentemperatur
service: mqtt.publish

data_template:
  payload_template: '{{ states.sensor.system_status.state }}'
  topic: hass/heizung/system_status
service: mqtt.publish
.
.


Diese Werte kommen in meinem MQTT2_DEVICE Heizug aktuell mit folgendem Readingslist an:


attr Heizung devicetopic  hass/heizung

attr Heizung readingList
$DEVICETOPIC/aussentemperatur:.* aussentemperatur
$DEVICETOPIC/system_status:.* system_status
.
.


Gibt es da ein einfaches Regex mit dem man das readingList einkürzen kann?

Gruß
Alex

TomLee

#1
Schick die zwei Name/Value-Paare auf einem Topic, wenn möglich ?

So in der Art, abgeleitet von den Beispielen hab mich dazu nicht eingelesen, einfach ins Blaue:

payload_template: '{{ states.sensor.aussentemperatur.state,states.sensor.system_status.state }}'
topic: hass/heizung/state


Wenn so ein Json-Objekt mit zwei Name/Value-Paaren geschickt wird ist mein Verständnis das nur ein Readinglist-Eintrag von nöten wäre, der dann automatisch angelegt wird mit  $DEVICETOPIC/state:.* json2nameValue($EVENT,'',$JSONMAP) }

Nighthawk

#2
Vielen Dank für den Schubs in die richtige Richtung, nach etwas herumexperimentieren habe ich es folgendermaßen gelöst:

HomeAssistant:

data_template:
  topic: hass/heizung
  payload: "{
\"aussentemperatur\": \"{{ states.sensor.aussentemperatur.state }}\",
\"status\": \"{{ states.sensor.system_status.state }}\",
.
.
}"
service: mqtt.publish


Und FHEM:


attr Heizung devicetopic   hass/heizung
attr Heizung readingslist  $DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }

TomLee

Wie von mir vorgeschlagen und von dir gezeigt:

Zitatattr Heizung readingslist  $DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }

wurde das Device/die readingList aber nicht automatisch angelegt oder ?

Mir hat die Frage/der Faden im Verständnis auch etwas weiter geholfen, bin der Meinung automatisch würde ein ReadingList mit deinem jetzigen Json mit json2nameValue($EVENT) angelegt werden.

Du kannst die Namen ja beinflussen, dann brauchst die Option $JSONMAP (die Möglichkeit andere Namen zu vergeben) auch nicht.

Wenn im Value der Aussentemperatur nur numerische Werte stehen kannst dir die Hochkomma und das escapen dieser sparen, im Json werden numerische Werte ohne  Hochkomma angegeben, das gleiche bei system_status (vermute aber mal da steht ein String drin), dann in Hochkommata.

Nighthawk

Du hast Recht,

$DEVICETOPIC:.* { json2nameValue($EVENT) } reicht hier bereits.

Was die Hockommatas angeht, habe ich Fehlermeldungen auf der Json Seite bekommen,  ausgelöst durch Strings wie den vom Status. Daraufhin habe ich mit mosquitto_sub die Struktur der anderen Nachrichten im MQTT angeschaut umd gesehen dass die Strings in Hochkommas müssen, daher habe ich erstmal alles damit versehen :-) .