Shelly: extrem gesprächig

Begonnen von gestein, 29 Juni 2020, 21:52:06

Vorheriges Thema - Nächstes Thema

gestein

Hallo,

ich nutze etliche Shelly 1pm, 2.5 und ein paar Dimmer über MQTT2.
Funktioniert perfekt.

Das einzige Problem ist, dass die jede Menge log-Einträge erzeugen, z.B. so was:
2020-06-29_21:42:57 MQTT2_shelly1pm_68C63AFADCD5 off
2020-06-29_21:42:57 MQTT2_shelly1pm_68C63AFADCD5 relay0: off
2020-06-29_21:42:57 MQTT2_shelly1pm_68C63AFADCD5 input0: 0
2020-06-29_21:42:57 MQTT2_shelly1pm_68C63AFADCD5 0_event:
2020-06-29_21:42:57 MQTT2_shelly1pm_68C63AFADCD5 0_event_cnt: 0
2020-06-29_21:42:57 MQTT2_shelly1pm_68C63AFADCD5 relay_0_power: 0.00
2020-06-29_21:42:57 MQTT2_shelly1pm_68C63AFADCD5 temperature: 45.73
2020-06-29_21:42:57 MQTT2_shelly1pm_68C63AFADCD5 temperature_f: 114.31
2020-06-29_21:42:57 MQTT2_shelly1pm_68C63AFADCD5 overtemperature: 0
2020-06-29_21:43:29 MQTT2_shelly1pm_68C63AFADCD5 off
2020-06-29_21:43:29 MQTT2_shelly1pm_68C63AFADCD5 relay0: off
2020-06-29_21:43:29 MQTT2_shelly1pm_68C63AFADCD5 input0: 0
2020-06-29_21:43:29 MQTT2_shelly1pm_68C63AFADCD5 0_event:
2020-06-29_21:43:29 MQTT2_shelly1pm_68C63AFADCD5 0_event_cnt: 0
2020-06-29_21:43:29 MQTT2_shelly1pm_68C63AFADCD5 relay_0_power: 0.00
2020-06-29_21:43:29 MQTT2_shelly1pm_68C63AFADCD5 temperature: 46.05
2020-06-29_21:43:30 MQTT2_shelly1pm_68C63AFADCD5 temperature_f: 114.88
2020-06-29_21:43:30 MQTT2_shelly1pm_68C63AFADCD5 overtemperature: 0
2020-06-29_21:43:56 MQTT2_shelly1pm_68C63AFADCD5 off
2020-06-29_21:43:56 MQTT2_shelly1pm_68C63AFADCD5 relay0: off
2020-06-29_21:43:56 MQTT2_shelly1pm_68C63AFADCD5 input0: 0
2020-06-29_21:43:56 MQTT2_shelly1pm_68C63AFADCD5 0_event:
2020-06-29_21:43:56 MQTT2_shelly1pm_68C63AFADCD5 0_event_cnt: 0
2020-06-29_21:43:56 MQTT2_shelly1pm_68C63AFADCD5 relay_0_power: 0.00
2020-06-29_21:43:56 MQTT2_shelly1pm_68C63AFADCD5 temperature: 45.83
2020-06-29_21:43:56 MQTT2_shelly1pm_68C63AFADCD5 temperature_f: 114.50
2020-06-29_21:43:56 MQTT2_shelly1pm_68C63AFADCD5 overtemperature: 0
2020-06-29_21:44:25 MQTT2_shelly1pm_68C63AFADCD5 off
2020-06-29_21:44:25 MQTT2_shelly1pm_68C63AFADCD5 relay0: off
2020-06-29_21:44:25 MQTT2_shelly1pm_68C63AFADCD5 input0: 0
2020-06-29_21:44:25 MQTT2_shelly1pm_68C63AFADCD5 0_event:
2020-06-29_21:44:25 MQTT2_shelly1pm_68C63AFADCD5 0_event_cnt: 0
2020-06-29_21:44:25 MQTT2_shelly1pm_68C63AFADCD5 relay_0_power: 0.00
2020-06-29_21:44:25 MQTT2_shelly1pm_68C63AFADCD5 temperature: 45.83
2020-06-29_21:44:25 MQTT2_shelly1pm_68C63AFADCD5 temperature_f: 114.50
2020-06-29_21:44:25 MQTT2_shelly1pm_68C63AFADCD5 overtemperature: 0
2020-06-29_21:44:56 MQTT2_shelly1pm_68C63AFADCD5 off
2020-06-29_21:44:56 MQTT2_shelly1pm_68C63AFADCD5 relay0: off
2020-06-29_21:44:56 MQTT2_shelly1pm_68C63AFADCD5 input0: 0
2020-06-29_21:44:56 MQTT2_shelly1pm_68C63AFADCD5 0_event:
2020-06-29_21:44:56 MQTT2_shelly1pm_68C63AFADCD5 0_event_cnt: 0
2020-06-29_21:44:56 MQTT2_shelly1pm_68C63AFADCD5 relay_0_power: 0.00
2020-06-29_21:44:56 MQTT2_shelly1pm_68C63AFADCD5 temperature: 45.62
2020-06-29_21:44:56 MQTT2_shelly1pm_68C63AFADCD5 temperature_f: 114.12
2020-06-29_21:44:56 MQTT2_shelly1pm_68C63AFADCD5 overtemperature: 0
2020-06-29_21:45:29 MQTT2_shelly1pm_68C63AFADCD5 off
2020-06-29_21:45:29 MQTT2_shelly1pm_68C63AFADCD5 relay0: off
2020-06-29_21:45:29 MQTT2_shelly1pm_68C63AFADCD5 input0: 0
2020-06-29_21:45:29 MQTT2_shelly1pm_68C63AFADCD5 0_event:
2020-06-29_21:45:29 MQTT2_shelly1pm_68C63AFADCD5 0_event_cnt: 0
2020-06-29_21:45:29 MQTT2_shelly1pm_68C63AFADCD5 relay_0_power: 0.00
2020-06-29_21:45:29 MQTT2_shelly1pm_68C63AFADCD5 temperature: 45.62
2020-06-29_21:45:29 MQTT2_shelly1pm_68C63AFADCD5 temperature_f: 114.12
2020-06-29_21:45:29 MQTT2_shelly1pm_68C63AFADCD5 overtemperature: 0


Natürlich erzeugt das auch unnütze Systemlast.
Kann man die Menge der logs einschränken?
Weder ein "verbose 0" im MQTT2-Server noch im Shelly-Device helfen.

Danke im Voraus
lg, Gerhard

Otto123

#1
Hallo Gerhard,
attr MQTT2_shelly1pm_68C63AFADCD5 event-on-change-reading .*

Aber Du musst ja auch nicht alles ins Filelog schreiben, ändere zusätzlich doch einfach das RegExp im FileLog Device.

BTW: verbose hat mit deinem FileLog nichts zu tun, das wirkt auf das Logfile  ;)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

...der richtige Forenbereich wäre MQTT, und irgendwie müßten wir uns da was besseres überlegen wie e-o-c-r .*. (Wird langsam Zeit, das ich mir das Teil mal näher ansehe...)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

rudolfkoenig

Falls man fuer FileLog/SVG optimieren will, dann bastelt man ein userReadings mit allen Werten, die man braucht (Leerzeichen getrennt), und man loggt per FileLog-Regexp nur dieses eine Reading (d.h. eine Zeile pro Meldung). Ob sich der Aufwand lohnt, muss jeder fuer sich entscheiden.

Beta-User

Zitat von: Beta-User am 29 Juni 2020, 22:09:01
(Wird langsam Zeit, das ich mir das Teil mal näher ansehe...)
Hmm, irgendwie ist das komisch:

Lt. API gibt es einen Parameter namens "mqtt_update_period", er hier relevant sein könnte. Dazu kann man in der API lesen:
Zitatnumber Periodic update in seconds, 0 to disable

Irgendwie bin ich aber noch nicht auf den Trichter gekommen, wie das via MQTT zu verwenden ist. Hatte es in verschiedenen Varianten an einem 1pm in der setList versucht:
x_set_update_period shellies/shelly1pm-xyz/settings/mqtt_update_period $EVTPART1
Das hat aber irgendwie nicht den gewünschten Erfolg...

Was aber geht, ist das ganze via Browser einzustellen: 
http://192.168.0.123/settings?mqtt_update_period=0,

War zuerst etwas mißtrauisch, weil das so global gesetzt werden kann, aber die Energie-Werte werden weiter fleißig aktualisiert, nur eben der Relais-, input0, ...-Zustand nicht.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Otto123

Mein bisheriges Verständnis der API von Shelly ist:
Konfiguration nur über HTTP
Bestimmte Werte kommen auch nicht über MQTT sondern nur HTTP
Man muss beim Lesen der Doku immer wieder aufpassen, weil man schnell von der HTTP Doku zur MQTT Doku rutscht und rechts Json immer "ähnlich" aussieht ;)

Deswegen hatte ich am Anfang mal überlegt wie man ein "Kombi (MQTT + HTTP) Device" machen könnte. Aber ich habe den Rotwein dann lieber mit guter Musik genossen :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

Scheint wohl so zu sein, dass die Konfiguration nur via HTTP geht. Schade, dass es dazu zu allem Überfluß nicht wenigstens irgendwo ein Beispiel auf der API-Seite gibt bzw. klare Hinweise, dass das via MQTT nicht geht...

Irgendwo haben (hatten?) wir irgendwo auch so ein "gemischtes" Ding, das teils auch http-POSTs abgesetzt hat. (über das Wiki gefunden: https://forum.fhem.de/index.php/topic,102369.0.html).

Irgendwie könnten wir uns Gedanken machen, ob und wie man das "unter die Leute" bringen sollte bzw. kann.
Erst mal war ich einigermaßen beruhigt, dass der Verbrauchssensor trotz periode "0" weiter fleißig sendet. Wäre irgendwie noch nett gewesen, wenn man dem hätte beibringen können, dass er mind 10% Differenz braucht (im Moment kann ich aber nicht sagen, ob da nicht was in diese Richtung eingebaut ist, mein Meßwert springt ziemlich, und die Frequenz der updates ist nicht wirklich gut vorhersagbar). Der Temperaturwert wird jetzt allerdings gar nicht mehr aktualisiert!?! Dem ist zwar eh' nicht zu trauen, aber das klingt danach, als wäre das insgesamt nicht das Gelbe vom Ei...

Vermutlich muss also doch irgendeine sinnvolle e-o-c-r-Variante her? Nicht schön, das....

Alles irgendwie nicht befriedigend...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Prof. Dr. Peter Henning

Aus diesem geschwätzigen Grunde heraus habe ich ja das dezidierte Shelly-Modul gebaut.

Die Alternative ist also vorhanden.

LG

pah

Beta-User

Zitat von: Prof. Dr. Peter Henning am 01 Juli 2020, 04:20:38
Aus diesem geschwätzigen Grunde heraus habe ich ja das dezidierte Shelly-Modul gebaut.
Bin nicht sicher, ob wir es da mit einem Fall von Rationalisierung zu tun haben ;D .
Wie dem auch sei: Wer bisher kein MQTT(2) nutzt, hat mit deinem Modul eine sehr gute Alternative, wer sowieso MQTT(2) nutzt, wird seine Gründe haben und die "Einheitlichkeit" (*lach...*) schätzen.

Aber:
Man könnte es auch als verpaßte Gelegenheit auffassen, den Usern den "richtigen Umgang" (falls es sowas überhaupt gibt...) mit den event-on.* und timestamp.*-Attributen zu vermitteln :P . Macht hier ja durchaus Sinn, da die Shelly ja (@MQTT) dankenswerterweise "Klartext" (und nicht JSON) sprechen. Oder dem Hersteller ein etwas differenzierteres Sendeverhalten vorzuschlagen, wenn man einen guten Draht hat und sowas auch sachlich differenziert vermitteln kann.

Wie dem auch sei, hier mal ein vorläufiges Zwischenergebnis@MQTT2 als Diskussionsgrundlage:
defmod Muster_Shelly1pm MQTT2_DEVICE shelly1pm_123456789012
attr Muster_Shelly1pm IODev MQTT2_FHEM_Server
attr Muster_Shelly1pm comment To get appropriate loadState values: Change the default limit "100" in readingList to your needs.
attr Muster_Shelly1pm 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 $total = ReadingsVal($name,"relay_0_kWh","unknown");;;; my $temp = ReadingsVal($name,"temperature","-100");;;;"<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><div>Verbrauch: $cons / Total: $total/ Temp: $temp °C</div>"}
attr Muster_Shelly1pm event-on-change-reading state,temperature:0.2,online,loadState,overtemperature,Verbrauch_Total_kWh,relay_0_.*,relay0,input0
attr Muster_Shelly1pm event-on-update-reading stat[ERT].*
attr Muster_Shelly1pm model shelly1_w_energy_meassuring
attr Muster_Shelly1pm readingList shellies/shelly1pm-123456789012/relay/0:.* state\
  shellies/shelly1pm-123456789012/relay/0:.* relay0\
  shellies/shelly1pm-123456789012/input/0:.* input0\
  shellies/shelly1pm-123456789012/online:.* online\
  shellies/announce:.* { $EVENT =~ m,..id...shelly1pm-123456789012...mac.*, ? json2nameValue($EVENT) : return }\
  shellies/shelly1pm-123456789012/announce:.* { json2nameValue($EVENT) }\
  shellies/shelly1pm-123456789012/relay/0/power:.* relay_0_power\
  shellies/shelly1pm-123456789012/relay/0/power:.* { my $compare = $EVTPART0 < 100 ? "off":"on";; ReadingsVal($NAME,"loadState","off") ne $compare ? { 'loadState' => $compare } : return }\
  shellies/shelly1pm-123456789012/temperature:.* temperature\
  shellies/shelly1pm-123456789012/overtemperature:.* overtemperature\
  shellies/shelly1pm-123456789012/relay/0/energy:.* relay_0_energy\
  shellies/shelly1pm-123456789012/relay/0/energy:.* {'relay_0_kWh' => sprintf("%.2f",$EVENT/60/1000)}\
  shellies/shelly1pm-123456789012/longpush/0:.* longpush_0\
  shellies/shelly1pm-123456789012/temperature_f:.* {}\
  shellies/shelly1pm-123456789012/input_event/0:.* { json2nameValue($EVENT) }
attr Muster_Shelly1pm room Steuerung->Test
attr Muster_Shelly1pm setList relay0:on,off,toggle shellies/shelly1pm-123456789012/relay/0/command $EVTPART1\
  off:noArg shellies/shelly1pm-123456789012/relay/0/command off\
  on:noArg shellies/shelly1pm-123456789012/relay/0/command on\
  x_update:noArg shellies/shelly1pm-123456789012/command update_fw\
  x_mqttcom shellies/shelly1pm-123456789012/command $EVTPART1
attr Muster_Shelly1pm setStateList on off
attr Muster_Shelly1pm timestamp-on-change-reading state,online,loadState,overtemperature
attr Muster_Shelly1pm userReadings relay_0_energy_total:relay_0_energy:.* monotonic {ReadingsNum("$name","relay_0_energy",0)}, Verbrauch_Total_kWh:relay_0_kWh:.* monotonic {ReadingsNum("$name","relay_0_kWh",0)}
attr Muster_Shelly1pm webCmd :
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Prof. Dr. Peter Henning

Zitatwenn man einen guten Draht hat und sowas auch sachlich differenziert vermitteln kann
Ersteres habe ich nach eigener Einschätzung, Letzteres nach Einschätzung Anderer. Habe aber im Moment zuviel um die Ohren dafür...

LG

pah

gestein

Hallo,

Danke für die vielen Antworten.
Soweit ich das nun verstanden habe, legen die Templates auch die entsprechenden log-files an.

Die Shellys schreiben sehr fleißig in diese logs:
defmod FileLog_MQTT2_shellyswitch25_E098068CFBCC FileLog ./log/MQTT2_shellyswitch25_E098068CFBCC-%Y.log MQTT2_shellyswitch25_E098068CFBCC
attr FileLog_MQTT2_shellyswitch25_E098068CFBCC logtype text
attr FileLog_MQTT2_shellyswitch25_E098068CFBCC room Shelly

Manche log-Files sind bereits 100MB groß und ich habe 20 Shellys.

Was ich bis jetzt nicht wußte, ist, dass fhem in der Web-Oberfläche im "Event-Monitor" auch diese Einträge angezeigt werden.

Damit kann ich mal in der Definition der Log-Files die Parameter auswählen, die geloggt werden sollen.
Das ist ja schon mal was.

Ich werde die Gelegenheit nutzen mich mit dem Beispiel von Beta-User genauer auseinander zu setzen.
Von diesen Möglichkeiten habe ich bis dato noch nichts gewußt:
attr Muster_Shelly1pm timestamp-on-change-reading state,online,loadState,overtemperature
attr Muster_Shelly1pm userReadings relay_0_energy_total:relay_0_energy:.* monotonic {ReadingsNum("$name","relay_0_energy",0)}, Verbrauch_Total_kWh:relay_0_kWh:.* monotonic {ReadingsNum("$name","relay_0_kWh",0)}


Danke für die tolle Hilfe!
lg, Gerhard

Beta-User

Danke für die Rückmeldung und viel Spaß beim weiteren Auswerten!

Für sowas wie eine konsolidierte Rückmeldung wäre ich dir dankbar, ich hatte das heute morgen auch nur auf die Schnelle zusammengeschustert...

Generell ist es aber so, dass nicht attrTemplate irgendwas mit der Erstellung der FileLog-Devices zu tun hat, sondern autocreate (TYPE=autocreate). Da kann man dieses Verhalten auch ausschalten.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

youngster

Vielen Dank an die die hier geantwortet haben.
Versuche mich grad mit Shelly TRV
(Akkuschonend Tiefschlaf vs Erreichbarkeit/MQTT vs Datenmenge)
Ergebnisse spaeter in der Selbstvorstellung...
Sie haben mir enorm weitergeholfen

Gruesse