[gelöst per scripting] Tasmota rule, OBIS Zähler und deutliche Power-Änderungen

Begonnen von Beta-User, 08 März 2023, 21:58:34

Vorheriges Thema - Nächstes Thema

DasQ

#15
moin Beta-User nicht explizit, da ich auf der sml seite nur "NO_USE_SML_SCRIPT_CMD" finde, geh ich davon aus es ist standardmäßig aktiv.
sag bescheid wenn das elementar ist. jetzt kurz gesucht und noch nicht gefunden.

also die user_config_override.h schaut bei mir so aus. den undef part hab ich aus meiner älteren TasmotaSML version übernommen, dachte ja zunächst das Bin-file ist zu groß.

#ifndef _USER_CONFIG_OVERRIDE_H_
#define _USER_CONFIG_OVERRIDE_H_

// hier ist für standard wlan usw config auskommentiert

#ifndef USE_SCRIPT
#define USE_SCRIPT
#endif
#ifndef USE_SML_M
#define USE_SML_M
#endif
#ifdef USE_RULES
#undef USE_RULES
#endif
#define USE_UFILESYS


#undef USE_DOMOTICZ
#undef USE_HOME_ASSISTANT
#undef USE_EMULATION_HUE
#undef USE_EMULATION_WEMO
#undef ROTARY_V1
#undef USE_SONOFF_RF
#undef USE_SONOFF_SC
#undef USE_TUYA_MCU
#undef USE_ARMTRONIX_DIMMERS
#undef USE_PS_16_DZ
#undef USE_SONOFF_IFAN
#undef USE_BUZZER
#undef USE_ARILUX_RF
#undef USE_SHUTTER
#undef USE_DEEPSLEEP
#undef USE_EXS_DIMMER
#undef USE_DEVICE_GROUPS
#undef USE_PWM_DIMMER
#undef USE_SONOFF_D1
#undef USE_SHELLY_DIMMER
#undef USE_WS2812
#undef USE_MY92X1
#undef USE_SM16716
#undef USE_SM2135
#undef USE_SONOFF_L1
#undef USE_ELECTRIQ_MOODL
#undef USE_LIGHT_PALETTE
#undef USE_DGR_LIGHT_SEQUENCE
#undef USE_DS18x20
#undef USE_ADE7953
#undef USE_SERIAL_BRIDGE
#undef USE_ENERGY_MARGIN_DETECTION
#undef USE_PZEM004T
#undef USE_PZEM_AC
#undef USE_PZEM_DC
#undef USE_MCP39F501
#undef USE_DHT
#undef USE_BL0940
#undef USE_IR_REMOTE
#undef USE_IR_RECEIVE
#undef USE_ZIGBEE_ZNP
#endif


***edit***
da es fehlerfrei durch läuft sollten xdrv_10_scripter.ino und xsns_53_sml.ino abgearbeitet worden sein und dort ist es aktiv. (so mit morgentlich müden augen kurz abgecheckt) aber ich kontrollier des nach dem ersten kaffe nochmals
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

DasQ

#16
moin die zweite

schau mal was ich da für dich habe (zähler config bitte anpassen)
in sml[3] ist bei mir auch nur ne 0 drin. arrays fangen aber bei 0 an, also 0,1,2,

>D
pow=0
p0=0

>B
=>sensor53 r
>S
pow=0
p0=0
print %pow% %p0% %sml[0]% %sml[1]% %sml[2]%
;disable publishing at MQTT teleperiod, on boot
smlj=0
pow=sml[1]
print log1 %pow% %p0%

;re-enable publishing at MQTT teleperiod, after 10 seconds of uptime
if upsecs>10
then
smlj|=1
endif

; publish power every teleperiod/20 time (default result: 15 sec)
if mqtts>0
and upsecs%(tper/20)==0
then
p0=sml[2]
print log2 %pow% %p0%

;pow=sml[3]
; just publish power value
=>Publish tele/%topic%/SENSOR {"Script":{"power":%sml[1]%}}
endif
>M 1
+1,12,s,0,9600,SML
1,77070100010800ff@1000,Total Consumed,KWh,Total_in,3
1,77070100100700ff@1,Current Consumption,W,Power_cur,0
1,77070100020800ff@1000,Total Delivered,KWh,Total_out,3
1,7707010060320101@#,Service ID,,Meter_id,0
#

Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Beta-User

Vielen Dank für's Recherchieren und Austesten!

Jetzt kommt (mit der auf 0 Stellen angewiesenen sml[3]-Variable in der publish-Anweisung) schon mal der ungeglättete Power-Wert!!!!

Strange ist das trotzdem, dass das gestern den Tag über nicht wollte. Da scheint also tatsächlich dieses feature aus irgendwelchen Gründen nicht aktiv gewesen sein, oder man darf in der publish-Anweisung nur das sml-Array verwenden?

Na ja, wie dem auch sei: Muss das ganze dann mal noch mit der gleitenden Mittelwert-Betrachtung erweitern, dafür sollte der Speicher in dem 01-er 8266 ausreichen (der ist schön mit im Lesekopf verbaut!), und dann versuche ich irgendwann noch, die firmware auch mal selbst zu bauen (falls nicht was funktionierendes in dem repo zu finden ist).

Anmerkungen noch:
- Die Doku bei Tasmota-Scripting ist wirklich sehr gut! (Es ging mir eigentlich wirklich eher darum, mich für so ein "Standardproblem" (?!?) nicht auch noch da einlesen zu müssen ::) )
- An ein Problem mit der Zählung im Array hatte ich auch zuerst gedacht und mein script daher direkt auf [2] umgestellt. Nachdem da aber immer derselbe Wert kam, ist mir aufgefallen, dass der zu groß ist bzw. das falsche Vorzeichen hat... Warum das bei uns unterschiedlich zu sein scheint, ist mir jedenfalls völlig unerklärlich.

Na ja, für's erste bin ich jedenfalls ausgesprochen Happy, Danke vielmals (!!!) für eure Unterstützung bis hierher und werde jetzt erst mal "normale Samstags-Jobs" erledigen...
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

DasQ

#18
das coole an der sache ist, ich kanns für mich selbst verwenden.

bin aber ernsthaft am überlegen mein sml kopf mit nem esp32 zu bestücken. btw. is da kein meter daneben einer der meine heizungstemperaturen erfasst. der hätte noch genug ressourcen offen die sml geschichte zu übernehmen. (da lassen sich auch ganz hübsche webif`s basteln hab ich gesehn)

ach ja das mit dem vorzeichen hatte ich zu anfang auch mal, aber nach dem ich den modul type auf generic (18) gestellt hatte wars danach weg. (der müsste fallback seitig bei dir auf "sonoff basic (1)" stehen)
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Beta-User

Zitat von: DasQ am 11 März 2023, 08:36:44
das coole an der sache ist, ich kanns für mich selbst verwenden.
So oder so: Danke!

Hatte schon den "Verdacht", dass das ganze ein Thema ist, das nicht nur einen interessiert, und bei dem es mehr Fallstricke gibt, als man auf den ersten Blick annehmen würde...

Zitat
bin aber ernsthaft am überlegen mein sml kopf mit nem esp32 zu bestücken. btw. is da kein meter daneben einer der meine heizungstemperaturen erfasst. der hätte noch genug ressourcen offen die sml geschichte zu übernehmen. (da lassen sich auch ganz hübsche webif`s basteln hab ich gesehn)
Na ja, bei mir ist _an dieser Stelle_ tatsächlich nur der Stromzähler, da macht "mehr Power" oder ein Display gar keinen Sinn.

ABER: Demnächst werde ich (hoffentlich) noch etwas Solarthermie in Betrieb nehmen (der Puffer ist endlich da). Und für diesen Zweck habe ich einen EPS32 mit LAN-Schnittstelle vorgesehen - die Thermie-Steuerung hat jedenfalls eine (u.a.) per Tasmota-Scripting auslesbare Schnittstelle...
(Im Endausbau soll aber der ESP die gesamte Heizungsanlage einschließlich der Junkers-Therme steuern, mal sehen, ob ich das hinbekomme... Das wird dann aber vermutlich kein Tasmota mehr. Wobei....)

Zitat
ach ja das mit dem vorzeichen hatte ich zu anfang auch mal, aber nach dem ich den modul type auf generic (18) gestellt hatte wars danach weg. (der müsste fallback seitig bei dir auf "sonoff basic (1)" stehen)
Das mit dem Vorzeichen paßt schon, da hängt auf meiner Seite eine Solananlage dran, die grade mehr erzeugt als verbraucht wird ;) . Daher auch die ganze Umstellung bzw. der Bedarf für zeitnahe Werte... Wenn Strom im Überfluss da ist und Heizbedarf besteht, kann der auch direkt da rein gehen 8) .
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

DasQ

hehe danke das ich hier weiter OT mitschreiben darf.

also weil es mir keine ruhe lies und ich ja einen wemos mini im einsatz habe, meine sml-tasmota version von 2022 (v11) einen punkt "verwalte dateisystem" hatte und ich in der infomationen anzeige nur 1024kb zur verfügung hatte (weil ja für esp01 gebaut), habe ich nun noch eine version für den Wemos gemacht. (schachtelsätzekannichsupa ::))

Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Sany

@Beta-User
aus dem ersten Post von Dir lese ich, Du möchtest einerseits die Datenflut eindämmen und andererseits Fehlauslesungen nicht gesendet bekommen. Falsche Werte liest mein Tasmota auch aus, keine Ahnung ob das am Script oder in der Natur des Sache liegt. Was ich für mich realisiert habe ist folgendes:
- der tasmota kennt die Uhrzeit
- ich lese sekündlich die Zählerdaten aus (Zählerstände, nicht den Powerwert) Dann wird gecheckt, ob der Wert ok ist, falls nicht (im Moment noch) lasse ich den in ein Error-Reading publishen, man möchte die möglichen Fehler ja kennenlernen.
- ich erhöhe jede Sekunde einen Zähler.
- beim Minutenwechsel publische ich einerseits die Zählerstände, andererseits wird die Differenz der Zählerstände mit dem Sekundenzähler verrechnet und als Power-wert für diese Minute gepublished.
- in fhem mache ich noch zeitgleich eine Abfrage vom Wechselrichter und habe am Ende innerhalb der ersten paar Sekunden nach einem Minutenwechsel die Power-Werte für Bezug, Einspeisung und Erzeugung und kann dann einen validen Wert für den Verbrauch des Hauses errechnen.
Final brauchts die Zählerstände um die Verbrauchswerte für Tag/Monat/Jahr etc zu rechnen und zu plotten, die Powerwerte sind eigentlich nur zur Anzeige, so erstellt allerdings auch irgendwie valide verglichen mit wild sich ändernden Power-Werten direkt vom Zähler.
Ob das in den ESP-01 passt, keine Ahnung. Käme auf einen Versuch an.

Bei Interesse schreib mich an, ich müsste mein Script erst von den anderen Sachen, die es noch macht, bereinigen.

Gruß


Sany
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

DasQ

hatte ich wie gesagt auch ... sinnigerweise in den letzten log files nicht mehr. (immer wenn man ein sporadischen fehler braucht, gibt es ihn nicht mehr Fu**)

btw. hier ein stückchen aus der tasmota manual
ZitatMeter Definition~

    +<M>,<rxGPIO>,<type>,<flag>,<parameter>,<jsonPrefix>{,<txGPIO>,<txPeriod>,<cmdTelegram>}

<flag> ... - 16 - enable median filter for that meter. Can help with sporadic dropouts, reading errors (not available for counters). this option is enabled by default #define USE_SML_MEDIAN_FILTER, if you are low on memory and dont use this feature you may outcomment this define in the driver

vielleicht hilft ja das?
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Beta-User

So, nochmal vielen Dank für eure Rückmeldungen!

Vorläufige Fassung des scripts:
>D
M:pavg=0

>B
=>sensor53 r
;disable publishing at MQTT teleperiod, on boot
smlj=0
>S
;re-enable publishing at MQTT teleperiod, after 10 seconds of uptime
if upsecs>10
then
smlj|=1
endif

; add to moving average filter
pavg=sml[3]

; publish power every teleperiod/20 time (default result: 15 sec)
if mqtts>0
and upsecs%(tper/20)==0
then
; just publish power value
=>Publish tele/%topic%/SENSOR {"Script":{"power":%0sml[3]%,"p_avg":%0pavg[-2]%}}
endif
>M 1
+1,3,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
#


Anmerkungen: Ob es überhaupt Lesefehler usw. gibt, weiß ich (noch) nicht. Das, was bisher an Werten zu sehen war, sah ziemlich plausibel aus, und auch das, was (seit kurzem) per moving average vom ESP geliefert wurde.
Generell gefällt mir der Ansatz, diese Standardaufgaben vom ESP lösen zu lassen und an FHEM dann eben nur die verdichteten Infos zu pushen.

Sehr cool finde ich auch, dass man direkt sieht, was so ein script (grade) macht. Von daher bin ich echt grade am Überlegen, ob das nicht doch ein relativ einfach zu debuggender Ansatz für meine Heizungssteuerung ist.

Weiß jemand auf die Schnelle, ob das Auslesen von DS18B20 nonblocking ausgelegt ist und wie oft die ausgelesen werden (das scheint allgemein vom publish entkoppelt zu sein)?
Wenn es dann noch fertige bin-files mit scripting und ESP32 incl. LAN (!) gäbe, würde ich wohl mal den Versuch unternehmen...
Außer, dass das ziemlich speicherhungrig zu sein scheint, sehe ich im Moment keine Nachteile.
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

DasQ

Wenn mir erklärst was nonblocking ist, ich hab 10 DS18B20 an nem ESP32 mit espeasy hängen.

So eben kurz nachgelesen aber noch nicht verstanden was das Problem ist. Geht's um schnelles auslesen? Das klappt mir ein paar aussetzten bis zu 1 Sekunde. Aber Temperatur ist für gewöhnlich langsamer.
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Beta-User

Zitat von: DasQ am 12 März 2023, 21:40:21
Wenn mir erklärst was nonblocking ist, ich hab 10 DS18B20 an nem ESP32 mit espeasy hängen.
Also - kurzer Exkurs zu DS18x20:
Um von denen eine Temperatur zu bekommen, muss der Ablauf "Bitte messen" - "warten" - "auslesen" sein, wobei die Dauer von "warten" von der gewünschten Auflösung abhängt. Jetzt kann man wirklich "warten" (=>blocking), oder eben zwischenzeitlich was anderes tun und später den Auslese-Code ausführen (=>nonblocking).

Wenn ich das ab https://github.com/arendst/Tasmota/blob/master/tasmota/tasmota_xsns_sensor/xsns_05_ds18x20.ino#L497 korrekt interpretiere, ist das (wenig überraschend) nonblocking ausgelegt, wobei ziemlich häufig gemessen wird (?), nämlich jeden 2. (?) Durchlauf (also alle 2 Sekunden). Ist eigentlich deutlich mehr, als ich brauche, aber andererseits auch nicht optimal, weil wohl jeder Sensor beim Auslesen 12ms benötigt. Das sind bei geschätzt 10-15 Sensoren (muss mal nachzählen...) dann immerhin schon knapp 15-20% der in jedem 2. Durchlauf verfügbaren Zeit...

Zum Vergleich: meine aktuelle MySensors-Heizungsnode (ATMega32) liest einen Sensor alle 10 Sekunden aus, die restlichen (6?) alle 30 Sekunden oder noch seltener. Die hat aber praktisch auch wenig anderes zu tun...
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

DasQ

Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

coolheizer

Ich grätsche hier mal mit rein, DasQ hat ja schon einen Link zu https://ottelo.jimdofree.com/stromz%C3%A4hler-auslesen-tasmota/
gepostet.

Hier ist das Script um Google Chart erweitert, hiermit wird auf dem Tasmota Gerät auch gleich der Tagesverbrauch/ Monatsverbrauch sowie Tages und Monats Einspeisung angezeigt, auch bei 1 Richtungszähler.

Dazu werden noch Graphen zu den Werten angezeigt, eine klasse Arbeit die dort geleistet wurde, mit guter Anleitung.

Leider werden die zusätzlichen Berechnungen nicht über Mqtt ausgegeben, und genau hier erhoffe ich mir Hilfe.

Hat jemand eine Idee wie ich die zusätzlichen Daten in FHEM bekomme, Mqtt läuft soweit, wie gesagt nur leider ohne den zusätzlichen Werten.

Wenn es Interessiert hier mal mein funktioniererendes Script:

>D 40
M:p:sday=0 288
M:p:dcon=0 31
M:p:dprod=0 31
M:p:mcon=0 24
M:s4h=0 480
EnFrGrid=0
p:EnToGrid=0
power=0
p:mval=0
p:dval=0
p:mval2=0
p:dval2=0
tmp=0
m5=0
cstr="cnt0/12"
cstr2="cnth0/120"
utm="00d 00h 00m"
avgv=0
avgv2=0
avgvc=0
avgvc2=0
hour=0
da=1
swesp=0
swespflg=0
PToGridS=0
>B
=>sensor53 r
is(0 "Jan|Feb|Mär|Apr|Mai|Jun|Jul|Aug|Sep|Okt|Nov|Dez|")
smlj=0
#rst24h
for tmp 1 sday[-1] 1
sday[tmp]=0
next
#daysub
wcs <div id="day" style="text-align:center;width:400px"></div>
wcs <script language="JavaScript">function drawChart(){
wcs var cssc={'headerRow':'hRow','rowNumberCell':'hCol','tableCell':'tCell'};
wcs var data=google.visualization.arrayToDataTable([['Tag','Energie [kWh]',{role: 'style'}],
for tmp 1 dcon[-1] 1
if (tmp==day)
{
wcs [%tmp%,%dcon[tmp]%,'red'],
}
if (tmp<day)
{
wcs [%tmp%,%dcon[tmp]%,'green'],
}
if (tmp>day)
{
wcs [%tmp%,%dcon[tmp]%,''],
}
next
wcs ]);
wcs var options={chartArea:{left:40,width:'86%%'},legend:'none',title:'Tagesverbräuche Monatsansicht',vAxis:{format:'# kWh'},hAxis:{title:'Tag',ticks:[1,5,10,15,20,25,30]}};
wcs var chart=new google.visualization.ColumnChart(document.getElementById('day'));
wcs chart.draw(data,options);}google.charts.setOnLoadCallback(drawChart);</script>
#dayprod
wcs <div id="dayp" style="text-align:center;width:400px"></div>
wcs <script language="JavaScript">function drawChart(){
wcs var cssc={'headerRow':'hRow','rowNumberCell':'hCol','tableCell':'tCell'};
wcs var data=google.visualization.arrayToDataTable([['Tag','Energie [kWh]',{role: 'style'}],
for tmp 1 dprod[-1] 1
if (tmp==day)
{
wcs [%tmp%,%dprod[tmp]%,'red'],
}
if (tmp<day)
{
wcs [%tmp%,%dprod[tmp]%,'green'],
}
if (tmp>day)
{
wcs [%tmp%,%dprod[tmp]%,''],
}
next
wcs ]);
wcs var options={chartArea:{left:40,width:'86%%'},legend:'none',title:'Tageseinspeisung Monatsansicht',vAxis:{format:'# kWh'},hAxis:{title:'Tag',ticks:[1,5,10,15,20,25,30]}};
wcs var chart=new google.visualization.ColumnChart(document.getElementById('dayp'));
wcs chart.draw(data,options);}google.charts.setOnLoadCallback(drawChart);</script>
#monthsub
wcs <div id="month" style="text-align:center;width:400px"></div>
wcs <script language="JavaScript">function drawChart(){
wcs var cssc={'headerRow':'hRow','rowNumberCell':'hCol','tableCell':'tCell'};
wcs var data=google.visualization.arrayToDataTable([['Monat','Energie [kWh]',{role: 'style'}],
for tmp 1 12 1
if (tmp<month)
{
wcs ['%is[tmp]%',%mcon[tmp]%,'green'],
wcs ['%is[tmp]% (PV)',%mcon[tmp+12]%,'green'],
}
if (tmp==month)
{
wcs ['%is[tmp]%',%mcon[tmp]%,'red'],
wcs ['%is[tmp]% (PV)',%mcon[tmp+12]%,'red'],
}
if (tmp>month)
{
wcs ['%is[tmp]%',%mcon[tmp]%,''],
wcs ['%is[tmp]% (PV)',%mcon[tmp+12]%,''],
}
next
wcs ]);
wcs var options={chartArea:{left:40,width:'86%%'},legend:'none',title:'Monatliche Verbräuche / Solareinspeisungen Jahresansicht',vAxis:{format:'# kWh'}};
wcs var chart=new google.visualization.ColumnChart(document.getElementById('month'));
wcs chart.draw(data,options);}google.charts.setOnLoadCallback(drawChart);</script>
>D
>B
TelePeriod 30
=>sensor53 r
>M 1
+1,3,o,0,9600,SM,1
1,1-0:16.7.0*255(@1,Leistung,W,16_7_0,18
1,1-0:1.8.0*255(@1,Energie Bezug,KWh,1_8_0,3
1,1-0:36.7.0*255(@1,Leistung L1,W,36_7_0,18
1,1-0:56.7.0*255(@1,Leistung L2,W,56_7_0,18
1,1-0:76.7.0*255(@1,Leistung L3,W,76_7_0,18
1,1-0:32.7.0*255(@1,Spannung L1,V,32_7_0,1
1,1-0:52.7.0*255(@1,Spannung L2,V,52_7_0,1
1,1-0:72.7.0*255(@1,Spannung L3,V,72_7_0,1
1,1-0:96.1.0*255(@#),Identifikation,,96_1_0,0
#
>S
if (sml[2]>0)
{
smlj=1
}
if (year<2020)
{
print NTP not ready
break
}
if (secs%3==0)
{
power=sml[1]
avgv+=power
avgv2+=power
avgvc+=1
avgvc2+=1
if (power<0)
{
PToGridS-=power
}
if (swesp==1)
{
if ((power<-50) and (swespflg==0))
{
swespflg=1
}
if ((power>30) and (swespflg==1))
{
swespflg=0
}
}
}
if (secs%30==0)
{
s4h=avgv/avgvc
avgv=0
avgvc=0
cstr2="cnth"+s(1.0((((hours+20)*120)+(mins*2)+(int(secs/30)))%2880+1))+"/120"
}
if (secs%60==0)
{
hour=hours
utm=s(2.0(int(uptime/1440)))+"d "+s(2.0(int(uptime/60)%24))+"h "+s(2.0(uptime%60))+"m"
if (PToGridS>0)
{
EnToGrid+=PToGridS/1200000
PToGridS=0
}
EnFrGrid=sml[2]
dcon[day]=EnFrGrid-dval
mcon[month]=EnFrGrid-mval
dprod[day]=EnToGrid-dval2
mcon[month+12]=EnToGrid-mval2
m5=int((((hours*60)+mins)/5)+1)
sday[0]=m5
if (chg[m5]>0)
{
sday[m5]=int(avgv2/avgvc2)
avgv2=0
avgvc2=0
}
cstr="cnth"+s(1.0(((hours)*12)+int(mins/5))+1)+"/12"
if ((chg[hour]>0) and (hour==0))
{
if (day>1)
{
da=day
}
else
{
for tmp (da+1) 31 1
dprod[tmp]=0
dcon[tmp]=0
next
mval=EnFrGrid
mval2=EnToGrid
}
dval=EnFrGrid
dval2=EnToGrid
svars
}
}
>W
Tagesverbrauch:{m}%2(EnFrGrid-dval)% kWh
Monatsverbrauch:{m}%2(EnFrGrid-mval)% kWh
Tageseinspeisung:{m}%2(EnToGrid-dval2)% kWh
Monatseinspeisung:{m}%2(EnToGrid-mval2)% kWh
Gesamteinspeisung:{m}%2(EnToGrid)% kWh
Datum:{m}%s(2.0day)%.%s(2.0month)%.%s(2.0year)% - %s(2.0hours)%:%s(2.0mins)%:%s(2.0secs)%
Uptime:{m}%0utm%
$<div style="margin-left:-20px">
$<div id="chart1" style="text-align:center;width:400px"></div>
$gc(lt s4h "wr" "Leistung [W]" cstr2)
$var options = {
$chartArea:{left:60,width:'83%%'},
$legend:'none',
$vAxis:{format:'# W'},
$explorer:{actions:['dragToZoom', 'rightClickToReset']},
$series: {0: {type: 'area'}},
$title:'Verbrauch 4 Stunden [Watt]'
$};
$gc(e)
$<div id="chart2" style="text-align:center;width:400px"></div>
$gc(lt sday "wr" "Leistung [W]" cstr)
$var options = {
$chartArea:{left:60,width:'83%%'},
$legend:'none',
$vAxis:{format:'# W'},
$explorer:{actions:['dragToZoom', 'rightClickToReset']},
$series: {0: {type: 'area'}},
$title:'Verbrauch 24 Stunden [Watt]'
$};
$gc(e)
%=#daysub
%=#dayprod
%=#monthsub
$<center><span style="font-size:10px;">
$Version 29.12.2023 (PV+) by ottelo.jimdo.de & Dennis<br>
$Hinweis: Die Daten werden immer um Mitternacht gespeichert!<br>
$Sofort speichern dies in Console eingeben: "script >svars"<br>
$</span></center></div>
#


Edit: Ich Antworte mir mal selbst, evtl hilft es dem einen oder anderen:

Am Ende des Scrips einfach:
>T
=>publish stat/%topic%/RESULT {"Tagesverbrauch":%2(EnFrGrid-dval)%}
=>publish stat/%topic%/RESULT {"Monatsverbrauch":%2(EnFrGrid-mval)%}
=>publish stat/%topic%/RESULT {"Tageseinspeisung":%2(EnToGrid-dval2)%}
=>publish stat/%topic%/RESULT {"Monatseinspeisung":%2(EnToGrid-mval2)%}
=>publish stat/%topic%/RESULT {"Gesamteinspeisung":%2(EnToGrid)%}

einfügen, so werden die berechneten Daten per Mqtt mit übertragen.

Hier noch mein gesammtes Script:

>D 40
M:p:sday=0 288
M:p:dcon=0 31
M:p:dprod=0 31
M:p:mcon=0 24
M:s4h=0 480
EnFrGrid=0
p:EnToGrid=0
power=0
p:mval=0
p:dval=0
p:mval2=0
p:dval2=0
tmp=0
m5=0
cstr="cnt0/12"
cstr2="cnth0/120"
utm="00d 00h 00m"
avgv=0
avgv2=0
avgvc=0
avgvc2=0
hour=0
da=1
swesp=0
swespflg=0
PToGridS=0
>B
=>sensor53 r
is(0 "Jan|Feb|Mär|Apr|Mai|Jun|Jul|Aug|Sep|Okt|Nov|Dez|")
smlj=0
#rst24h
for tmp 1 sday[-1] 1
sday[tmp]=0
next
#daysub
wcs <div id="day" style="text-align:center;width:400px"></div>
wcs <script language="JavaScript">function drawChart(){
wcs var cssc={'headerRow':'hRow','rowNumberCell':'hCol','tableCell':'tCell'};
wcs var data=google.visualization.arrayToDataTable([['Tag','Energie [kWh]',{role: 'style'}],
for tmp 1 dcon[-1] 1
if (tmp==day)
{
wcs [%tmp%,%dcon[tmp]%,'red'],
}
if (tmp<day)
{
wcs [%tmp%,%dcon[tmp]%,'green'],
}
if (tmp>day)
{
wcs [%tmp%,%dcon[tmp]%,''],
}
next
wcs ]);
wcs var options={chartArea:{left:40,width:'86%%'},legend:'none',title:'Tagesverbräuche Monatsansicht',vAxis:{format:'# kWh'},hAxis:{title:'Tag',ticks:[1,5,10,15,20,25,30]}};
wcs var chart=new google.visualization.ColumnChart(document.getElementById('day'));
wcs chart.draw(data,options);}google.charts.setOnLoadCallback(drawChart);</script>
#dayprod
wcs <div id="dayp" style="text-align:center;width:400px"></div>
wcs <script language="JavaScript">function drawChart(){
wcs var cssc={'headerRow':'hRow','rowNumberCell':'hCol','tableCell':'tCell'};
wcs var data=google.visualization.arrayToDataTable([['Tag','Energie [kWh]',{role: 'style'}],
for tmp 1 dprod[-1] 1
if (tmp==day)
{
wcs [%tmp%,%dprod[tmp]%,'red'],
}
if (tmp<day)
{
wcs [%tmp%,%dprod[tmp]%,'green'],
}
if (tmp>day)
{
wcs [%tmp%,%dprod[tmp]%,''],
}
next
wcs ]);
wcs var options={chartArea:{left:40,width:'86%%'},legend:'none',title:'Tageseinspeisung Monatsansicht',vAxis:{format:'# kWh'},hAxis:{title:'Tag',ticks:[1,5,10,15,20,25,30]}};
wcs var chart=new google.visualization.ColumnChart(document.getElementById('dayp'));
wcs chart.draw(data,options);}google.charts.setOnLoadCallback(drawChart);</script>
#monthsub
wcs <div id="month" style="text-align:center;width:400px"></div>
wcs <script language="JavaScript">function drawChart(){
wcs var cssc={'headerRow':'hRow','rowNumberCell':'hCol','tableCell':'tCell'};
wcs var data=google.visualization.arrayToDataTable([['Monat','Energie [kWh]',{role: 'style'}],
for tmp 1 12 1
if (tmp<month)
{
wcs ['%is[tmp]%',%mcon[tmp]%,'green'],
wcs ['%is[tmp]% (PV)',%mcon[tmp+12]%,'green'],
}
if (tmp==month)
{
wcs ['%is[tmp]%',%mcon[tmp]%,'red'],
wcs ['%is[tmp]% (PV)',%mcon[tmp+12]%,'red'],
}
if (tmp>month)
{
wcs ['%is[tmp]%',%mcon[tmp]%,''],
wcs ['%is[tmp]% (PV)',%mcon[tmp+12]%,''],
}
next
wcs ]);
wcs var options={chartArea:{left:40,width:'86%%'},legend:'none',title:'Monatliche Verbräuche / Solareinspeisungen Jahresansicht',vAxis:{format:'# kWh'}};
wcs var chart=new google.visualization.ColumnChart(document.getElementById('month'));
wcs chart.draw(data,options);}google.charts.setOnLoadCallback(drawChart);</script>
>D
>B
TelePeriod 30
=>sensor53 r
>M 1
+1,3,o,0,9600,SM,1
1,1-0:16.7.0*255(@1,Leistung,W,16_7_0,18
1,1-0:1.8.0*255(@1,Energie Bezug,KWh,1_8_0,3
1,1-0:36.7.0*255(@1,Leistung L1,W,36_7_0,18
1,1-0:56.7.0*255(@1,Leistung L2,W,56_7_0,18
1,1-0:76.7.0*255(@1,Leistung L3,W,76_7_0,18
1,1-0:32.7.0*255(@1,Spannung L1,V,32_7_0,1
1,1-0:52.7.0*255(@1,Spannung L2,V,52_7_0,1
1,1-0:72.7.0*255(@1,Spannung L3,V,72_7_0,1
1,1-0:96.1.0*255(@#),Identifikation,,96_1_0,0
#
>S
if (sml[2]>0)
{
smlj=1
}
if (year<2020)
{
print NTP not ready
break
}
if (secs%3==0)
{
power=sml[1]
avgv+=power
avgv2+=power
avgvc+=1
avgvc2+=1
if (power<0)
{
PToGridS-=power
}
if (swesp==1)
{
if ((power<-50) and (swespflg==0))
{
swespflg=1
}
if ((power>30) and (swespflg==1))
{
swespflg=0
}
}
}
if (secs%30==0)
{
s4h=avgv/avgvc
avgv=0
avgvc=0
cstr2="cnth"+s(1.0((((hours+20)*120)+(mins*2)+(int(secs/30)))%2880+1))+"/120"
}
if (secs%60==0)
{
hour=hours
utm=s(2.0(int(uptime/1440)))+"d "+s(2.0(int(uptime/60)%24))+"h "+s(2.0(uptime%60))+"m"
if (PToGridS>0)
{
EnToGrid+=PToGridS/1200000
PToGridS=0
}
EnFrGrid=sml[2]
dcon[day]=EnFrGrid-dval
mcon[month]=EnFrGrid-mval
dprod[day]=EnToGrid-dval2
mcon[month+12]=EnToGrid-mval2
m5=int((((hours*60)+mins)/5)+1)
sday[0]=m5
if (chg[m5]>0)
{
sday[m5]=int(avgv2/avgvc2)
avgv2=0
avgvc2=0
}
cstr="cnth"+s(1.0(((hours)*12)+int(mins/5))+1)+"/12"
if ((chg[hour]>0) and (hour==0))
{
if (day>1)
{
da=day
}
else
{
for tmp (da+1) 31 1
dprod[tmp]=0
dcon[tmp]=0
next
mval=EnFrGrid
mval2=EnToGrid
}
dval=EnFrGrid
dval2=EnToGrid
svars
}
}
>W
Tagesverbrauch:{m}%2(EnFrGrid-dval)% kWh
Monatsverbrauch:{m}%2(EnFrGrid-mval)% kWh
Tageseinspeisung:{m}%2(EnToGrid-dval2)% kWh
Monatseinspeisung:{m}%2(EnToGrid-mval2)% kWh
Gesamteinspeisung:{m}%2(EnToGrid)% kWh
Datum:{m}%s(2.0day)%.%s(2.0month)%.%s(2.0year)% - %s(2.0hours)%:%s(2.0mins)%:%s(2.0secs)%
Uptime:{m}%0utm%
$<div style="margin-left:-20px">
$<div id="chart1" style="text-align:center;width:400px"></div>
$gc(lt s4h "wr" "Leistung [W]" cstr2)
$var options = {
$chartArea:{left:60,width:'83%%'},
$legend:'none',
$vAxis:{format:'# W'},
$explorer:{actions:['dragToZoom', 'rightClickToReset']},
$series: {0: {type: 'area'}},
$title:'Verbrauch 4 Stunden [Watt]'
$};
$gc(e)
$<div id="chart2" style="text-align:center;width:400px"></div>
$gc(lt sday "wr" "Leistung [W]" cstr)
$var options = {
$chartArea:{left:60,width:'83%%'},
$legend:'none',
$vAxis:{format:'# W'},
$explorer:{actions:['dragToZoom', 'rightClickToReset']},
$series: {0: {type: 'area'}},
$title:'Verbrauch 24 Stunden [Watt]'
$};
$gc(e)
%=#daysub
%=#dayprod
%=#monthsub
$<center><span style="font-size:10px;">
$Version 29.12.2023 (PV+) by ottelo.jimdo.de & Dennis<br>
$Hinweis: Die Daten werden immer um Mitternacht gespeichert!<br>
$Sofort speichern dies in Console eingeben: "script >svars"<br>
$</span></center></div>
>T
=>publish stat/%topic%/RESULT {"Tagesverbrauch":%2(EnFrGrid-dval)%}
=>publish stat/%topic%/RESULT {"Monatsverbrauch":%2(EnFrGrid-mval)%}
=>publish stat/%topic%/RESULT {"Tageseinspeisung":%2(EnToGrid-dval2)%}
=>publish stat/%topic%/RESULT {"Monatseinspeisung":%2(EnToGrid-mval2)%}
=>publish stat/%topic%/RESULT {"Gesamteinspeisung":%2(EnToGrid)%}
#
FHEM 5.8 auf Raspberry Pi 3, HM-MOD-UART und  MapleCUN.
HM-MOD-Re-8 für Velux Rolladensteuerung.
HM-CC-RT-DN.
HM-SEC-SCo.
HM-LC-Bl1PBU-FM.

The-Holgi

Hallo,
suche gerade nach einer Lösung das die readings nicht jede Sekunde an fhem übertragen werden. Benötige auch keine Zeitangabe, die jede Sekunde mit übertragen wird. Hier mal mein script:
>D
>B
=>sensor53 r
>M 1
+1,13,s,0,9600,SML
1,77070100010800FF@100000000,Energie Bezug,kWh,1_8_0,2
1,77070100020800FF@100000000,Energie Export,kWh,2_8_0,2
1,77070100100700FF@1,Leistung,W,16_7_0,18
1,77070100240700FF@1,Leistung L1,W,36_7_0,18
1,77070100380700FF@1,Leistung L2,W,56_7_0,18
1,770701004C0700FF@1,Leistung L3,W,76_7_0,18
#
Änderung mittels periodic brachten keine Veränderung. Im Tasmota webinterface werden die readings ca. alle 3 Sekunden angezeigt.
Vielleicht kann mir jemand helfen?

Hier das device in fhem:
Internals:
   CID        DVES_7C6865
   DEF        DVES_7C6865
   FUUID      660d6e91-f33f-6571-83ac-0bf9ec1172c9d893
   IODev      myBroker2
   LASTInputDev myBroker2
   MSGCNT     272718
   NAME       MQTT2_DVES_7C6865
   NR         533
   STATE      Aktuell: 541.07 W <br> Gesamtverbrauch: 13676.80 KWh <br> Verschenkt: 147.59 KWh
   TYPE       MQTT2_DEVICE
   eventCount 270089
   myBroker2_CONN myBroker2_192.168.178.79_54280
   myBroker2_MSGCNT 272718
   myBroker2_TIME 2024-04-04 11:37:53
   Helper:
     DBLOG:
       power:
         myDbLog:
           TIME       1712221895.61423
           VALUE      2054.97
   OLDREADINGS:
   READINGS:
     2024-04-04 11:26:23   BootCount       15
     2024-04-04 11:26:23   FallbackTopic   cmnd/DVES_7C6865_fb/
     2024-04-04 11:26:23   GroupTopic      cmnd/tasmotas/
     2024-04-04 11:37:47   Heap            11
     2024-04-04 11:26:23   Hostname        tasmota-7C6865-2149
     2024-04-03 16:59:12   IODev           myBroker2
     2024-04-04 11:26:23   IPAddress       192.168.178.79
     2024-04-04 11:26:23   LWT             Online
     2024-04-04 11:37:47   LoadAvg         19
     2024-04-04 11:06:07   LogHost         
     2024-04-04 11:06:07   LogPort         514
     2024-04-04 11:26:23   Module          Generic
     2024-04-04 11:37:47   MqttCount       1
     2024-04-04 11:06:07   MqttLog         2
     2024-04-04 11:26:23   RestartReason   Software/System restart
     2024-04-04 11:37:53   SML_16_7_0      541.07
     2024-04-04 11:25:54   SML_1_8_0       13676.80
     2024-04-03 17:06:50   SML_1_8_1       1366802948.874
     2024-04-03 17:06:50   SML_1_8_2       101700.000
     2024-04-04 11:25:54   SML_2_8_0       147.59
     2024-04-03 17:41:50   SML_32_7_0      237.4
     2024-04-04 11:37:53   SML_36_7_0      36.92
     2024-04-03 17:41:50   SML_52_7_0      237.2
     2024-04-04 11:37:53   SML_56_7_0      123.53
     2024-04-03 17:41:50   SML_72_7_0      238.5
     2024-04-04 11:37:53   SML_76_7_0      380.62
     2024-04-04 11:26:03   SML_CMD         restart
     2024-04-04 06:54:16   SaveData        off
     2024-04-04 11:37:53   Script_p_avg    479
     2024-04-04 11:37:53   Script_power    541
     2024-04-04 11:06:07   SerialLog_0_Active 0
     2024-04-03 17:01:18   SetOption26     on
     2024-04-04 11:37:47   Sleep           50
     2024-04-04 11:37:47   SleepMode       Dynamic
     2024-04-03 17:01:17   StateText1      off
     2024-04-03 17:01:17   StateText2      on
     2024-04-03 17:01:17   StateText3      toggle
     2024-04-03 17:01:17   StateText4      hold
     2024-04-04 11:06:07   SysLog_0_Active 0
     2024-04-04 11:06:07   TelePeriod      10
     2024-04-04 11:37:53   Time            2024-04-04T11:37:53
     2024-04-04 11:37:47   Uptime          0T00:11:31
     2024-04-04 11:37:47   UptimeSec       691
     2024-04-04 11:26:23   Version         13.3.0(tasmota)
     2024-04-04 11:06:07   WebLog          2
     2024-04-04 11:26:23   WebServerMode   Admin
     2024-04-04 11:37:47   Wifi_AP         1
     2024-04-04 11:37:47   Wifi_BSSId      2C:91:AB:51:80:AC
     2024-04-04 11:37:47   Wifi_Channel    1
     2024-04-04 11:37:47   Wifi_Downtime   0T00:00:05
     2024-04-04 11:37:47   Wifi_LinkCount  1
     2024-04-04 11:37:47   Wifi_Mode       11n
     2024-04-04 11:37:47   Wifi_RSSI       72
     2024-04-04 11:37:47   Wifi_SSId       TheGate
     2024-04-04 11:37:47   Wifi_Signal     -64
     2024-04-03 17:01:17   attrTemplateVersion 20210523
     2024-04-04 11:11:35   power           2054.97
   hmccu:
Attributes:
   DbLogExclude 1
   alias      Stromzaehler
   autocreate 0
   comment    NOTE: For on-for-timer SetExtensions are used. You may add on-for-timer option running on the device. The following is limited to 1h max duration, but will not affect future simple "on" commands:<br>on-for-timer {my $duration = $EVTPART1*10; 'cmnd/cmnd/tasmota_7C6865/Backlog POWER1 1; delay '.$duration.'; POWER1 0'}<br>See the "Praxisbeispiele" in the wiki for "pulseTime1" alternative option and it's restrictions.
   event-on-change-reading .*
   genericDeviceType ignore
   icon       arduino
   model      tasmota_basic_state_power1
   readingList tele/tasmota_7C6865/LWT:.* LWT
  tele/tasmota_7C6865/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }
  tele/tasmota_7C6865/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }
  tele/tasmota_7C6865/INFO.:.* { $EVENT =~ m,^..Info[1-3]..(.+).$, ?  json2nameValue($1,'',$JSONMAP) : json2nameValue($EVENT,'',$JSONMAP) }
  tele/tasmota_7C6865/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }
  stat/tasmota_7C6865/POWER1:.* state
  stat/tasmota_7C6865/RESULT:.* { json2nameValue($EVENT,'',$JSONMAP) }
   room       MQTT2_DEVICE,Photovoltaik
   setList    setOtaUrl:textField cmnd/tasmota_7C6865/OtaUrl $EVTPART1
  upgrade:noArg   cmnd/tasmota_7C6865/upgrade 1
   stateFormat Aktuell: SML_16_7_0 W <br> Gesamtverbrauch: SML_1_8_0 KWh <br> Verschenkt: SML_2_8_0 KWh
Gruß Holger
Raspberry Pi 5

RalfRog

Hallo Holger

In Tasmota "Logging konfigurieren" der Parameter "Telemetrieperiode (300)" - bei mir 5 minuten = 300 Sekunden, was du halt haben willst.
In diesem Intervall schickt dann Tasmota die Daten an FHEM.

Du kannst auch in der Konsole sehen wie oft die Daten raus gehen.

Gruß Ralf
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder