MQTT Generic Bridge Home Asstsistant ROLLO

Begonnen von Leon_Emm, 07 November 2021, 11:11:33

Vorheriges Thema - Nächstes Thema

Leon_Emm

Hallo alle zusammen,

für das Frontend bin ich gerade am Umsteigen auf Home Assistant - was soweit auch super geht. Über die MQTT Generic Bridge habe ich auch schon die Kommunikation hinbekommen. Nur bei meinen ROLLO-Modulen geht was nicht:

Home Assistant erwartet einen Wert für den State "Stopped", also suche ich nun eine Möglichkeit, alle States (also drive-up etc) über MQTT weiterzugeben, nur statt state pct-40 oder half soll "stopped" übermittelt werden. Hat jemand da eine Idee? Ich hätte es über ein userReading und Regex gemacht, kenne mich da aber nicht so gut aus.

platform: mqtt
  name: "Rolladen Speisekammer"
  unique_id: cover.fhem_rolladen_speisekammer
  command_topic: "mqttGenericBridge/set/rollo_Speisekammer/state"
  position_topic: "mqttGenericBridge/rollo_Speisekammer/pct"
  set_position_topic: "mqttGenericBridge/set/rollo_Speisekammer/pct"
  state_topic: "mqttGenericBridge/rollo_Speisekammer/state"
  availability_topic: "system/fhem/connection/status"
  payload_available: "connected"
  payload_not_available: "disconnected"
  payload_open: "100"
  payload_close: "0"
  payload_stop: "stop"
  position_open: 100
  position_closed: 0
  state_closing: "drive-down"
  state_opening: "drive-up"
  state_stopped: "stopped"


Internals:
   FUUID      5e0238fb-f33f-4070-9f96-6ef239f9fa1286e6
   LASTInputDev mqtt_io
   MSGCNT     7
   NAME       rollo_Speisekammer
   NR         37
   STATE      open
   TYPE       ROLLO
   mqtt_io_MSGCNT 7
   mqtt_io_TIME 2021-11-07 10:47:44
   stoptime   1636277245
   READINGS:
     2021-11-07 10:47:44   command         pct-0
     2021-11-07 10:47:44   desired_pct     0
     2021-11-07 10:26:49   drive-type      modul
     2021-11-07 10:26:49   last_drive      drive-up
     2021-11-07 10:27:25   pct             100
     2021-11-07 10:27:25   state           open
Attributes:
   cmdIcon    open:fts_shutter_up closed:fts_shutter_down stop:fts_shutter_manual half:fts_shutter_50
   devStateIcon open:fts_shutter_10:closed closed:fts_shutter_100:open half:fts_shutter_50:closed drive-up:fts_shutter_up@red:stop drive-down:fts_shutter_down@red:stop pct-100:fts_shutter_10:open pct-90:fts_shutter_10:closed pct-80:fts_shutter_20:closed pct-70:fts_shutter_30:closed pct-60:fts_shutter_40:closed pct-50:fts_shutter_50:closed pct-40:fts_shutter_60:open pct-30:fts_shutter_70:open pct-20:fts_shutter_80:open pct-10:fts_shutter_90:open pct-0:fts_shutter_100:closed
   mqttPublish pct|state:topic={"$base/$device/$name"}
   mqttSubscribe pct|state:stopic={"$base/$device/$name"}
   rl_autoStop 0
   rl_commandDown set rollo_a3 AI
   rl_commandStopDown set rollo_a3 AI
   rl_commandStopUp set rollo_a3 A0
   rl_commandUp set rollo_a3 A0
   rl_excessBottom 7
   rl_excessTop 0
   rl_resetTime 8
   rl_secondsDown 21
   rl_secondsUp 21
   rl_switchTime 10
   rl_type    HomeKit
   room       Rollos
   webCmd     open:closed:half:stop:pct


Vielen Dank im Voraus für Eure Hilfe!

hexenmeister

Du kannst die Werte in HASS i.d.R. sehr flexibel anpassen, aber auch in FHEM vor dem Senden mittels 'expression' nach Wunsch 'umbiegen'.

Grobes Beispiel:
mqttPublish
  state:topic={"$base/$device/$name"}
  state:expression={($value eq 'WERT1')?'WERT2':$value}


Habe leider nicht ganz verstanden, was Dein Problem ist. Möchtest Du nur ausgewälte state-Ausprägungen weiterleiten und andere unterdrücken/ersetzen?

Ich würde auch die Topics für Hin- und Rückweg besser voneinander trennen.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Leon_Emm

Das mit dem Expression klingt gut. Mein Problem an sich ist folgendes:

Hass will nach Dokumentaton https://www.home-assistant.io/integrations/cover.mqtt/ zwei MQTT-Topics empfangen, um den Status des Rolladens zu erkennen. Eins für die Position in Prozent (position) und eins für den Status (state). Bei letzterem habe ich das Problem, dass das state Reading drive-up, drive-down, closed und open sinnvoll verwendet und HASS diese versteht. Lediglich wenn das Rollo auf einer Position stoppt, erhält das Reading State die Werte "pct-10" bis "pct-90" und "half". Hier hätte ich gerne, dass aber MQTT "stopped" pulished... Also möchte ich die eben gennanten states "ersetzen"...

Hin und Rückweg sind dahingehend schon getrennt, dass ../set/rollo... fürs empfangen von FHEM, sowie .../rollo... ohne Set fürs senden (so wie es in der Wiki empfohlen ist)

Grüße

hexenmeister

Hm. Die publish und subscribe sind doch bei Dir gleich definiert:
   mqttPublish pct|state:topic={"$base/$device/$name"}
   mqttSubscribe pct|state:stopic={"$base/$device/$name"}


Aber ich verstehe das Problem. Das kannst Du gut mit expression machen.
Irgendwie so (ungetestet):
{($value=~/(pct-\d+)*(half)*/g)?'stopped':$value}
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Beta-User

@hexenmeister: Im Wiki ist $base für sub und pub (global) unterschiedlich.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

hexenmeister

Ah, ok, stimmt. Habe ja selbst so ausgedacht  ;D
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Leon_Emm

Erstmal vielen Dank für Euer Engagement,

die vorgeschlagene Expression hat glücklickerweise genau die Wirkung, die ich auch haben will. Super!

Vielen Dank, dass ihr so schnell mein Problem gelöst habt!

Leon_Emm

Tatsächlich klappt es doch noch nicht ganz:

Im State-Topic werden jetzt zwar brav alle state = pct-XY als state = stopped übermittelt, aber state = open, closed, drive-up, drive-down nicht mehr... Wie muss ich das mqttPublish reading anpassen?
Aktuell steht es so:

pct|state:topic={"$base/$device/$name"} state:expression={($value=~/(pct-\d+)*(half)*/g)?'stopped':$value}

Liebe Grüße

Beta-User

Die regex finde ich komisch. Würde eher (ungetestet) sowas versuchen:
state:expression={$value=~m/^(pct-\d+|half)$/?'stopped':$value}Ansonsten ist es immer etwas schwierig zu beurteilen, wenn man die Events dazu nicht kennt/sieht.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Leon_Emm

Danke dir, ich werde das testen und mich melden.