Zigbee-Anbindung mit Raspbee-Modul: Per Hue oder zigbee2mqtt?

Begonnen von dadoc, 23 Januar 2023, 12:14:56

Vorheriges Thema - Nächstes Thema

dadoc

Hallo zusammen,
nach vielen Jahren mit FS20, Homematic, Homematic IP und Homebrew-Devices habe ich mich aus Interesse nun mal in den Zigbee-Bereich gewagt, wo ich ich nun praktisch wieder in der Anfängerklasse gelandet bin ;-) Das das ganze Zigbee-Thema sehr dynamisch ist und die diversen Anleitungen und Wiki-Einträge teilweise noch unvollständige WIP sind, fand ich das alles nicht ganz trivial (und bin gern bereit, Infos im Wiki beizusteuern, wenn ich erst einmal alles zurecht gerückt habe...).
Ziel ist es, eine kleine Wohnung mit einer minimalen HA auszustatten, die auch ohne permanente Internetverbindung funktioniert. Folgende Komponenten stehen auf der Liste:

  • FritzBox 6490 für WLAN, gelegentlichen Internetzugang und GSM-/CSV-Telefonie über USB-Stick (W1208/1209) und SIM-Karte
    Raspi 3 mit Raspbee II für fhem und Mosquitto
  • 9 Rollladensteuerungen
  • 2 Türsensoren, die verhindern sollen, dass die zugehörigen Rollläden geschlossen werden, wenn die (nach außen öffnenden) Balkontüren offen sind
  • 5 Heizkörperventile
  • evtl. diverse Zigbee-Leuchtmittel, -Schaltsteckdosen usw.
  • (alternativ hätte ich noch das Lidl Silvercrest USB-Gateway, dessen Firmware man wohl auch "befreien" könnte; habe mich aber entschieden, es erst einmal mit dem Raspbee II zu versuchen)
Nach vielen Stunden des Lesens, Ausprobierens und mehrmaligem Neuaufsetzens des Raspi habe ich nun einen Zustand, in dem die Zigbee-Komponenten (ich habe noch nicht alle der oben aufgelisteten) in einem operablen Zustand sind und auch in der sonst noch jungfräulichen fhem-Instanz erscheinen und steuerbar sind.
Allerdings ist mir nicht ganz klar, ob das so soll, wie ich es gemacht habe, und besonders ob ich fhem-seitig den besten Weg gewählt habe.
Zunächst habe ich die Option mit installiertem Deconz und Phoscon (Image von Dresden Elektronik) und die Einbindung in ein auf einem zweiten Raspi laufendes fhem über das Hue-Modul realisiert. Funktioniert problemlos, allerdings hatte ich verschiedentlich gelesen, dass eine Anbindung an fhem über zigbee2mqtt vorteilhafter sein könnte (u.a. mehr Geräte bekannt?). Außerdem wollte ich alles auf einem einzigen fhem laufen haben (vermutlich ginge das auch auf dem Deconz/Phoscon-Raspi, aber ich habe es nicht ausprobiert).
Als zweite Option habe ich daher einen Raspi mit Buster aufgesetzt, zigbee2mqtt (git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt) und Mosquitto installiert und configuration.yaml editiert. Ich wollte das gern so ,,schlank" wie möglich haben, ohne Deconz, Phoscon, Docker.
Ich fand heraus, dass ich beim Befolgen der diversen Mosquitto-Installationsanleitungen durch den dort beschriebenen Abschluss mit

systemctl enable mosquitto.service
mosquitto -v

zwei Mosquitto-Instanzen laufen hatte und dies das Funktionieren des Web UI und die Einbindung in fhem verhinderte.
Nachdem ich das behoben hatte, habe ich jetzt auf der Basis der bisher noch wenigen Zigbee-Geräte in meinem Besitz in fhem folgende Komponenten:

MQTT2_SERVER
MQTT2_FHEM_Server   Initialized
MQTT2_FHEM_Server_127.0.0.1_39322    Connected

MQTT2_DEVICE
MQTT2_zigbee_Fensterkontakt1   ??? [= Sonoff SNZB-o4]
MQTT2_zigbee_SmartButton1   Click: click Action: action [= Lidl Silvercrest SmartButton HG08164]
MQTT2_zigbee_Steckdose1   on off [= Lidl Silvercrest HG06337]
MQTT2_zigbee_Tolomeo   toggle on off [= Lidl LED HG06492C]
MQTT2_zigbee_bridge   ???
MQTT2_zigbee_pi   online

Nun endlich meine Fragen:

  • Ist mqtt2 das, was ich nehmen sollte? Bzw. hat es Vorteile gegenüber der Phoscon/Deconz/Hue-Anbindung?
  • Brauche ich Mosquitto überhaupt? Ich habe irgendwo gelesen, dass der mqtt2-Server in fhem Mosquitto ersetzen könnte (mit Einschränkungen? Welche?). Wenn ja: Wie ist der zu konfigurieren, damit der mit der Raspbee II-Hardware zusammenarbeitet?
  • Bei meinen Versuchen schien das WebUI von zigbee2mqtt (ip:8080) ohne Mosquitto nicht zu laufen. Ist das normal?
  • Brauche ich das Device  MQTT2_zigbee_pi, das ich gem. Wiki angelegt habe, und wenn ja, wozu?
  • Brauche ich das Device  MQTT2_zigbee_bridge, und wenn ja, wozu?
  • Vermutlich ist es normal, dass wenn man den "Friendly Name" eines Geräts im zigbee2mqtt-Interface ändert, das Gerät als neues Gerät in fhem ankommt (und man das Gerät mit dem alten Namen manuell löschen muss)?
Vielen Dank für sachdienliche und sonstige Hinweise!
Martin


Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

rudolfkoenig

ZitatBrauche ich Mosquitto überhaupt? Ich habe irgendwo gelesen, dass der mqtt2-Server in fhem Mosquitto ersetzen könnte (mit Einschränkungen? Welche?). Wenn ja: Wie ist der zu konfigurieren, damit der mit der Raspbee II-Hardware zusammenarbeitet?
MQTT2_SERVER ist vergleichbar mit mosquitto, d.h. man  verwendet in FHEM entweder MQTT2_SERVER oder (mosquitto+MQTT2_CLIENT).

Vorteil von MQTT2_SERVER:
- dadurch, dass die clientId der MQTT Verbindung FHEM bekannt ist, ist das Zuordnen der Nachrichten zu einem FHEM-Device moeglich => autocreate is "Plug & Play". Leider gilt das nicht fuer Geraete, die ueber ein MQTT Bridge eingebunden sind (wie bei zigbee2mqtt), in diesem Fall ist in FHEM fuer autocreate eine MQTT2_DEVICE mit bridgeRegexp einzurichten. Mit (mosquitto+MQTT2_CLIENT) ist das in jedem Fall erforderlich (falls man autocreate haben will).  Die Sache ist weniger tragisch, als es sich anhoert, da mit attrTemplates eine Vorlage fuer bridgeRegexp verfuegbar ist.
- die IP-Adresse der Client ist bekannt, macht das Verlinken in der FHEM-Anzeige einfacher.
- man muss kein mosquitto installieren & starten

Vorteil von mosquitto:
- Implementiert MQTT Version 5.0, und QOS 2. Ich bin der Ansicht, dass diese Features fuer Hausautomation (noch?) nicht relevant sind.
- besseren Durchsatz, allerdings nur fuer Verbindungen, die FHEM nicht betreffen. Sollte fuer typische Schalt-Aufgaben im HA-Bereich  irrelevant sein.


dadoc

Danke!
das Nicht-Erwähnen der Hue-Anbindung verstehe ich dann so, dass das nur etwas für Warmduscher ist ;-) ?

Um MQTT2_Server als Broker zu nutzen, müsste ich dann so vorgehen?

  • Mosquitto stoppen
  • zigbee2mqtt stoppen bzw. deinstallieren
  • alle Zigbee-Geräte in fhem löschen
  • MQTT2_zigbee_bridge löschen
  • MQTT2_zigbee_pi löschen
  • define MQTT2_FHEM_Server MQTT2_SERVER 1883 global
  • Warten, bis Geräte (neu) erkannt werden
Wo setzt man dann aber das permit_join ab? Das geht ja m.w. nur von einem in fhem existierenden mqtt2-Device? und die configuration.yaml, wo das auch gesetzt werden könnte, dürfte ja ohne zigbee2mqtt irrelevant sein.

Was mir auch noch nicht klar ist: Wird die Raspbee-Hardware automatisch eingebunden/erkannt, auch wenn man kein zigbee2mqtt installiert?
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

rudolfkoenig

