[Modul] Zigbee2MQTT

Kurze Frage zum Modul (und erst mal großen Dank an Kai für dieses sehr sinnvolle Ergänzung!): ich habe mein MQTT Namensschema etwas umorganisiert und dann ewig gebraucht herauszufinden, warum ich keine Zigbee2MQTT Geräte mehr steuern kann: im Zigbee2MQTT Modul ist in Zigbee2MQTTHelper.php das MQTT_GROUP_TOPIC fest verdrahtet und beginnt immer mit „zigbee2mqtt“, egal was man in den Instanzen konfiguriert. Ist das so gewollt und wenn ja warum?
Viele Grüße - Dirk

Hallo.
Sorry, aber ich habe MQTT immer noch nicht ganz verstanden.
Die zigbee2mqtt.io SW ist dann ein MQTT Broker?
Bei zigbee2mqtt.io steht aber das eine IP adresse für den MQTT Broker eingegeben werden muss.
Also doch kein MQTT Broker?

Das Modul von Kai ist dann eine Art MQTT Client?

Wo ist den hier der Client und wo der Broker? Jetzt bin ich nochmehr durcheinander.

Danke.
BYE
Thomas

Hallo Thomas,

die zentrale Instanz ist bei MQTT immer der Broker. Dort können sich andere Interessierten anmelden. Entweder als Empfänger (Subscriber) oder als Sender (Publisher).

Ein Sender (Publisher) kann z.B. ein Temperatursensor sein, der sein Werte an den Broker übermittelt. Dort können sich alle Empfänger (Subscriber) die Daten abholen. Quasi ein Zeitungsabo beim Broker für den Temperaturwert. Es geht aber auch umgekehrt. Ein Sender (Publisher) sagt einem Empfänger (Subscriber) über den Broker, was er tun soll, z.B. einen Schaltbefehl ausführen. Kling auf den ersten Blick etwas umständlich, auf den zweiten Blick ist es aber extrem effektiv. MQTT scheint sich bei IoT als einer der wichtigsten Standards etabliert zu haben.

Zigbee2MQTT ist eine Software, über die Zigbee Sensoren/Aktoren via MQTT mit einem Broker kommunizieren können. So ein Broker ist auch nativ in IP Symcon integriert. Dort kommt dann die MQTT-Nachrichten i.d.R. als JSON in folgender Form an:

{"temperature":15.54,"linkquality":28,"battery":40,"voltage":2885,"humidity":90.01,"pressure":969.4}

Kai´s Modul Zigbee2MQTT sorgt dann dafür, dass aus dem JSON String die ankommenden Werte in Variablen angelegt und gespeichert werden (siehe angefügte Graik). Das kann man auch selber mit JSON Decode machen, ist aber ein ziemlicher Aufwand, vor allem, wenn dynamisch neue Werte dazu kommen.

Gruss
Bernd

MQTT_sample.jpg

Hallo.
Vielen Dank für Eure geduld.

Würde gerne es von meiner Seite nochmal zusammenschreiben.
// Hardware Vorbereitung

  1. USB CC2531 mit zigbee2mqtt firmware
    // Rechner Vorbereitung
  2. Node.js auf einen Rechner installieren (Javascript lib)
  3. zibee2Mqtt.io Sw auf dem Rechner installieren (Wirk als MQTT Client?)
    // IP Symcon Vorbereitung
  4. IP Symcon internen MQTT Broker installieren.
  5. Kai’s Module installieren (Wirken auch als MQTT Client?)

Soweit richtig?
Danke.
BYE
Thomas

Hallo Thomas,

anbei mein Spickzettel, wie ich immer Zigbee2MQTT einrichte und Updates einspiele. Der IP Symcon Teil ist da aber nicht mit dabei.

Gruss
Bernd

https://gadget-freakz.com/diy-zigbee-gateway/


Install the (bridge/gateway) software
---------------------------------------------------------------
# Setup Node.js repository
sudo curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -

# Install Node.js
sudo apt-get install -y nodejs git make g++ gcc

# Verify that the correct nodejs and npm (automatically installed with nodejs)
# version has been installed
node --version # Should output v8.X.X (at time of writing v8.12.0)
npm --version # Should output > 6.X.X (at time of writing 6.4.1)

# Clone zigbee2mqtt repository
sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
sudo chown -R pi:pi /opt/zigbee2mqtt

# Install dependencies
cd /opt/zigbee2mqtt
npm install

----------------------------------------------------------------
sudo nano /opt/zigbee2mqtt/data/configuration.yaml

# MQTT settings
mqtt:
  # MQTT base topic for zigbee2mqtt MQTT messages
  base_topic: zigbee2mqtt
  # MQTT server URL
  server: 'mqtt://192.168.XXX.XXX'
  # MQTT server authentication, uncomment if required:
  # user: my_user
  # password: my_password
  advanced:
	rtscts: false
------------------------------------------------------------------
Running the bridge software (zigbee2mqtt)

cd /opt/zigbee2mqtt
npm start
------------------------------------------------------------------
You want to autostart npm, so you need to run it as daemon in the background automaticly when booting.

sudo nano /etc/systemd/system/zigbee2mqtt.service

[Unit]
Description=zigbee2mqtt
After=network.target

[Service]
ExecStart=/usr/bin/npm start
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=inherit
StandardError=inherit
Restart=always
User=pi

[Install]
WantedBy=multi-user.target

---------------------------------------------------------------------
Test if everything is correct.

# Start zigbee2mqtt
sudo systemctl start zigbee2mqtt

# Show status
systemctl status zigbee2mqtt.service

