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