Zitatdas Nicht-Erwähnen der Hue-Anbindung verstehe ich dann so, dass das nur etwas für Warmduscher ist ;-) ?
Nein, ich kann bloss dazu mangels Erfahrung mit zigbee / Hue nichts sagen.
Dafuer vmtl. mehr zu Fragen, die mit MQTT2 zu tun haben.

ZitatUm MQTT2_Server als Broker zu nutzen, müsste ich dann so vorgehen?
Da Du in FHEM funktionierende Geraete hast, und kein MQTT2_CLIENT erwaehnt hast, koennen die Daten nicht ueber mosquitto kommen. Da ich aber nur ein Teil der Konfiguration kenne, kann mich auch irren.

dadoc

Sorry, cfg war:

attr global userattr cmdIcon devStateIcon:textField-long devStateStyle icon sortby webCmd webCmdLabel:textField-long widgetOverride
attr global autoload_undefined_devices 1
attr global logfile ./log/fhem-%Y-%m.log
attr global modpath .
attr global statefile ./log/fhem.save
attr global verbose 3

define WEB FHEMWEB 8083 global
setuuid WEB 63cc0956-f33f-fddf-299f-bacb1f18a6b813ec
attr WEB editConfig 1
attr WEB stylesheetPrefix ios7

# Fake FileLog entry, to access the fhem log from FHEMWEB
define Logfile FileLog ./log/fhem-%Y-%m.log Logfile
setuuid Logfile 63cc0956-f33f-fddf-b317-6f96ed307a0024fe

define autocreate autocreate
setuuid autocreate 63cc0956-f33f-fddf-a7b7-d951eb1ec5f373db
attr autocreate filelog ./log/%NAME-%Y.log

define eventTypes eventTypes ./log/eventTypes.txt
setuuid eventTypes 63cc0956-f33f-fddf-512a-259bd956b896c814

# Disable this to avoid looking for new USB devices on startup
define initialUsbCheck notify global:INITIALIZED usb create
setuuid initialUsbCheck 63cc0956-f33f-fddf-f68b-1441ab2285f4389d
define MQTT2_FHEM_Server MQTT2_SERVER 1883 global
setuuid MQTT2_FHEM_Server 63cc0f68-f33f-fddf-f075-676be3d9e274fb8f
define MQTT2_zigbee_pi MQTT2_DEVICE zigbee_pi
setuuid MQTT2_zigbee_pi 63cc0f7d-f33f-fddf-f06e-a0ba74727b991b27
attr MQTT2_zigbee_pi IODev MQTT2_FHEM_Server
attr MQTT2_zigbee_pi bridgeRegexp zigbee2mqtt/([A-Za-z0-9._]+)[/]?.*:.* "zigbee_$1"
attr MQTT2_zigbee_pi 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_zigbee_pi devicetopic zigbee2mqtt
attr MQTT2_zigbee_pi icon mqtt
attr MQTT2_zigbee_pi model zigbee2mqtt_bridge
attr MQTT2_zigbee_pi room MQTT2_DEVICE
attr MQTT2_zigbee_pi setStateList on off
define FileLog_MQTT2_zigbee_pi FileLog ./log/MQTT2_zigbee_pi-%Y.log MQTT2_zigbee_pi
setuuid FileLog_MQTT2_zigbee_pi 63cc0f7d-f33f-fddf-90d7-7e3fd50a845ed6e0
attr FileLog_MQTT2_zigbee_pi logtype text
attr FileLog_MQTT2_zigbee_pi room MQTT2_DEVICE
define MQTT2_zigbee_bridge MQTT2_DEVICE zigbee_bridge
setuuid MQTT2_zigbee_bridge 63cc10b2-f33f-fddf-f02b-e53a71aacba684f7
attr MQTT2_zigbee_bridge bridgeRegexp zigbee2mqtt/([A-Za-z0-9._]+)[/]?.*:.* "zigbee_$1"
attr MQTT2_zigbee_bridge 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_zigbee_bridge devicetopic zigbee2mqtt
attr MQTT2_zigbee_bridge icon mqtt
attr MQTT2_zigbee_bridge model zigbee2mqtt_bridge
attr MQTT2_zigbee_bridge room MQTT2_DEVICE
attr MQTT2_zigbee_bridge setStateList on off
define FileLog_MQTT2_zigbee_bridge FileLog ./log/MQTT2_zigbee_bridge-%Y.log MQTT2_zigbee_bridge
setuuid FileLog_MQTT2_zigbee_bridge 63cc10b2-f33f-fddf-4c92-9fcd1a3a8a29dffc
attr FileLog_MQTT2_zigbee_bridge logtype text
attr FileLog_MQTT2_zigbee_bridge room MQTT2_DEVICE
define MQTT2_zigbee_Tolomeo MQTT2_DEVICE zigbee_Tolomeo
setuuid MQTT2_zigbee_Tolomeo 63cd71dc-f33f-fddf-9faa-914afb9dcbf8a676
attr MQTT2_zigbee_Tolomeo devicetopic zigbee2mqtt/Tolomeo
attr MQTT2_zigbee_Tolomeo icon light_control
attr MQTT2_zigbee_Tolomeo jsonMap color_temp:ct color_temp_startup:ct_startup
attr MQTT2_zigbee_Tolomeo model zigbee2mqtt_light_cct
attr MQTT2_zigbee_Tolomeo readingList $DEVICETOPIC:.* { my $ret=json2nameValue($EVENT,'',$JSONMAP);; $ret->{state}=lc($ret->{state}) if defined $ret->{state};; return $ret }
attr MQTT2_zigbee_Tolomeo room MQTT2_DEVICE
attr MQTT2_zigbee_Tolomeo webCmd toggle:on:off:brightness:ct
define FileLog_MQTT2_zigbee_Tolomeo FileLog ./log/MQTT2_zigbee_Tolomeo-%Y.log MQTT2_zigbee_Tolomeo
setuuid FileLog_MQTT2_zigbee_Tolomeo 63cd71dc-f33f-fddf-5e66-765c9edf10fe91b9
attr FileLog_MQTT2_zigbee_Tolomeo logtype text
attr FileLog_MQTT2_zigbee_Tolomeo room MQTT2_DEVICE
define MQTT2_zigbee_Fensterkontakt1 MQTT2_DEVICE zigbee_Fensterkontakt1
setuuid MQTT2_zigbee_Fensterkontakt1 63cd7224-f33f-fddf-ea80-52773201e1f7e074
attr MQTT2_zigbee_Fensterkontakt1 devStateIcon open:fts_window_1w_open@red closed:fts_window_1w@green
attr MQTT2_zigbee_Fensterkontakt1 devicetopic zigbee2mqtt/Fensterkontakt1
attr MQTT2_zigbee_Fensterkontakt1 jsonMap contact:state
attr MQTT2_zigbee_Fensterkontakt1 model zigbee2mqtt_ContactSensor
attr MQTT2_zigbee_Fensterkontakt1 readingList $DEVICETOPIC:.* { my $ret=json2nameValue($EVENT,'',$JSONMAP);; $ret->{state}=$ret->{state} eq 'true' ? 'closed' : 'open';; return $ret }
attr MQTT2_zigbee_Fensterkontakt1 room MQTT2_DEVICE
define FileLog_MQTT2_zigbee_Fensterkontakt1 FileLog ./log/MQTT2_zigbee_Fensterkontakt1-%Y.log MQTT2_zigbee_Fensterkontakt1
setuuid FileLog_MQTT2_zigbee_Fensterkontakt1 63cd7224-f33f-fddf-ad9e-c65afc0076d367ea
attr FileLog_MQTT2_zigbee_Fensterkontakt1 logtype text
attr FileLog_MQTT2_zigbee_Fensterkontakt1 room MQTT2_DEVICE
define MQTT2_zigbee_Steckdose1 MQTT2_DEVICE zigbee_Steckdose1
setuuid MQTT2_zigbee_Steckdose1 63cd732f-f33f-fddf-3e60-92d6412d5f0ba7a9
attr MQTT2_zigbee_Steckdose1 devicetopic zigbee2mqtt/Steckdose1
attr MQTT2_zigbee_Steckdose1 icon message_socket
attr MQTT2_zigbee_Steckdose1 model zigbee2mqtt_plug
attr MQTT2_zigbee_Steckdose1 readingList $DEVICETOPIC:.* { my $ret=json2nameValue($EVENT);; $ret->{state}=lc($ret->{state}) if defined $ret->{state};; return $ret }
attr MQTT2_zigbee_Steckdose1 room MQTT2_DEVICE
attr MQTT2_zigbee_Steckdose1 setStateList on off toggle
define FileLog_MQTT2_zigbee_Steckdose1 FileLog ./log/MQTT2_zigbee_Steckdose1-%Y.log MQTT2_zigbee_Steckdose1
setuuid FileLog_MQTT2_zigbee_Steckdose1 63cd732f-f33f-fddf-6d71-5f9c0319d21dcd3d
attr FileLog_MQTT2_zigbee_Steckdose1 logtype text
attr FileLog_MQTT2_zigbee_Steckdose1 room MQTT2_DEVICE
define MQTT2_zigbee_SmartButton1 MQTT2_DEVICE zigbee_SmartButton1
setuuid MQTT2_zigbee_SmartButton1 63cd7358-f33f-fddf-4329-d6d9ea196949b5cb
attr MQTT2_zigbee_SmartButton1 devicetopic zigbee2mqtt/SmartButton1
attr MQTT2_zigbee_SmartButton1 icon control_home
attr MQTT2_zigbee_SmartButton1 jsonMap battery:batteryPercent voltage:batterymV
attr MQTT2_zigbee_SmartButton1 model zigbee2mqtt_Wireless_Button
attr MQTT2_zigbee_SmartButton1 readingList $DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }
attr MQTT2_zigbee_SmartButton1 room MQTT2_DEVICE
attr MQTT2_zigbee_SmartButton1 stateFormat Click: click Action: action
attr MQTT2_zigbee_SmartButton1 userReadings batteryVoltage:batterymV.* {ReadingsNum($name,'batterymV',0)/1000}
define FileLog_MQTT2_zigbee_SmartButton1 FileLog ./log/MQTT2_zigbee_SmartButton1-%Y.log MQTT2_zigbee_SmartButton1
setuuid FileLog_MQTT2_zigbee_SmartButton1 63cd7358-f33f-fddf-a664-7209dd496cb15280
attr FileLog_MQTT2_zigbee_SmartButton1 logtype text
attr FileLog_MQTT2_zigbee_SmartButton1 room MQTT2_DEVICE
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

dadoc

So, jetzt konnte ich es mal ausprobieren. Wenn ich mosquitto und zigbee2qmtt auf dem Raspi deaktiviere und in fhem nur einen MQTT2_Server anlege, werden keine Zigbee-devices gefunden, wenn ich sie betätige oder in den Anlernmodus versetze.
Wie gefragt: Mit fehlt hier noch das Verständnis, wie der MQTT2_Server "weiß", dass an ttyAMA0 ein Raspbee II aufgesteckt ist. Bei zigbee2mqtt muss man das ja in der config.yaml explizit angeben, ebenso wie "adapter: deconz".
Aktuelle config ist:
attr global userattr cmdIcon devStateIcon:textField-long devStateStyle icon sortby webCmd webCmdLabel:textField-long widgetOverride
attr global autoload_undefined_devices 1
attr global logfile ./log/fhem-%Y-%m.log
attr global modpath .
attr global statefile ./log/fhem.save
attr global verbose 3

define WEB FHEMWEB 8083 global
setuuid WEB 63cc0956-f33f-fddf-299f-bacb1f18a6b813ec
attr WEB editConfig 1
attr WEB stylesheetPrefix ios7

# Fake FileLog entry, to access the fhem log from FHEMWEB
define Logfile FileLog ./log/fhem-%Y-%m.log Logfile
setuuid Logfile 63cc0956-f33f-fddf-b317-6f96ed307a0024fe

define autocreate autocreate
setuuid autocreate 63cc0956-f33f-fddf-a7b7-d951eb1ec5f373db
attr autocreate filelog ./log/%NAME-%Y.log

define eventTypes eventTypes ./log/eventTypes.txt
setuuid eventTypes 63cc0956-f33f-fddf-512a-259bd956b896c814

# Disable this to avoid looking for new USB devices on startup
define initialUsbCheck notify global:INITIALIZED usb create
setuuid initialUsbCheck 63cc0956-f33f-fddf-f68b-1441ab2285f4389d
define MQTT2_FHEM_Server MQTT2_SERVER 1883 global
setuuid MQTT2_FHEM_Server 63ce800d-f33f-fddf-15ad-bdebf14eaaaf2fd4
attr MQTT2_FHEM_Server autocreate simple

Was fehlt mir da noch? Muss da evrtl. doch die gesamte Deconz + Phoscon-Software installiert werden und laufen?
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

rudolfkoenig

ZitatWenn ich mosquitto und zigbee2qmtt auf dem Raspi deaktiviere ...
Das war wohl zu viel des Guten, ich habe nicht vom deaktivieren von zigbee2mqtt geredet, sondern nur vom mosquitto.

ZitatWie gefragt: Mit fehlt hier noch das Verständnis, wie der MQTT2_Server "weiß", dass an ttyAMA0 ein Raspbee II aufgesteckt ist.
MQTT2_SERVER weiss das nicht, er wartet (genauso wie mosquitto) auf zigbee2mqtt.
Wie sein Name schon sagt: zigbee2mqtt liest die Daten von einem Zigbee-Transceiver (Raspbee II), verdaut sie, und sendet diese per MQTT Protokoll weiter an einem beliebigen MQTT Server.
Dieser kann mosquitto sein _oder_ MQTT2_SERVER.

dadoc

#7
Danke, jetzt wird es klarer - und ich bin wieder nah am Ausgangszustand. Habe ein Device mit der Bridge Regex angelegt, ein Weiteres hat sich dann von selbst erzeugt ,,MQTT2_zigbee_bridge". Ich nehme an, das manuell angelegte braucht man nicht?
Die Geräte sind auch gut rübergekommen. Ich habe jetzt noch einen Heizkörperthermostat von Rollei (!) angelernt (Im Zigbee Interface als TuYa TV02 erkannt). Das kam zwar auch nach fhem rein, allerdings scheint es da kein Template für die Kommunikation zu geben. Was macht man in so einem Fall?

Edit: Der Thermostat scheint mit dem template zigbee2mqtt_thermostat_with_weekrofile [sic!] gut zu funktionieren, obwohl das nominell für ein anderes Modell ist. Super!
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

OdfFhem

Zitat von: dadoc am 23 Januar 2023, 20:04:35
Danke, jetzt wird es klarer - und ich bin wieder nah am Ausgangszustand. Habe ein Device mit der Bridge Regex angelegt, ein Weiteres hat sich dann von selbst erzeugt ,,MQTT2_zigbee_bridge". Ich nehme an, das manuell angelegte braucht man nicht?

Für das Produktiv-System nutze ich mosquitto+MQTT2_CLIENT (da viele Datenlieferanten keine direkte Verbindung zum FHEM-Rechner haben), für das Test-System MQTT2_SERVER.
In beiden Fällen verwende ich ein "neutrales" MQTT2_DEVICE, das ein bridgeRegexp-Attribut besitzt und damit als "Eingangstor" bzw. "Verteiler" fungiert - sollte aber kein readingList-Attribut haben.
Wenn doch, scheint das bridgeRegexp-Attribut nicht "scharf" genug zu sein.
Alle anderen MQTT2_DEVICE haben kein bridgeRegexp-Attribut, aber auf jeden Fall ein readingList-Attribut und repräsentieren das eigentliche Gerät.

Solange Du nur zigbee verwendest, könntest Du natürlich auch die bridge als "Verteiler" nutzen.
Verwendet man auch noch shelly, sonos, tasmota, usw., finde ich ein zentrales "Eingangstor" bzw. "Verteiler" interessanter ...

Aber - wie immer - ist dies nur eine der mögllichen Theorien ...

rudolfkoenig

ZitatDas kam zwar auch nach fhem rein, allerdings scheint es da kein Template für die Kommunikation zu geben. Was macht man in so einem Fall?
Falls autocreate nicht abgeschaltet ist (d.h. man laesst die Konfigration in der Voreinstellung), dann legt FHEM fuer alle empfangenen Nachrichten ein Reading an.
Das mag nicht immer optimal formatiert sein, ist aber ein Anfang, was man verschoenern kann.

Falls man auch Daten an das Geraet senden moechte (set), dann muss man das setList Attribut anlegen und pflegen.
Den Inhalt muss man aus der Dokumentation des Geraetes, bzw. aus dem Internet entnehmen oder raten (aka reverse engeneering).

Beim Raten kann das sog. Subscription des Geraetes helfen, das ist das, was das Geraet beim MQTT-Server bestellt hat.
Diese Daten sieht man (nur?) in der Verbindungs-Instanz der MQTT2_SERVER.
Diese Instanz ist versteckt (room=hidden), man kann sie aber anzeigen lassen mit list TYPE=MQTT2_SERVER

Zum Schluss zeigt man die Konfiguration hier im Forum, damit man es in AttrTemplates einpflegen kann.

dadoc

#10
Zitat von: OdfFhem am 23 Januar 2023, 22:19:36
In beiden Fällen verwende ich ein "neutrales" MQTT2_DEVICE, das ein bridgeRegexp-Attribut besitzt und damit als "Eingangstor" bzw. "Verteiler" fungiert - sollte aber kein readingList-Attribut haben.
Wenn doch, scheint das bridgeRegexp-Attribut nicht "scharf" genug zu sein.
Alle anderen MQTT2_DEVICE haben kein bridgeRegexp-Attribut, aber auf jeden Fall ein readingList-Attribut und repräsentieren das eigentliche Gerät.
Ich habe wie gesagt:
Das Device MQTT2_zigbee_pi manuell angelegt, wie in einem Wiki-Beitrag geschrieben. Und auch entsprechend in die configuration.yaml eingetragen:
  client_id: zigbee_pi
list -r des Device:

define MQTT2_zigbee_pi MQTT2_DEVICE zigbee_pi
attr MQTT2_zigbee_pi IODev MQTT2_FHEM_Server
attr MQTT2_zigbee_pi bridgeRegexp zigbee2mqtt/([A-Za-z0-9._]+)[/]?.*:.* "zigbee_$1"
attr MQTT2_zigbee_pi 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_zigbee_pi devicetopic zigbee2mqtt
attr MQTT2_zigbee_pi icon mqtt
attr MQTT2_zigbee_pi model zigbee2mqtt_bridge
attr MQTT2_zigbee_pi room MQTT2_DEVICE
attr MQTT2_zigbee_pi setStateList on off

setstate MQTT2_zigbee_pi 2023-01-23 18:51:33 IODev MQTT2_FHEM_Server
setstate MQTT2_zigbee_pi 2023-01-23 22:08:02 subscriptions zigbee2mqtt/#

list:
Internals:
   CID        zigbee_pi
   DEF        zigbee_pi
   FUUID      63cc0f7d-f33f-fddf-f06e-a0ba74727b991b27
   IODev      MQTT2_FHEM_Server
   NAME       MQTT2_zigbee_pi
   NR         44
   STATE      ???
   TYPE       MQTT2_DEVICE
   READINGS:
     2023-01-23 18:51:33   IODev           MQTT2_FHEM_Server
     2023-01-23 22:08:02   subscriptions   zigbee2mqtt/#
Attributes:
   IODev      MQTT2_FHEM_Server
   bridgeRegexp zigbee2mqtt/([A-Za-z0-9._]+)[/]?.*:.* "zigbee_$1"
   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.
   devicetopic zigbee2mqtt
   icon       mqtt
   model      zigbee2mqtt_bridge
   room       MQTT2_DEVICE
   setStateList on off


Daneben hat sich ein weiteres device auto-created: MQTT2_zigbee_bridge, dessen list "länger ist als ein Tag ohne Brot...":
list -r und list als Anhänge, da es die erlaubte Größe des Posts sprengen würde.

Wie man sieht, hat das manuell angelegte Device kein readingList-Attribut, die auto-createte Bridge (?) dagegen schon.
Ist das richtig so (funktionieren tut es ja) oder ist da eines überflüssig?
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

juergs

#11
Hallo dadoc,

danke dass Du das Thema aufgegriffen hast.
Bin auch als Noob in das Thema Zigbee eingestiegen und bin auf die selben Verständnisprobleme gestoßen.  ;)

Meine Konstellation:
Ubuntu-Server + mosquitto-Server + zigbee2mqtt + MQTT Dash(Android-Handy)
Geräte: ein Aquara Door-Sensor und eine OSRAM Smart Plug - Steckdose.

Die FHEM-Integration bin ich gerade noch am "Einlesen+Einarbeiten".
Die Installation und das Schalten per Handy funktionieren inzwischen sehr gut.

Nun wage ich mich auch an die Integration in FHEM:
Eigentlich sollte für die MQTT-Abfrage dann ja in FHEM nur eine "MQTT2_zigbee_bridge" reichen,
die auf den MQTT-Server-Port des (evtl. remoten und/oder lokalen) Servers konfiguriert ist, ausreichen,
oder benötige ich zwingend den FHEM-MQTT-Server um mosquitto zu ersetzen?

Grüße,
Jürgen

/edit: Gutes Intro in Zigbee mit FHEM: zigbee2mqtt-xiaomi-fhem
und https://wiki.fhem.de/wiki/Zigbee2mqtt#Define_eines_MQTT2-Devices_als_.22Bridge.22

dadoc

Hi Jürgen,
soweit ich Rudolf verstehe, wäre ein MQTT2_CLIENT seitens fhem der Ersatz für den MQTT2_SERVER, um die Daten von mosquitto entgegen zu nehmen:
Zitat von: rudolfkoenig am 23 Januar 2023, 12:43:43
MQTT2_SERVER ist vergleichbar mit mosquitto, d.h. man  verwendet in FHEM entweder MQTT2_SERVER oder (mosquitto+MQTT2_CLIENT).
Bei mir läuft es momentan mit MQTT2_SERVER und ohne mosquitto allerdings sehr rund, auch wenn ich - wie im letzten Beitrag geschildert - das mit den beiden Bridge (?)-Devices noch nicht ganz durchblicke.
Grüße
Martin
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

rudolfkoenig

Zitat[...]- das mit den beiden Bridge (?)-Devices noch nicht ganz durchblicke.
Wir nennen eine MQTT2_DEVICE Instanz mit dem bridgeRegexp Attribut Bridge-Device.

Ein Bridge-Device ist notwendig, damit FHEM Nachrichten von der gleichen MQTT-Quelle automatisch(!) dem richtigen MQTT2_DEVICE Instanzen zuordnen kann.
Konkret: zigbee2mqtt meldet die Daten mehrerer Zigbee Geraete, die Zigbee-IDs sind im Topic an der zweiten Stelle hinter zigbee2mqtt/.
Das bridgeRegexp Attribut fuer MQTT2_zigbee_pi besagt, dass alles was das gleiche Zigbee-ID hat, dem gleichen MQTT2_DEVICE zuzuordnen ist.

Ein Bridge-Device ist nur notwendig, wenn man die FHEM-Geraete nicht manuell konfigurieren will, was aber der Normalfall ist.
Wenn die Konfiguration (i.e. das readingsList) Attribut fertig ist, dann koennte man das Bridge-Device loeschen.
Neue, noch unbekannte Nachrichten (z.Bsp. nach einem Firmware-Update, oder wenn etwas nur selten gesendet wird, wie batteryLow) werden aber dann in FHEM in einem (neuen?) Sammeldevice landen.

Man kann alle Bridge-Devices zusammenlegen (mit einem kombinierten Regexp), aber mehrere Bridge-Instanzen koennen fuer die Pflege oder Dokumentation sinnvoll sein.

TomLee

Zitat von: dadoc am 24 Januar 2023, 11:09:07
Ich habe wie gesagt:
Das Device MQTT2_zigbee_pi manuell angelegt, wie in einem Wiki-Beitrag geschrieben. Und auch entsprechend in die configuration.yaml eingetragen:
  client_id: zigbee_pi
list -r des Device:

define MQTT2_zigbee_pi MQTT2_DEVICE zigbee_pi
attr MQTT2_zigbee_pi IODev MQTT2_FHEM_Server
attr MQTT2_zigbee_pi bridgeRegexp zigbee2mqtt/([A-Za-z0-9._]+)[/]?.*:.* "zigbee_$1"
attr MQTT2_zigbee_pi 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_zigbee_pi devicetopic zigbee2mqtt
attr MQTT2_zigbee_pi icon mqtt
attr MQTT2_zigbee_pi model zigbee2mqtt_bridge
attr MQTT2_zigbee_pi room MQTT2_DEVICE
attr MQTT2_zigbee_pi setStateList on off

setstate MQTT2_zigbee_pi 2023-01-23 18:51:33 IODev MQTT2_FHEM_Server
setstate MQTT2_zigbee_pi 2023-01-23 22:08:02 subscriptions zigbee2mqtt/#




Hast du bei diesem Device die Attribute auch selbst von Hand angelegt oder wurden die so ergänzt nachdem du das zigbee2mqtt_bridge-Template angewendet hast ?
Wenn du das Template angewendet hast, dann ging dabei irgendwas schief, normal werden noch die Attribute setList und readingList ergänzt.

Lösche einfach das MQTT2_zigbee_pi Device, wende auf das MQTT2_zigbee_bridge Device das zigbee2mqtt_bridge-Template an und zeig davon mal ein List.