MQTT Message in Openhab einbinden

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Tallman
Beiträge: 6
Registriert: 13. Jan 2025 20:16
Answers: 0

MQTT Message in Openhab einbinden

Beitrag 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"]
Openhab 4.3.3 auf Win11 (alles Text Dateien)

Harka
Beiträge: 487
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: MQTT Message in Openhab einbinden

Beitrag 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.

Tallman
Beiträge: 6
Registriert: 13. Jan 2025 20:16
Answers: 0

Re: MQTT Message in Openhab einbinden

Beitrag von Tallman »

Hallo,
diese Version hatte ich gestern auch schon probiert und sie ging nicht.
Jetzt funktioniert es :roll:
Danke schöne WE noch
Openhab 4.3.3 auf Win11 (alles Text Dateien)

EmptySoft
Beiträge: 247
Registriert: 7. Jan 2020 14:45
Answers: 2
Kontaktdaten:

Re: MQTT Message in Openhab einbinden

Beitrag von EmptySoft »

Bei meinem Z2M sieht es im Thing so aus

Code: Alles auswählen

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

Benutzeravatar
udo1toni
Beiträge: 15241
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: MQTT Message in Openhab einbinden

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Tallman
Beiträge: 6
Registriert: 13. Jan 2025 20:16
Answers: 0

Re: MQTT Message in Openhab einbinden

Beitrag von Tallman »

Danke, teste ich dann gleichmal.
Openhab 4.3.3 auf Win11 (alles Text Dateien)

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: MQTT Message in Openhab einbinden

Beitrag 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.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Tallman
Beiträge: 6
Registriert: 13. Jan 2025 20:16
Answers: 0

Re: MQTT Message in Openhab einbinden

Beitrag von Tallman »

@peter-pan: In erweiterte Einstellungen hatte ich noch nicht so weit runter gescrollt ;) , danke, die Ausgabe sieht gleich viel besser aus :D
Openhab 4.3.3 auf Win11 (alles Text Dateien)

Antworten