Seite 1 von 2

Eltako MQTT Meter in OpenHab einbinden

Verfasst: 26. Nov 2024 08:40
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!

Re: Eltako MQTT Meter in OpenHab einbinden

Verfasst: 26. Nov 2024 12:28
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.

Re: Eltako MQTT Meter in OpenHab einbinden

Verfasst: 26. Nov 2024 12:54
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

Re: Eltako MQTT Meter in OpenHab einbinden

Verfasst: 29. Nov 2024 08:31
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

Re: Eltako MQTT Meter in OpenHab einbinden

Verfasst: 29. Nov 2024 13:16
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.... ;)

Re: Eltako MQTT Meter in OpenHab einbinden

Verfasst: 29. Nov 2024 13:58
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 :)

Re: Eltako MQTT Meter in OpenHab einbinden

Verfasst: 2. Dez 2024 16:09
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.

Re: Eltako MQTT Meter in OpenHab einbinden

Verfasst: 2. Dez 2024 18:24
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)

Re: Eltako MQTT Meter in OpenHab einbinden

Verfasst: 3. Dez 2024 07:29
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.

Re: Eltako MQTT Meter in OpenHab einbinden

Verfasst: 3. Dez 2024 11:31
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.