#When you get the info messages that zigbee is started you can enable the created services:
sudo systemctl enable zigbee2mqtt.service

# Stopping zigbee2mqtt
sudo systemctl stop zigbee2mqtt

# Starting zigbee2mqtt
sudo systemctl start zigbee2mqtt

# View the log of zigbee2mqtt
sudo journalctl -u zigbee2mqtt.service -f

#Update zigbee2mqtt to the latest version with the following codes:

# Stop zigbee2mqtt and go to directory
sudo systemctl stop zigbee2mqtt
cd /opt/zigbee2mqtt

# Backup configuration
cp -R data data-backup

# Update
git checkout HEAD -- npm-shrinkwrap.json
git pull
rm -rf node_modules
npm install

# Restore configuration
cp -R data-backup/* data
rm -rf data-backup

# Start zigbee2mqtt
sudo systemctl start zigbee2mqtt

Hi Kai,

könntest Du noch für den Bewgungsmelder die fehlende Übersetzung aufnehmen:


      "Occupancy": "Bewegung",

Danke
Heiko

Hallo.

Danke für Euren support.
Habe jetzt alles am start und auch verstanden!
Philips Hue Bewegungsmelder und Temperatur Sensor von Aqara.

BYE
Thomas

Das habe ich damals so programmiert.
Ich könnte es auch so machen, dass man das Group Topic in jeder Insanz hinterlegen muss, bzw. kann. Ist das wirklich gewünscht?
Dann würde ich das Group Topic variabel einstellbar machen.

Die Übersetzung ist in der nächsten Version vorhanden.
Zur Zeit als Beta Version online, bis Symcon die Version freigegeben hat.

Grüße,
Kai

Hallo Kai,

kannst du da noch meinen Change Request mit einbauen, wäre super.

Danke und Gruss
Bernd

Habe ich übersehen, sorry.
Ist nun auch in der Beta Version verfügbar.

Grüße,
Kai

Hi Kai,

weil Du ja gerade dabei bist :smiley:

Ein „Standard“-Profil für die Batterie fände ich auch cool :rolleyes:

Ich habe das so gelöst … so als Anregung!

LG Heiko

Hallo Kai,

da scheint jetzt etwas seltsames passiert zu sein. In der ZigBee2MQTT-Message und im IPS MQTT Debug sind die beiden Werte „illuminance“ und „illuminance_lux“ enthalten. Bei der neu angelegten Instanz „Lichtsensor01“ werden aber beide Werte im Feld Beleuchtungsstärke als Werte hinterlegt.

[b]ZigBee2MQTT Message:[/b]
13:37:55: MQTT publish: topic 'zigbee2mqtt/Lichtsensor01', payload '{"battery":100,"voltage":3100,"linkquality":83,"illuminance":30217,"illuminance_lux":1050}'

[b]IP Symcon MQTT Broker Debug:[/b]
13:37:35 |      MQTT:RX:PUBLISH | Topic: zigbee2mqtt/Lichtsensor01, Payload: {"battery":100,"voltage":3100,"linkquality":80,"illuminance":30237,"illuminance_lux":1055}

Kannst du da nochmal rein schauen.

Gruss
Bernd

LuxTabelle.png

Hast du recht, ich dachte das wäre das selbe, nur verschiedene Geräte, deswegen habe ich die selbe Variable genutzt.
Welche Variable hat denn dann welches Profils?

Grüße,
Kai

Hallo Kai,

dies muesste man Xiaomi fragen :wink: Auf der ZigBee2MQTT site steht dazu folgendes: https://www.zigbee2mqtt.io/devices/GZCGQ01LM.html

Ich vermute folgendes:

illuminance: irgend ein Lichtindex in Integer der über 30000 gehen kann
illuminance_lux: dies scheint der Wert in Lux umgerechnet zu sein, ob das linear läuft kann ich nicht sagen.

Daher wäre es gut, beide Werte in der Instanz drin zu haben.

Gruss
Bernd

Hi,
die gehen von linear aus denn es gibt nur einen Faktor für die Umrechnung.

Ralf

Hallo Kai,

kannst du in dem Modul nochmal nachschauen oder gegebenenfalls ändern, wie die über MQTT gelieferten Werte illuminance (Wertebereich 0 - ~35000) und illuminance_lux (Wertebereich 0 - ~2000 lx) behandelt werden. Da beide vom Modul in die IPS-Variable Beleuchtungsstärke geschrieben werden, ist der Graphenverlauf natürlich sehr chaotisch (siehe Bildanlage).

Eine Möglichkeit wäre sowohl für illuminance und illuminance_lux eigene IPS Variablen in der Instanz anzulegen.

Gruss
Bernd

LuxTabelle.png

Sorry, das passe ich noch an.

Grüße,
Kai

Teste mal bitte die Beta Version.

Grüße,
Kai

Hallo Kai,

vielen Dank für deinen Support. Ich habe das Update eingespielt. Bisher schaut es gut aus. Beide Werte werden geliefert und in die Variablen der Instanz geschrieben (siehe Bild). Ich werde es mal einen Tag mitloggen und hier nochmals die beiden Graphen posten. Dann kann man beurteilen ob ein linearer Zusammenhang besteht (vermute ja nicht nur ich, aber bei den Chinesen gibt es immer Überraschendes - manchmal auch positves).

Gruss
Bernd

Instanz.png

Nachdem ich wohl der einzige bin, der damit ein Problem hatte, scheint es keinen großen Bedarf zu geben. Naja, ich weiß ja jetzt, wo ich den Code anpassen muss…