[Neues Modul] Xiaomi Smart Home ohne Gateway direkt an FHEM

Begonnen von neumann, 22 Februar 2018, 18:00:22

Vorheriges Thema - Nächstes Thema

Beta-User

Moin, für das xiaomi-Modul nehme ich nur an, dass man Devices manuell anlegen muss (ich nutze mqtt2, das m.E. insgesamt einfacher iat und seit heute morgen auch mit externem Broker wie mosquitto genutzt werden kann).

Soweit ich das um Kopf habe, steht das aber für das Modul hier ziemlich zu Beginn des threads hier.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

mark79

Poste mal ein list von der xBridge, vielleicht stimmt was mit der mqtt Verbindung nicht.

Wenn er wirklich gepairt ist, versuch im xBridge Device ein: updateDevices, bzw.
set xBridge updateDevices

Dadurch werden im Fhem die Zigbee2mqtt Geräte aktualisiert und erstellt.

Zitat von: Holzportz am 08 November 2018, 02:53:16
@mark79:

Vielleicht kannst du oder ihr mir weiterhelfen?
Ich benutze fhem mit MQTT + xBridge.
Leider bekomme ich den Xiaomi Cube nicgt in fhem angelernt.
Im offenen Terminal wird der Cube erkannt und reagiert auch (habe ein screenshot angehangen), nur bekomme ich in fhem nicht integriert.

Ich bin radlos was ich falsch mache.
Habt vielen Dank für eure Hilfe.
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

mark79

#512
Zitat von: sprudelverduenner am 08 November 2018, 08:08:39
Ich glaube mein Verständnisproblem ist wohl, dass ich dachte es werden automatisch durch die xBridge neue Xiaomi DEVICES angelegt. Habe ich das heut morgen beim Querlesen richtig verstanden, dass ich die DEVICES von Hand anlegen muss?

Die werden auch automatisch angelegt, wenn alles stimmt. Entweder durch dieses Modul hier oder mit MQTT2, wenn man autocreate an hat.
Wichtig ist halt das die MQTT Verbindung steht und man das Teil auch richtig pairt. Bei dem Würfel ist das etwas schwierig, ich habe selber zwei und die sind zickig.
Auf Youtube gibt es ein Video, wie man das Teil pairt: https://www.youtube.com/watch?v=uhMrcIAdGxg und https://www.youtube.com/watch?v=_I9aMZiL9SM

Wie schon mehrfach hier erwähnt, das pairen etwas entfernt von WLAN/BT Geräten durchführen.
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

rudolfkoenig

Zitatoder mit MQTT2, wenn man autocreate an hat.
Wobei:
- mit autocreate is gemeint, dass MQTT2_SERVER/MQTT2_CLIENT das autocreate Attribut gesetzt hat, und FHEM ueber ein autocreate Instanz verfuegt (Voreinstellung bei der ausgelieferten fhem.cfg).
- in der zum "xBridge" gehoerenden MQTT2_DEVICE muss bridgeRegexp "richtig" gesetzt werden, z.bsp so:attr xBridge bridgeRegexp xiaomi/0x([^:]*):.* "xiaomi_$1"So aehnlich muss das auch mit zigbee2mqtt funktionieren, leider habe ich noch von niemanden eine Bestaetigung bekommen, und ich habe bisher nur ohne Bridge-Hardware getestet.

Wenn es funktioniert, dann wird bei jeder Meldung eines unbekannten, per Bridge angebundenen Geraetes ein passendes MQTT2_DEVICE angelegt, mit dem Namen xiaomi_00158d0002329079 (oder so aehnlich), und das readingList dieser Instanz wird automatisch erweitert. Das setList (oder auch: welche Befehle gibt es, und wie werden diese uebermittelt) muss man weiterhin manuell pflegen.

Ich habe Plaene den letzten Schritt zu erleichtern, indem man jedem MQTT2_DEVICE ein Modell zuweisen kann, was aus einer Template "Datenbank" die passenden Attribute setzt.

Achtung, wenn man nicht nur ein bridge hat, sondern auch weitere Geraete, die "direkt" (also nicht ueber ein Bridge) MQTT sprechen: MQTT2_CLIENT legt fuer alle "echten" MQTT-Geraete nur ein MQTT2_DEVICE an, MQTT2_SERVER dagegen fuer jeden "echten" ein Separates. Das ist der Fall, weil MQTT2_SERVER ueber mehr Information (clientId) verfuegt, als MQTT2_CLIENT. Bei einem MQTT2_CLIENT sollte man das automatisch angelegte und erweiterte MQTT2_DEVICE manuell in mehrere Einzelgeraete zerlegen.

sprudelverduenner

@mark79

das youtube Video kenne ich - deswegen bin ich auf den Cube gekommen.

