Eltako MQTT Meter in OpenHab einbinden

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Boris
Beiträge: 14
Registriert: 19. Okt 2024 11:07
Answers: 0

Eltako MQTT Meter in OpenHab einbinden

Beitrag von Boris »

Hallo zusammen,
ich versuche mehrere Eltako Energymeter in mein Openhab 4.1.1 einzubinden. Dazu habe ich die Zähler so konfiguriert, dass sie ihre Werte einem Mosquito MQTT Server übergeben, was laut MQTT Explorer anscheinend auch einwandfrei funktioniert.
Screenshot 2024-11-26 083021.jpg
Nun versuche ich über das OH MQTT Binding, vorab mal einen Wert, im .things File vom Broker abzuholen.

Code: Alles auswählen

Bridge mqtt:broker:MQTT_KG [ host="192.168.55.10", port=1883, secure=false ]

Thing mqtt:topic:MQTT_KG:PV_Eltako_Counter "Eltako Zähler" (mqtt:broker:MQTT_KG) {
    Channels:
        Type number : Ch_PV_WR1_Eltako_Energy            "WR1 Eltako Zählerstand"        [stateTopic="FGW14-IPStich46/devices/1/meterReading", transformationPattern="JSONPATH:$.value"]
}
Um ihn dann letztendlich einem Item zuzuweisen.

Code: Alles auswählen

Number  PV_WR1_Eltako_Energy              "WR1 Eltako Zählerstand [%.0f Wh]"       (Eltako)     {channel = "mqtt:topic:MQTT_KG:PV_Eltako_Counter:Ch_PV_WR1_Eltako_Energy"}
Leider bekomme ich immer nur NULL zurück. Ich suche mir jetzt schon seit Stunden nen Wolf. Aber wahrscheinlich bin ich wieder Betriebsblind und sehe den dämlichen Fehler nicht... seht ihr ihn?
Vielen Dank vorab!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Re: Eltako MQTT Meter in OpenHab einbinden

Beitrag von udo1toni »

Frage1: hast Du mehrere Broker?
Frage2: Hast Du den jsonpath Transformation Service installiert?

Grundsätzlich: Es gibt in openHAB die Konvention, klein zu schreiben und Worte dann durch camelCase Schreibweise kenntlich zu machen. Außerdem ist weniger oft mehr :)
Beispiel Thing:

Code: Alles auswählen

Bridge mqtt:broker:broker1 "mqtt Broker KG" [
    host="192.168.55.10",
    port=1883,
    secure=false
 ] {
    Thing topic counterEltakoPV "Eltako Zähler" {
    Channels:
        Type number : energy "WR1 Zählerstand" [
            stateTopic="FGW14-IPStich46/devices/1/meterReading",
            transformationPattern="JSONPATH:$.value", unit="kWh"]
    }
}
Streng genommen könnte man port und secure locker weg lassen, weil das die default Werte sind. Definiert man das Thing als Kind der Bridge (innerhalb des Bridge {} Blocks) spart man sich jede Menge Tipparbeit.
Die Angabe der unit führt zu einem Wert, der als QuantityType in openHAB weiterverarbeitet werden kann:

Code: Alles auswählen

Number:Energy PV_WR1_Eltako_Energy "WR1 Eltako Zählerstand" (Eltako) ["Measurement","Energy"] {channel="mqtt:topic:broker1:counterEltakoPV:energy", unit="Wh", stateDescription=""[pattern="%.2f Wh"]}
Sollte das Group Item Eltako Teil des Semantic Model sein, wird der Messwert anschließend auch automatisch in der Main UI angezeigt.
Durch die Angabe der Unit (sowohl im Channel als auch im Item) wird automatisch korrekt umgerechnet.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Boris
Beiträge: 14
Registriert: 19. Okt 2024 11:07
Answers: 0

Re: Eltako MQTT Meter in OpenHab einbinden

Beitrag von Boris »

Hi Udo,
Antwort1: Nein, es gibt nur diesen eine Broker.
Antwort2: Nein, und damit hast Du schon direkt den Nagel auf den Kopf getroffen... :oops: Ich hatte im Hinterkopf, dass der ja installiert ist. Tatsächlich aber nicht bei dieser Installation. :roll:
Jetzt gehts. Vielen Dank auch noch für deine Denkanstöße bezüglich der Sytax.
Gruß,
Boris

Boris
Beiträge: 14
Registriert: 19. Okt 2024 11:07
Answers: 0

Re: Eltako MQTT Meter in OpenHab einbinden

Beitrag von Boris »

Manchmal treibt mich OpenHab zu Wahnsinn, aber der Fehler sitzt ja immer auf der anderen Seite des Bildschirmes.
Ich wollte nun von den oben eingelesenen Werten die Summe bilden, aber da kommt nur Murks raus, welchen ich mir nicht herleiten kann.
Die Items sind wie folft definiert:

Code: Alles auswählen

Number:Energy PV_WR1_Eltako_Energy "WR1 Eltako Zählerstand" (Eltako) ["Measurement","Energy"] {channel="mqtt:topic:broker1:counterEltakoPV:energy1", unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
Number:Energy PV_WR2_Eltako_Energy "WR2 Eltako Zählerstand" (Eltako) ["Measurement","Energy"] {channel="mqtt:topic:broker1:counterEltakoPV:energy2", unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
Number:Energy PV_WR3_Eltako_Energy "WR3 Eltako Zählerstand" (Eltako) ["Measurement","Energy"] {channel="mqtt:topic:broker1:counterEltakoPV:energy3", unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
Number:Energy PV_WR4_Eltako_Energy "WR4 Eltako Zählerstand" (Eltako) ["Measurement","Energy"] {channel="mqtt:topic:broker1:counterEltakoPV:energy4", unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
Number:Energy PV_WR5_Eltako_Energy "WR5 Eltako Zählerstand" (Eltako) ["Measurement","Energy"] {channel="mqtt:topic:broker1:counterEltakoPV:energy5", unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
Number:Energy PV_WR6_Eltako_Energy "WR6 Eltako Zählerstand" (Eltako) ["Measurement","Energy"] {channel="mqtt:topic:broker1:counterEltakoPV:energy6", unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
Number:Energy PV_ges_Eltako_Energy "Gesamt Eltako Zählerstand" (Eltako) ["Measurement","Energy"] {unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
In einer Rule addiere ich dann die eigelesenen Werte in ein Gesamtwertitem

Code: Alles auswählen

PV_ges_Eltako_Energy.postUpdate((PV_WR1_Eltako_Energy.state as Number)+(PV_WR2_Eltako_Energy.state as Number)+(PV_WR3_Eltako_Energy.state as Number)+(PV_WR4_Eltako_Energy.state as Number)+(PV_WR5_Eltako_Energy.state as Number)+(PV_WR6_Eltako_Energy.state as Number))
_Screenshot 2024-11-29 082442.jpg
Raus kommt dann 92.182.679.296
Raus kommen müsste 14.012.697
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Re: Eltako MQTT Meter in OpenHab einbinden

Beitrag von peter-pan »

Eigentlich sollte es reichen, die einzelnen Zählerstände einem Gruppen-Item zuzuweisen, das etwa so aussieht:

Code: Alles auswählen

Group:Number:SUM  gEltako_Energy "Gesamt Eltako Zählerstand" ....
Da brauchst du keine Regel, das geht sozusagen elektrisch.... ;)
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

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

Re: Eltako MQTT Meter in OpenHab einbinden

Beitrag von udo1toni »

Ja, das geht auch nicht so :) Hintergrund ist QuantityType. Die einfache Addition führt hier teilweise zu einer Verschiebung der Kommastelle.

Raus kommen müsste im Übrigen 25.606.299,8046875 :) Man kann schön sehen, dass die letzten vier Stellen korrekt sind, nur halt an einer falschen Stelle.

Du solltest hier überhaupt keine Rule benötigen. Stattdessen definierst Du das Summenitem etwas anders:

Code: Alles auswählen

Group:Number:Energy:SUM PV_ges_Eltako_Energy "Gesamt Eltako Zählerstand" (Eltako) ["Measurement","Energy"] {unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
und packst die sechs Einzelwerte zusätzlich in diese Gruppe. Eventuell kannst Du auch auf die Zuordnung zu Eltako verzichten? Ansonsten könnte es sein, dass das Semantic Model rumspackt. Notfalls musst Du halt ein separates Group Item (ohne Tagging) für die Summenbildung definieren und dessen Wert dann bei Änderung in das getaggte Item übernehmen.
Innerhalb einer Rule müsste man vermutlich so addieren:

Code: Alles auswählen

var QuantityType<Energy> SumWh
Eltako.members.filter[i|i.name.startsWith("PV_WR")].forEach[j|
    SumWh = SumWh + (j.state as QuantityType<Energy>)
]
PV_ges_Eltako_Energy.postUpdate(SumWh)
Natürlich könntest Du auch die Itemnamen einzeln aufführen, jeweils mit QuanitityType<Energy>, aber mit einer Schleife für die Gruppe ist das doch viel schicker... ;)

Getestet habe ich das jetzt nicht, weil die simple Lösung das Group:SUM Item sein sollte :)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Boris
Beiträge: 14
Registriert: 19. Okt 2024 11:07
Answers: 0

Re: Eltako MQTT Meter in OpenHab einbinden

Beitrag von Boris »

Hi, Ihr beide. Vielen Dank schonmal für die schöne Lösung. Eins ist mir aber schleierhaft. Wie packe ich die Einzeleitems denn in die Group. Sorry für die blöde Nachfrage, aber mit Groups hab ich bisher noch nicht gearbeitet.

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

Re: Eltako MQTT Meter in OpenHab einbinden

Beitrag von udo1toni »

Je nachdem, wie Du konfigurierst...
In Deiner Textkonfiguration (4. Posting dieses Threads) nutzt Du die Gruppe Eltako. Wenn Du zusätzliche Gruppen zuordnen willst, kannst Du das einfach als kommaseparierte Liste tun:

Code: Alles auswählen

Group:Number:Energy:SUM WRSum                "Summe Wechselrichter"   (Eltako)       ["Measurement","Energy"] {unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
      Number:Energy     PV_WR1_Eltako_Energy "WR1 Eltako Zählerstand" (Eltako,WRSum) ["Measurement","Energy"] {channel="mqtt:topic:broker1:counterEltakoPV:energy1", unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
Wie erwähnt ist es möglich, dass die Gruppe Eltako im Semantic Model dann nicht mehr korrekt funktioniert, weil die Items für WR1 bis WR6 nun doppelt im Semantic Model auftauchen könnten. Falls Du also irgendwelche Auffälligkeiten hast, gibt es an der Stelle zwei Möglichkeiten, entweder du klammerst WRSum aus dem Semantic Model aus (keine Zuweisung zur Gruppe Eltako) oder Du klammerst die sechs Items für WR1 bis WR6 aus (die tauchen dann halt nur unterhalb WRSum als Einzelwerte auf)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Boris
Beiträge: 14
Registriert: 19. Okt 2024 11:07
Answers: 0

Re: Eltako MQTT Meter in OpenHab einbinden

Beitrag von Boris »

OK, dann hatte ich es doch richtig verstanden, aber ich mache irgendetwas noch falsch. Seltsam ist, dass der Wert in kWh angezeigt wird, obwohl in Wh definiert.
Ich habe die Items jetzt wie folgt angelegt:

Code: Alles auswählen

Number:Energy PV_WR1_Eltako_Energy "WR1 Eltako Zählerstand" (Eltako) ["Measurement","Energy"] {channel="mqtt:topic:broker1:counterEltakoPV:energy1", unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
Number:Energy PV_WR2_Eltako_Energy "WR2 Eltako Zählerstand" (Eltako) ["Measurement","Energy"] {channel="mqtt:topic:broker1:counterEltakoPV:energy2", unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
Number:Energy PV_WR3_Eltako_Energy "WR3 Eltako Zählerstand" (Eltako) ["Measurement","Energy"] {channel="mqtt:topic:broker1:counterEltakoPV:energy3", unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
Number:Energy PV_WR4_Eltako_Energy "WR4 Eltako Zählerstand" (Eltako) ["Measurement","Energy"] {channel="mqtt:topic:broker1:counterEltakoPV:energy4", unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
Number:Energy PV_WR5_Eltako_Energy "WR5 Eltako Zählerstand" (Eltako) ["Measurement","Energy"] {channel="mqtt:topic:broker1:counterEltakoPV:energy5", unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
Number:Energy PV_WR6_Eltako_Energy "WR6 Eltako Zählerstand" (Eltako) ["Measurement","Energy"] {channel="mqtt:topic:broker1:counterEltakoPV:energy6", unit="Wh", stateDescription=""[pattern="%.0f kWh"]}

Group:Number:Energy:SUM PV_ges_Eltako_Energy "Gesamt Eltako Zählerstand" (Eltako)  ["Measurement","Energy"] {unit="Wh", stateDescription=""[pattern="%.0f Wh"]}
Daraus ergibt sich dann dieses:
Screenshot 2024-12-03 072004.jpg
Die 0, die in der Variablen Energy:SUM PV_ges_Eltako_Energy steht, kommt nicht aus der Group Item definition. Die hatte ich in vorherigen versuchen "händisch" da rein geschrieben. Die Summenberechnung scheint überhaupt keine Änderung auszulösen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Re: Eltako MQTT Meter in OpenHab einbinden

Beitrag von peter-pan »

..Fast geschafft.
Wenn du das Item "PV_ges_Eltako_Energy" als GruppenItem nehmen willst, dann muss dieser Item-Name in der Gruppenspalte der "Kinder" enthalten sein, also in etwa so

Code: Alles auswählen

Number:Energy PV_WR1_Eltako_Energy "WR1 Eltako Zählerstand" (Eltako, PV_ges_Eltako_Energy) ["Measurement","Energy"] {channel="mqtt:topic:broker1:counterEltakoPV:energy1", unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
Number:Energy PV_WR2_Eltako_Energy "WR2 Eltako Zählerstand" (Eltako, PV_ges_Eltako_Energy) ["Measurement","Energy"] {channel="mqtt:topic:broker1:counterEltakoPV:energy2", unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
Number:Energy PV_WR3_Eltako_Energy "WR3 Eltako Zählerstand" (Eltako, PV_ges_Eltako_Energy) ["Measurement","Energy"] {channel="mqtt:topic:broker1:counterEltakoPV:energy3", unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
Number:Energy PV_WR4_Eltako_Energy "WR4 Eltako Zählerstand" (Eltako, PV_ges_Eltako_Energy) ["Measurement","Energy"] {channel="mqtt:topic:broker1:counterEltakoPV:energy4", unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
Number:Energy PV_WR5_Eltako_Energy "WR5 Eltako Zählerstand" (Eltako, PV_ges_Eltako_Energy) ["Measurement","Energy"] {channel="mqtt:topic:broker1:counterEltakoPV:energy5", unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
Number:Energy PV_WR6_Eltako_Energy "WR6 Eltako Zählerstand" (Eltako, PV_ges_Eltako_Energy) ["Measurement","Energy"] {channel="mqtt:topic:broker1:counterEltakoPV:energy6", unit="Wh", stateDescription=""[pattern="%.0f kWh"]}
Du kannst aber auch einen anderen Namen (für das Gruppen-Item) wählen, denn Namen sind bekanntlich Schall und Rauch ;) . Es muss halt der Bezug zu den "Kindern" vorhanden sein.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Antworten