Seite 1 von 3

Aqara Sensoren in openHAB über zigbee2MQTT

Verfasst: 2. Apr 2023 17:04
von Homiehabbie
Hallo zusammen,

ich habe erfolgreich den Sonoff USB Dongle, Zigbee2MQTT und Mosquito auf einem Raspi mit openHAB 3.4.2 zum Laufen gebracht. Ich kann das Dashboard von Zigbee2MQTT öffnen und habe dort alle meine Sensoren registriert. Ebenso sehe ich in MQTT Explorer meine Sensoren ebenfalls und die von ihnen gesendeten Werte.

Beispielsensor (Aqara) "Temperatursensor Waschküche" mit topic "zigbee2mqtt/Feuchtigkeits-/Temperatursensor Waschküche"

Code: Alles auswählen

{"battery":100,"humidity":50.41,"linkquality":144,"power_outage_count":8,"pressure":1007.9,"temperature":22.83,"voltage":3035}
In openHAB habe ich das MQTT Binding installiert und sehe dies sowie den Zigbee2MQTT Broker (beide online).

Über VS habe ich mich mit dem Raspi verbunden und war erst einmal irritiert, dass es unter `/etc/openhab/things` sowie `/etc/openhab/items` noch keine Dateien gab obwohl ja in openHAB schon etwas vorhanden ist.

Ok, was soll's, dann habe ich zwei Dateien erstellt:

mqtt.items

Code: Alles auswählen

Number WK_TEMP "Temperatur [%.1f °C]"  <temperature>  {channel="mqtt:broker:675a0df283:allround_sensor_waschkueche:temperature"}
Number WK_HUMIDITY "Feuchtigkeit [%d %%]"    {channel="mqtt:broker:675a0df283:allround_sensor_waschkueche:humidity"}
Number WK_PRESSURE "Luftdruck [%d mbar]"     {channel="mqtt:broker:675a0df283:allround_sensor_waschkueche:pressure"}
Number WK_BATTERY "Batteriezustand [%.1f %%]" <battery>   {channel="mqtt:broker:675a0df283:allround_sensor_waschkueche:battery"}
Number WK_LINKQUALITY "Verbndungsstatus [%d]"    {channel="mqtt:broker:675a0df283:allround_sensor_waschkueche:linkquality"}
mqtt.things

Code: Alles auswählen

Thing mqtt:675a0df283:allround_sensor_waschkueche "SENSOR_WASCH" @ "Waschkueche"
    {
        Channels:
            Type number : temperature "temperature" [ stateTopic = "zigbee2mqtt/allround_sensor_waschkueche/temperature" ]
            Type number : humidity "humidity" [ stateTopic = "zigbee2mqtt/allround_sensor_waschkueche/humidity" ]
            Type number : pressure "pressure" [ stateTopic = "zigbee2mqtt/allround_sensor_waschkueche/pressure" ]
            Type number : voltage "voltage" [ stateTopic = "zigbee2mqtt/allround_sensor_waschkueche/voltage" ]     
            Type number : battery "battery" [ stateTopic = "zigbee2mqtt/allround_sensor_waschkueche/battery" ]     
            Type number : linkquality "linkquality" [ stateTopic = "zigbee2mqtt/allround_sensor_waschkueche/linkquality" ]               
    }
Dies sorgte immerhin dafür, dass ich im openHAB die 5 Items mit Wert "null" sehen kann. Wenn auf eines der Items klicke, sehe ich von meinen Versuchen zwei Channel Links, die beide unknown/invalid sind.

Was mache ich falsch?

Danke

Re: Aqara Sensoren in openHAB über zigbee2MQTT

Verfasst: 2. Apr 2023 21:48
von udo1toni
Ein Topic sollte nach Möglichkeit keine Sonderzeichen enthalten. zigbee2mqtt/Feuchtigkeits-/Temperatursensor Waschküche enthält ein -, ein / (der ist reserviert), ein Leerzeichen und noch ein ü.
Ja, grundsätzlich geht das alles, aber es ist nun mal schlechter Stil und es führt unweigerlich zu Problemen.

Weiter...

Es gibt zwei unterschiedliche Methoden, in openHAB zu konfigurieren. Zum einen über Textdateien, zum anderen über die UI. Was Du in den Textdateien konfigurierst, kannst Du in der UI sehen, aber nicht editieren. Was Du in der UI konfigurierst, erscheint nicht in den Textdateien (dann wäre es ja über die UI nicht mehr änderbar...)
Die Textkonfiguration ist historisch gewachsen, und leider hat man bei der Entwicklung von openHAB2 den Fehler gemacht, die Textvariante nicht zu 100% zu integrieren - man dachte, sie loswerden zu können - und seitdem (ca. 2017) muss jedem User erklärt werden, was dick und fett in der Doku steht, nämlich, dass beide Verfahren 100 % voneinander unabhängig sind. Es gibt keine Übernahme von a nach b oder umgekehrt.
In der UI tauchen die Textelemente lediglich deshalb auf, weil sie nun mal Bestandteil der Konfiguration sind, und die UI liest die Konfiguration über die API aus.
Genauso kannst Du in der Textkonfiguration ohne Einschränkungen die Elemente der UI Konfiguration nutzen (z.B. ein Item auf einen Channel verlinken), Du kannst sie aber nicht bearbeiten - weil sie gar nicht erst auftauchen.
Solltest Du nun auf die Idee kommen, identische Things (oder Items) in den Textdateien zu kreieren, dann zerschießt Du damit die Konfiguration von openHAB.
Du kannst beide Methoden parallel nutzen, Du musst aber wissen, was Du wo konfiguriert hast, denn nur dort kannst Du es auch bearbeiten.

Wenn Du eine Bridge über die UI angelegt hast, kannst Du diese auch über die Textkonfiguration nutzen, Du musst aber für jedes Thing einen Bezug zu der Bridge angeben, es reicht nicht, diesen über die UID des Things herzustellen. Besser wäre es in diesem Fall, die Bridge ebenfalls über die Textdatei anzulegen und die Generic mqtt Things als Kinder der Bridge anzulegen - das spart Tipparbeit.

Die Links zu den Channels sind auch nicht irgendwelche, die müssen schon stimmen (am besten überlässt man es VS Code, diese einzutragen)
Ein Link zu einem mqtt Channel lautet immer "mqtt:topic:<brokerid>:<thingid>:<channelid>", Deine Links lauten "mqtt:broker:..."

Welchen Weg Du wählst, ist egal, meist fühlen sich Einsteiger mit der UI wohler - vor allem, weil dort die Form erzwungen wird, es gibt Felder, in die "nur" das Richtige eingetragen werden muss.

Dein eigentliches Problem, warum Du keine Daten in Deine Channel bekommst, ist ein großes Missverständnis Deinerseits zur Funktionsweise von MQTT.

Es gibt in MQTT Topics und Payloads. Ein Topic besteht gewöhnlich aus einer hierarchischen Struktur <gerätegrupppe>/<gerät>/<topicart>/<endpunkt> wobei <gerätegruppe> gerne weg gelassen wird.
<topicart> könnte verwendet werden, um die Datenrichtung zu bestimmen, muss auch nicht unbedingt vorhanden sein, letztlich ist es jedem selbst überlassen, wie die Topics ausgestaltet sind. Wichtig zu verstehen ist aber, das Topic kannst Du Dir wie einen Dateinamen vorstellen, mitsamt Verzeichnisbaum. Und der Inhalt der Datei ist die Payload. Die Payload kann verschiedene Formate aufweisen, weit verbreitet sind Text und JSON, aber man könnte auch genauso Binärdateien oder XML als Payload verwenden.

Das Beispiel oben etwas anders formatiert:

Code: Alles auswählen

{
    "battery": 100,
    "humidity": 50.41,
    "linkquality": 144,
    "power_outage_count": 8,
    "pressure": 1007.9,
    "temperature": 22.83,
    "voltage": 3035
}
Es handelt sich um JSON.

Der Inhalt, der im Channel ankommt, ist der gesamte Text. Die in Anführungszeichen gesetzten Strings sind NICHT Teil des Topics. Stattdessen musst Du im Channel einen Transformation Service nutzen, um den eigentlichen Wert zu extrahieren. Da es sich um JSON handelt, bietet sich JSONPATH an, das steht als Addon zur Verfügung und muss gesondert installiert werden.
Anschließend kannst Du dann im Channel als Incomming Value Transformation mittels JSONPATH:$.pressure z.B. auf den Wert 1007.9 zugreifen.

Wie gesagt geht das ganz bequem über die UI, genauso gut natürlich auch per Textdatei
mqtt.things:

Code: Alles auswählen

Bridge mqtt:broker:bridge "Mosquitto" [
    host="localhost"
 ] {
    Thing topic sensor_wk "Sensor Waschküche" {
    Channels:
        Type number : temp    "Temperatur"     [ stateTopic = "zigbee2mqtt/allround_sensor_waschkueche", transformationPattern="JSONPATH:$.temperature", unit="°C" ]
        Type number : hum     "Feuchte"        [ stateTopic = "zigbee2mqtt/allround_sensor_waschkueche", transformationPattern="JSONPATH:$.humidity", unit="%" ]
        Type number : press   "Druck"          [ stateTopic = "zigbee2mqtt/allround_sensor_waschkueche", transformationPattern="JSONPATH:$.pressure", unit="hPa" ]
        Type number : volt    "Spannung"       [ stateTopic = "zigbee2mqtt/allround_sensor_waschkueche", transformationPattern="JSONPATH:$.voltage", unit="V" ]
        Type number : bat     "Batteriestatus" [ stateTopic = "zigbee2mqtt/allround_sensor_waschkueche", transformationPattern="JSONPATH:$.battery", unit="%" ]
        Type number : quality "Link"           [ stateTopic = "zigbee2mqtt/allround_sensor_waschkueche", transformationPattern="JSONPATH:$.linkquality" ]
    }
}
Die Bridge ist hier als Elter definiert, was es erspart, bei jedem Thing mit angeben zu müssen, welche Bridge es denn nun ist.

Und die zugehörige mqtt.items:

Code: Alles auswählen

Number:Temperature   WK_temperature "Temperatur"             <temperature>  {channel="mqtt:topic:bridge:sensor_wk:temp"}
Number:Dimensionless WK_humidity    "Feuchtigkeit"                          {channel="mqtt:topic:bridge:sensor_wk:hum"}
Number:Pressure      WK_pressure    "Luftdruck"                             {channel="mqtt:topic:bridge:sensor_wk:press"}
Number:Dimensionless WK_battery     "Batteriezustand"        <battery>      {channel="mqtt:topic:bridge:sensor_wk:bat"}
Number               WK_quality     "Verbindungsstatus[%d]"                 {channel="mqtt:topic:bridge:sensor_wk:quality"}
Und die sehen nun völlig anders aus als bei Dir, zum einen durch die anderen Links zu den Channels, zum anderen handelt es sich zum großen Teil um UoM Items, das heißt, sie nutzen automatisch die passende Einheit - die wiederum schon im Channel definiert ist.
Die große Ausnahme bildet die Linkquality, weil dort nicht klar ist, ob es dazu überhaupt eine Einheit gibt. % ist es schon mal nicht, da im Beispiel der Wert 144 beträgt. Deshalb also einfach so die Anzeige - ohne Einheit.

Ich möchte empfehlen, die Gerätenamen insbesondere im mqtt Topic Baum möglichst kurz zu halten - statt allround_sensor_waschkueche wäre z.B. sensor_wk vollkommen ausreichend. Ich bin mir nicht sicher, ob dies tatsächlich das korrekte Topic ist, zur Not musst Du das halt anpassen.

Re: Aqara Sensoren in openHAB über zigbee2MQTT

Verfasst: 3. Apr 2023 19:14
von Homiehabbie
Hallo Udo,

zunächst einmal vielen herzlichen Dank für Deine umfangreiche Antwort. Ich finde es sehr freundlich von Dir, dass Du Dir so viel Zeit für mich und mein Problem genommen hast. Ich werde mir Deine Anmerkungen in Ruhe anschauen und versuchen, sie umzusetzen. Mein Hauptproblem ist, dass ich die Verbindung zwischen den Elementen aktuell noch nicht verstehe.

Herzlicher Gruß

Re: Aqara Sensoren in openHAB über zigbee2MQTT

Verfasst: 3. Apr 2023 20:16
von udo1toni
Die Verbindung ist eigentlich recht einfach, wenn auch mit einigen Zwischenstationen...

Code: Alles auswählen

Aqara Sensor <-> Zigbee <-> Sonoff USB Dongle <-> Zigbee2mqtt <-> LAN <-> Mosquitto <-> LAN <-> MQTT Binding <-> Bridge <-> Thing <-> Channel <-> Item (openHAB internal Bus)

