Seite 1 von 1

MQTT Message in Openhab einbinden

Verfasst: 5. Apr 2025 10:00
von Tallman
Hallo,
ich möchte mit meinen Zigbee Geräten auf Z2M umsteigen und habe gleich mit dem ersten Gerät Probleme.
Es läuft Openhab 4.3.3 und wird über Textdateien konfiguriert.

Die Struktur sieht so aus:

Code: Alles auswählen

{
    "battery": 100,
    "battery_low": false,
    "linkquality": 174,
    "tamper": false,
    "update": {
        "installed_version": 55,
        "latest_version": 55,
        "state": "idle"
    },
    "vibration": false,
    "voltage": 3200,
    "x_axis": 187,
    "y_axis": 328,
    "z_axis": -1281
}
Den Wert für Vibration bekomme ich so:

Code: Alles auswählen

Type switch : TRVibration1_status "3RVibration1 status"      [ stateTopic="z2m/3RVibration1", transformationPattern="JSONPATH:$.vibration",on="true", off="false"]
Wie ist der richtige Code für den Batteriewert, so geht es nicht:

Code: Alles auswählen

Type number : TRVibration1_Battery "3RVibration 1 Battery"   [ stateTopic="z2m", transformationPattern="JSONPATH:$.3RVibration1.battery"]

Re: MQTT Message in Openhab einbinden

Verfasst: 5. Apr 2025 11:28
von Harka
Moin,
warum funktioniert

Code: Alles auswählen

stateTopic="z2m/3RVibration1", transformationPattern="JSONPATH:$.battery"
nicht? Wäre für mich die naheliegendste Version wenn ich nichts wesentliches übersehen habe.

Re: MQTT Message in Openhab einbinden

Verfasst: 5. Apr 2025 12:57
von Tallman
Hallo,
diese Version hatte ich gestern auch schon probiert und sie ging nicht.
Jetzt funktioniert es :roll:
Danke schöne WE noch

Re: MQTT Message in Openhab einbinden

Verfasst: 5. Apr 2025 15:16
von EmptySoft
Bei meinem Z2M sieht es im Thing so aus

Code: Alles auswählen

Type number : battery        [ stateTopic="zigbee2mqtt/0x12345678", transformationPattern="JSONPATH:$.battery" ]

Re: MQTT Message in Openhab einbinden

Verfasst: 6. Apr 2025 07:09
von udo1toni
Ganz grundsätzlich:

mqtt Kommunikation läuft über Topics (z.B. z2m/3RVibration1).
Welche Topics ein Gerät sendet, kann man leicht mittels mqtt Sniffer herausfinden (z.B. MQTT Explorer, kostenlos im MS Store).
Die Payload der Topics (also der Inhalt) kommt häufig als JSON daher, entsprechend muss man diese Payload z.B. mittels JSONPath auslesen.
Hier gibt es Tools, um bequem den korrekten Path zu ermitteln, z.B. VisualStudio Code mit dem JSON Path Status Bar Plugin.
Man lädt das komplette JSON Objekt als Textdatei, setzt den Cursor auf den Wert, den man geliefert bekommen möchte und in der Statuszeile (unterhalb des Textfensters) wird der korrekte Path angezeigt, mit Klick darauf kann er direkt in die Zwischenablage übernommen werden.
JSONPath beherrscht allerdings mehr als stumpfes adressieren, z.B. kann eine Node auch ein Array liefern, dann kann es sinnvoll sein, den gelieferten Path nachträglich anzupassen.

Re: MQTT Message in Openhab einbinden

Verfasst: 6. Apr 2025 16:05
von Tallman
Danke, teste ich dann gleichmal.

Re: MQTT Message in Openhab einbinden

Verfasst: 6. Apr 2025 17:35
von peter-pan
Hast du schon geprüft, wie der Parameter output in der "configuration.yaml" gesetzt ist ?

Code: Alles auswählen

  
  Auszug aus der configuration.yaml
  .......
  pan_id: 4567
  log_level: info
  log_namespaced_levels:
    z2m:mqtt: warning
  channel: 25
  output: attribute_and_json
  log_directory: /var/log/zigbee2mqtt/%TIMESTAMP%al
  log_file: log.txt
  homeassistant_legacy_entity_attributes: false
  legacy_api: false
  legacy_availability_payload: false
  last_seen: ISO_8601_local
  ......
Ich habe beide Möglichkeiten ausgewählt und kann deshalb sowohl mit Attributen als auch mit JSON-Strings arbeiten.
Diese kannst du entweder in der "configuration.yaml" mit einem Editor (evtl. "nano") anpassen.

Es besteht aber auch die Möglichkeit diese Anpassung mit dem "Frontend" von Z2M vorzunehmen. Unter "Einstellungen/Erweitert" findest du etwas weiter unten die Möglichkeit "MQTT output type". Dort kannst du dann deine Optionen anwählen.
z2m_mqtt.jpg
Hier ein Thing-Beispiel aus meinem SetUp mit den dazu passenden Channels (sowohl Attribut als auch JSON)

Code: Alles auswählen

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++ Bewegungs-Sensoren +++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Thing mqtt:topic:danny:snzb0301 "Bewegungs-Sensor SZNB-03-01"  (mqtt:broker:danny )   @ "zigbee2mqtt"
      [ availabilityTopic="zigbee2mqtt/snzb_03_01/availability", transformationPattern="JSONPATH:$.state", payloadNotAvailable="offline", payloadAvailable= "online" ] 
    {
    Channels:
        Type number  : voltage      "SNZB-03-01 Spannung"                 [ stateTopic="zigbee2mqtt/snzb_03_01/voltage", unit="mV" ]
        Type number  : battery      "SNZB-03-01 Batterie"                 [ stateTopic="zigbee2mqtt/snzb_03_01/battery", unit="%" ] 
        Type contact : batterylow   "SNZB-03-01 Batterie Niedrig"         [ stateTopic="zigbee2mqtt/snzb_03_01/battery_low", on="true", off="false" ] 
        Type switch  : occupancy    "SNZB-03-01 Bewegung"                 [ stateTopic="zigbee2mqtt/snzb_03_01/occupancy", on="true", off="false" ]
        Type contact : tamper       "SNZB-03-01 Sabotage"                 [ stateTopic="zigbee2mqtt/snzb_03_01/tamper", on="true", off="false" ]
        Type number  : linkquality  "SNZB-03-01 Empfangsstäreke LQI"      [ stateTopic="zigbee2mqtt/snzb_03_01", transformationPattern="JSONPATH:$.linkquality", unit="lqi" ]
        Type switch  : reachable    "SNZB-03-01 Reachable"                [ stateTopic="zigbee2mqtt/snzb_03_01/availability", transformationPattern="JSONPATH:$.state", on="online", off="offline" ]

    }
und die passende .item-Datei

Code: Alles auswählen

//**********************************************************************************************************************************************************************************************************************
//Gruppe ZigBee             Sonoff Bewegungs-Sensoren
//**********************************************************************************************************************************************************************************************************************
Group                       gMoSo                        "Sonoff SNTB-03 Motion-Properties"              <motion> 
//                          Tür- Bewegungs-Sensor SNZB-03
Group                      gsnzb03_01                    "Bewegung SNZB-03 01"                           <motion>                (gEG_Buero)                          ["MotionDetector"]
Number:ElectricPotential    snzb03_01_voltage            "Bewegung SNZB-03 01 Spannung [%.1f]"           <energy>                (gsnzb03_01)                         ["Voltage"]                                 { channel="mqtt:topic:danny:snzb0301:voltage"}        
Number:Dimensionless        snzb03_01_battery            "Bewegung SNZB-03 01 Batterie"                  <batterylevel>          (gsnzb03_01,gBattLevelEG)            ["LowBattery"]                              { channel="mqtt:topic:danny:snzb0301:battery", unit="%", stateDescription="pattern" [pattern="%.0f %unit%"] }       
Contact                     snzb03_01_batt               "Bewegung SNZB-03 01 Batterie niedrig"          <lowbattery>            (gsnzb03_01,gBatt)                   ["Alarm"]                                   { channel="mqtt:topic:danny:snzb0301:batterylow" }       
Switch                      snzb03_01_occupancy          "Bewegung SNZB-03 01 Bewegung"                  <motion>                (gsnzb03_01,gMoSo)                   ["Presence","Status"]                       { channel="mqtt:topic:danny:snzb0301:occupancy" }     
Contact                     snzb03_01_tamper             "Bewegung SNZB-03 01 Manipulation  [%s]"        <siren1>                (gsnzb03_01)                         ["Tampered"]                                { channel="mqtt:topic:danny:snzb0301:tamper" }         
Number                      snzb03_01_linkquality        "Bewegung SNZB-03 01 LQI [%.1f %unit%]"         <qualityofservice>      (gsnzb03_01)                         ["Level"]                                   { channel="mqtt:topic:danny:snzb0301:linkquality", stateDescription="" [pattern="%.0f LQI"] }     
Switch                      snzb03_01_Unreach            "Bewegung SNZB-03 01 Erreichbarkeit [%s]"       <siren1>                (gsnzb03_01,gLWT)                    ["Point"]                                   { channel="mqtt:topic:danny:snzb0301:reachable" }     

Vielleicht hilft dir das weiter.

Ansonsten solltest du dir, wie von Udo beschrieben, mit einem "MQTT-Explorer/Sniffer" mal anschauen, was da an den Broker geschickt wird.

Re: MQTT Message in Openhab einbinden

Verfasst: 7. Apr 2025 17:24
von Tallman
@peter-pan: In erweiterte Einstellungen hatte ich noch nicht so weit runter gescrollt ;) , danke, die Ausgabe sieht gleich viel besser aus :D