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
Wieso dummy? Klingt verquer...
Bitte beachte die angepinnten Threads, dann kann man vielleicht verstehen, was du eigentlich erreichen willst.
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
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).