Seite 1 von 1

Xiaomi Vibrationssensor per MQTT

Verfasst: 14. Mär 2020 19:56
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

Re: Xiaomi Vibrationssensor per MQTT

Verfasst: 14. Mär 2020 20:22
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

Re: Xiaomi Vibrationssensor per MQTT

Verfasst: 14. Mär 2020 21:04
von curius
That's it!
:lol:

Vielen lieben Dank - funktioniert perfekt ;-)

Grüße
Christian

Re: Xiaomi Vibrationssensor per MQTT

Verfasst: 30. Mär 2020 21:13
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

Re: Xiaomi Vibrationssensor per MQTT

Verfasst: 30. Mär 2020 23:31
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.

Re: Xiaomi Vibrationssensor per MQTT

Verfasst: 31. Mär 2020 12:14
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

Re: Xiaomi Vibrationssensor per MQTT

Verfasst: 31. Mär 2020 15:27
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.

Re: Xiaomi Vibrationssensor per MQTT

Verfasst: 31. Mär 2020 22:15
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

Re: Xiaomi Vibrationssensor per MQTT

Verfasst: 1. Apr 2020 00:25
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.