FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: beSmart am 10 August 2025, 10:50:45

Titel: openHASP per MQTT mit einem dummy verbinden
Beitrag von: beSmart am 10 August 2025, 10:50:45
Guten Morgen,

wie in der Überschrift geschrieben, möchte ich ein Display mit drei "Schaltern" (p1b3, p1b5 und p1b7 analog zun An,Auto,Aus) mit einem dummy in fhem per MQTT verbinden. Dieser dummy hat 3 zustände (An, Auto und Aus). Die "Schalter" haben den Zustand (0 oder 1). Es soll jeweils nur ein Schalter "aktiv" sein.

Mein erster Gedanke was es per MQTT_GENERIC_BRIDGE zu versuchen. Habe aber keine Möglichkeit gefunden die Schalter von 0/1 zu An/Auto/Aus zu konvertieren. Das Problem das nur der entsprechende Schalter den Status 1 bekommt ist dabei noch gar nicht berücksichtigt,

Gibt es eine Möglichkeit, dass die beiden Geräte miteinander kommunizieren? oder gibt es eine bessere Lösung?


Vielen Dank und Grüße

besmart
Titel: Aw: openHASP per MQTT mit einem dummy verbinden
Beitrag von: Beta-User am 10 August 2025, 11:43:04
Wieso dummy? Klingt verquer...

Bitte beachte die angepinnten Threads, dann kann man vielleicht verstehen, was du eigentlich erreichen willst.
Titel: Aw: openHASP per MQTT mit einem dummy verbinden
Beitrag von: beSmart am 10 August 2025, 13:10:12
Hallo,

eigentlich eine ganz einfache Geschichte. Der dummy soll synchron zum Display sein bzw. umgekehrt.
Hier die Geräte:

// openHASP Display
Internals:
   CFGFN     
   CID        display1_84e534
   DEF        display1_84e534
   FUUID      68984cad-f33f-c0bb-b64f-0a20468a9ceb5b5e
   IODev      m2s
   LASTInputDev m2s
   MSGCNT     35
   NAME       display1_84e534
   NR         50
   STATE      ???
   TYPE       MQTT2_DEVICE
   eventCount 42
   m2s_CONN   m2s_10.79.2.217_65374
   m2s_MSGCNT 35
   m2s_TIME   2025-08-10 09:51:39
   READINGS:
     2025-08-10 09:51:39   1051db84e534_hwid 1051db84e534
     2025-08-10 09:51:39   1051db84e534_mdl 1-S3 4848S040
     2025-08-10 09:51:39   1051db84e534_mf openHASP
     2025-08-10 09:51:39   1051db84e534_node display1
     2025-08-10 09:51:39   1051db84e534_node_t hasp/display1/
     2025-08-10 09:51:39   1051db84e534_pages 12
     2025-08-10 09:51:39   1051db84e534_sw 0.7.0-rc12
     2025-08-10 09:51:39   1051db84e534_uri http://10.79.2.217
     2025-08-10 09:39:25   IODev           m2s
     2025-08-10 09:50:54   idle            long
     2025-08-10 09:47:53   p1b3_event      up
     2025-08-10 09:47:53   p1b3_val        0
     2025-08-10 09:39:35   p1b5_event      up
     2025-08-10 09:39:35   p1b5_val        0
     2025-08-10 09:39:35   p1b7_event      up
     2025-08-10 09:39:35   p1b7_val        0
     2025-08-10 09:51:23   sensors_time    2025-08-10T09:51:23
     2025-08-10 09:51:23   sensors_uptime  0T00:20:09
     2025-08-10 09:51:23   sensors_uptimeSec 1209
     2025-08-10 09:51:22   statusupdate_canUpdate false
     2025-08-10 09:51:22   statusupdate_core 4.4.6
     2025-08-10 09:51:22   statusupdate_heapFrag 10
     2025-08-10 09:51:22   statusupdate_heapFree 114492
     2025-08-10 09:51:22   statusupdate_idle long
     2025-08-10 09:51:22   statusupdate_ip 10.79.2.217
     2025-08-10 09:51:22   statusupdate_mac 10:51:DB:84:E5:34
     2025-08-10 09:51:22   statusupdate_node display1
     2025-08-10 09:51:22   statusupdate_numPages 12
     2025-08-10 09:51:22   statusupdate_page 1
     2025-08-10 09:51:22   statusupdate_rssi -36
     2025-08-10 09:51:22   statusupdate_ssid BR-WLAN
     2025-08-10 09:51:22   statusupdate_tftDriver Other
     2025-08-10 09:51:22   statusupdate_tftHeight 480
     2025-08-10 09:51:22   statusupdate_tftWidth 480
     2025-08-10 09:51:22   statusupdate_uptime 1209
     2025-08-10 09:51:22   statusupdate_version 0.7.0-rc12
     2025-08-10 09:39:25   subscriptions   hasp/broadcast/command/# hasp/display1/command/# hasp/plates/command/# homeassistant/status
Attributes:
   mqttPublish state:topic=hasp/display1/command/p1b3.val 1
   mqttSubscribe state:topic=hasp/display1/command/p1b3.val 1
   readingList display1_84e534:hasp/display1/state/p1b3:.* { json2nameValue($EVENT, 'p1b3_', $JSONMAP) }
display1_84e534:hasp/display1/state/p1b5:.* { json2nameValue($EVENT, 'p1b5_', $JSONMAP) }
display1_84e534:hasp/display1/state/p1b7:.* { json2nameValue($EVENT, 'p1b7_', $JSONMAP) }
display1_84e534:hasp/display1/state/idle:.* idle
display1_84e534:hasp/display1/state/statusupdate:.* { json2nameValue($EVENT, 'statusupdate_', $JSONMAP) }
display1_84e534:hasp/display1/state/sensors:.* { json2nameValue($EVENT, 'sensors_', $JSONMAP) }
display1_84e534:hasp/discovery/1051db84e534:.* { json2nameValue($EVENT, '1051db84e534_', $JSONMAP) }
   room       MQTT2_DEVICE

//du.Poolpumpe
Internals:
   FUUID      68971247-f33f-c0bb-fe66-f3e726c17e18bfae
   NAME       du.Poolpumpe
   NR         44
   STATE      An
   TYPE       dummy
   eventCount 24
   READINGS:
     2025-08-10 09:52:13   state           An
Attributes:
   mqttPublish state:topic=hasp/display1/command/p1b3.val
   mqttSubscribe state:topic=hasp/display1/command/p1b3.val
   room       MQTT2_DEVICE
   webCmd     An:Auto:Aus

//MQQT2_Server
 Internals:
   CONNECTS   1
   Clients    :MQTT2_DEVICE:MQTT_GENERIC_BRIDGE:
   ClientsKeepOrder 1
   DEF        1883 global
   FD         4
   FUUID      6897113d-f33f-c0bb-b675-9674ad084c2cb68c
   NAME       m2s
   NR         43
   PORT       1883
   STATE      Initialized
   TYPE       MQTT2_SERVER
   eventCount 3
   MatchList:
     1:MQTT2_DEVICE ^.
     2:MQTT_GENERIC_BRIDGE ^.
   READINGS:
     2025-08-10 09:34:10   attrTemplateVersion 20210528
     2025-08-10 09:47:18   lastPublish     hasp/display1/command/p1b3.val:1
     2025-08-10 09:31:20   nrclients       1
     2025-08-10 09:22:19   state           Initialized
   clients:
     m2s_10.79.2.217_65374 1
   retain:
Attributes:
   autocreate complex
   room       MQTT2_DEVICE


//MQTT_GENERIC_BRIDGE
nternals:
   FUUID      689728ed-f33f-c0bb-b319-75b7be4c993b6f1f
   IODev      m2s
   NAME       MQTTBridge
   NR         45
   NTFY_ORDER 70-MQTTBridge
   STATE      ???
   TYPE       MQTT_GENERIC_BRIDGE
   devspec    .*
   eventCount 39
   prefix     mqtt
   READINGS:
     2025-08-10 09:22:19   IODev           m2s
     2025-08-10 09:51:42   device-count    2
     2025-08-10 09:22:19   incoming-count  0
     2025-08-10 09:52:13   outgoing-count  24
     2025-08-10 09:52:13   transmission-state outgoing publish sent
     2025-08-10 09:22:19   updated-reading-count 0
     2025-08-10 09:22:19   updated-set-count 0
   devices:
     display1_84e534:
       :publish:
         state:
           mode       R
           topic      hasp/display1/command/p1b3.val
       :subscribe:
         HASH(0x563645cb13a8)
     du.Poolpumpe:
       :alias:
       :publish:
         state:
           last       1754812333.79023
           mode       R
           topic      hasp/display1/command/p1b3.val
       :subscribe:
         HASH(0x563645c2e578)
   globalDeviceExcludes:
   globalReadingExcludes:
   globalTypeExcludes:
     pub:
       FHEMWEB    *
       Global     *
       MQTT       transmission-state
       MQTT_BRIDGE transmission-state
       MQTT_DEVICE transmission-state
       MQTT_GENERIC_BRIDGE *
       telnet     *
     sub:
       FHEMWEB    *
       Global     *
       MQTT       transmission-state
       MQTT_BRIDGE transmission-state
       MQTT_DEVICE transmission-state
       MQTT_GENERIC_BRIDGE *
       telnet     *
   subscribe:
