[Gelöst] Verständnisproblem bei Expression und stopic

Begonnen von steven11, 18 Mai 2025, 10:35:55

Vorheriges Thema - Nächstes Thema

steven11

Hallo,
ich möchte gerne meine Rolläden per MQTT (Home Assistant) steuern.
Die Verbindung mit dem MQTT-Broker funktioniert in fhem und ich kann auch Werte per MQTT_GENERIC_BRIDGE publishen.

Allerdings habe ich ein Verständnisproblem, wie ich die stopics genau auswerte.

Über MQTT kommt im topic /fhem/myrollo/set/command einer der folgenden Werte: "open", "closed" oder "stop".
Nun möchte ich, dass bei "open" das folgende set ausgeführt wird:
set myrollo open
Ich habe die Doku studiert und schon alles mögliche probiert, aber irgendwie klappt es nicht.
Ich müsste ja irgendwie für alle 3 sets das gleiche Topic abonnieren und dann per Expression den Wert analysieren und dann das entsprechende set am Gerät aufrufen lassen.

Hat mir jemand einen Tipp wie das geht?

Danke + Gruß

Guybrush

leg doch erstmal ein reading in deinem mqttdevice für command an. das wirst du ja sicher auch für status etc brauchen.

attr <device> readingList <clientId>:/fhem/myrollo/set/command:.* command

dann darauf z.b. ein notify

define rolloNotify notify <mqttdevice> set myrollo $EVENT

nicht getestet, aber so in etwa denke ich.

Beta-User

#2
Zitat von: Guybrush am 18 Mai 2025, 10:58:29leg doch erstmal ein reading in deinem mqttdevice für command an. das wirst du ja sicher auch für status etc brauchen.
Nope! Er hat doch schon eine MQTT_GENERIC_BRIDGE am Laufen ;) .

Zitat von: steven11 am 18 Mai 2025, 10:35:55Ich müsste ja irgendwie für alle 3 sets das gleiche Topic abonnieren und dann per Expression den Wert analysieren und dann das entsprechende set am Gerät aufrufen lassen.
Das sollte schlicht "state" sein, das da als Reading für diesen stopic anzugeben ist; eine expression sollte nicht erforderlich sein.

Siehe auch die commandref:
ZitatBei Verwendung von 'stopic' wird der 'set'-Befehl als 'set <dev> <reading> <value>' ausgeführt. Um den set-Befehl direkt am Device ohne Angabe eines Readingnamens auszuführen (also 'set <dev> <value>') muss als Reading-Name 'state' verwendet werden.
Bitte ggf. wenigstens auszugesweise die Attributoinhalte für mqttPublish und mqttSubscribe posten, falls das nicht klappt.

Nachtrag noch:
kommen die Nachrichten überhaupt bei der MGB an? Anders formuliert: clientOrder am IO paßt?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

steven11

@Beta-User: vielen Dank, das wars! Ich hatte die Doku an der Stelle nicht richtig verstanden, aber jetzt ists eigentlich ganz logisch  :D

Beta-User

Danke für die Rückmeldung.

Markierst du den Thread als [gelöst]?

PS: Das Thema HomeAssistant + (FHEM-)Rollladen via MQTT ist ein Dauerbrenner, zu dem ständig Fragen kommen. Vielleicht kannst du deine Kondiguration komplett posten (yaml-Auszug, FHEM-Device und das IO (MQTT2_CLIENT?) als raw).

Das ist zwar alles meistens doch irgendwie spezifisch, aber deine wenigen Schnippsel sahen zumindest mal ziemlich "straight forward" aus ;) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

steven11

Gerne:

Home Assistant:
# https://www.home-assistant.io/integrations/cover.mqtt
- object_id: "rollo_wohnzimmer"
  name: "Rolladen Wohnzimmer"
  device_class: "shutter"

  retain: false

  command_topic: "fhem/ROLLO_wohnzimmer/set/state"
  position_topic: "fhem/ROLLO_wohnzimmer/pct"
  set_position_topic: "fhem/ROLLO_wohnzimmer/set/pct"
  state_topic: "fhem/ROLLO_wohnzimmer/state"
 
  availability_topic: "fhem/status"
  payload_available: "connected"
  payload_not_available: "disconnected"
 
  payload_open: "open"
  payload_close: "closed"
  payload_stop: "stop"
  position_open: 0
  position_closed: 100
  state_closing: "drive-down"
  state_opening: "drive-up"
  state_stopped: "stopped"


fhem MQTT_GENERIC_BRIDGE:
define mqttRollos MQTT_GENERIC_BRIDGE mqtt TYPE=ROLLO,TYPE=SD_Keeloq,TYPE=DOIF,TYPE=SIGNALduino,TYPE=AutoShuttersControl
setuuid mqttRollos 650c553d-f33f-fef7-53da-18af3cd59397c7b6
attr mqttRollos IODev MqttHomeAssistant
attr mqttRollos globalDefaults sub:base={"fhem/$device/set"} pub:base={"fhem/$device"} retain=1
attr mqttRollos room MQTT


fhem ein ROLLO-Device:
attr ROLLO_tom_tuer mqttPublish pct|state:topic={"$base/$name"} state:expression={$value=~m/^(pct-\d+|half)$/?'stopped':$value}
attr ROLLO_tom_tuer mqttSubscribe pct|state:stopic={"$base/$name"}

steven11

Wie kann ich es als "gelöst" markieren? Ich sehe nur einen Button um das Topic zu schließen.

betateilchen

Im ersten Beitrag dieses Threads auf "Bearbeiten" gehen und dann den Titel ändern.

Schließen ist in der Regel nicht notwendig :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Beta-User

Zitat von: steven11 am 19 Mai 2025, 10:54:02Gerne:
Thx.

Bzgl. "retain" noch zwei Anmerkungen:
a) sehr sinnvoll erscheint mir, das von HA aus auf "false" zu setzen.
b) ob es best practice ist, das von FHEM aus via MGB als globalen default zu setzen, erscheint mir nicht unbedingt zwingend (aber in dieser Richtung auch nicht schädlich).
Ziel ist vermutlich, den Status in HA aktuell zu halten - dafür sollte es imo andere Methoden innerhalb HA geben.
Vgl. dazu auch meine Anmerkungen hier: https://forum.fhem.de/index.php?msg=1337224
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors