wie Shelly über MQTT2 und Energy Verbrauch messen und permanent loggen?

Begonnen von bicmac, 03 Juni 2020, 09:08:10

Vorheriges Thema - Nächstes Thema

bicmac

Hi,
ich habe diverse Shelly 2.5 im Einsatz und diese auch über mQTT2 erfolgreich eingebunden.
Es loggt auch im Reading Energy für relay0 und relay1 den Verbrauch. Jedoch setzt er dieses Reading ja bekanntlich beim reboot vom Shelly auf 0 so das der Verbrauch wieder "gelöscht" wird.
Wie habt Ihr das gelöst?

Beta-User

Wie wäre es mit einem userReadings-Eintrag und "monotonic"? Bitte auch für ein sauberes Triggern sorgen...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

87insane

Das sollte doch eigentlich im Template sein. Sogar mit abfrage ob man das haben will. Wurde das nicht für alle shelly übernommen?

Gesendet von meinem LM-G810 mit Tapatalk


Beta-User

Das mit der RADIO_-Option steht auf die Schnelle nur im shelly1pm (und ich bin nicht sicher, ob das da sauber läuft).

Für den 2.5er (der scheint ja auch pm zu können...), wäre da wohl noch etwas Nacharbeit nötig - v.a. würde ich wenn, dann auch gleich das "generelle Muster"
set DEVICE attrTemplate set_associatedWith \CHANNELS=2 \MAKECOPIES=1
einbauen...

(Wobei wir es hier wohl mit einer unified-Variante zu tun haben, aber ohne input kein output...)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

87insane

Hab bei mir monotonic selber mal irgendwann eingebaut. Läuft 1a

(Hab da sogar noch die ganz alte benamung drin, nur um mal zu sagen wie lange es da drin ist)

relay_0_energy_total:relay_0_energy:.* monotonic {ReadingsVal("$name","relay_0_energy",0)}

Aus dem Kopf können pm:
1pm
2.5 (kann auf beiden relays separat messen)
2 (kann nur gesamt messen, wurde aber nur kurz verkauft)
Rgbw2
Dimmer
PlugS


Gesendet von meinem LM-G810 mit Tapatalk

bicmac

Zitat von: 87insane am 03 Juni 2020, 09:34:38
Hab bei mir monotonic selber mal irgendwann eingebaut. Läuft 1a

(Hab da sogar noch die ganz alte benamung drin, nur um mal zu sagen wie lange es da drin ist)

relay_0_energy_total:relay_0_energy:.* monotonic {ReadingsVal("$name","relay_0_energy",0)}

Aus dem Kopf können pm:
1pm
2.5 (kann auf beiden relays separat messen)
2 (kann nur gesamt messen, wurde aber nur kurz verkauft)
Rgbw2
Dimmer
PlugS


Gesendet von meinem LM-G810 mit Tapatalk

Danke ich habes jetzt auch mal so nachgebaut.

Beta-User

Zitat von: 87insane am 03 Juni 2020, 09:34:38
Aus dem Kopf können pm:
1pm
2.5 (kann auf beiden relays separat messen)
2 (kann nur gesamt messen, wurde aber nur kurz verkauft)
Rgbw2
Dimmer
PlugS
Danke. Damit ist aber weder getestet, ob das "Basistemplate" tut, was es soll (?), noch ist die Arbeit gemacht...
Vorschläge (patches...) wären mir dazu im Moment lieber ;) .

Ansonsten: [gelöst]?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

87insane

Das darf der TE gerne machen. Immerhin haben wir ja auch eine fertige Lösung geboten als Anreiz :)

Wäre also super wenn der Ersteller über das Template testen könnte. So können es später auch alle anderen sauber nutzen :)

Was die "Arbeit" angeht, siehst du wohl etwas, was ich nicht sehe. Wäre ja nur das einstellen der Zeile in die templates...oder?

Gesendet von meinem LM-G810 mit Tapatalk


Beta-User

Zitat von: 87insane am 03 Juni 2020, 10:14:53
Was die "Arbeit" angeht, siehst du wohl etwas, was ich nicht sehe. Wäre ja nur das einstellen der Zeile in die templates...oder?
Jein. Die muß in der richtigen Fassung jeweils an die richtige Stelle hin und sich auf das richtige Reading beziehen. Das ganze dann optimalerweise so, dass es "sauber verschachtelt" ist. Mit letzterem ist in etwa das gemeint, was du beginnend mit tasmota_POW_USB_split "bei der Konkurrenz" findest...

Also:
1pm enthält "die Zeile" (funktioniert das template war immer noch eine ungeklärte Frage?)
2-split (shelly2_split) ruft intern also 1pm auf statt shellyplug? (Immer? Oder modellabhängig? => 1 oder 2 templates)
2.5-split ruft intern 2-split-pm auf, ergänzt aber den 2. Kanal um eine Zeile (Readingname?) und ändert da auch stateFormat...? So wie es derzeit ist, scheint es jedenfalls unvollständig zu sein.

plug-s ist unnötig, da identisch zu 1pm?
Was ist mit shelly4pro_split? (das scheint mir auch überarbeitungswürdig)

Dimmer:
Beim shelly2rgbw_color scheint das ja noch einfach zu sein (aber devStateIcon ist zu überarbeiten).
Was ist mit dem shelly2rgbw_4w_split?
(Und was mit shellyduo?)

Ernsthaft: mit "einer Zeile bei ein paar genannten templates ergänzen" ist es nicht getan, und es ist andererseits kein Weltuntergang, wenn dieses userReadings-Ding irgendwo fehlt...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

87insane

Zitat1pm enthält "die Zeile" (funktioniert das template war immer noch eine ungeklärte Frage?)

Shelly1PM: Hatte gestern noch gedacht: "Warum hast du einen Shelly1PM Küche als TEST benannt. Aber ich glaube ich hatte das getestet und es war ok. Würde diesen Test dann aber nochmal durchführen weil ich es mir nicht notiert habe!
Shelly2-Split sollte bei einem 2.5er Shelly im Relay Mode sauber sein. Im Roller Mode gibt es ja eh ein anderes Template. Es gibt kein PlugS Template. Dafür nimmt man das 1pm Template da eigentlich identisch.
Beim Shelly 2.0 (absichtlich damit man hier sieht das nicht 2.5 gemeint ist) gibt es nur gesamt Messung. Da macht dann das 1PM Template auch Sinn als Quelle. Allerdings habe ich keine 2.0 Hardware und kenne auch keinen damit. In meinen Augen kann 2.0 komplett weg. Man kann diesen Shelly nicht kaufen und er war nur eine Produktion lang auf dem Markt. Danach kam direkt der 2.5er.

# shelly2.5 using original firmware.
1800 # Based on user 87insane contribution in https://forum.fhem.de/index.php/topic,94060.msg962167.html#msg962167
1801 # NOTE: a second device will be created for the second channel
1802 name:shelly25_split
1803 filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*shellies.*
1804 desc:shelly2.5 using original firmware. <br>NOTE: a second device will be created for the second channel
1805 order:A_11a1
1806 par:DEVNAME;Shelly2 name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,shellies/([^/]*)/, ? $1 : undef }
1807 set DEVICE attrTemplate shellyplug
1808 attr DEVICE comment Channel 1 for DEVICE, see also DEVICE_CH2
1809 attr DEVICE devStateIcon {my $onl = ReadingsVal($name,"online","false") eq "false"?"10px-kreis-rot" : ReadingsVal($name,"new_fw","false") eq "true" ? "10px-kreis-gelb" : "10px-kreis-gruen";; my $light = ReadingsVal($name,"state","off");; my $cons = ReadingsVal($name,"relay_0_power","unknown");; my $temp = ReadingsVal($name,"temperature","-100");;"<div><a href=\"http://".ReadingsVal($name,"ip","none")." \"target=\"_blank\">".FW_makeImage($onl)."</a> <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a> Aktuell: $cons W / Temp.: $temp °C</div>"}
1810 attr DEVICE readingList shellies/DEVNAME/relay/0:.* state\
1811   shellies/DEVNAME/relay/0:.* relay_0\
1812   shellies/DEVNAME/input/0:.* input_0\
1813   shellies/DEVNAME/online:.* online\
1814   shellies/DEVNAME/announce:.* { json2nameValue($EVENT) }\
1815   shellies/announce:.* { $EVENT =~ m,..id...DEVNAME...mac.*, ? json2nameValue($EVENT) : return }\
1816   shellies/DEVNAME/relay/0/power:.* relay_0_power\
1817   shellies/DEVNAME/relay/0/energy:.* {'relay_0_energy' => sprintf("%.2f",$EVENT/60/1000)}\
1818   shellies/DEVNAME/temperature:.* temperature\
1819   shellies/DEVNAME/overtemperature:.* overtemperature\
1820   shellies/DEVNAME/longpush/0:.* longpush_0
1821 copy DEVICE DEVICE_CH2
1822 attr DEVICE_CH2 readingList shellies/DEVNAME/relay/1:.* state\
1823   shellies/DEVNAME/relay/1:.* relay_1\
1824   shellies/DEVNAME/input/1:.* input_1\
1825   shellies/DEVNAME/online:.* online\
1826   shellies/DEVNAME/announce:.* { json2nameValue($EVENT) }\
1827   shellies/announce:.* { $EVENT =~ m,..id...DEVNAME...mac.*, ? json2nameValue($EVENT) : return }\
1828   shellies/DEVNAME/relay/1/power:.* relay_1_power\
1829   shellies/DEVNAME/relay/1/energy:.* {'relay_1_energy' => sprintf("%.2f",$EVENT/60/1000)}\
1830   shellies/DEVNAME/temperature:.* temperature\
1831   shellies/DEVNAME/overtemperature:.* overtemperature\
1832   shellies/DEVNAME/longpush/1:.* longpush_1
1833 attr DEVICE_CH2 comment Channel 2 for DEVICE
1834 setreading DEVICE_CH2 associatedWith DEVICE
1835 attr DEVICE_CH2 setList \
1836   off:noArg shellies/DEVNAME/relay/1/command off\
1837   on:noArg shellies/DEVNAME/relay/1/command on
1838 attr DEVICE_CH2 devStateIcon {my $onl = ReadingsVal($name,"online","false") eq "true"?"10px-kreis-gruen":"10px-kreis-rot";; my $light = ReadingsVal($name,"state","off");; my $cons = ReadingsVal($name,"relay_1_power","unknown");; my $temp = ReadingsVal($name,"temperature","-100");;"<div><a href=\"http://".ReadingsVal($name,"ip","none")." \"target=\"_blank\">".FW_makeImage($onl)."</a> <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a> Aktuell: $cons W / Temp.: $temp °C</div>"}
1839 attr DEVICE model shelly25_split
1840 setreading DEVICE attrTemplateVersion 20200522 or prior

Aktuell ruft er beim 2.5er Split das Plug (attr DEVICE getList power:noArg shellies/DEVNAME/relay/power power) Template auf, dieses dann wieder das des Shelly1. Einmal um die Energie Messung rein zu holen aber ich weiß nicht wofür hier die getlist gebraucht wird?! Und dann wird das Shelly 1 Template drüber geschoben. Der Shelly 1 (ohne PM) kann keine Energie, denke mal deswegen hattet ihr das mal so gemacht. Es steht mein Nick oben drüber aber das hatte ich so niemals gebaut. Zu dem Zeitpunkt hatte ich nicht mal einen groben Plan wie das gehen soll ;)

Aktuell würde ich hier direkt das Template des Shelly 1pm nehmen und da wäre alles drin, channel doppeln und fertig.
Ungetestet ca so:
# shelly2.5 using original firmware.
# Based on user 87insane contribution in https://forum.fhem.de/index.php/topic,94060.msg962167.html#msg962167
# NOTE: a second device will be created for the second channel
name:shelly25_split
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*shellies.*
desc:shelly2.5 using original firmware. <br>NOTE: a second device will be created for the second channel
order:A_11a1
par:DEVNAME;Shelly2 name in the topic;{ AttrVal("DEVICE","readingList","") =~ m,shellies/([^/]*)/, ? $1 : undef }
set DEVICE attrTemplate shelly1pm
attr DEVICE comment Channel 1 for DEVICE, see also DEVICE_CH2
copy DEVICE DEVICE_CH2
attr DEVICE_CH2 readingList shellies/DEVNAME/relay/1:.* state\
  shellies/DEVNAME/relay/1:.* relay1\
  shellies/DEVNAME/input/1:.* input1\
  shellies/DEVNAME/online:.* online\
  shellies/announce:.* { $EVENT =~ m,..id...DEVNAME...mac.*, ? json2nameValue($EVENT) : return }\
  shellies/DEVNAME/announce:.* { json2nameValue($EVENT) }\
  shellies/DEVNAME/relay/1/power:.* relay_1_power\
  shellies/DEVNAME/relay/1/power:.* { my $compare = $EVTPART0 < 100 ? "off":"on"; ReadingsVal($NAME,"loadState","off") ne $compare ? { 'loadState' => $compare } : return }\
  shellies/DEVNAME/temperature:.* temperature\
  shellies/DEVNAME/overtemperature:.* overtemperature\
  shellies/DEVNAME/temperature_f:.* temperature_f\
  shellies/DEVNAME/relay/1/energy:.* relay_1_energy\
  shellies/DEVNAME/relay/1/energy:.* {'relay_1_kWh' => sprintf("%.2f",$EVENT/60/1000)}\
  shellies/DEVNAME/longpush/1:.* longpush_1\
  shellies/DEVNAME/input_event/1:.* { json2nameValue($EVENT) }
attr DEVICE_CH2 comment Channel 2 for DEVICE
setreading DEVICE_CH2 associatedWith DEVICE
attr DEVICE_CH2 setList \
  off:noArg shellies/DEVNAME/relay/1/command off\
  on:noArg shellies/DEVNAME/relay/1/command on
attr DEVICE_CH2 devStateIcon {my $onl = ReadingsVal($name,"online","false") eq "false"?"10px-kreis-rot" : ReadingsVal($name,"new_fw","false") eq "true" ? "10px-kreis-gelb" : "10px-kreis-gruen";; my $light = ReadingsVal($name,"state","off");; my $cons = ReadingsVal($name,"relay_1_power","unknown");; my $temp = ReadingsVal($name,"temperature","-100");;"<div><a href=\"http://".ReadingsVal($name,"ip","none")." \"target=\"_blank\">".FW_makeImage($onl)."</a> <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a> Aktuell: $cons W / Temp.: $temp °C</div>"}
attr DEVICE model shelly25_split
setreading DEVICE attrTemplateVersion 20200603 or prior


So sollte es in meinen Augen laufen. Da sind dann auch die ganz neuen Readings drin. Sind nur diese beiden, die noch fehlten:
  shellies/DEVNAME/input_event/1:.* { json2nameValue($EVENT) }
  shellies/DEVNAME/temperature_f:.* temperature_f


Du weiß das ich gerne helfe und das auch immer mache wenn es geht. Ich kann bei dem Thema aber nicht auch noch Ja sagen, diesmal. Ich habe zu viel auf dem Tisch.
In meine Augen sollte das mit logischem Denken für jeden machbar sein. Ich kann gerne auch Hilfe geben oder mal einen Stupser geben. Aber mit den aktuellen Themen bin ich zeitlich schon komplett drüber. Es sind nur hier im Forum schon 3 verschiedene und in meinen Augen, keine kleinen Dinge. Die meisten der Dinge bekommst du ja eh mit und unterstützt.

- Direkt vorab für alle Leser: An sich müssen die Zusammenhänge nur nochmal überdacht werden. Also es macht natürlich mehr Sinn ein Gerät was Energie messen kann auch damit zu verknüpfen. Hier in dem Template war Shelly1 drin aber Shelly1pm macht eben mehr Sinn. Das ist damals nicht dumm programmiert worden sondern es gab den 1pm z.B. schlicht weg nicht. Hinzu kommen dann z.B. Firmwareupdates die etwas am MQTT Topic ändern usw. Also ist es genau genommen nur eine Renovierung ;)


Deine noch offenen Fragen...
plug-s ist unnötig, da identisch zu 1pm? -Ja (steht auch in der Template Beschreibung vom 1pm)
Was ist mit shelly4pro_split? Habe ich keine Hardware und auch noch nie in der Hand gehabt. Für mich ein unsinniges Gerät. Ggf. kann der eigentliche Autor nochmal drüber sehen?
ShellyDuo sehe ich kein Problem drin, habe aber hier auch noch keinen gehört der die drin haben wollte. Kann ich aber auch nicht testen wegen Hardware.