Tasmota MQTT ZBB mehrere Sensoren mit gleichem Topic

Die alternative Firmware für ESP8266 based devices

Moderatoren: seppy, udo1toni

Antworten
casator
Beiträge: 6
Registriert: 31. Jan 2022 11:51

Tasmota MQTT ZBB mehrere Sensoren mit gleichem Topic

Beitrag von casator »

Hallo Zusammen,

Ich habe ein kleines Problem mit den MQTT Nachrichten der Sonoff Zigbee Bridge (mit Tasmota).
Alles läuft soweit, nur sendet die Bridge die Daten verschiedener Sensoren mit dem gleichen Topic, z.B.:

home/T_SONOFF_ZBB/tele/SENSOR = {"ZbReceived":{"0x6480":{"Device":"0x6480","Contact":1,"Endpoint":1,"LinkQuality":55}}}
home/T_SONOFF_ZBB/tele/SENSOR = {"ZbReceived":{"0x8240":{"Device":"0x8240","Contact":1,"Endpoint":1,"LinkQuality":55}}}

Diese Things habe ich angelegt:
Type switch : Contact1 [ stateTopic = "home/T_SONOFF_ZBB/tele/SENSOR", transformationPattern="JSONPATH:$.ZbReceived.0x6480.Contact" ]
Type switch : Contact2 [ stateTopic = "home/T_SONOFF_ZBB/tele/SENSOR", transformationPattern="JSONPATH:$.ZbReceived.0x8240.Contact" ]

Wenn nun die Bridge die MQTT Nachricht für den Contact1 sendet, kommt für Contact2 eine Warning "Could not find...0x8240.. in ..ZbReceived.0x6480..."

Kann man die Things bzw. das transformationPattern irgendwie ändern um die Warnings nicht mehr zu bekommen?

Danke

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

Re: Tasmota MQTT ZBB mehrere Sensoren mit gleichem Topic

Beitrag von udo1toni »

Ja, Du musst dazu zwei Transformations miteinander verbinden. Als erste Transformation lässt Du ein Regex Pattern auf den entscheidenden String matchen, so:

Code: Alles auswählen

transformationPattern="REGEX:(.*0x6480.*)∩JSONPATH:$.ZbReceived.0x6480.Contact"
Damit wird der Output von REGEX zum Input von JSONPATH. Wenn die Expression nicht matcht, übergibt sie einen leeren String, womit JSONPATH nichts tut - der alte Wert bleibt erhalten.

Evtl. habe ich noch irgendwo einen Tippfehler drin, aber grundsätzlich sollte es so funktionieren. Das Intersection Symbol ∩ kopierst Du am besten aus der UI (ist im Hilfetext zum TransformationPattern erklärt) oder aus diesem Posting (ich hab es aus der UI hierher kopiert ...), denn auf der deutschen Tastatur gibt es keine Tastenkombination dafür. Im Unicode Zeichensatz ("Zeichentabelle" in Windows) gibt es aber drei verschiedene täuschend ähnliche Zeichen, von denen logischerweise nur eines funktioniert...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

casator
Beiträge: 6
Registriert: 31. Jan 2022 11:51

Re: Tasmota MQTT ZBB mehrere Sensoren mit gleichem Topic

Beitrag von casator »

Danke, habe nun ein bisschen mit Regex "experimentiert" und es läuft super...

laoli
Beiträge: 15
Registriert: 7. Feb 2022 19:58

Re: Tasmota MQTT ZBB mehrere Sensoren mit gleichem Topic

Beitrag von laoli »

Hallo zusammen,

kann ich die Ausdrücke einfach im "Incoming Value Transformations" eingeben, oder haben die da keine Wirkung (arbeite gerade nur mit der Web GUI, habe vor kurzem erst angefangen OpenHab anzutesten. Muss mal gucken wo überhaupt die Config Dateien sind (die ich eigentlich lieber mag, aber dort wo ich sie erwartet habe sind nur leere Ordner. Zeitmangel weiter zu suchen...))?
Es kommt auf jeden Fall immer der komplette JSON String durch, aber ich brauche in meinem Fall nur den Power Wert.
Hier mal die Rohdaten:
tele/TasmotaZigbeeGateway/1872/SENSOR
{
"ZbReceived": {
"0x1872": {
"Device": "0x1872",
"Power": 0,
"Endpoint": 11,
"LinkQuality": 61
}
}
}

Das sind sehr günstige Zigbee Steckdosen von einem Discounter Online Shop (weiß nicht wie gerne hier Namen gesehen sind), die ich mal testen wollte.
Zigbee ist da Stromsparsamer als WLAN, daher fände ich die Verwendung sinnvoll (die Steckdosen hier sollen 0,3W Standby brauchen. Summiert sich natürlich auch...).
Daher habe ich mir ein Sonoff Zigbee Gateway geholt und mit der Tasmota Firmware bespielt.

Dinge wie:
JSONPATH:$.ZbReceived.0x1872.Power
liefern mir einfach nur den kompletten JSON String ins Thing (was ich Testweise als String angelegt habe, um den Output gut sehen zu können).
Senden geht schon super, aber der Status währe schon relativ interessant.

Gibt es eventuell auch einen viel besseren Weg, als es in jeden einzelnen Thing zu definieren?

Das gleiche Problem werde ich mit dem Sonoff RF Gateway haben.
Da schien es mir schon leichter einfach ein eigenes Gateway zu machen welches alles in entsprechende bzw. eigene Topics postet, aber irgendwie muss es ja auch so gehen. Ich habe da halt noch zu wenig Erfahrung mit OpenHab und momentan auch relativ wenig Zeit.
Wird sich hoffentlich ab Sommer ändern (paar Projekte auf der Arbeit sollten dann mal durch sein)....

@udo1toni
Server Migration ist durch.
Auf jeden Fall bin ich da sehr zufrieden, durch weniger Lautstärke, deutlich weniger Stromverbrauch und deutlich mehr Leistung :)
Für den Start einer VM über OpenHab habe ich auch eine ausreichend sichere Lösung gemacht (ein Script welches auf dem Proxmox Host alle paar Sekunden guckt ob im LXC Container (die Dateien sieht der Host eh) eine Datei existiert und dann die VM startet).
Funktioniert gut (Script auf dem Host läuft schon), muss nur mal sehen wie OpenHab Dateien schreiben kann (habe ich zum Test manuell gemacht), zu Not reicht ja ein dafür vorgesehenes Log File (das geht auf jeden Fall und ist ausreichend, wäre ja gut wenn OpenHab keinen direkten Bash Zugriff hat).
Kann ich hier mal dokumentieren, ist aber auch nur anwendbar wenn Openhab im selben Proxmox Host in einem LXC Container läuft (über Netzwerk habe ich es ja absichtlich nicht gemacht).

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

Re: Tasmota MQTT ZBB mehrere Sensoren mit gleichem Topic

Beitrag von udo1toni »

Der korrekte Pfad lautet hier

Code: Alles auswählen

$.ZbReceived["0x1872"].Power
Eventuell muss vor der öffnenden eckigen Klammer noch ein Punkt rein.
Den Pfad musst Du tatsächlich pro Channel angeben, das ist ein Teil der Konfiguration. Allerdings kann es sein, dass Du an mehreren Werten eines JSON Objekts interessiert bist, dann kannst Du einen String Channel für das komplette JSON Objekt verwenden und die Verbindung zu den Items über Profiles herstellen. Du kannst also Channel sparen, aber nicht JSON Pfade.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten