FHEM2MQTT2FHEM ... und seine Hürden

Begonnen von TomLee, 24 Juni 2020, 12:32:08

Vorheriges Thema - Nächstes Thema

TomLee

Die MQTT2_CLIENT_Bridge sieht aktuell so aus:

17 ###############
18 #MQTT2_CLIENT_Bridge
19 #
20 name:MQTT2_CLIENT_general_bridge
21 filter:TYPE=MQTT2_DEVICE
22 desc:recommended to use this as general bridgeing device when using MQTT2_CLIENT as IO to get around missing CID info for distinguishing different popular devices<br>NOTE:<br>This might create a new MQTT2-device or change existing ones, especially destroy readingList attributes!
23 order:000001
24 #par:IODEVNAME;Name of the IO-Device; { AttrVal("DEVICE","IODev",undef) }
25 #par:DEVTYPE;TYPE of the device; { InternalVal("DEVICE","TYPE",undef)}
26 #par:DEVCID;CID of the device as written in the DEF; { InternalVal(AttrVal("DEVICE","IODev",""),"clientId","mosquitto") eq InternalVal("DEVICE","DEF","mosquitto") ? "MQTT2_GeneralBridge" : InternalVal("DEVICE","DEF","mosquitto")}
27 #par:NEWDEVROOM;Room of the calling device; {AttrVal("DEVCID","room","MQTT2_\DEVICE" )}
28 par:ICON;ICON as set, defaults to mqtt_bridge_2;{ AttrVal("DEVICE","icon","mqtt_bridge_2") }
29 attr DEVICE icon ICON
30 #defmod DEVCID MQTT2_\DEVICE DEVCID
31 attr DEVICE bridgeRegexp \
32   (tele|stat)[/]([^/]+)[/].*:.* "$2"\
33   shellies[/]([^/]+)[/].*:.* "$1"\
34   (zigbee2mqtt)[/].*:.* "$1"\
35   (ESPClient_[^/]+)[/].*:.* "$1"\
36   valetudo[/]([^/]+)[/].*:.* "$1"\
37   [^/]+[/](ems-esp[^/]+)[/].*:.* "$1"\
38   wallpanel[/]([^/]+)[/].*:.* "$1"\
39   (wled)[/]([^/]+)[/].*:.* "$1_$2"\
40   (go-eCharger)[/]([^/]+)[/].*:.* "go_eCharger_$2"\
41   (owntracks)[/]([^/:]+)[/]([^/:]+).*:.* "$1_$2$3"\
42   Advantech[/]([^/]+)[/].*:.* "$1"\
43   sonos[/](RINCON_[A-Z0-9]+):.* "$1"\
44   (sonos)[/][^/]+/.* "$1"\
45   (tvheadend)[/][^/:]+.* "$1"\
46   homeassistant/.*/config:.* ""
47 #attr DEVCID autocreate 1
48 attr DEVICE comment Do not use very open bridgeRegexp expressions! This might lead to irritating results...
49 #attr DEVCID room NEWDEVROOM
50 #attr DEVICE icon mqtt_bridge_2
51 attr DEVICE setStateList on off
52 #deleteattr DEVICE readingList
53 #deletereading -q DEVICE (?!associatedWith).*
54 #deleteattr DEVCID readingList
55 #deletereading -q DEVCID (?!associatedWith).*
56 #setreading DEVCID associatedWith DEVICE
57 #{ fhem "trigger $FW_wname JS:location.href='$FW_ME?detail=DEVCID'" if($cl && $cl->{TYPE} eq "FHEMWEB") }
58 farewell:template has been applied successfully. Be carefull when extending the brigeRegexp!
59 attr DEVCID model MQTT2_CLIENT_general_bridge
60 setreading DEVCID attrTemplateVersion 20200619


Auf einer 2.Instanz hab ich einen MQTT2_CLIENT definiert:

defmod M2CLIENT MQTT2_CLIENT 192.168.188.26:1883
attr M2CLIENT autocreate simple
attr M2CLIENT room zMQTT
attr M2CLIENT username Thomas

setstate M2CLIENT opened
setstate M2CLIENT 2020-06-24 11:24:07 state opened


Daraufhin wird automatisch ein Sammeldevice erstellt:

defmod MQTT2_M2CLIENT MQTT2_DEVICE M2CLIENT
attr MQTT2_M2CLIENT IODev M2CLIENT
attr MQTT2_M2CLIENT readingList M2CLIENT:ebusd/global/uptime:.* uptime\
M2CLIENT:ebusd/broadcast/vdatetime:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/bai/DateTime:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/bai/Status01:.* { json2nameValue($EVENT) }\
M2CLIENT:shellies/shelly1-59E540/relay/0:.* relay_0\
M2CLIENT:shellies/shelly1-59E540/input/0:.* input_0\
...


Wende ich auf dieses das MQTT2_CLIENT_general_bridge_Template anwende erscheint das Dialogfeld mit

Please define DEVCID first
Please define DEVCID first


das Device sieht dann so aus:

defmod MQTT2_M2CLIENT MQTT2_DEVICE M2CLIENT
attr MQTT2_M2CLIENT IODev M2CLIENT
attr MQTT2_M2CLIENT bridgeRegexp (tele|stat)[/]([^/]+)[/].*:.* "$2"\
  shellies[/]([^/]+)[/].*:.* "$1"\
  (zigbee2mqtt)[/].*:.* "$1"\
  (ESPClient_[^/]+)[/].*:.* "$1"\
  valetudo[/]([^/]+)[/].*:.* "$1"\
  [^/]+[/](ems-esp[^/]+)[/].*:.* "$1"\
  wallpanel[/]([^/]+)[/].*:.* "$1"\
  (wled)[/]([^/]+)[/].*:.* "$1_$2"\
  (go-eCharger)[/]([^/]+)[/].*:.* "go_eCharger_$2"\
  (owntracks)[/]([^/:]+)[/]([^/:]+).*:.* "$1_$2$3"\
  Advantech[/]([^/]+)[/].*:.* "$1"\
  sonos[/](RINCON_[A-Z0-9]+):.* "$1"\
  (sonos)[/][^/]+/.* "$1"\
  (tvheadend)[/][^/:]+.* "$1"\
  homeassistant/.*/config:.* ""
attr MQTT2_M2CLIENT comment Do not use very open bridgeRegexp expressions! This might lead to irritating results...
attr MQTT2_M2CLIENT icon mqtt_bridge_2
attr MQTT2_M2CLIENT readingList M2CLIENT:ebusd/global/uptime:.* uptime\
M2CLIENT:ebusd/broadcast/vdatetime:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/bai/DateTime:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/bai/Status01:.* { json2nameValue($EVENT) }\
M2CLIENT:mygateway1-out/3/2/1/0/23:.* 0_23
attr MQTT2_M2CLIENT room MQTT2_DEVICE
attr MQTT2_M2CLIENT setStateList on off

setstate MQTT2_M2CLIENT 2020-06-24 12:12:52 0_23 1556
setstate MQTT2_M2CLIENT 2020-06-24 12:14:22 0_name temp1
setstate MQTT2_M2CLIENT 2020-06-24 12:14:22 0_value 64.0
setstate MQTT2_M2CLIENT 2020-06-24 12:14:22 1_name temp1
setstate MQTT2_M2CLIENT 2020-06-24 12:14:22 2_name temp2
setstate MQTT2_M2CLIENT 2020-06-24 12:14:22 2_value 31.312
setstate MQTT2_M2CLIENT 2020-06-24 12:14:22 3_name temp1
setstate MQTT2_M2CLIENT 2020-06-24 12:14:22 3_value 0.0
setstate MQTT2_M2CLIENT 2020-06-24 12:14:22 4_name temp1
setstate MQTT2_M2CLIENT 2020-06-24 12:14:22 4_value 46.0
setstate MQTT2_M2CLIENT 2020-06-24 12:14:22 5_name pumpstate
setstate MQTT2_M2CLIENT 2020-06-24 12:14:22 5_value off
setstate MQTT2_M2CLIENT 2020-06-24 12:13:40 bdate_value 24.06.2020
setstate MQTT2_M2CLIENT 2020-06-24 12:13:40 btime_value 12:13:42
setstate MQTT2_M2CLIENT 2020-06-24 12:13:40 date_value 24.06.2020
setstate MQTT2_M2CLIENT 2020-06-24 12:13:40 dcfstate_value valid
setstate MQTT2_M2CLIENT 2020-06-24 12:13:40 temp2_value 31.312
setstate MQTT2_M2CLIENT 2020-06-24 12:13:40 time_value 12:13:41
setstate MQTT2_M2CLIENT 2020-06-24 12:14:10 uptime 4732377


Die Bridge macht ihren Dienst und vereinzelt alle Geräte, aber irgendwas stimmt doch nicht ?

Will mich damit nicht beschäftigen, hab bloss was von Testsystem und der Frage -> hier muss ich doch dann auch wieder anlernen usw. gelesen und mir gedacht das probierste mal aus die Geräte auf dem 2 Pi zu spiegeln, so das kein weiterer CUL bzw.  CC2531 Stick benötigt wird, das geht ja dann mit allen Geräten nicht nur denen die MQTT sprechen.

Gruß

Thomas

Beta-User

Ist ein bug, fix habe ich eben eingecheckt.

(Nach einer Diskussion jüngst mit Rudi dazu habe ich die Funktion "Sammeldevice" und Bridge wieder auf einem Device vereint...)
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

TomLee

funzt  :)

Zitattemplate has been applied successfully. Be carefull when extending the brigeRegexp!

Jetzt gehts doch weiter  >:( will ich gar nicht. Warum füllt sich die RL der Bridge mit den ebus-topics, statt Devices angelegt werden ?

Beim Client müsst ich jetzt doch auch auf complex umstellen ?

defmod MQTT2_M2CLIENT MQTT2_DEVICE M2CLIENT
attr MQTT2_M2CLIENT IODev M2CLIENT
attr MQTT2_M2CLIENT bridgeRegexp (tele|stat)[/]([^/]+)[/].*:.* "$2"\
  shellies[/]([^/]+)[/].*:.* "$1"\
  (zigbee2mqtt)[/].*:.* "$1"\
  (ESPClient_[^/]+)[/].*:.* "$1"\
  valetudo[/]([^/]+)[/].*:.* "$1"\
  [^/]+[/](ems-esp[^/]+)[/].*:.* "$1"\
  wallpanel[/]([^/]+)[/].*:.* "$1"\
  (wled)[/]([^/]+)[/].*:.* "$1_$2"\
  (go-eCharger)[/]([^/]+)[/].*:.* "go_eCharger_$2"\
  (owntracks)[/]([^/:]+)[/]([^/:]+).*:.* "$1_$2$3"\
  Advantech[/]([^/]+)[/].*:.* "$1"\
  sonos[/](RINCON_[A-Z0-9]+):.* "$1"\
  (sonos)[/][^/]+/.* "$1"\
  (tvheadend)[/][^/:]+.* "$1"\
  homeassistant/.*/config:.* ""
attr MQTT2_M2CLIENT comment Do not use very open bridgeRegexp expressions! This might lead to irritating results...
attr MQTT2_M2CLIENT icon mqtt_bridge_2
attr MQTT2_M2CLIENT model MQTT2_CLIENT_general_bridge
attr MQTT2_M2CLIENT readingList M2CLIENT:ebusd/global/uptime:.* uptime\
M2CLIENT:ebusd/broadcast/vdatetime:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/bai/DateTime:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/bai/HwcPostrunTime/get:.* get\
M2CLIENT:ebusd/bai/StorageTempDesired/get:.* get\
M2CLIENT:ebusd/bai/FanHours/get:.* get\
M2CLIENT:ebusd/bai/HcHours/get:.* get\
M2CLIENT:ebusd/bai/HwcHours/get:.* get\
M2CLIENT:ebusd/bai/HwcStarts/get:.* get\
M2CLIENT:ebusd/bai/RemainingBoilerblocktime/get:.* get\
M2CLIENT:ebusd/bai/SDFlame/get:.* get\
M2CLIENT:ebusd/bai/WaterPressure/get:.* get\
M2CLIENT:ebusd/bai/HcStarts/get:.* get\
M2CLIENT:ebusd/bai/CounterStartattempts1/get:.* get\
M2CLIENT:ebusd/bai/CounterStartattempts2/get:.* get\
M2CLIENT:ebusd/bai/CounterStartAttempts3/get:.* get\
M2CLIENT:ebusd/bai/CounterStartAttempts4/get:.* get\
M2CLIENT:ebusd/bai/FlowHysteresisON/get:.* get\
M2CLIENT:ebusd/bai/FlowHysteresisOff/get:.* get\
M2CLIENT:ebusd/700/PrEnergySumHc/get:.* get\
M2CLIENT:ebusd/700/PrEnergySumHwc/get:.* get\
M2CLIENT:ebusd/700/PrFuelSumHc/get:.* get\
M2CLIENT:ebusd/700/HwcOpMode/get:.* get\
M2CLIENT:ebusd/700/HwcSFMode/get:.* get\
M2CLIENT:ebusd/700/CylinderChargeHyst/get:.* get\
M2CLIENT:ebusd/700/Hc1FlowTemp/get:.* get\
M2CLIENT:ebusd/700/Hc1Status/get:.* get\
M2CLIENT:ebusd/700/Hc1PumpStatus/get:.* get\
M2CLIENT:ebusd/700/z1DayTemp/get:.* get\
M2CLIENT:ebusd/700/z1NightTemp/get:.* get\
M2CLIENT:ebusd/700/HwcLockTime/get:.* get\
M2CLIENT:ebusd/700/ccTimer\x5c\x2eSaturday/get:.* get\
M2CLIENT:ebusd/700/DisplayedOutsideTemp/get:.* get\
M2CLIENT:ebusd/700/Hc1ExcessTemp/get:.* get\
M2CLIENT:ebusd/700/PrFuelSumHcThisMonth/get:.* get\
M2CLIENT:ebusd/700/PartloadHcKW/get:.* get\
M2CLIENT:ebusd/700/Hc1HeatCurve/get:.* get\
M2CLIENT:ebusd/700/HwcTempDesired/get:.* get\
M2CLIENT:ebusd/700/Hc1MinFlowTempDesired/get:.* get\
M2CLIENT:ebusd/700/PumpAdditionalTime/get:.* get\
M2CLIENT:ebusd/700/MaxCylinderChargeTime/get:.* get\
M2CLIENT:ebusd/bai/StorageTempDesired:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/bai/FanHours:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/bai/HcHours:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/bai/HwcHours:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/bai/HwcStarts:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/bai/RemainingBoilerblocktime:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/bai/WaterPressure:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/bai/HcStarts:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/bai/CounterStartattempts1:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/bai/CounterStartattempts2:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/bai/CounterStartAttempts3:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/bai/CounterStartAttempts4:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/bai/FlowHysteresisON:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/bai/FlowHysteresisOff:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/700/PrEnergySumHc:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/700/PrEnergySumHwc:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/700/HwcOpMode:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/700/HwcSFMode:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/700/CylinderChargeHyst:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/700/Hc1FlowTemp:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/700/Hc1Status:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/700/Hc1PumpStatus:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/700/z1DayTemp:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/700/z1NightTemp:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/700/HwcLockTime:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/700/ccTimer\x5c\x2eSaturday:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/700/DisplayedOutsideTemp:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/700/Hc1ExcessTemp:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/700/Hc1HeatCurve:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/700/HwcTempDesired:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/700/Hc1MinFlowTempDesired:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/700/PumpAdditionalTime:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/700/MaxCylinderChargeTime:.* { json2nameValue($EVENT) }\
M2CLIENT:ebusd/bai/Status01:.* { json2nameValue($EVENT) }
attr MQTT2_M2CLIENT room MQTT2_DEVICE
attr MQTT2_M2CLIENT setStateList on off

setstate MQTT2_M2CLIENT 2020-06-24 12:50:43 0_name temp1
setstate MQTT2_M2CLIENT 2020-06-24 12:50:43 0_value 62.0
setstate MQTT2_M2CLIENT 2020-06-24 12:50:43 1_name temp1
setstate MQTT2_M2CLIENT 2020-06-24 12:50:43 2_name temp2
setstate MQTT2_M2CLIENT 2020-06-24 12:50:43 2_value 32.562
setstate MQTT2_M2CLIENT 2020-06-24 12:50:43 3_name temp1
setstate MQTT2_M2CLIENT 2020-06-24 12:50:43 3_value 0.0
setstate MQTT2_M2CLIENT 2020-06-24 12:50:43 4_name temp1
setstate MQTT2_M2CLIENT 2020-06-24 12:50:43 4_value 46.0
setstate MQTT2_M2CLIENT 2020-06-24 12:50:43 5_name pumpstate
setstate MQTT2_M2CLIENT 2020-06-24 12:50:43 5_value off
setstate MQTT2_M2CLIENT 2020-06-24 12:46:26 attrTemplateVersion 20200624
setstate MQTT2_M2CLIENT 2020-06-24 12:50:52 bdate_value 24.06.2020
setstate MQTT2_M2CLIENT 2020-06-24 12:50:52 btime_value 12:50:53
setstate MQTT2_M2CLIENT 2020-06-24 12:48:32 calibrationv_value 5
setstate MQTT2_M2CLIENT 2020-06-24 12:49:52 date_value 24.06.2020
setstate MQTT2_M2CLIENT 2020-06-24 12:50:52 dcfstate_value valid
setstate MQTT2_M2CLIENT 2020-06-24 12:48:27 energy4_value 0
setstate MQTT2_M2CLIENT 2020-06-24 12:48:24 get
setstate MQTT2_M2CLIENT 2020-06-24 12:48:25 hoursum2_value 1226
setstate MQTT2_M2CLIENT 2020-06-24 12:48:25 minutes0_value 0
setstate MQTT2_M2CLIENT 2020-06-24 12:48:32 minutes2_value 60
setstate MQTT2_M2CLIENT 2020-06-24 12:48:27 opmode_value auto
setstate MQTT2_M2CLIENT 2020-06-24 12:48:25 press_value 2.133
setstate MQTT2_M2CLIENT 2020-06-24 12:48:25 sensor_value ok
setstate MQTT2_M2CLIENT 2020-06-24 12:48:27 sfmode_value auto
setstate MQTT2_M2CLIENT 2020-06-24 12:48:26 temp0_value 37
setstate MQTT2_M2CLIENT 2020-06-24 12:50:52 temp2_value 32.562
setstate MQTT2_M2CLIENT 2020-06-24 12:48:27 temp_value 8.00
setstate MQTT2_M2CLIENT 2020-06-24 12:48:32 tempv_value 31.062
setstate MQTT2_M2CLIENT 2020-06-24 12:49:52 time_value 12:49:52
setstate MQTT2_M2CLIENT 2020-06-24 12:50:57 uptime 4734585



Beta-User

ebus ist nicht in der bridgeRegexp (ergänze ich bei Gelegenheit), von daher ist das Verhalten "normal".

MAn. brauchst du auch nicht auf complex umstellen, wenn du die ebus-Devices später via attrTemplate konfigurierst, sollten die erweiterten json2nameValue()-Funktionen darüber passend eingestellt werden, wo es erforderlich ist.
(Hatte ich nicht an anderer Stelle geschrieben, dass das "General-Bridge"-templaate irgendwie mangels Rückmeldung vermutlich weiter verbesserungsfähig ist).
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

TomLee

MAn. brauchst du auch nicht auf complex umstellen, wenn du die ebus-Devices später via attrTemplate konfigurierst,

hier wird nix mehr umgestellt oder konfiguriert, nur noch ein delete <devicename> auf alle Geräte die benötigt waren um das nachzustellen, fertig.

Wollts bloss vorher ausprobieren bevor ich das vlt. wirklich  ;D als weiteren Ansatz ins Spiel bringe Geräte von beiden Pis aus zu bedienen.

Beta-User

Von mir aus kann ruhig jemand den Vorreiter machen für eine "multipoint"-Bedienung/Readingsverteilung via MQTT, das wäre jetzt "für alle" vom Lernen her vermutlich der nächste Schritt; macht also Sinn, wenn das jemand vorexerziert, der die vorhandenen "Mittel und Wege" kennt.

Was man allerdings beachten sollte: Die "set"-Anweisungen muss man mAn. in "autocreate"-Umgebungen "rechtzeitig" rausfiltern - am besten via ignoreRegexp am IO. Wenn es da mal "gesammelte Erkenntnisse" gibt, die über den allgemeinen Ratschlag rausgehen, doch die homeassistant-autodiscovery-Meldungen und Tasmota-Set-Anweisungen da reinzunehmen (was via attrTemplate schon geht), wäre das vermutlich auch gut im Wiki aufgehoben (@Praxisbeispiele?).

Wenn wir das von unserer Seite her steuern, kommt es auch nicht zu solchen nicht ganz optiomalen Effekten, das jemand "irgendwo" was reinbastelt, wie jüngst im Artikel "MQTT" passiert. Da hat jemand OpenMQTTGateway eingepflegt, was zwar an sich nicht verkehrt ist, aber eben auch nicht optimal, da dieses Interface (zumindest im Moment noch) etwas exotisch ist...
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

TomLee

Hat du eine Idee weshalb auf dem Haupt.- und versuchsweise auch auf dem Test-System das Modul nicht geladen werden kann ?

defmod M2GB MQTT_GENERIC_BRIDGE
attr M2GB IODev mqtt
attr M2GB room Test1
attr M2GB stateFormat dev: device-count in: incoming-count out: outgoing-count


ZitatCannot load module MQTT_GENERIC_BRIDGE

Die Datei ist vorhanden und die Rechte stimmen auch !

Beta-User

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

TomLee

Ja, meine da kommen Erinnerungen wieder, hab das schonmal getestet, aber lese jetzt beim überfliegen der entsprechenden Threads, commandref und Wiki nicht welche bzw. das welche zusätzlich benötigt werden, wird nirgendwo erwähnt.

Die Definition auf dem Hauptsystem kann man ja wieder löschen, aber das noch zusätzliche libs installiert werden müssen um mal kurz zu schauen wie MQTT_GENERIC_BRIDGE tickt,  ist/wäre schon bescheiden.

rudolfkoenig

MQTT_GENERIC_BRIDGE laedt leider das alte MQTT Modul, und bei dessen commandref Eintrag steht, dass man Net::MQTT von CPAN Installieren muss. Vmtl. steht eine (mehr oder weniger) verstaendliche Meldung auch in FHEM.log

TomLee


Beta-User

@Rudi: Bezogen auf unsere Diskussion neulich: Es ist irritierend, dass (anscheinend nur) libmodule-pluggable-perl tatsächlich nachinstalliert werden muß, nicht Net::MQTT (das wird mit FHEM unter lib ausgeliefert). (Ich hatte das damals nur recht kurz angetestet, kann also sein, dass im längeren Betrieb doch noch was von den anderen beiden Modulen benötigt wird, die noch im Wiki zu MQTT-alt gelistet sind).

@TomLee: Wir können das gerne im Wiki noch deutlicher rausarbeiten, wie gesagt, das was da heute steht ist nur das Ergebnis einer kurzen Testphase eines einzelnen Beta-Testers...
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

TomLee

Nach einem apt-get install libmodule-pluggable-perl klappt alles wie gewünscht.

Testweise nur ein Device, eine IT-Steckdose (it_Steckdose1), die Definition der MQTT_GENERIC_BRIDGE sieht dann so aus.

defmod MGB MQTT_GENERIC_BRIDGE mqtt it_Steckdose1
attr MGB IODev MQTT2_Server

setstate MGB 2020-06-24 20:00:05 device-count 1
setstate MGB 2020-06-24 20:04:03 incoming-count 1697
setstate MGB 2020-06-24 20:02:59 outgoing-count 19
setstate MGB 2020-06-24 20:02:59 transmission-state outgoing publish sent
setstate MGB 2020-06-24 20:02:59 updated-reading-count 6
setstate MGB 2020-06-24 19:23:07 updated-set-count 0


Ich möchte das der Status des Geräts it_Steckdose1 aus der Hauptinstanz auch an das Device auf der 2. Pi übertragen wird (mqttPublish) und auch auf der 2. Pi schalten können (mqttSubscribe).

Das Device in der  Hauptinstanz hab ich dementsprechend wie folgt ergänzt, das userattr wird von der MQTT_GENERIC_BRIDGE gesetzt :

defmod it_Steckdose1 IT 0F0F00000F FF F0
attr it_Steckdose1 userattr mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttForward:all,none mqttPublish:textField-long mqttSubscribe:textField-long
attr it_Steckdose1 IODev sduino
attr it_Steckdose1 alexaName heizung
attr it_Steckdose1 mqttPublish state:topic=haus/wohnzimmer/steckdosen/state
attr it_Steckdose1 mqttSubscribe state:topic=haus/wohnzimmer/steckdosen/set
attr it_Steckdose1 room IT

setstate it_Steckdose1 on
setstate it_Steckdose1 2019-03-28 21:53:20 protocol V1
setstate it_Steckdose1 2020-06-24 20:02:59 state on


Auf der 2. Pi sehe ich jetzt das in der ReadingList der MQTT2_CLIENT_general_bridge folgender Eintrag automatisch ergänzt wird, nachdem ich die Steckdose einmal geschalten habe.

M2CLIENT:haus/wohnzimmer/steckdosen/state:.* state

Diesen Topic-Pfad lösche ich aus der ReadingList der MQTT2_CLIENT_general_bridge und trage ihn in die ReadingList des zuvor von Hand erstellten leeren MQTT2_DEVICE ein:

define MQTT2_it_Steckdose MQTT2_DEVICE

und ergänze noch die setList wie folgt:

defmod MQTT2_it_Steckdose MQTT2_DEVICE
attr MQTT2_it_Steckdose IODev M2CLIENT
attr MQTT2_it_Steckdose readingList haus/wohnzimmer/steckdosen/state:.* state
attr MQTT2_it_Steckdose room MQTT2_DEVICE
attr MQTT2_it_Steckdose setList off:noArg haus/wohnzimmer/steckdosen/set off\
on:noArg haus/wohnzimmer/steckdosen/set on\
toggle:noArg haus/wohnzimmer/steckdosen/set toggle

setstate MQTT2_it_Steckdose off
setstate MQTT2_it_Steckdose 2020-06-24 20:30:14 state off





Was die zigbee2mqtt-Devices angeht wird bei mir folgendes Gerät automatisch von der MQTT2_CLIENT_general_bridge angelegt:

defmod MQTT2_zigbee2mqtt MQTT2_DEVICE zigbee2mqtt
attr MQTT2_zigbee2mqtt IODev M2CLIENT
attr MQTT2_zigbee2mqtt readingList zigbee2mqtt/0x00158d00031c22fa:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d000302cc1e:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d00032c6d54:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d000340eac3/set:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d0003274a6c/set:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d000360ba24/set:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d000340eac3:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d0003274a6c:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d000360ba24:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d00028aedf7:.* { json2nameValue($EVENT) }\
zigbee2mqtt/bridge/config:.* { json2nameValue($EVENT) }\
zigbee2mqtt/bridge/state:.* state\
zigbee2mqtt/0x00158d0002fdc5d7:.* { json2nameValue($EVENT) }
attr MQTT2_zigbee2mqtt room MQTT2_DEVICE

setstate MQTT2_zigbee2mqtt OFF
setstate MQTT2_zigbee2mqtt 2020-06-24 19:42:00 action wakeup
setstate MQTT2_zigbee2mqtt 2020-06-24 19:06:49 associatedWith MQTT2_M2CLIENT
setstate MQTT2_zigbee2mqtt 2020-06-24 20:55:42 battery 100
setstate MQTT2_zigbee2mqtt 2020-06-24 20:51:32 brightness 254
setstate MQTT2_zigbee2mqtt 2020-06-24 20:52:57 illuminance 412
setstate MQTT2_zigbee2mqtt 2020-06-24 20:55:42 linkquality 0
setstate MQTT2_zigbee2mqtt 2020-06-24 19:07:37 log_level info
setstate MQTT2_zigbee2mqtt 2020-06-24 20:53:18 occupancy false
setstate MQTT2_zigbee2mqtt 2020-06-24 19:07:37 permit_join true
setstate MQTT2_zigbee2mqtt 2020-06-24 20:51:32 state OFF
setstate MQTT2_zigbee2mqtt 2020-06-24 20:55:42 voltage 3005


wende ich darauf das zigbee2mqtt_bridge-Template an, sieht das Device so aus, nachdem ich ein paar Bulbs geschalten habe:

defmod MQTT2_zigbee2mqtt MQTT2_DEVICE zigbee2mqtt
attr MQTT2_zigbee2mqtt IODev M2CLIENT
attr MQTT2_zigbee2mqtt bridgeRegexp zigbee2mqtt/([A-Za-z0-9._]*)[/]?.*:.* "zigbee_$1"
attr MQTT2_zigbee2mqtt comment To check for new updates of the deamon software, you might want to use a separate HTTPMOD device. See HTTPMOD template zigbee2mqtt_daemon_updates for further details.
attr MQTT2_zigbee2mqtt devicetopic zigbee2mqtt
attr MQTT2_zigbee2mqtt getList devicelist:noArg log $DEVICETOPIC/bridge/config/devices\
  networkmap_raw:noArg raw $DEVICETOPIC/bridge/networkmap raw\
  networkmap_graphviz:noArg graphviz $DEVICETOPIC/bridge/networkmap graphviz
attr MQTT2_zigbee2mqtt model zigbee2mqtt_bridge
attr MQTT2_zigbee2mqtt readingList zigbee2mqtt/0x00158d0003274a6c/set:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d0003274a6c:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d000360ba24/set:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d000360ba24:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d000340eac3/set:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d000340eac3:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d00032c6d54:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d00031c22fa:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d000302cc1e:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d00028aedf7:.* { json2nameValue($EVENT) }
attr MQTT2_zigbee2mqtt room MQTT2_DEVICE
attr MQTT2_zigbee2mqtt setList log_level:debug,info,warn,error $DEVICETOPIC/bridge/config/log_level $EVTPART1\
  permit_join:true,false $DEVICETOPIC/bridge/config/permit_join $EVTPART1\
  remove:textField $DEVICETOPIC/bridge/config/remove $EVTPART1\
  ota_update:textField $DEVICETOPIC/bridge/ota_update/update $EVTPART1\
  ota_update_check:textField $DEVICETOPIC/bridge/ota_update/check $EVTPART1\
  y_device_setting:textField $DEVICETOPIC/$EVTPART1/set {"$EVTPART2": "$EVTPART3"}\
  x_bind:textField $DEVICETOPIC/bridge/bind/$EVTPART1 $EVTPART2\
  x_bind_unbind:textField $DEVICETOPIC/bridge/unbind/$EVTPART1 $EVTPART2\
  x_device_options:textField $DEVICETOPIC/bridge/config/device_options {"friendly_name":"$EVTPART1","options": {"$EVTPART2": "$EVTPART3"}}\
  x_group_add_to:textField $DEVICETOPIC/bridge/group/$EVTPART1/add $EVTPART2\
  x_group_rm_from:textField $DEVICETOPIC/bridge/group/$EVTPART1/remove $EVTPART2\
  x_group_rm_from_all:textField $DEVICETOPIC/bridge/group/$EVTPART1/remove_all $EVTPART2\
  x_group_add_group:textField $DEVICETOPIC/bridge/config/add_group $EVTPART1\
  x_group_rm_group:textField $DEVICETOPIC/bridge/config/remove_group $EVTPART1\
  z_elapsed:textField $DEVICETOPIC/bridge/config/elapsed $EVTPART1\
  z_last_seen:disable,ISO_8601,epoch,ISO_8601_local $DEVICETOPIC/bridge/config/last_seen $EVTPART1\
  z_ban:textField $DEVICETOPIC/bridge/config/ban $EVTPART1\
  z_rename:textField $DEVICETOPIC/bridge/config/rename  {"old":"$EVTPART1","new":"$EVTPART2"}\
  z_reset_CC:noArg $DEVICETOPIC/bridge/config/reset
attr MQTT2_zigbee2mqtt setStateList on off

setstate MQTT2_zigbee2mqtt OFF
setstate MQTT2_zigbee2mqtt 2020-06-24 21:21:44 action wakeup
setstate MQTT2_zigbee2mqtt 2020-06-24 21:21:44 associatedWith MQTT2_M2CLIENT
setstate MQTT2_zigbee2mqtt 2020-06-24 21:12:32 attrTemplateVersion 20200522 or prior
setstate MQTT2_zigbee2mqtt 2020-06-24 21:25:37 battery 100
setstate MQTT2_zigbee2mqtt 2020-06-24 21:27:11 brightness 254
setstate MQTT2_zigbee2mqtt 2020-06-24 21:25:19 illuminance 167
setstate MQTT2_zigbee2mqtt 2020-06-24 21:27:11 linkquality 0
setstate MQTT2_zigbee2mqtt 2020-06-24 21:25:37 occupancy false
setstate MQTT2_zigbee2mqtt 2020-06-24 21:27:11 state OFF
setstate MQTT2_zigbee2mqtt 2020-06-24 21:25:37 voltage 3025


es werden keine neuen Geräte angelegt, hab mich noch nicht weiter mit beschäftigt, für heut ist mit dem Thema Schluß.

Doch alles nicht so einfach wie gedacht  :D

TomLee

passe ich getList, readingList und setList händisch an, schalte ein paar Bulbs landen die ganzen Topic-Pfade wieder in der RL der zigbee2mqtt_bridge:

defmod MQTT2_zigbee2mqtt MQTT2_DEVICE zigbee2mqtt
attr MQTT2_zigbee2mqtt IODev M2CLIENT
attr MQTT2_zigbee2mqtt bridgeRegexp zigbee2mqtt/([A-Za-z0-9._]*)[/]?.*:.* "zigbee_$1"
attr MQTT2_zigbee2mqtt comment To check for new updates of the deamon software, you might want to use a separate HTTPMOD device. See HTTPMOD template zigbee2mqtt_daemon_updates for further details.
attr MQTT2_zigbee2mqtt devicetopic zigbee2mqtt
attr MQTT2_zigbee2mqtt getList devicelist:noArg log zigbee2mqtt/bridge/config/devices\
  networkmap_raw:noArg raw zigbee2mqtt/bridge/networkmap raw\
  networkmap_graphviz:noArg graphviz zigbee2mqtt/bridge/networkmap graphviz
attr MQTT2_zigbee2mqtt model zigbee2mqtt_bridge
attr MQTT2_zigbee2mqtt readingList zigbee2mqtt/bridge/state:.* state\
  zigbee2mqtt/bridge/config/devices:.* {}\
  zigbee2mqtt/bridge/config/log_level:.* log_level\
  zigbee2mqtt/bridge/config/permit_join:.* permit_join\
  zigbee2mqtt/bridge/config/rename:.* { json2nameValue($EVENT, 'rename_') }\
  zigbee2mqtt/bridge/log:.*\"type\".\"devices\".\"message\".* devices\
  zigbee2mqtt/bridge/log:.* log\
  zigbee2mqtt/bridge/networkmap:.* {}\
  zigbee2mqtt/bridge/networkmap/graphviz:.* graphviz\
  zigbee2mqtt/bridge/networkmap/raw:.* raw\
  zigbee2mqtt/bridge/config:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d0003274a6c/set:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d0003274a6c:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d000360ba24/set:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d000360ba24:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d000340eac3/set:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d000340eac3:.* { json2nameValue($EVENT) }\
zigbee2mqtt/0x00158d00032c6d54:.* { json2nameValue($EVENT) }
attr MQTT2_zigbee2mqtt room MQTT2_DEVICE
attr MQTT2_zigbee2mqtt setList log_level:debug,info,warn,error zigbee2mqtt/bridge/config/log_level $EVTPART1\
  permit_join:true,false zigbee2mqtt/bridge/config/permit_join $EVTPART1\
  remove:textField zigbee2mqtt/bridge/config/remove $EVTPART1\
  y_device_setting:textField zigbee2mqtt/$EVTPART1/set {"$EVTPART2": "$EVTPART3"}\
  x_bind:textField zigbee2mqtt/bridge/bind/$EVTPART1 $EVTPART2\
  x_bind_unbind:textField zigbee2mqtt/bridge/unbind/$EVTPART1 $EVTPART2\
  x_device_options:textField zigbee2mqtt/bridge/config/device_options {"friendly_name":"$EVTPART1","options": {"$EVTPART2": "$EVTPART3"}}\
  x_group_add_to:textField zigbee2mqtt/bridge/group/$EVTPART1/add $EVTPART2\
  x_group_rm_from:textField zigbee2mqtt/bridge/group/$EVTPART1/remove $EVTPART2\
  x_group_rm_from_all:textField zigbee2mqtt/bridge/group/$EVTPART1/remove_all $EVTPART2\
  x_group_add_group:textField zigbee2mqtt/bridge/config/add_group $EVTPART1\
  x_group_rm_group:textField zigbee2mqtt/bridge/config/remove_group $EVTPART1\
  z_elapsed:textField zigbee2mqtt/bridge/config/elapsed $EVTPART1\
  z_last_seen:textField zigbee2mqtt/bridge/config/last_seen $EVTPART1\
  z_ban:textField zigbee2mqtt/bridge/config/ban $EVTPART1\
  z_rename:textField zigbee2mqtt/bridge/config/rename  {"old":"$EVTPART1","new":"$EVTPART2"}\
  z_reset_CC:noArg zigbee2mqtt/bridge/config/reset
attr MQTT2_zigbee2mqtt setStateList on off

setstate MQTT2_zigbee2mqtt ON
setstate MQTT2_zigbee2mqtt 2020-06-25 07:12:08 associatedWith MQTT2_M2CLIENT
setstate MQTT2_zigbee2mqtt 2020-06-25 07:01:32 attrTemplateVersion 20200522 or prior
setstate MQTT2_zigbee2mqtt 2020-06-25 07:13:50 battery 91
setstate MQTT2_zigbee2mqtt 2020-06-25 07:10:55 brightness 254
setstate MQTT2_zigbee2mqtt 2020-06-25 07:09:37 devices {"type":"devices","message":[{"ieeeAddr":"0x00158d0002fdc5d7","type":"Router","model":"404006/404008/404004","friendly_name":"0x00158d0002fdc5d7"},{"ieeeAddr":"0x00158d00028aedf7","type":"EndDevice","model":"MFKZQ01LM","friendly_name":"0x00158d00028aedf7"},{"ieeeAddr":"0x00158d0003274a6c","type":"Router","model":"404006/404008/404004","friendly_name":"0x00158d0003274a6c"},{"ieeeAddr":"0x00158d000340eac3","type":"Router","model":"404006/404008/404004","friendly_name":"0x00158d000340eac3"},{"ieeeAddr":"0x00158d000360ba24","type":"Router","model":"404006/404008/404004","friendly_name":"0x00158d000360ba24"},{"ieeeAddr":"0x00158d00032c6d54","type":"EndDevice","model":"RTCGQ01LM","friendly_name":"0x00158d00032c6d54"},{"ieeeAddr":"0x00158d00031c22fa","type":"EndDevice","model":"RTCGQ01LM","friendly_name":"0x00158d00031c22fa"},{"ieeeAddr":"0x00158d000302cc1e","type":"EndDevice","model":"RTCGQ11LM","friendly_name":"0x00158d000302cc1e"}]}
setstate MQTT2_zigbee2mqtt 2020-06-25 07:06:03 illuminance 502
setstate MQTT2_zigbee2mqtt 2020-06-25 07:13:50 linkquality 0
setstate MQTT2_zigbee2mqtt 2020-06-25 07:09:37 log {"type":"devices","message":[{"ieeeAddr":"0x00158d0002fdc5d7","type":"Router","model":"404006/404008/404004","friendly_name":"0x00158d0002fdc5d7"},{"ieeeAddr":"0x00158d00028aedf7","type":"EndDevice","model":"MFKZQ01LM","friendly_name":"0x00158d00028aedf7"},{"ieeeAddr":"0x00158d0003274a6c","type":"Router","model":"404006/404008/404004","friendly_name":"0x00158d0003274a6c"},{"ieeeAddr":"0x00158d000340eac3","type":"Router","model":"404006/404008/404004","friendly_name":"0x00158d000340eac3"},{"ieeeAddr":"0x00158d000360ba24","type":"Router","model":"404006/404008/404004","friendly_name":"0x00158d000360ba24"},{"ieeeAddr":"0x00158d00032c6d54","type":"EndDevice","model":"RTCGQ01LM","friendly_name":"0x00158d00032c6d54"},{"ieeeAddr":"0x00158d00031c22fa","type":"EndDevice","model":"RTCGQ01LM","friendly_name":"0x00158d00031c22fa"},{"ieeeAddr":"0x00158d000302cc1e","type":"EndDevice","model":"RTCGQ11LM","friendly_name":"0x00158d000302cc1e"}]}
setstate MQTT2_zigbee2mqtt 2020-06-25 07:13:50 occupancy false
setstate MQTT2_zigbee2mqtt 2020-06-25 07:10:06 raw [{"ieeeAddr":"0x00158d0002fdc5d7","nwkAddr":55335,"lqi":0,"parent":"0x00124b0018ed284e","status":"offline"},{"ieeeAddr":"0x00158d0003274a6c","nwkAddr":33849,"lqi":1,"parent":"0x00124b0018ed284e","status":"offline"},{"ieeeAddr":"0x00158d000340eac3","nwkAddr":55164,"lqi":1,"parent":"0x00124b0018ed284e","status":"offline"},{"ieeeAddr":"0x00158d000360ba24","nwkAddr":53893,"lqi":1,"parent":"0x00124b0018ed284e","status":"offline"},{"ieeeAddr":"0x00158d00031c22fa","nwkAddr":15146,"lqi":65,"parent":"0x00124b0018ed284e","status":"online"}]
setstate MQTT2_zigbee2mqtt 2020-06-25 07:10:55 state ON
setstate MQTT2_zigbee2mqtt 2020-06-25 07:13:50 voltage 2985


edit:

Denkfehler mit dem händischen anpassen, ist ja gar nicht nötig gewesen mit dem händischen anpassen, denke nie an das Attribut devicetopic das ging irgendwie zwischendurch an mir vorbei.
Trotzdem landen die Topic-Pfade in dem zigbee2mqtt_bridge-Device, keine Geräte werden vereinzelt.


Beta-User

...jetzt kommen bei mir Erinnerungen hoch...

Vorab kurz zu den set-Zweigen: Wie geschrieben, muß man sich darum gesondert kümmern und am besten diese Teile über eine ignoreRegexp am IO "entsorgen". In der Hinsicht könnten wir allenfalls eine Art "typisierter Vorschlag" machen, was die von einem Template eventuell erkennbare Struktur angeht (z.B.  fhemnn/.*/set), aber das erschlägt leider die ganzen set-Zweige von "irgendwelchen" Diensten wie (sonos|zigbee|.*)2mqtt vermutlich nicht so einfach (wobei man ggf. mal den Versuch unternehmen könnte, das 2mqtt als "General-Präfix" iVm. dem set-Ende zu verwenden?)...

Zum Rest:
Da war mal ein Thread (v.a. mit Rudi und mir), bei dem es um die interne Verwaltung der bridgeRegexp-Ausdrücke ging. Fazit: alle werden in einem internen Hash gesammelt, die Auswertung auf matches bei unbekannten Topics ist zufällig und nicht vorhersehbar.

Ergo: Wir brauchen im General-Bridge-template "schärfere" bridgeRegexp-Ausdrücke, die optimalerweise nur bei den  Messages greift, die auch später an das jeweilige zentrale Gerät gehen sollen.

Bezogen auf zigbee2mqtt bedeutet das, dass wir sinnvollerweise nur auf den "bridge"-Topicbranch matchen, einen entsprechenden Vorschlag habe ich eben ins svn geschoben, den ebus habe ich vorläufig mal rausgenommen...

Beim Rest (ebus, ems-esp, sonos2mqtt usw.) müssen wir uns das nochmal ansehen. Da kann man sicher manches noch ergänzen bzw. verbessern, das braucht aber vermutlich noch etwas Gehirnschmalz und erst sollte das Prinzip der begrenzteren bridgeRegexp an sich bestätigt sein (?).
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