ich habe ein Problem mit dem Auslesen von Zählerwerten über einen mqtt-broker. Ich nutze OH 2.5.12 und den mosquitto -broker in einer Suse-Linux-VM. Den broker nutze ich auch zum schalten von sonoff-scchaltern. Nun habe ich den So-Zähler installiert und bis zum broker kommen die Daten auch an (Kann ich mit MQTT.fx sehen). Ich habe erst einmal nur ein item angelegt:
Aber hier kommt leider nichts an. Stecke leider nicht so tief in der Materie und bin oft auf erfolgreiches kopieren von Beispielen und herum-probieren angewiesen. Was mache ich falsch?
andorianju hat geschrieben: ↑15. Apr 2021 17:24
Was mache ich falsch?
Du gibst leider zu wenig Informationen um das erkennen zu können.
Welche openHAB Version nutzt du? Welche MQTT Binding Version?
Deine Binding Definition ist von einem MQTT1 Binding, das gibt es schon lange nicht mehr.
Wenn du openHAB2 nutzt kannst du theoretisch noch das MQTT1 Binding nutzen, ist aber nicht zu empfehlen.
Wenn du openHAB3 nutzt gibt es nur noch das neue MQTT Binding, da brauchst du dann ein Broker Thing (eine Bridge), ein generisches Thing, und für das generische Thing brauchst du Channel und Items, die beides miteinander verknüpfen.
danke für Deine Antwort. Ich nutze OpenHAB 2.5.12 und das entsprechende MQTT-Binding (2.5.12). Ich habe die Definition aus einem Beispiel-Listing des Lieferanten (CMatic) übernommen. Das ist wahrscheinlich auch das Problem. Der Zähler hat vier S0-Schnittstellen und liefert die Werte tatsächlich in einem String.
Ich habe eine Bridge im System, da ich damit ja erfolgreich ein Sonoff 4-Kanal-Switch bdiene. Ich versuche dann mal alles über PaperUI zu definieren. Die Migration zu OH3 habe ich bisher gescheut, da ich eine sehr umfangreiche Installation habe und mit dem neuen Konzept noch nicht ganz Warm bin. Alles zu seiner Zeit.
andorianju hat geschrieben: ↑15. Apr 2021 18:08
und das entsprechende MQTT-Binding (2.5.12).
Okay, dann wäre die kurze Variante:
Generic Thing anlegen für deinen S0 Zähler, mit der vorhandenen funktionierenden Bridge verbinden, ein String/Text Channel Type anlegen, als MQTT State Topic das aus mqtt.fx ausgelesene Topic eintragen, diesen Channel mit einem String Item verbinden und dann das Item auf einer Sitemap oder Page darstellen.
Um die verschiedenen Kanäle aus dem String auszulesen brauchst du dann noch eine Transformation. Diese muss dann für vier verschiedene Items für vier S0 Kanäle angelegt werden. https://www.openhab.org/docs/configurat ... formations
Die Konfiguration aus deinem ersten Post ist somit falsch und unbrauchbar.
Good luck.
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.
Was mich ja immer fasziniert wenn man schon eine funktionierende Anbindung hat (die logischerweise komplett anders konfiguriert wurde) warum merkt man dann nicht, dass die Konfiguration so ganz anders aussieht als beim funktionierenden Teil?
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
Was mich ja immer fasziniert wenn man schon eine funktionierende Anbindung hat (die logischerweise komplett anders konfiguriert wurde) warum merkt man dann nicht, dass die Konfiguration so ganz anders aussieht als beim funktionierenden Teil?
Entschuldige meine Unwissenheit. In der funktionierenden Variante schalte ich nur einen Sonoff-Schalter. In der neuen Variante möchte ich einen Zähler auslesen. Damit bin ich einigermaßen überfordert und habe erst einmal die vorgeschlagene (,wie ich jetzt weiß, veraltete) Konfiguration kopiert. Nun habe ich nach sihuis Hinweisen die items auch in PaperUI angelegt und ich bekomme die Zähler ausgelesen. Das Umrechnen der reinen Zählerwerte klappt dann wiederum nicht, weil wahrscheinlich auch hier nicht mehr funktionierende Funktionen benutzt wereden:
rule "Regel zur Energiemessung durch WLAN-Adapter mit 4 x S0 -Schnittstellen"
when
Item WLANAdapterS01 received update // 4 neue Zählerimpulswerte pro Messintervall via WLAN-Adapter MQTT
then
// 4 Zählerimpulswerte aus MQTT-Nachricht filtern und speichern
S0Zaehler11.postUpdate(transform("JSONPATH", "$.COUNTER.C1", WLANAdapterS01.state.toString))
S0Zaehler12.postUpdate(transform("JSONPATH", "$.COUNTER.C2", WLANAdapterS01.state.toString))
//S0Zaehler13.postUpdate(transform("JSONPATH", "$.COUNTER.C3", WLANAdapterS01.state.toString))
//S0Zaehler14.postUpdate(transform("JSONPATH", "$.COUNTER.C4", WLANAdapterS01.state.toString))
// Leistung in Watt = (Delta der gemessene Zählerimpulse zwischen den letzten Messzeitpunkten / Messintervall Sec) * (1000 W * 3600 Sec / Zählerimpulse des Zählers für kWh)
Leistung11.postUpdate((S0Zaehler11.deltaSince(now) as Number / Messintervall.state as Number) * (3600000 / Imp_kWh.state as Number))
Leistung12.postUpdate((S0Zaehler12.deltaSince(now) as Number / Messintervall.state as Number) * (3600000 / Imp_kWh.state as Number))
//Leistung13.postUpdate((S0Zaehler13.deltaSince(now) as Number / Messintervall.state as Number) * (3600000 / Imp_kWh.state as Number))
//Leistung14.postUpdate((S0Zaehler14.deltaSince(now) as Number / Messintervall.state as Number) * (3600000 / Imp_kWh.state as Number))
// Energie in kWh = Energie + Delta der gemessene Zählerimpulse zwischen den letzten Messzeitpunkten * kWh / Zählerimpulse des Zählers für kWh
Energie11.postUpdate(S0Zaehler11.state as Number / Imp_kWh.state as Number)
Energie12.postUpdate(S0Zaehler12.state as Number / Imp_kWh.state as Number)
//Energie13.postUpdate(S0Zaehler13.state as Number / Imp_kWh.state as Number)
//Energie14.postUpdate(S0Zaehler14.state as Number / Imp_kWh.state as Number)
// Energie pro Tag (kWh)
Energie11Day.postUpdate(Energie11.deltaSince(now.withTimeAtStartOfDay) as Number)
Energie12Day.postUpdate(Energie12.deltaSince(now.withTimeAtStartOfDay) as Number)
//Energie13Day.postUpdate(Energie13.deltaSince(now.withTimeAtStartOfDay) as Number)
//Energie14Day.postUpdate(Energie14.deltaSince(now.withTimeAtStartOfDay) as Number)
end