Genau das ist das Problem: Matthias hat 2 Videos (das 2. ist ein Update um 1.).
Er setzt aus einen vorherigen Video MQTT vorraus, die Sachen aus dem 1. Video haben nur noch teilweise bestand und dann bezieht er sich mit den Updates auf seine Docker Umgebung so dass ich hier nicht mehr mitkomme.

1. Frage für Heute: wenn ich nun MQTT2 benutzen möchte - muss ich dann die xBridge setzten oder nicht?
Ich habe nochmal alle Devices gelöscht und jetzt beendet sich FHEM immer mit einem Fehler wenn ich die xBridge neu anlegen möchte...
FHEM @ RaspberryPi 3, HMLAN, HMUART + HMRS485, Homematic, ESPEasy @ Sonoff / Shelly / ESP8266, ZigBee @ CC2531
Echo Dot, Dreambox, Yamaha MusicCast, Logitech Hub, LW-12, LD382
FRITZ!Box 7590 AX, Mesh @ FRITZ!Repeater 2400, FRITZ!Fon, iPhone 13, iPad Air 5, AppleWatch 8

mark79

Zitat von: rudolfkoenig am 08 November 2018, 14:47:56
Achtung, wenn man nicht nur ein bridge hat, sondern auch weitere Geraete, die "direkt" (also nicht ueber ein Bridge) MQTT sprechen: MQTT2_CLIENT legt fuer alle "echten" MQTT-Geraete nur ein MQTT2_DEVICE an, MQTT2_SERVER dagegen fuer jeden "echten" ein Separates. Das ist der Fall, weil MQTT2_SERVER ueber mehr Information (clientId) verfuegt, als MQTT2_CLIENT. Bei einem MQTT2_CLIENT sollte man das automatisch angelegte und erweiterte MQTT2_DEVICE manuell in mehrere Einzelgeraete zerlegen.
Das verstehe ich nicht ganz... heißt das bei MQTT2_Client mit externen Broker, werden alle Xiaomi Sensoren in einem Fhem Device angelegt?  ???


@sprudelverduenner nimm am besten den MQTT2 Server, das habe ich heute auch ausprobiert und das lief prima.
Das Modul von hier brauchst du dann nicht mehr und den mosquitto-server auch nicht mehr. Wenn du den drauf lassen willst, dann musst du bei Fhem MQTT2 einen anderen Port vergeben.
MQTT2_Server anlegen:
define m2server MQTT2_SERVER 1883 global
Danach autocreate bei dem m2server auf 1 setzen.

Dann das auch noch anlegen: https://wiki.fhem.de/wiki/MQTT2-Module_-_Praxisbeispiele#Define_eines_MQTT2-Devices_als_.22Bridge.22
Die neu gepairten Xiaomi Devices findest du dann im Raum MQTT2_DEVICE.
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

sprudelverduenner

#516
genauso habe ich es seit 10 minuten bei mir auch konfiguriert.

Was mich irritiert:
Wenn ich nun
set MQTT2_zigbee_pi permit_join true
ausführe dann steht im putty fenster disabling joining new devices.

Das gleiche kommt auch wenn die den permit_join auf false setze.

Ich bekomme das CUBE Xiaomi Device nicht angelegt...


EDIT: leck mich fett - ich habe den npm mal beendet und neu gestartet. Jetzt kommt ein MQTT2_DEVICE.
Meiner Meinung nach also noch ein BUG wenn ich den permit_join händisch auf true absetze.
FHEM @ RaspberryPi 3, HMLAN, HMUART + HMRS485, Homematic, ESPEasy @ Sonoff / Shelly / ESP8266, ZigBee @ CC2531
Echo Dot, Dreambox, Yamaha MusicCast, Logitech Hub, LW-12, LD382
FRITZ!Box 7590 AX, Mesh @ FRITZ!Repeater 2400, FRITZ!Fon, iPhone 13, iPad Air 5, AppleWatch 8

mark79

Das ist irgendwie falsch formatiert im Wiki, lösche einfach die \ im setList raus, praktisch so:
permit_join:true,false zigbee2mqtt/bridge/config/permit_join $EVTPART1
remove:textField zigbee2mqtt/bridge/config/remove $EVTPART1
log_level:debug,info,warn,error zigbee2mqtt/bridge/config/log_level $EVTPART1
rename:textField zigbee2mqtt/bridge/config/rename  {"old":"$EVTPART1","new":"$EVTPART2"}
network_map:raw,graphviz zigbee2mqtt/bridge/networkmap  $EVTPART1
devicelist:noArg zigbee2mqtt/bridge/config/devices

Dann sollte das klappen...

Zitat von: sprudelverduenner am 08 November 2018, 21:05:38
ausführe dann steht im putty fenster disabling joining new devices.

Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

sprudelverduenner

Ja Danke. das geht jetzt auch mit TRUE.

Dazu bitte nun die nächste Frage:

Muss der npm immer laufen - also ich ihn noch in den autostart konfigurieren oder muss der npm nur zum anlernen laufen ??

Wie geht es nun mit dem DEVICE weiter?
wenn ich den CUBE bewege sehe ich keine Änderungen in dem DEVICE ...
FHEM @ RaspberryPi 3, HMLAN, HMUART + HMRS485, Homematic, ESPEasy @ Sonoff / Shelly / ESP8266, ZigBee @ CC2531
Echo Dot, Dreambox, Yamaha MusicCast, Logitech Hub, LW-12, LD382
FRITZ!Box 7590 AX, Mesh @ FRITZ!Repeater 2400, FRITZ!Fon, iPhone 13, iPad Air 5, AppleWatch 8

mark79

Ja der muss immer laufen, es sei du willst die Xiaomi Sensoren nur bei Bedarf betreiben. ;D
Wie man den Autostart einrichtet, steht im Wiki: https://github.com/Koenkk/zigbee2mqtt/wiki/Running-the-bridge#5-optional-running-as-a-daemon-with-systemctl

Du musst den Cube pairen, wenn das erfolgreich gemacht wurde, sollten sich die Readings auch ändern.
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

sprudelverduenner

Das Device war anscheinend noch nicht komplett gepaired.
Jetzt ist es das und ich habe mit einem DOIF auch schon mit einem WLAN-Lautsprecher zum Bedienen verknüpft - alles Gut!

Danke, die Anleitung kannte ich schon und habe diese auch gerade umgesetzt.

Nach einem Neustart des RasPi habe ich auch eine Statusabfrage gemacht: npm läuft.

Jetzt Hoffentlich die letzte Frage:

Mein CUBE wird nun nach dem Rebbot als offline angezeigt. Muss ich nach jedem Neustart die Geräte neu anlernen oder gibt es da auch noch einen Trick ??
FHEM @ RaspberryPi 3, HMLAN, HMUART + HMRS485, Homematic, ESPEasy @ Sonoff / Shelly / ESP8266, ZigBee @ CC2531
Echo Dot, Dreambox, Yamaha MusicCast, Logitech Hub, LW-12, LD382
FRITZ!Box 7590 AX, Mesh @ FRITZ!Repeater 2400, FRITZ!Fon, iPhone 13, iPad Air 5, AppleWatch 8

mark79

Zitat von: sprudelverduenner am 08 November 2018, 22:09:41
Mein CUBE wird nun nach dem Rebbot als offline angezeigt. Muss ich nach jedem Neustart die Geräte neu anlernen oder gibt es da auch noch einen Trick ??

Ne einmal pairen reicht. :) Ich würde eher vermuten das der npm Dienst nicht richtig läuft, bzw. er den Adapter nicht findet.
Musst du mal ins log bei zigbee2mqtt gucken, evtl. musst du das vorher in der config einrichten...
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

sprudelverduenner

ok, danke - da werde ich mich morgen dran geben.

Wenn ich mit
systemctl status zigbee2mqtt.service
den Status prüfe dann wird es als active (running) angegeben.

Sobald ich dieses mache legt er nach aber auch ein neues Device an. Und das alte Device bleibt dann offline.

Nach einem Neustart ist dann alles wieder offline. Ich prüfe den Status und eine neues Device erscheint wieder. Sehr komisch ...

Wie geschrieben: ich kümmere mich morgen darum.
Für Tipps bis dahin bin ich weiterhin dankbar ...
FHEM @ RaspberryPi 3, HMLAN, HMUART + HMRS485, Homematic, ESPEasy @ Sonoff / Shelly / ESP8266, ZigBee @ CC2531
Echo Dot, Dreambox, Yamaha MusicCast, Logitech Hub, LW-12, LD382
FRITZ!Box 7590 AX, Mesh @ FRITZ!Repeater 2400, FRITZ!Fon, iPhone 13, iPad Air 5, AppleWatch 8

Beta-User

Du musst in der yaml eine ID vergeben, damit mqtt2_Server das identifiziert bekommt.

@mark79: Danke für's testen...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

rudolfkoenig

ZitatDas verstehe ich nicht ganz... heißt das bei MQTT2_Client mit externen Broker, werden alle Xiaomi Sensoren in einem Fhem Device angelegt?
Ja, bis man den richtigen bridgeRegexp gesetzt hat, da MQTT2_DEVICE sonst nicht weiss, wie man die Nachrichten zuordnen soll.

Wenn meine Vermutung stimmt, und der xiaomi Bridge alle Daten ueber die gleiche MQTT Verbindung sendet, dann wird auch beim MQTT2_SERVER nur ein MQTT2_DEVICE fuer die Bridge angelegt, und auch in diesem Fall muss man bridgeRegexp setzen.