Re: Aqara Sensoren in openHAB über zigbee2MQTT

Verfasst: 10. Apr 2023 16:12
von Homiehabbie
Moin.

Ich habe mich heute noch einmal an die Konfiguration gesetzt. Ich habe nur das MQTT Binding im UI installiert und per SSH die Datei mqtt.items im Ordner `/etc/openhab/items` erstellt. Diese habe ich dann über VS Code so gefüllt:

Code: Alles auswählen

Bridge mqtt:broker:Mosquitto [ host="192.168.200.61", port=1883, username="geheim", password="supergeheim" ]

Thing mqtt:zigbee2mqtt:MultiSensorSZ "MultiSensorSZ" (mqtt:broker:Mosquitto) {
  Channels:
    Type number : temp "Temperatur" [ stateTopic = "zigbee2mqtt/MultiSensorSZ", transformationPattern="JSONPATH:$.temperature", unit="°C" ]
    Type number : hum "Feuchtigkeit" [ stateTopic = "zigbee2mqtt/MultiSensorSZ", transformationPattern="JSONPATH:$.humidity", unit="%" ]
    Type number : bat "Batteriestatus" [ stateTopic = "zigbee2mqtt/MultiSensorSZ", transformationPattern="JSONPATH:$.battery", unit="%" ]
    Type number : quality "Link" [ stateTopic = "zigbee2mqtt/MultiSensorSZ", transformationPattern="JSONPATH:$.linkquality" ]
}
Die Topics habe ich mit dem MQTT Explorer zu den jeweiligen Sensoren ausgelesen. Leider sehe ich nichts von alldem im UI. Auch nach einem Neustart des Servers nicht.

Im Log steht dazu:

Code: Alles auswählen

Configuration model 'mqtt.items' has errors, therefore ignoring it: [1,1]: missing EOF at 'Bridge'
Was mache ich falsch? :roll:

Re: Aqara Sensoren in openHAB über zigbee2MQTT

Verfasst: 10. Apr 2023 17:11
von Homiehabbie
So, habe zwei Dateien angelegt, die nun auch ohne Fehlermeldung eingelesen werden können:

mqtt.things:

Code: Alles auswählen

Bridge mqtt:broker:Mosquitto "Mosquitto" [ 
  host="192.168.200.61", 
  port=1883, 
  username="geheim", 
  password="supergeheim" ]
{
  Thing topic MultiSensorSZ "MultiSensorSZ" (mqtt:broker:Mosquitto) {
    Channels:
      Type number : temp "Temperatur" [ stateTopic = "zigbee2mqtt/MultiSensorSZ", transformationPattern="JSONPATH:$.temperature", unit="°C" ]
      Type number : hum "Feuchtigkeit" [ stateTopic = "zigbee2mqtt/MultiSensorSZ", transformationPattern="JSONPATH:$.humidity", unit="%" ]
      Type number : bat "Batteriestatus" [ stateTopic = "zigbee2mqtt/MultiSensorSZ", transformationPattern="JSONPATH:$.battery", unit="%" ]
      Type number : quality "Link" [ stateTopic = "zigbee2mqtt/MultiSensorSZ", transformationPattern="JSONPATH:$.linkquality" ]
  }
}
mqtt.things:

Code: Alles auswählen

Number MultiSensorSZ_TEMP "Temperatur [%.1f °C]"  <temperature>  {channel="mqtt:broker:Mosquitto:MultiSensorSZ:temperature"}
Number MultiSensorSZ_HUMIDITY "MultiSensorSZ HUMID [%d %%]"    {channel="mqtt:broker:Mosquitto:MultiSensorSZ:humidity"}
Number MultiSensorSZ_PRESSURE "MultiSensorSZ PRESS [%d mbar]"     {channel="mqtt:broker:Mosquitto:MultiSensorSZ:pressure"}
Number MultiSensorSZ_VOLTAGE "MultiSensorSZ Volt [%d mV]"   {channel="mqtt:broker:Mosquitto:MultiSensorSZ:voltage"}
Number MultiSensorSZ_BATTERY "MultiSensorSZ BAT [%.1f %%]" <battery>   {channel="mqtt:broker:Mosquitto:MultiSensorSZ:battery"}
Number MultiSensorSZ_LINKQUALITY "MultiSensorSZ [%d]"    {channel="mqtt:broker:Mosquitto:MultiSensorSZ:linkquality"}
Mosquitto broker und MultiSensorSZ werden als "online" im UI angezeigt, die Things sind auch da, aber alle haben invalid links....

Re: Aqara Sensoren in openHAB über zigbee2MQTT

Verfasst: 10. Apr 2023 18:04
von oh73
die Things sind auch da, aber alle haben invalid links....
können auch so nicht funktionieren,

hab das ganze mal geändert so wie ich denke das es funktioniert.
Things:
Änderung hier bei : Thing mqtt:topic:MultiSensorSZ

Code: Alles auswählen

Bridge mqtt:broker:Mosquitto "Mosquitto" [ 
  host="192.168.200.61", 
  port=1883, 
  username="geheim", 
  password="supergeheim" ]
{
  Thing mqtt:topic:MultiSensorSZ  "MultiSensorSZ" (mqtt:broker:Mosquitto) {
    Channels:
      Type number : temp "Temperatur" [ stateTopic = "zigbee2mqtt/MultiSensorSZ", transformationPattern="JSONPATH:$.temperature", unit="°C" ]
      Type number : hum "Feuchtigkeit" [ stateTopic = "zigbee2mqtt/MultiSensorSZ", transformationPattern="JSONPATH:$.humidity", unit="%" ]
      Type number : bat "Batteriestatus" [ stateTopic = "zigbee2mqtt/MultiSensorSZ", transformationPattern="JSONPATH:$.battery", unit="%" ]
      Type number : quality "Link" [ stateTopic = "zigbee2mqtt/MultiSensorSZ", transformationPattern="JSONPATH:$.linkquality" ]
  }
}

Items:

Code: Alles auswählen

Number MultiSensorSZ_TEMP "Temperatur [%.1f °C]"  <temperature>  	{channel="mqtt:topic:MultiSensorSZ:temp"}
Number MultiSensorSZ_HUMIDITY "MultiSensorSZ HUMID [%d %%]"    		{channel="mqtt:topic:MultiSensorSZ:hum"}
//Number MultiSensorSZ_PRESSURE "MultiSensorSZ PRESS [%d mbar]"     {channel="mqtt:topic:MultiSensorSZ:pressure"}
//Number MultiSensorSZ_VOLTAGE "MultiSensorSZ Volt [%d mV]"   		{channel="mqtt:topic:MultiSensorSZ:voltage"}
Number MultiSensorSZ_BATTERY "MultiSensorSZ BAT [%.1f %%]" <battery>   {channel="mqtt:topic:MultiSensorSZ:bat"}
Number MultiSensorSZ_LINKQUALITY "MultiSensorSZ [%d]"    			{channel="mqtt:topic:MultiSensorSZ:quality"}
für pressure und voltage fehlen aber im Thing noch die Channels!

Re: Aqara Sensoren in openHAB über zigbee2MQTT

Verfasst: 10. Apr 2023 19:56
von Homiehabbie
Super, danke. Wir kommen dem Erfolg näher!

`Thing mqtt:topic:MultiSensorSZ` mag er nicht so: Provide a thing type ID and a thing ID in this format: <thingTypeId> <thingId>

Ich hatte auch gesehen, dass Du die Channeltypen korrigiert hast. Dadurch sind alle anderen Fehler im Log verschwunden. *TOP*

Re: Aqara Sensoren in openHAB über zigbee2MQTT

Verfasst: 10. Apr 2023 20:24
von oh73
da sehe ich im Moment kein Fehler,

hab bei mir immer einige Muster Dateien wie es bei mir funktioniert!

danach hab ich das in deinen Dateien geändert.

Re: Aqara Sensoren in openHAB über zigbee2MQTT

Verfasst: 10. Apr 2023 21:34
von Homiehabbie
Hm, der erzeugte Link hat den Pfad `mqtt:topic:LeckageSensorWK:linkquality`. Wenn ich jedoch einen Link manuell anlege, der danach ONLINE ist, hat dieser den Pfad `mqtt:topic:Mosquitto:LeckageSensorWK:quality`. Aber wie bekomme ich das hin? Und wieso wird trotz Status ONLINE kein Wert angezeigt?