Seite 1 von 1
Shelly 2.5 mit Tasmota und MQTT, 2 x Power abfragen
Verfasst: 30. Nov 2022 16:01
von mike69
Hallo
Hat jemand von Euch eine mit Tasmota geflashte Shelly 2.5 und fragt sie per MQTT ab?
Hintergrund ist, Tasmota gibt die Werte für Power, Current, Tagesverbrauch, usw. der beiden Switche mit einem Komma getrennt an.
Code: Alles auswählen
20:39:16.433 MQT: tele/Shelly01/SENSOR = {"Time":"2022-11-29T20:39:16","Switch1":"OFF","Switch2":"OFF","ENERGY":{"Power":[1,7],"ApparentPower":[5,14],"ReactivePower":[3,2],"Factor":[0.24,0.52],"Frequency":50,"Voltage":224,"Current":[0.022,0.060]},"TempUnit":"C"}
Thing:
Code: Alles auswählen
Type number : load "Leistung Shelly 2.5" [ stateTopic="tele/Shelly01/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Power" ]
Dazu die Fehlermeldung:
Code: Alles auswählen
2022-11-29 20:35:15.430 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Incoming payload '[2, 7]' not supported by type 'NumberValue'
Wie friemel ich das auseinander, so dass die beide Werte genutzt werden können?
Gruß, Mike
Re: Shelly 2.5 mit Tasmota und MQTT, 2 x Power abfragen
Verfasst: 30. Nov 2022 20:38
von udo1toni
Oh, nettes Problem.
Erste Frage (weil ich das Problem so nicht kenne): Welche Sprache nutzt Du in Tasmota? Ich habe bei mir die deutsche Tasmota Firmware installiert (12.2, also aktuell) und bekomme die Dezimalstellen der Messungen mit Punkt getrennt angeliefert (Strom, Spannung und Leistung). Ich kann mir irgendwie nicht vorstellen, dass Tasmota das bei den Shellies nicht berücksichtigt.
Lösung auf openHAB-Seite ist möglich, aber nicht straight forward. Die erste Idee dazu: du verkettest die Transformation und pappst ein JS Script hinten dran, das script ersetzt alle Kommata durch Punkte, fertig.
Falls das Probleme bereitet, kannst Du versuchen, diese Transformation im Link vorzunehmen (Stichwort Profile). Allerdings musst Du den Channel in einen String Channel abändern, damit die Zeichenkette im Original erhalten bleibt.
Alternativ könntest Du auch noch ein JS Script schreiben, welches sowohl JSONPATH Transformation als auch die Ersetzung des Kommas enthält. Pferdefuß hierbei: Du müsstest für jeden JSONPATH ein eigenes Script anlegen, die Scripte wären aber abgesehen vom jeweiligen JSONPATH Statement identisch, das ist nicht schön.
Wenn alle Stricke reißen, verwendest Du ein String Item und konvertierst in einer Rule -> Ein String Channel für das Topic tele/Shelly01/SENSOR und ein passendes String Item dazu reicht, die JSONPATH Transformation machst Du in dem Fall besser in der Rule, weil Du dort eh beide Werte rauspicken kannst. Solltest Du mehrere Geräte mit diesem Problem haben, reicht eine Rule für alle aus, wenn die Itemnamen geschickt gewählt werden und sich die Items aller Geräte in einer Gruppe tummeln (damit die Rule sie passend selektieren kann).
Re: Shelly 2.5 mit Tasmota und MQTT, 2 x Power abfragen
Verfasst: 1. Dez 2022 08:55
von mike69
Moin Udo.
Nutze die normale Standardversion 12.2.0 in Englisch, da werden die Dezimalstellen ebenfalls mit einem Punkt dargestellt. Nur die 2 Werte für Power und Co werden mit einem Komma getrennt.
Allerdings musst Du den Channel in einen String Channel abändern, damit die Zeichenkette im Original erhalten bleibt.
Den Channel zu einem String ändern ist mir gestern im Bett auch noch eingefallen
Code: Alles auswählen
things
Type string : load "Leistung Shelly 2.5" [ stateTopic="tele/Shelly01/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Power" ]
item
String Shelly01_Power "Leistung Steckdose links, rechts in W" <energy> (gShelly01) ["Status"] {channel="mqtt:topic:openhab:Shelly01:load"}
Zumindest gibt OH jetzt was verwertbares aus:
Screenshot 2022-12-01 at 08-40-09 Shelly Laube Steckdose aussen.png
Ja, wie ich das hinkriege weiss ich noch nicht. muss mich noch ein bisschen einlesen.
Re: Shelly 2.5 mit Tasmota und MQTT, 2 x Power abfragen
Verfasst: 1. Dez 2022 15:33
von udo1toni
Also Verkettung:
Thing
Code: Alles auswählen
Type number : load "Leistung Shelly 2.5" [ stateTopic="tele/Shelly01/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Power∩JS:subCommaDot.js", unit="W" ]
In diesem Fall müsste Number gehen, weil ja hinten eine gültige Zahl raus kommt. Die zugehörige Datei
/etc/openhab/transform/subCommaDot.js
Code: Alles auswählen
(function(value){
var retval =value.replace(",",".");
return retval;
})(input)
item
Code: Alles auswählen
Number:Power Shelly01_Power "Leistung Steckdose links, rechts" <energy> (gShelly01) ["Status"] channel="mqtt:topic:openhab:Shelly01:load"}
Ich hoffe mal, dass da nicht wirklich eckige Klammern um den wert stehen! Ansosnten müsste man die noch beseitigen, aber eigentlich sollte JSONPATH das schon tun...
Re: Shelly 2.5 mit Tasmota und MQTT, 2 x Power abfragen
Verfasst: 1. Dez 2022 15:39
von udo1toni
So, Kommando zurück...
Vergiss bitte alles...
Das Problem ist ein ganz anderes... Dein JSONPATH stimmt nicht, denn $.ENERGY.Power liefert tatsächlich keinen Wert mit Komma zurück, sondern ein Tupel mit zwei diskreten Werten! Es handelt sich ja um einen Shelly 2.5, der logischerweise zwei Werte für die beiden Ausgänge liefert. Du musst also für die beiden Ausgänge auch zwei Channel anlegen:
Code: Alles auswählen
Type number : load0 "Leistung Shelly 2.5 Kanal 1" [ stateTopic="tele/Shelly01/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Power[0]", unit="W" ]
[code]Type number : load1 "Leistung Shelly 2.5 Kanal 2" [ stateTopic="tele/Shelly01/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Power[1]", unit="W" ]
Und natürlich entsprechend auch zwei Items:
Code: Alles auswählen
Number:Power Shelly01_Power1 "Leistung Steckdose links" <energy> (gShelly01) ["Status"] channel="mqtt:topic:openhab:Shelly01:load0"}
Number:Power Shelly01_Power2 "Leistung Steckdose rechts" <energy> (gShelly01) ["Status"] channel="mqtt:topic:openhab:Shelly01:load1"}
Das Gleiche gilt sinngemäß auch für ApparentPower, ReactivePower, Factor und Current, nicht aber für Voltage und Frequency, da diese beiden Größen für beide Kanäle immer gleich sind (solange beide Kanäle eingeschaltet sind, natürlich)
Re: Shelly 2.5 mit Tasmota und MQTT, 2 x Power abfragen
Verfasst: 1. Dez 2022 22:28
von mike69
Jau danke, Udo.
Bin gerade nach Hause, teste es morgen.
Re: Shelly 2.5 mit Tasmota und MQTT, 2 x Power abfragen
Verfasst: 2. Dez 2022 08:55
von mike69
Moin @All
udo1toni hat geschrieben: ↑1. Dez 2022 15:39
Das Problem ist ein ganz anderes... Dein JSONPATH stimmt nicht, denn $.ENERGY.Power liefert tatsächlich keinen Wert mit Komma zurück, sondern ein Tupel mit zwei diskreten Werten!
Musste erstmal nach "Tupel" googeln.

Aber ja, das war es.

Mit deinem Code sieht es so aus:
Screenshot 2022-12-02 at 08-38-06 Shelly Laube Steckdose aussen.png
Im Grunde nicht so kompliziert, die Werte lassen sich recht einfach abgreifen... wenn man weiss wie.
Dankeschön für die Hilfe.

Re: Shelly 2.5 mit Tasmota und MQTT, 2 x Power abfragen
Verfasst: 2. Dez 2022 12:42
von udo1toni
Immer gerne.