Attributes:
   room       MQTT2_DEVICE

Ich habe es jetzt mit 2 DOIF gelöst, dass funktioniert finde ich aber nicht so prickelnd.

//di.display2dummy
Internals:
   CFGFN     
   DEF        ([display1_84e534:p1b3_val] eq "1" and [du.Poolpumpe] ne "An")(set du.Poolpumpe An)DOELSEIF ([display1_84e534:p1b5_val] eq "1" and [du.Poolpumpe] ne "Auto") (set du.Poolpumpe Auto)DOELSEIF ([display1_84e534:p1b7_val] eq "1" and [du.Poolpumpe] ne "Aus")(set du.Poolpumpe Aus)DOELSEIF ([display1_84e534:p1b1_val] ne "1" and [display1_84e534:p1b5_val] ne "1" and [display1_84e534:p1b7_val] ne "1")(set du.Poolpumpe Aus)
   FUUID      6898773a-f33f-c0bb-6fff-865416731541d4d1
   MODEL      FHEM
   NAME       di.display1_2_duPoolpumpe
   NOTIFYDEV  global,display1_84e534,du.Poolpumpe
   NR         57
   NTFY_ORDER 50-di.display1_2_duPoolpumpe
   STATE      cmd_4
   TYPE       DOIF
   VERSION    29460 2024-12-29 20:25:48
   eventCount 79
   READINGS:
     2025-08-10 12:57:03   Device          display1_84e534
     2025-08-10 12:57:03   cmd             4
     2025-08-10 12:57:03   cmd_event       display1_84e534
     2025-08-10 12:57:03   cmd_nr          4
     2025-08-10 12:56:29   e_display1_84e534_p1b3_val 1
     2025-08-10 12:57:03   e_display1_84e534_p1b5_val 0
     2025-08-10 12:56:56   e_display1_84e534_p1b7_val 0
     2025-08-10 12:56:41   e_du.Poolpumpe_STATE An
     2025-08-10 12:56:01   mode            enabled
     2025-08-10 12:57:03   state           cmd_4
   Regex:
     accu:
     bar:
     barAvg:
     collect:
     cond:
       display1_84e534:
         0:
           p1b3_val   ^display1_84e534$:^p1b3_val:
         1:
           p1b5_val   ^display1_84e534$:^p1b5_val:
         2:
           p1b7_val   ^display1_84e534$:^p1b7_val:
         3:
           p1b1_val   ^display1_84e534$:^p1b1_val:
           p1b5_val   ^display1_84e534$:^p1b5_val:
           p1b7_val   ^display1_84e534$:^p1b7_val:
       du.Poolpumpe:
         0:
           &STATE     ^du.Poolpumpe$
         1:
           &STATE     ^du.Poolpumpe$
         2:
           &STATE     ^du.Poolpumpe$
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'display1_84e534','p1b3_val') eq "1" and ::InternalDoIf($hash,'du.Poolpumpe','STATE') ne "An"
     1          ::ReadingValDoIf($hash,'display1_84e534','p1b5_val') eq "1" and ::InternalDoIf($hash,'du.Poolpumpe','STATE') ne "Auto"
     2          ::ReadingValDoIf($hash,'display1_84e534','p1b7_val') eq "1" and ::InternalDoIf($hash,'du.Poolpumpe','STATE') ne "Aus"
     3          ::ReadingValDoIf($hash,'display1_84e534','p1b1_val') ne "1" and ::ReadingValDoIf($hash,'display1_84e534','p1b5_val') ne "1" and ::ReadingValDoIf($hash,'display1_84e534','p1b7_val') ne "1"
   do:
     0:
       0          set du.Poolpumpe An
     1:
       0          set du.Poolpumpe Auto
     2:
       0          set du.Poolpumpe Aus
     3:
       0          set du.Poolpumpe Aus
     4:
   helper:
     NOTIFYDEV  global,display1_84e534,du.Poolpumpe
     event      p1b5_val: 0,p1b5_event: up
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   display1_84e534
     timerevent p1b5_val: 0,p1b5_event: up
     triggerDev display1_84e534
     timerevents:
       p1b5_val: 0
       p1b5_event: up
     timereventsState:
       p1b5_val: 0
       p1b5_event: up
     triggerEvents:
       p1b5_val: 0
       p1b5_event: up
     triggerEventsState:
       p1b5_val: 0
       p1b5_event: up
   internals:
     all         du.Poolpumpe:STATE
   readings:
     all         display1_84e534:p1b3_val display1_84e534:p1b5_val display1_84e534:p1b7_val display1_84e534:p1b1_val
   trigger:
   uiState:
   uiTable:
Attributes:
   do         always
   room       MQTT2_DEVICE

//dummy2display
Internals:
   CFGFN     
   DEF        ([du.Poolpumpe] eq "An")
(set m2s publish hasp/display1/command/p1b3.val 1;set m2s publish hasp/display1/command/p1b5.val 0;set m2s publish hasp/display1/command/p1b7.val 0)
DOELSEIF ([du.Poolpumpe] eq "Auto")
(set m2s publish hasp/display1/command/p1b3.val 0;set m2s publish hasp/display1/command/p1b5.val 1;set m2s publish hasp/display1/command/p1b7.val 0)
DOELSEIF ([du.Poolpumpe] eq "Aus")
(set m2s publish hasp/display1/command/p1b3.val 0;set m2s publish hasp/display1/command/p1b5.val 0;set m2s publish hasp/display1/command/p1b7.val 1)
   FUUID      68987767-f33f-c0bb-15ce-a5c98c0a81e8e5a8
   MODEL      FHEM
   NAME       di.duPoolpumpe_2_display1
   NOTIFYDEV  global,du.Poolpumpe
   NR         58
   NTFY_ORDER 50-di.duPoolpumpe_2_display1
   STATE      cmd_3
   TYPE       DOIF
   VERSION    29460 2024-12-29 20:25:48
   eventCount 78
   READINGS:
     2025-08-10 12:57:03   Device          du.Poolpumpe
     2025-08-10 12:57:03   cmd             3
     2025-08-10 12:57:03   cmd_event       du.Poolpumpe
     2025-08-10 12:57:03   cmd_nr          3
     2025-08-10 12:57:03   e_du.Poolpumpe_STATE Aus
     2025-08-10 12:42:18   mode            enabled
     2025-08-10 12:57:03   state           cmd_3
   Regex:
     accu:
     bar:
     barAvg:
     collect:
     cond:
       du.Poolpumpe:
         0:
           &STATE     ^du.Poolpumpe$
         1:
           &STATE     ^du.Poolpumpe$
         2:
           &STATE     ^du.Poolpumpe$
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::InternalDoIf($hash,'du.Poolpumpe','STATE') eq "An"
     1          ::InternalDoIf($hash,'du.Poolpumpe','STATE') eq "Auto"
     2          ::InternalDoIf($hash,'du.Poolpumpe','STATE') eq "Aus"
   do:
     0:
       0          set m2s publish hasp/display1/command/p1b3.val 1;set m2s publish hasp/display1/command/p1b5.val 0;set m2s publish hasp/display1/command/p1b7.val 0
     1:
       0          set m2s publish hasp/display1/command/p1b3.val 0;set m2s publish hasp/display1/command/p1b5.val 1;set m2s publish hasp/display1/command/p1b7.val 0
     2:
       0          set m2s publish hasp/display1/command/p1b3.val 0;set m2s publish hasp/display1/command/p1b5.val 0;set m2s publish hasp/display1/command/p1b7.val 1
     3:
   helper:
     NOTIFYDEV  global,du.Poolpumpe
     event      Aus
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   du.Poolpumpe
     timerevent Aus
     triggerDev du.Poolpumpe
     DOIF_eventa:
       cmd_nr: 3
       cmd: 3
       cmd_event: du.Poolpumpe
       cmd_3
     DOIF_eventas:
       cmd_nr: 3
       cmd: 3
       cmd_event: du.Poolpumpe
       state: cmd_3
     timerevents:
       Aus
     timereventsState:
       state: Aus
     triggerEvents:
       Aus
     triggerEventsState:
       state: Aus
   internals:
     all         du.Poolpumpe:STATE
   readings:
   trigger:
   uiState:
   uiTable:
Attributes:
   do         always
   room       MQTT2_DEVICE

Titel: Aw: openHASP per MQTT mit einem dummy verbinden
Beitrag von: Beta-User am 10 August 2025, 18:55:23
Sag ich doch: verquer...

Wenn (!!!) man MGB verwenden will, sollte man am IO auch die clientOrder passend setzen.

Aber: gleiche topics für subscribe und publish sind ein No-Go.

Kurz: nimm statt dummy für dieses Element am Display ein MQTT2_DEVICE und verzichte auf die komplett unnötigen DOIF (MGB  ist hier auch unnötig, aber könnte sinnvoll sein, nur halt nicht für diese Funktion am Display).