Mittelwertbildung im Tasmota scripting für SML

Begonnen von DerD, 11 Oktober 2025, 13:55:48

Vorheriges Thema - Nächstes Thema

DerD

Hi zusammen,

ich habe für einen ESP32-C3 Tasmota 15.0.1 inklusive Scripting kompiliert um SML meiner PV auszulesen. Das funktioniert soweit mit dem folgenden Standardscript für meinen Landis + Gyr E320.

>D
>B
=>sensor53 r
>M 1
+1,4,s,20,9600,E320
1,77070100020800ff@1000,Total Delivered,kWh,Total_out,3
1,77070100010800ff@1000,Total Consumed,kWh,Total_in,3
1,77070100100700ff@-1,Current power,W,Power_in,0
1,77070100600100ff@#,Server-ID,,Meter_Number,0   
#

Gesendet wird über MQTT alle 300s wie in der Telemetrie eingestellt.

Ausgelesen werden die Daten vom Smartmeter im Sekundentakt und auch im Tasmota Webinterface aktualisiert. Nun möchte ich aber nicht alle 5min den aktuellen Leistungswert schicken, sondern den Mittelwert der letzten 5 Minuten.
Jede Sekunde die Daten verschicken und in FHEM dann glätten ginge zwar, finde ich aber nicht ganz so hübsch ;)

Hier hat Ralf etwas in die Richtung "Rechnen im Script" erwähnt, schlau werde ich allerdings nicht daraus, und auch nicht so recht aus den Beispielen in der Tasmota scripting Beschreibung.

Wäre toll, wenn mir da jemand einen hilfreichen Tipp geben könnte

----------
Edit: link korrigiert
Gruß,
Dieter

Gisbert

Ich lese interessiert mit und bin auf die Lösung gespannt, die ich auch gut gebrauchen kann.
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

DerD

 Ich glaube, ich habe sogar 2 Lösungen:
- Hier die existierende von Leuten die sicher mehr Ahnung von der Materie haben wie ich. Leider erst gesehen, als meines halbwegs lief
- mein script, zu dem zu erwähnen ist: ich weiß noch nicht, wie das bei realen Werten läuft, derzeit liefert die PV nur Null Watt, nicht dass der moving-average speichermäßig Probleme macht. Und die Mittelwerte werden aktuell noch bewusst parallel zu den über die Telemetrie eingestellten Periode gesendet.
Möglicherweise nicht Bug-frei, also falls jemand einen findet, wäre ich sicher nicht böse.

>D 48
pow=0
; moving average for 300 seconds
M:mpow=0 300
>B
=>sensor53 r
>T
; get sensor values
pow=sml[3]
>S
; average sensor values every second
mpow=pow
; write average to sensor log every 5 minutes
if upsecs%300==0
then
; send MQTT
=>Publish tele/%topic%/SENSOR {"Script":{"avPower":%0mpow%}}
endif
>M 1
+1,4,s,20,9600,E320
1,77070100020800ff@1000,Total Delivered,kWh,Total_out,3
1,77070100010800ff@1000,Total Consumed,kWh,Total_in,3
1,77070100100700ff@-1,Current power,W,Power_in,0
1,77070100600100ff@#,Server-ID,,Meter_Number,0   
#
Gruß,
Dieter

Gisbert

Hallo Dieter,

ChatGPT war nicht sonderlich hilfreich, teilweise richtig falsch - bis auf eine Kleinigkeit, die besser gelöst wurde. Wenn man den publish-Befehl so schreibt:
=>Publish tele/%topic%/curr_w_avg %mpow%dann wird der gemittelte Wert direkt in das Reading geschrieben.

Mein Script sieht insgesamt so aus, wobei die Teleperiod auch auf 300 gesetzt wurde:
>D
pow=0
; moving average
M:mpow=0
>B
=>sensor53 r
>T
; get sensor values
pow=sml[1]
>S
; average sensor values every second
mpow=pow
; write average to sensor log every 5 minutes
if upsecs%300==0
then
; send MQTT
=>Publish tele/%topic%/curr_w_avg %mpow%
endif
>M 1
+1,3,s,0,9600,PICUS
1,77070100100700ff@1,Consumption (current),W,curr_w,0
1,77070100010800ff@1000,Consumption (total),Kwh,total_kwh,4
1,77070100020800ff@1000,Feed (total),Kwh,total_kwh_out,4
#
Ich hoffe, dass ich damit der Datenflut Herr werde, ohne dass die Qualität darunter leidet. Ich werde berichten, wenn ich was nennenswertes rausgefunden habe.
 
Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

DerD

Meine Erfahrung mit ChatGPT in Bezug auf tasmota Scripting: taugt nichts. Zumindest nicht wenn's man keine Ahnung hat und meint es allein machen lassen zu können. Bei jeder Fehlermeldung kommt ein ,,klar, habe jetzt verstanden" um mit der Änderung in neue Fehler zu laufen. Hatte versucht, per Script den RSSI als Feedback auf eine W2812 auszugeben. Ein Vormittag für nichts.

Bezüglich obigem Vorschlag: ich werde meinen beibehalten, damit kann ich das Reading gezielt an meine bisherigen anpassen, ohne Logs und Charts ändern zu müssen.

Die Werte sehen auch bei Tags gut aus, obwohl er im Dauergrau wenig zu Mitteln hat ;)
Gruß,
Dieter

DasQ

Das ist bei mir jetzt etwas her, drum kann ich dir da keine löffelfertige Lösung liefern.

Aber, schau doch mal einfach Hier

Diese tasmota Lösung hat von Haus aus, etliches mehr an Script.

Geht es um eine nulleinspeisung, empfehle ich mal nach zeroexport script zu suchen. Das läuft zwar eigenständig, sollte aber viel mehr machen als du willst
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org