Xiaomi Vibrationssensor per MQTT

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
curius
Beiträge: 78
Registriert: 1. Aug 2019 10:10
Answers: 0

Xiaomi Vibrationssensor per MQTT

Beitrag von curius »

Hallo Leute,

ich habe wieder mal eine Frage an euch.
Diesmal betrifft es eine Sensoreinbindung via MQTT.
Konkret geht es um den Xiaomi Vibrationssensor DJT11LM.
https://www.zigbee2mqtt.io/devices/DJT11LM.html

Ich habe schon einige Aqara Sensoren erfolgreich in mein System via Zigbee2MQTT und den CC2531 USB Stick eingebunden.
Diesmal habe ich jedoch keine Ahnung wie ich weiter vorgehen soll.
Ich möchte, dass der Sensor die Vibrationen der Waschmaschine registriert und dann in weiterer Folge das Ende des Waschvorgangs erkennt (Vibration ist dann wieder aus).

Soweit so gut - Payload bei Vibration sieht wie folgt aus:

Code: Alles auswählen

{"battery":100,"voltage":3145,"linkquality":2,"angle":78,"angle_x":0,"angle_y":0,"angle_z":90,"angle_x_absolute":90,"angle_y_absolute":90,"action":"vibration"}
Die "action":"vibration" gibt mir an, dass der Sensor eine Vibration erkannt hat.

Leider habe ich jetzt das Problem, dass ich nie mehr mitbekomme, wenn der Sensor keine Vibration mehr erkennt.
Der Payload sieht dann nämlich wie folgt aus:

Code: Alles auswählen

{"battery":100,"voltage":3145,"linkquality":5,"angle":78,"angle_x":0,"angle_y":0,"angle_z":90,"angle_x_absolute":90,"angle_y_absolute":90}
Es fehlt einfach im Payload die "action"...
Somit bleibt im openHAB der Status "vibration" unverändert, weil ich einfach kein "action"-Update mehr vom Sensor bekomme.

Bei meinen anderen Aqara Sensoren war das nie ein Thema. Der Bewegungsmelder schickt mir "occupancy":"true" und wenn die Bewegung vorbei ist eben "occupancy":"false".

Hat von euch schon mal jemand diesen Sensor erfolgreich vie Zigbee2MQTT eingebunden?
Wäre sehr nett, wenn ihr mir den entscheidenden Hinweis dazu geben könntet...

Besten Dank!

Grüße
Christian

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

Re: Xiaomi Vibrationssensor per MQTT

Beitrag von udo1toni »

Vermutlich ist es das Einfachste, die Payload komplett im Item zu speichern und dann in einer Rule den String auszuwerten (NICHT mit JSONPATH).

Hier wird der Zustand in ein Switch Item geschrieben:

Code: Alles auswählen

rule "vibration"
when
    Item vibrationSensor changed
then
    VibrationActive.postUpdate(if(vibrationSensor.state.toString.contains("vibration")) ON else OFF)
end
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

curius
Beiträge: 78
Registriert: 1. Aug 2019 10:10
Answers: 0

Re: Xiaomi Vibrationssensor per MQTT

Beitrag von curius »

That's it!
:lol:

Vielen lieben Dank - funktioniert perfekt ;-)

Grüße
Christian

curius
Beiträge: 78
Registriert: 1. Aug 2019 10:10
Answers: 0

Re: Xiaomi Vibrationssensor per MQTT

Beitrag von curius »

Hallo!

Eine Frage hätte ich noch zu dem Thema...
Wie bekomme ich folgende Fehlermeldung aus dem Log weg?

Code: Alles auswählen

2020-03-30 19:57:16.743 [WARN ] [t.generic.ChannelStateTransformation] - Executing the JSONPATH-transformation failed: Invalid path '$.action' in '{"battery":100,"voltage":3005,"linkquality":21,"angle":65,"angle_x":0,"angle_y":0,"angle_z":90,"angle_x_absolute":90,"angle_y_absolute":90,"strength":174}'
Klarerweise findet openHAB nicht immer den "path => action".
Die "action" ist in der Payload nur bei Bedarf vorhanden bzw. wird mitgeschickt => siehe Ursprungsfrage bzgl. Vibration.
Zwischendurch schickt der Sensor einfach die restlichen Daten ohne "action" => daraus folgt dann die oben gezeigte Fehler- bzw. Warnmeldung.

Kann man die irgendwie unterbinden?

Things-File:

Code: Alles auswählen

Thing topic vibrasens {
    Channels:
        Type string : vs_action_cp "Aktion" [stateTopic="zigbee2mqtt/vibra_cp" , transformationPattern="JSONPATH:$.action"]
//        Type number : vs_strength_cp "Strength" [stateTopic="zigbee2mqtt/vibra_cp" , transformationPattern="JSONPATH:$.strength"]
        Type number : vs_battery_cp "Batterie [%.1f %%]" [stateTopic="zigbee2mqtt/vibra_cp" , transformationPattern="JSONPATH:$.battery"]
        Type number : vs_voltage_cp "Spannung" [stateTopic="zigbee2mqtt/vibra_cp" , transformationPattern="JSONPATH:$.voltage"]
        Type number : vs_linkquality_cp "Verbindungsqualität [%.1f %%]" [stateTopic="zigbee2mqtt/vibra_cp" , transformationPattern="JSONPATH:$.linkquality"]
    }
Item-File:

Code: Alles auswählen

String vs_action_cp "Aktion" {channel="mqtt:topic:curius:vibrasens:vs_action_cp"}
// Number vs_strength_cp "Strength" {channel="mqtt:topic:curius:vibrasens:vs_strength_cp"}
Number vs_battery_cp "Batterie [%.1f %%]" {channel="mqtt:topic:curius:vibrasens:vs_battery_cp"}
Number vs_voltage_cp "Spannung" {channel="mqtt:topic:curius:vibrasens:vs_voltage_cp"}
Number vs_linkquality_cp "Verbindungsqualität [%.1f %%]" {channel="mqtt:topic:curius:vibrasens:vs_linkquality_cp"}
Besten Dank!

Grüße
Christian

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

Re: Xiaomi Vibrationssensor per MQTT

Beitrag von udo1toni »

Drum läuft es hier mit einer Rule und eben nicht mit dem direkten JSONPATH im Channel. Im englischen Forum wurde irgendwo (TM) beschrieben, wie man mehrere Transformations (speziell im Zusammenhang mit mqtt2) miteinander verketten kann, um eben solche Fehlermeldungen zu vermeiden.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

curius
Beiträge: 78
Registriert: 1. Aug 2019 10:10
Answers: 0

Re: Xiaomi Vibrationssensor per MQTT

Beitrag von curius »

Hallo!

Besten Dank für den Hinweis mit der Verkettung...
Für den oben genannten Fall funktioniert die Variante mit der Rule perfekt.
Wollte nur für die Daten wie "Voltage", "Battery" oder "Linkquality" nicht jeweils eine Rule anlegen bzw. die bestehenden erweitern... Deswegen habe ich mir gedacht, es gibt vielleicht noch eine andere Möglichkeit.

Die Lösung für die Verkettung habe ich übrigens jetzt auch im Netz gefunden:
https://community.openhab.org/t/mqtt-2- ... ters/68350

Werde ich die nächsten Tage dann mal ausprobieren.

Danke!

Grüße
Christian

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

Re: Xiaomi Vibrationssensor per MQTT

Beitrag von udo1toni »

Na, Du brauchst ja auch nur eine Rule, aber eben je ein Item für die diskreten Werte und ein Item für das JSON. das Zerlegen und Updaten der einzelnen Werte machst Du aber in nur einer Rule, die auf "JSON-Item changed" triggert.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

curius
Beiträge: 78
Registriert: 1. Aug 2019 10:10
Answers: 0

Re: Xiaomi Vibrationssensor per MQTT

Beitrag von curius »

Alles klar - du hast natürlich recht.
Ich brauche nur jeweils ein Item für das gesamte JSON, welches ich dann in der Rule "zerlege"...
Nach Durchsicht des oben geposteten Links, ist deine Herangehensweise sogar die wesentlich einfachere Variante aus meiner Sicht.

Besten Dank!

Grüße
Christian

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

Re: Xiaomi Vibrationssensor per MQTT

Beitrag von udo1toni »

Man braucht halt eine Rule dazu. Wenn das JSON sicher immer den entsprechenden Wert liefert (und speziell, wenn das Item sich aus dem http Cache bedienen kann) ist die In-Item-Definition sicher die elegantere Methode.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten