diff --git a/Tasmota SML Script + Chart + PV - ohne 4h 24h Diagramm.txt b/Tasmota SML Script + Chart + PV - ohne 4h 24h Diagramm.txt
new file mode 100644
index 0000000..f72e051
--- /dev/null
+++ b/Tasmota SML Script + Chart + PV - ohne 4h 24h Diagramm.txt
@@ -0,0 +1,335 @@
+>D 40
+; IP for external ScriptEditor
+IP=192.168.178.31
+
+
+; Beschreibung:
+; Skript Version ganz unten
+; Tasmota SML Skript mit Google Chart (Diagramme)
+; OHNE 2 Liniendiagramme (siehe andere Skripte von mir)
+; Tabellen mit Anzeige des Netzbezugs bzw. Netzeinspeisung (bei PV) pro Tag und pro Monat
+; Diagramme und Tabelle benötigen ca. 60s nach einem Neustart um korrekt dargestellt zu werden
+; Tasmota muss mit dem Internet verbunden sein um die aktuelle Uhrzeit via NTP zu erhalten. Ansonsten muss das Skript angepasst werden.
+; Optional im Skript enthalten: Schalte zweiten ESP (z.B. Poolpumpe) bei Netzeinspeisung
+
+; Anleitung:
+; ESP32: Dieses Skript einfach in den internen Editor einfuegen und ggf. diese Kommentare entfernen um Platz zu sparen. IP Zeile oben loeschen.
+; ESP8266: ScriptEditor runterladen um dieses Skript auf den ESP zu uebertragen. Der Editor entfernt alle Kommentare und leere Zeilen
+; https://tasmota.github.io/docs/Scripting-Language/#optional-external-editor
+; IP eures ESPs oben im Script eingeben, damit der Editor das Skript korrekt senden kann
+; Skript an euren Zaehler anpassen:
+; Runterscrollen zu der ;-- SML -- Sektion und die Zeilen anpassen.
+; https://tasmota.github.io/docs/Smart-Meter-Interface/
+; Damit die Diagramme und Tabellen beim ersten Einrichten funktionieren folgendes in die Console auf eurem ESP eingeben (; am Anfang entfernen)
+;backlog script >dval=EnFrGrid; script >dval2=EnToGrid; script >dcon={0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}; script >dprod={0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0};
+;backlog script >mval=EnFrGrid; script >mval2=EnToGrid; script >mcon={0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0};
+;backlog script >yval=EnFrGrid; script >yval2=EnToGrid; Zaehlerstand beim Jahreswechsel. Statt EnFrGrid / EnToGrid koennt ihr dort auch euren alten Zaehlerstand eingeben, falls ihr diesen am Ende des Jahres oder Neujahr notiert habt (kWh).
+;script >svars
+; Um spaeter fehlende oder falsche Werte in den Tabellen zu aendern, koennen folgende Befehle in der Console eingegeben werden:
+; script?var beliebige Variable auslesen z.B. script?dcon[1] (erster Tag in Monatstabelle lesen)
+; script >var=1 beliebige Variable schreiben z.B. script >dcon[1]=10 (erster Tag in Monatstabelle = 10 kWh)
+; script >svars Alle Werte/Diagramme speichern (passiert sonst immer um Mitternacht)
+
+
+; -- ARRAYS --
+; Tagesnetzbezug Tabelle 1-31
+M:p:dcon=0 31
+; Tagesnetzeinspeisung Tabelle 1-31
+M:p:dprod=0 31
+; Monatsverbrauch Tabelle 1-12, Einspeisung 13-24
+M:p:mcon=0 24
+
+; -- VARS --
+; Netzbezug [kWh]
+EnFrGrid=0
+; Netzeinspeisung [kWh]
+EnToGrid=0
+; Aktuelle Leistung +/- [W]
+power=0
+; Tages, Monats, Jahres Verbrauch / Einspeisung
+p:mval=0
+p:dval=0
+p:mval2=0
+p:dval2=0
+p:yval=0
+p:yval2=0
+;p:vn=12000 optional um per Slider Y-Achse Werte zu begrenzen
+tmp=0
+utm="00d 00h 00m"
+avgv2=0
+avgvc2=0
+hour=0
+da=1
+swesp=0
+swespflg=0
+power2=0
+
+
+; -- BOOT --
+>B
+=>otaurl !!NEVER UPGRADE VIA WEB SERVER!!
+=>sensor53 r
+is(0 "Jan|Feb|Mär|Apr|Mai|Jun|Jul|Aug|Sep|Okt|Nov|Dez|")
+;Deaktiviere MQTT beim Start, verhindert das falsche Werte gesendet werden
+smlj=0
+
+
+; -- SUBS --
+
+; Tagesverbrauch Tabelle
+#daysub
+if wm>0 {
+wcs
+wcs
+}
+
+; Tageseinspeisung PV Tabelle
+#dayprod
+if wm>0 {
+wcs
+wcs
+}
+
+; Netzverbrauch und Einspeisung Monat Tabelle
+#monthsub
+if wm>0 {
+wcs
+wcs
+}
+
+
+;-- SML --
+>M 1
+;1=meter1 14=GPIO14 s=SML 0=filterOff 16=filterOn 9600=baud MT175=Name
++1,14,s,16,9600,SML
+;1. line = sml[1] (aktuelle Leistung W), 2. = sml[2] (Netzbezug kWh), 3. = sml[3] (Netzeinspeisung kWh)
+1,77070100100700ff@1,Leistung,W,Power_curr,0
+1,77070100010800ff@1000,Verbrauch,KWh,Total_in,2
+1,77070100020800ff@1000,Netzeinspeisung,KWh,Total_out,2
+;optional - Falls diese Werte von deinem Zaehler gesendet werden
+;1,77070100200700ff@1,Spannung,V,Volt,1
+;1,770701001f0700ff@1,Strom,A,Current,2
+;1,770701000e0700ff@1,Frequenz,Hz,Frequency,1
+;DWS74 Bugfix
+;1,=so2,1
+#
+
+
+; -- JEDE SEKUNDE --
+>S
+; Start MQTT erst wenn Daten vom Stromzaehler kommen
+if (sml[2]>0)
+{
+ smlj=1
+}
+
+; Warte auf NTP
+if (year<2020)
+{
+ print NTP not ready
+ break
+}
+
+; alle 3s
+if (secs%3==0)
+{
+ ; Aktuelle Leistung [W]
+ ;power=rnd(1000)-500 google chart testing
+ ; kopiere Leistung vom Zaehler (aus SML Variable)
+ power=sml[1]
+ ; Optional: gemittelte Leistung fuer opendtu-onbattery DPL: http://192.168.178.31/cm?user=admin&password=joke&cmnd=script?power2
+ power2=(0.9*power2)+((1-0.9)*power)
+
+ ; Schalte anderen ESP bei Netzeinspeisung. Schaue in die >W Sektion.
+ if (swesp==1)
+ {
+ if ((power2<-300) and (swespflg==0))
+ {
+ ;=>websend [192.168.0.50] power ON
+ ;print power ON %power2%W
+ swespflg=1
+ }
+ if ((power2>100) and (swespflg==1))
+ {
+ ;=>websend [192.168.0.50] power OFF
+ ;print power OFF %power2%W
+ swespflg=0
+ }
+ }
+}
+
+; alle 60s
+if (secs%60==0)
+{
+ hour=hours
+ ;Zeit seit letztem Boot
+ utm=s(2.0(int(uptime/1440)))+"d "+s(2.0(int(uptime/60)%24))+"h "+s(2.0(uptime%60))+"m"
+
+ ; kopiere Netzbezug [kWh] vom Zaehler (aus SML Variable)
+ EnFrGrid=sml[2]
+ ; kopiere Netzeinspeisung [kWh] vom Zaehler (aus SML Variable)
+ EnToGrid=sml[3]
+ ; Tagesverbrauch [kWh]
+ dcon[day]=EnFrGrid-dval
+ ; Monatsverbrauch [kWh]
+ mcon[month]=EnFrGrid-mval
+ ; Tageseinspeisung [kWh]
+ dprod[day]=EnToGrid-dval2
+ ; Monatseinspeisung [kWh]
+ mcon[month+12]=EnToGrid-mval2
+
+ ;=>publish stat/%topic%/script/consday %2(dcon[day])%
+ ;=>publish stat/%topic%/script/yieldday %2(dprod[day])%
+ ;=>publish stat/%topic%/script/consmonth %2(mcon[month])%
+ ;=>publish stat/%topic%/script/yieldmonth %2(mcon[month+12])%
+ ;=>publish stat/%topic%/script/consyear %2(yval)%
+ ;=>publish stat/%topic%/script/yielyear %2(yval2)%
+
+ ; Tagesverbrauch & Einspeisung Berechnung um Mitternacht
+ if ((chg[hour]>0) and (hour==0))
+ {
+ if (day>1)
+ {
+ da=day
+ }
+ else
+ {
+ ; Monatswechsel
+ for tmp (da+1) 31 1
+ dprod[tmp]=0
+ dcon[tmp]=0
+ next
+ ; monthly values
+ mval=EnFrGrid
+ mval2=EnToGrid
+ }
+ if (chg[year]>0)
+ {
+ ; Jahreswechsel
+ yval=EnFrGrid
+ yval2=EnToGrid
+ }
+ ; daily values
+ dval=EnFrGrid
+ dval2=EnToGrid
+ ; nur 1x um Mitternacht speichern
+ svars
+ }
+}
+
+
+; WEB INTERFACE
+>W
+; Auto reload
+;$
+
+; web button
+; Schalte anderen ESP bei Netzeinspeisung. Schaue in die >S Sektion.
+;bu(swesp "PV Steckdose aktivieren" "PV Steckdose deaktivieren")
+; optional um per Slider Y-Achse Werte zu begrenzen, suche im Skript nach vn
+;sl(4000 20000 vn "4 kW" "12 kW" "20 kW")
+
+; Filtered power
+Leistung (gefiltert){m}%power2% W
+
+; Verbrauch
+Tagesverbrauch{m}%2(EnFrGrid-dval)% kWh
+Monatsverbrauch{m}%2(EnFrGrid-mval)% kWh
+Jahresverbrauch{m}%2(EnFrGrid-yval)% kWh
+
+; Einspeisung (PV)
+Tageseinspeisung{m}%2(EnToGrid-dval2)% kWh
+Monatseinspeisung{m}%2(EnToGrid-mval2)% kWh
+Jahreseinspeisung{m}%2(EnToGrid-yval2)% kWh
+
+; Zeit
+Datum{m}%s(2.0day)%.%s(2.0month)%.%s(2.0year)% - %s(2.0hours)%:%s(2.0mins)%:%s(2.0secs)%
+Uptime{m}%0utm%
+$
+
+; Lade google chart javascript (muss manuell hier geladen werden, wenn im Skript nicht gc() verwendet wird!!)
+$
+$
+
+; Einfacher Saeulenchart mit 2 Reihen
+;$
+;$gc(c dprod "wr" "kWh" "cnt1" "Tägliche Einspeisung")
+
+; Tagesverbrauch und Einspeisung Tabelle
+%=#daysub
+%=#dayprod
+
+; Netzverbrauch und Einspeisung Monat Tabelle
+%=#monthsub
+
+$
+$Version 11.11.2024 (PV no4/24) by ottelo.jimdo.de
+$Hinweis: Die Daten werden immer um Mitternacht gespeichert!
+$Sofort speichern dies in Console eingeben: "script >svars"
+$
+
+; -- END SCRIPT --
+#
\ No newline at end of file
diff --git "a/Tasmota SML Script + Chart + PV f\303\274r 1-Richtungsz\303\244hler.txt" "b/Tasmota SML Script + Chart + PV f\303\274r 1-Richtungsz\303\244hler.txt"
new file mode 100644
index 0000000..2794271
--- /dev/null
+++ "b/Tasmota SML Script + Chart + PV f\303\274r 1-Richtungsz\303\244hler.txt"
@@ -0,0 +1,430 @@
+>D 40
+; IP for external ScriptEditor
+IP=192.168.178.31
+
+
+; Beschreibung:
+; Skript Version ganz unten
+; Tasmota SML Skript mit Google Chart (Diagramme)
+; 2 Liniendiagramme: Leistung der letzten 4 Stunden (fein aufgeloest) und Leistung der letzten 24h (grob aufgeloest)
+; Das 4h Diagramm wird nicht gespeichert und ist nach jedem Neustart neu befuellt
+; Tabellen mit Anzeige des Netzbezugs bzw. Netzeinspeisung (bei PV) pro Tag und pro Monat
+; Diagramme und Tabelle benötigen ca. 60s nach einem Neustart um korrekt dargestellt zu werden
+; Tasmota muss mit dem Internet verbunden sein um die aktuelle Uhrzeit via NTP zu erhalten. Ansonsten muss das Skript angepasst werden.
+; Optional im Skript enthalten: Schalte zweiten ESP (z.B. Poolpumpe) bei Netzeinspeisung
+
+; Anleitung:
+; ESP32: Dieses Skript einfach in den internen Editor einfuegen und ggf. diese Kommentare entfernen um Platz zu sparen. IP Zeile oben loeschen.
+; ESP8266: ScriptEditor runterladen um dieses Skript auf den ESP zu uebertragen. Der Editor entfernt alle Kommentare und leere Zeilen
+; https://tasmota.github.io/docs/Scripting-Language/#optional-external-editor
+; IP eures ESPs oben im Script eingeben, damit der Editor das Skript korrekt senden kann
+; Skript an euren Zaehler anpassen:
+; Runterscrollen zu der ;-- SML -- Sektion und die Zeilen anpassen.
+; https://tasmota.github.io/docs/Smart-Meter-Interface/
+; Damit die Diagramme und Tabellen beim ersten Einrichten funktionieren folgendes in die Console auf eurem ESP eingeben (; am Anfang entfernen)
+;backlog script >dval=EnFrGrid; script >dval2=EnToGrid; script >dcon={0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}; script >dprod={0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0};
+;backlog script >mval=EnFrGrid; script >mval2=EnToGrid; script >mcon={0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0};
+;backlog script >yval=EnFrGrid; script >yval2=EnToGrid; Zaehlerstand beim Jahreswechsel. Statt EnFrGrid / EnToGrid koennt ihr dort auch euren alten Zaehlerstand eingeben, falls ihr diesen am Ende des Jahres oder Neujahr notiert habt (kWh).
+;script >=#rst24h
+;script >svars
+; Um spaeter fehlende oder falsche Werte in den Tabellen zu aendern, koennen folgende Befehle in der Console eingegeben werden:
+; script?var beliebige Variable auslesen z.B. script?dcon[1] (erster Tag in Monatstabelle lesen)
+; script >var=1 beliebige Variable schreiben z.B. script >dcon[1]=10 (erster Tag in Monatstabelle = 10 kWh)
+; script >=#rst24h Loesche 24h Diagramm
+; script >svars Alle Werte/Diagramme speichern (passiert sonst immer um Mitternacht)
+
+
+; -- ARRAYS --
+; 24h power chart
+M:p:sday=0 288
+; Tagesnetzbezug Tabelle 1-31
+M:p:dcon=0 31
+; Tagesnetzeinspeisung Tabelle 1-31
+M:p:dprod=0 31
+; Monatsverbrauch Tabelle 1-12, Einspeisung 13-24
+M:p:mcon=0 24
+; 4h Chart, Neuer Wert alle 30s
+M:s4h=0 480
+
+; -- VARS --
+; Netzbezug [kWh]
+EnFrGrid=0
+; Netzeinspeisung [kWh]
+p:EnToGrid=0
+; Aktuelle Leistung +/- [W]
+power=0
+; Tages, Monats, Jahres Verbrauch / Einspeisung
+p:mval=0
+p:dval=0
+p:mval2=0
+p:dval2=0
+p:yval=0
+p:yval2=0
+;p:vn=12000 optional um per Slider Y-Achse Werte zu begrenzen
+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
+power2=0
+
+
+; -- BOOT --
+>B
+=>otaurl !!NEVER UPGRADE VIA WEB SERVER!!
+=>sensor53 r
+is(0 "Jan|Feb|Mär|Apr|Mai|Jun|Jul|Aug|Sep|Okt|Nov|Dez|")
+;Deaktiviere MQTT beim Start, verhindert das falsche Werte gesendet werden
+smlj=0
+
+
+; -- SUBS --
+; Resette 24h Chart
+#rst24h
+for tmp 1 sday[-1] 1
+ sday[tmp]=0
+next
+
+; Tagesverbrauch Tabelle
+#daysub
+if wm>0 {
+wcs
+wcs
+}
+
+; Tageseinspeisung PV Tabelle
+#dayprod
+if wm>0 {
+wcs
+wcs
+}
+
+; Netzverbrauch und Einspeisung Monat Tabelle
+#monthsub
+if wm>0 {
+wcs
+wcs
+}
+
+
+;-- SML --
+>M 1
+;1=meter1 14=GPIO14 s=SML 0=filterOff 16=filterOn 9600=baud MT175=Name
++1,14,s,16,9600,MT175
+;1. line = sml[1] (aktuelle Leistung W), 2. = sml[2] (Netzbezug kWh), 3. = sml[3] (Netzeinspeisung kWh)
+1,77070100100700ff@1,Leistung,W,Power_curr,0
+1,77070100010800ff@1000,Verbrauch,KWh,Total_in,2
+;1,77070100020800ff@1000,Netzeinspeisung,KWh,Total_out,2 entfaellt beim 1-Richtungszaehler
+;optional - Falls diese Werte von deinem Zaehler gesendet werden
+;1,77070100200700ff@1,Spannung,V,Volt,1
+;1,770701001f0700ff@1,Strom,A,Current,2
+;1,770701000e0700ff@1,Frequenz,Hz,Frequency,1
+;DWS74 Bugfix
+;1,=so2,1
+#
+
+
+; -- JEDE SEKUNDE --
+>S
+; Start MQTT erst wenn Daten vom Stromzaehler kommen
+if (sml[2]>0)
+{
+ smlj=1
+}
+
+; Warte auf NTP
+if (year<2020)
+{
+ print NTP not ready
+ break
+}
+
+; alle 3s
+if (secs%3==0)
+{
+ ; Aktuelle Leistung [W]
+ ;power=rnd(1000)-500 google chart testing
+ ; kopiere Leistung vom Zaehler (aus SML Variable)
+ power=sml[1]
+ ; Leistung aufsummieren 4h/24h Diagramm
+ avgv+=power
+ avgv2+=power
+ avgvc+=1
+ avgvc2+=1
+ ; Optional: gemittelte Leistung fuer opendtu-onbattery DPL: http://192.168.178.31/cm?user=admin&password=joke&cmnd=script?power2
+ power2=(0.9*power2)+((1-0.9)*power)
+
+ if (power<0)
+ {
+ ;Virtueller Einspeisungszaehler
+ ;eingespeiste Leistung wird alle 3s summiert
+ PToGridS-=power
+ }
+
+ ; Schalte anderen ESP bei Netzeinspeisung. Schaue in die >W Sektion.
+ if (swesp==1)
+ {
+ if ((power2<-300) and (swespflg==0))
+ {
+ ;=>websend [192.168.0.50] power ON
+ ;print power ON %power2%W
+ swespflg=1
+ }
+ if ((power2>100) and (swespflg==1))
+ {
+ ;=>websend [192.168.0.50] power OFF
+ ;print power OFF %power2%W
+ swespflg=0
+ }
+ }
+}
+
+; alle 30s
+if (secs%30==0)
+{
+ ; 4h chart. idx wird automatisch gesetzt
+ s4h=avgv/avgvc
+ avgv=0
+ avgvc=0
+
+ ; Setze 4h Chart X-Achse alle 30s => /120 Werte pro Stunde. Arraygroesse = 480
+ ; tasmota calc [hh:mm] via cnthX/Y. mm = X%Y * 60/Y. hh = X/Y
+ cstr2="cnth"+s(1.0((((hours+20)*120)+(mins*2)+(int(secs/30)))%2880+1))+"/120"
+}
+
+; alle 60s
+if (secs%60==0)
+{
+ hour=hours
+ ;Zeit seit letztem Boot
+ 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)
+ {
+ ;eingespeiste momentane Leistung wird alle 3s summiert = 20Werte pro min
+ ;hier wird nun alle 60s aus der summierten Leistung die Energie für 1min in kWh errechnet
+ ;und zum Gesamtzähler EnToGrid addiert
+ EnToGrid+=PToGridS/1200000
+ PToGridS=0
+ }
+
+ ; kopiere Netzbezug [kWh] vom Zaehler (aus SML Variable)
+ EnFrGrid=sml[2]
+ ; kopiere Netzeinspeisung [kWh] vom Zaehler (aus SML Variable) - nicht beim 1-Richtungszaehler
+ ;EnToGrid=sml[3]
+ ; Tagesverbrauch [kWh]
+ dcon[day]=EnFrGrid-dval
+ ; Monatsverbrauch [kWh]
+ mcon[month]=EnFrGrid-mval
+ ; Tageseinspeisung [kWh]
+ dprod[day]=EnToGrid-dval2
+ ; Monatseinspeisung [kWh]
+ mcon[month+12]=EnToGrid-mval2
+
+ ;=>publish stat/%topic%/script/consday %2(dcon[day])%
+ ;=>publish stat/%topic%/script/yieldday %2(dprod[day])%
+ ;=>publish stat/%topic%/script/consmonth %2(mcon[month])%
+ ;=>publish stat/%topic%/script/yieldmonth %2(mcon[month+12])%
+ ;=>publish stat/%topic%/script/yieldtotal %2(EnToGrid)%
+ ;=>publish stat/%topic%/script/consyear %2(yval)%
+ ;=>publish stat/%topic%/script/yielyear %2(yval2)%
+
+ ; 24h Chart. Berechne Durschnittsleistung [W] der letzten 5min => ins Array[1-288]
+ m5=int((((hours*60)+mins)/5)+1)
+ ; set idx (pointer starts from 0)
+ sday[0]=m5
+ if (chg[m5]>0)
+ {
+ sday[m5]=int(avgv2/avgvc2)
+ avgv2=0
+ avgvc2=0
+ }
+
+ ; Aktualisiere 24h Chart alle 5Min => Arraygröße 288
+ ; tasmota calc [hh:mm] via cnthX/Y. mm = X%Y * 60/Y. hh = X/Y
+ cstr="cnth"+s(1.0(((hours)*12)+int(mins/5))+1)+"/12"
+
+ ; Tagesverbrauch & Einspeisung Berechnung um Mitternacht
+ if ((chg[hour]>0) and (hour==0))
+ {
+ if (day>1)
+ {
+ da=day
+ }
+ else
+ {
+ ; Monatswechsel
+ for tmp (da+1) 31 1
+ dprod[tmp]=0
+ dcon[tmp]=0
+ next
+ ; monthly values
+ mval=EnFrGrid
+ mval2=EnToGrid
+ }
+ if (chg[year]>0)
+ {
+ ; Jahreswechsel
+ yval=EnFrGrid
+ yval2=EnToGrid
+ }
+ ; daily values
+ dval=EnFrGrid
+ dval2=EnToGrid
+ ; nur 1x um Mitternacht speichern
+ svars
+ }
+}
+
+
+; WEB INTERFACE
+>W
+; Auto reload
+;$
+
+; web button
+; Schalte anderen ESP bei Netzeinspeisung. Schaue in die >S Sektion.
+;bu(swesp "PV Steckdose aktivieren" "PV Steckdose deaktivieren")
+; optional um per Slider Y-Achse Werte zu begrenzen, suche im Skript nach vn
+;sl(4000 20000 vn "4 kW" "12 kW" "20 kW")
+
+; Filtered power
+Leistung (gefiltert){m}%power2% W
+
+; Verbrauch
+Tagesverbrauch{m}%2(EnFrGrid-dval)% kWh
+Monatsverbrauch{m}%2(EnFrGrid-mval)% kWh
+Jahresverbrauch{m}%2(EnFrGrid-yval)% kWh
+
+; Einspeisung (PV)
+Tageseinspeisung{m}%2(EnToGrid-dval2)% kWh
+Monatseinspeisung{m}%2(EnToGrid-mval2)% kWh
+Gesamteinspeisung{m}%2(EnToGrid)% kWh
+Jahreseinspeisung{m}%2(EnToGrid-yval2)% kWh
+
+; Zeit
+Datum{m}%s(2.0day)%.%s(2.0month)%.%s(2.0year)% - %s(2.0hours)%:%s(2.0mins)%:%s(2.0secs)%
+Uptime{m}%0utm%
+$
+
+; 4h Leistung Diagramm
+$
+$gc(lt s4h "wr" "Leistung [W]" cstr2)
+$var options = {
+$chartArea:{left:60,width:'83%%'},
+$legend:'none',
+;$vAxis:{format:'# W',viewWindow:{max:%vn%}}, optional um per Slider Y-Achse Werte zu begrenzen, suche im Skript nach vn
+;$vAxis:{format:'# W',viewWindow:{max:5000}}, optional um Y-Achse Werte auf 5kW zu begrenzen
+$vAxis:{format:'# W'},
+$explorer:{actions:['dragToZoom', 'rightClickToReset']},
+$series: {0: {type: 'area'}},
+$title:'Verbrauch 4 Stunden [Watt]'
+$};
+$gc(e)
+
+; 24h Leistung Diagramm
+$
+$gc(lt sday "wr" "Leistung [W]" cstr)
+$var options = {
+$chartArea:{left:60,width:'83%%'},
+$legend:'none',
+;$vAxis:{format:'# W',viewWindow:{max:%vn%}}, optional um per Slider Y-Achse Werte zu begrenzen, suche im Skript nach vn
+;$vAxis:{format:'# W',viewWindow:{max:5000}}, optional um Y-Achse Werte auf 5kW zu begrenzen
+$vAxis:{format:'# W'},
+$explorer:{actions:['dragToZoom', 'rightClickToReset']},
+$series: {0: {type: 'area'}},
+$title:'Verbrauch 24 Stunden [Watt]'
+$};
+$gc(e)
+
+; Einfacher Saeulenchart mit 2 Reihen
+;$
+;$gc(c dprod "wr" "kWh" "cnt1" "Tägliche Einspeisung")
+
+; Tagesverbrauch und Einspeisung Tabelle
+%=#daysub
+%=#dayprod
+
+; Netzverbrauch und Einspeisung Monat Tabelle
+%=#monthsub
+
+$
+$Version 11.11.2024 (PV-1Zaehler) by ottelo.jimdo.de
+$Hinweis: Die Daten werden immer um Mitternacht gespeichert!
+$Sofort speichern dies in Console eingeben: "script >svars"
+$
+
+; -- END SCRIPT --
+#
\ No newline at end of file
diff --git a/Tasmota SML Script + Chart + PV.txt b/Tasmota SML Script + Chart + PV.txt
new file mode 100644
index 0000000..9919bd4
--- /dev/null
+++ b/Tasmota SML Script + Chart + PV.txt
@@ -0,0 +1,410 @@
+>D 40
+; IP for external ScriptEditor
+IP=192.168.178.31
+
+
+; Beschreibung:
+; Skript Version ganz unten
+; Tasmota SML Skript mit Google Chart (Diagramme)
+; 2 Liniendiagramme: Leistung der letzten 4 Stunden (fein aufgeloest) und Leistung der letzten 24h (grob aufgeloest)
+; Das 4h Diagramm wird nicht gespeichert und ist nach jedem Neustart neu befuellt
+; Tabellen mit Anzeige des Netzbezugs bzw. Netzeinspeisung (bei PV) pro Tag und pro Monat
+; Diagramme und Tabelle benötigen ca. 60s nach einem Neustart um korrekt dargestellt zu werden
+; Tasmota muss mit dem Internet verbunden sein um die aktuelle Uhrzeit via NTP zu erhalten. Ansonsten muss das Skript angepasst werden.
+; Optional im Skript enthalten: Schalte zweiten ESP (z.B. Poolpumpe) bei Netzeinspeisung
+
+; Anleitung:
+; ESP32: Dieses Skript einfach in den internen Editor einfuegen und ggf. diese Kommentare entfernen um Platz zu sparen. IP Zeile oben loeschen.
+; ESP8266: ScriptEditor runterladen um dieses Skript auf den ESP zu uebertragen. Der Editor entfernt alle Kommentare und leere Zeilen
+; https://tasmota.github.io/docs/Scripting-Language/#optional-external-editor
+; IP eures ESPs oben im Script eingeben, damit der Editor das Skript korrekt senden kann
+; Skript an euren Zaehler anpassen:
+; Runterscrollen zu der ;-- SML -- Sektion und die Zeilen anpassen.
+; https://tasmota.github.io/docs/Smart-Meter-Interface/
+; Damit die Diagramme und Tabellen beim ersten Einrichten funktionieren folgendes in die Console auf eurem ESP eingeben (; am Anfang entfernen)
+;backlog script >dval=EnFrGrid; script >dval2=EnToGrid; script >dcon={0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}; script >dprod={0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0};
+;backlog script >mval=EnFrGrid; script >mval2=EnToGrid; script >mcon={0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0};
+;backlog script >yval=EnFrGrid; script >yval2=EnToGrid; Zaehlerstand beim Jahreswechsel. Statt EnFrGrid / EnToGrid koennt ihr dort auch euren alten Zaehlerstand eingeben, falls ihr diesen am Ende des Jahres oder Neujahr notiert habt (kWh).
+;script >=#rst24h
+;script >svars
+; Um spaeter fehlende oder falsche Werte in den Tabellen zu aendern, koennen folgende Befehle in der Console eingegeben werden:
+; script?var beliebige Variable auslesen z.B. script?dcon[1] (erster Tag in Monatstabelle lesen)
+; script >var=1 beliebige Variable schreiben z.B. script >dcon[1]=10 (erster Tag in Monatstabelle = 10 kWh)
+; script >=#rst24h Loesche 24h Diagramm
+; script >svars Alle Werte/Diagramme speichern (passiert sonst immer um Mitternacht)
+
+
+; -- ARRAYS --
+; 24h power chart
+M:p:sday=0 288
+; Tagesnetzbezug Tabelle 1-31
+M:p:dcon=0 31
+; Tagesnetzeinspeisung Tabelle 1-31
+M:p:dprod=0 31
+; Monatsverbrauch Tabelle 1-12, Einspeisung 13-24
+M:p:mcon=0 24
+; 4h Chart, Neuer Wert alle 30s
+M:s4h=0 480
+
+; -- VARS --
+; Netzbezug [kWh]
+EnFrGrid=0
+; Netzeinspeisung [kWh]
+EnToGrid=0
+; Aktuelle Leistung +/- [W]
+power=0
+; Tages, Monats, Jahres Verbrauch / Einspeisung
+p:mval=0
+p:dval=0
+p:mval2=0
+p:dval2=0
+p:yval=0
+p:yval2=0
+;p:vn=12000 optional um per Slider Y-Achse Werte zu begrenzen
+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
+power2=0
+
+
+; -- BOOT --
+>B
+=>otaurl !!NEVER UPGRADE VIA WEB SERVER!!
+=>sensor53 r
+is(0 "Jan|Feb|Mär|Apr|Mai|Jun|Jul|Aug|Sep|Okt|Nov|Dez|")
+;Deaktiviere MQTT beim Start, verhindert das falsche Werte gesendet werden
+smlj=0
+
+
+; -- SUBS --
+; Resette 24h Chart
+#rst24h
+for tmp 1 sday[-1] 1
+ sday[tmp]=0
+next
+
+; Tagesverbrauch Tabelle
+#daysub
+if wm>0 {
+wcs
+wcs
+}
+
+; Tageseinspeisung PV Tabelle
+#dayprod
+if wm>0 {
+wcs
+wcs
+}
+
+; Netzverbrauch und Einspeisung Monat Tabelle
+#monthsub
+if wm>0 {
+wcs
+wcs
+}
+
+;-- SML --
+>M 1
+;1=meter1 14=GPIO14 s=SML 0=filterOff 16=filterOn 9600=baud MT175=Name
++1,5,s,16,9600,MT175,4
+;1. line = sml[1] (aktuelle Leistung W), 2. = sml[2] (Netzbezug kWh), 3. = sml[3] (Netzeinspeisung kWh)
+1,77070100100700ff@1,Leistung,W,Power_curr,0
+1,77070100010800ff@1000,Verbrauch,KWh,Total_in,2
+1,77070100020800ff@1000,Netzeinspeisung,KWh,Total_out,2
+;optional - Falls diese Werte von deinem Zaehler gesendet werden
+;1,77070100200700ff@1,Spannung,V,Volt,1
+;1,770701001f0700ff@1,Strom,A,Current,2
+;1,770701000e0700ff@1,Frequenz,Hz,Frequency,1
+;DWS74 Bugfix
+;1,=so2,1
+#
+
+
+; -- JEDE SEKUNDE --
+>S
+; Start MQTT erst wenn Daten vom Stromzaehler kommen
+if (sml[2]>0)
+{
+ smlj=1
+}
+
+; Warte auf NTP
+if (year<2020)
+{
+ print NTP not ready
+ break
+}
+
+; alle 3s
+if (secs%3==0)
+{
+ ; Aktuelle Leistung [W]
+ ;power=rnd(1000)-500 google chart testing
+ ; kopiere Leistung vom Zaehler (aus SML Variable)
+ power=sml[1]
+ ; Leistung aufsummieren 4h/24h Diagramm
+ avgv+=power
+ avgv2+=power
+ avgvc+=1
+ avgvc2+=1
+ ; Optional: gemittelte Leistung fuer opendtu-onbattery DPL: http://192.168.178.31/cm?user=admin&password=joke&cmnd=script?power2
+ power2=(0.9*power2)+((1-0.9)*power)
+
+ ; Schalte anderen ESP bei Netzeinspeisung. Schaue in die >W Sektion.
+ if (swesp==1)
+ {
+ if ((power2<-300) and (swespflg==0))
+ {
+ ;=>websend [192.168.0.50] power ON
+ ;print power ON %power2%W
+ swespflg=1
+ }
+ if ((power2>100) and (swespflg==1))
+ {
+ ;=>websend [192.168.0.50] power OFF
+ ;print power OFF %power2%W
+ swespflg=0
+ }
+ }
+}
+
+; alle 30s
+if (secs%30==0)
+{
+ ; 4h chart. idx wird automatisch gesetzt
+ s4h=avgv/avgvc
+ avgv=0
+ avgvc=0
+
+ ; Setze 4h Chart X-Achse alle 30s => /120 Werte pro Stunde. Arraygroesse = 480
+ ; tasmota calc [hh:mm] via cnthX/Y. mm = X%Y * 60/Y. hh = X/Y
+ cstr2="cnth"+s(1.0((((hours+20)*120)+(mins*2)+(int(secs/30)))%2880+1))+"/120"
+}
+
+; alle 60s
+if (secs%60==0)
+{
+ hour=hours
+ ;Zeit seit letztem Boot
+ utm=s(2.0(int(uptime/1440)))+"d "+s(2.0(int(uptime/60)%24))+"h "+s(2.0(uptime%60))+"m"
+
+ ; kopiere Netzbezug [kWh] vom Zaehler (aus SML Variable)
+ EnFrGrid=sml[2]
+ ; kopiere Netzeinspeisung [kWh] vom Zaehler (aus SML Variable)
+ EnToGrid=sml[3]
+ ; Tagesverbrauch [kWh]
+ dcon[day]=EnFrGrid-dval
+ ; Monatsverbrauch [kWh]
+ mcon[month]=EnFrGrid-mval
+ ; Tageseinspeisung [kWh]
+ dprod[day]=EnToGrid-dval2
+ ; Monatseinspeisung [kWh]
+ mcon[month+12]=EnToGrid-mval2
+
+ ;=>publish stat/%topic%/script/consday %2(dcon[day])%
+ ;=>publish stat/%topic%/script/yieldday %2(dprod[day])%
+ ;=>publish stat/%topic%/script/consmonth %2(mcon[month])%
+ ;=>publish stat/%topic%/script/yieldmonth %2(mcon[month+12])%
+ ;=>publish stat/%topic%/script/consyear %2(yval)%
+ ;=>publish stat/%topic%/script/yielyear %2(yval2)%
+
+ ; 24h Chart. Berechne Durschnittsleistung [W] der letzten 5min => ins Array[1-288]
+ m5=int((((hours*60)+mins)/5)+1)
+ ; set idx (pointer starts from 0)
+ sday[0]=m5
+ if (chg[m5]>0)
+ {
+ sday[m5]=int(avgv2/avgvc2)
+ avgv2=0
+ avgvc2=0
+ }
+
+ ; Aktualisiere 24h Chart alle 5Min => Arraygröße 288
+ ; tasmota calc [hh:mm] via cnthX/Y. mm = X%Y * 60/Y. hh = X/Y
+ cstr="cnth"+s(1.0(((hours)*12)+int(mins/5))+1)+"/12"
+
+ ; Tagesverbrauch & Einspeisung Berechnung um Mitternacht
+ if ((chg[hour]>0) and (hour==0))
+ {
+ if (day>1)
+ {
+ da=day
+ }
+ else
+ {
+ ; Monatswechsel
+ for tmp (da+1) 31 1
+ dprod[tmp]=0
+ dcon[tmp]=0
+ next
+ ; monthly values
+ mval=EnFrGrid
+ mval2=EnToGrid
+ }
+ if (chg[year]>0)
+ {
+ ; Jahreswechsel
+ yval=EnFrGrid
+ yval2=EnToGrid
+ }
+ ; daily values
+ dval=EnFrGrid
+ dval2=EnToGrid
+ ; nur 1x um Mitternacht speichern
+ svars
+ }
+}
+
+
+; WEB INTERFACE
+>W
+; Auto reload
+;$
+
+; web button
+; Schalte anderen ESP bei Netzeinspeisung. Schaue in die >S Sektion.
+;bu(swesp "PV Steckdose aktivieren" "PV Steckdose deaktivieren")
+; optional um per Slider Y-Achse Werte zu begrenzen, suche im Skript nach vn
+;sl(4000 20000 vn "4 kW" "12 kW" "20 kW")
+
+; Filtered power
+Leistung (gefiltert){m}%power2% W
+
+; Verbrauch
+Tagesverbrauch{m}%2(EnFrGrid-dval)% kWh
+Monatsverbrauch{m}%2(EnFrGrid-mval)% kWh
+Jahresverbrauch{m}%2(EnFrGrid-yval)% kWh
+
+; Einspeisung (PV)
+Tageseinspeisung{m}%2(EnToGrid-dval2)% kWh
+Monatseinspeisung{m}%2(EnToGrid-mval2)% kWh
+Jahreseinspeisung{m}%2(EnToGrid-yval2)% kWh
+
+; Zeit
+Datum{m}%s(2.0day)%.%s(2.0month)%.%s(2.0year)% - %s(2.0hours)%:%s(2.0mins)%:%s(2.0secs)%
+Uptime{m}%0utm%
+$
+
+; 4h Leistung Diagramm
+$
+$gc(lt s4h "wr" "Leistung [W]" cstr2)
+$var options = {
+$chartArea:{left:60,width:'83%%'},
+$legend:'none',
+;$vAxis:{format:'# W',viewWindow:{max:%vn%}}, optional um per Slider Y-Achse Werte zu begrenzen, suche im Skript nach vn
+;$vAxis:{format:'# W',viewWindow:{max:5000}}, optional um Y-Achse Werte auf 5kW zu begrenzen
+$vAxis:{format:'# W'},
+$explorer:{actions:['dragToZoom', 'rightClickToReset']},
+$series: {0: {type: 'area'}},
+$title:'Verbrauch 4 Stunden [Watt]'
+$};
+$gc(e)
+
+; 24h Leistung Diagramm
+$
+$gc(lt sday "wr" "Leistung [W]" cstr)
+$var options = {
+$chartArea:{left:60,width:'83%%'},
+$legend:'none',
+;$vAxis:{format:'# W',viewWindow:{max:%vn%}}, optional um per Slider Y-Achse Werte zu begrenzen, suche im Skript nach vn
+;$vAxis:{format:'# W',viewWindow:{max:5000}}, optional um Y-Achse Werte auf 5kW zu begrenzen
+$vAxis:{format:'# W'},
+$explorer:{actions:['dragToZoom', 'rightClickToReset']},
+$series: {0: {type: 'area'}},
+$title:'Verbrauch 24 Stunden [Watt]'
+$};
+$gc(e)
+
+; Einfacher Saeulenchart mit 2 Reihen
+;$
+;$gc(c dprod "wr" "kWh" "cnt1" "Tägliche Einspeisung")
+
+; Tagesverbrauch und Einspeisung Tabelle
+%=#daysub
+%=#dayprod
+
+; Netzverbrauch und Einspeisung Monat Tabelle
+%=#monthsub
+
+$
+$Version 11.11.2024 (PV) by ottelo.jimdo.de
+$Hinweis: Die Daten werden immer um Mitternacht gespeichert!
+$Sofort speichern dies in Console eingeben: "script >svars"
+$
+
+; -- END SCRIPT --
+#
\ No newline at end of file
diff --git a/Tasmota SML Script + Chart.txt b/Tasmota SML Script + Chart.txt
new file mode 100644
index 0000000..deeed2d
--- /dev/null
+++ b/Tasmota SML Script + Chart.txt
@@ -0,0 +1,325 @@
+>D 40
+; IP for external ScriptEditor
+IP=192.168.178.31
+
+
+; Beschreibung:
+; Skript Version ganz unten
+; Tasmota SML Skript mit Google Chart (Diagramme)
+; 2 Liniendiagramme: Leistung der letzten 4 Stunden (fein aufgeloest) und Leistung der letzten 24h (grob aufgeloest)
+; Das 4h Diagramm wird nicht gespeichert und ist nach jedem Neustart neu befuellt
+; Tabellen mit Anzeige des Netzbezugs pro Tag und pro Monat
+; Diagramme und Tabelle benötigen ca. 60s nach einem Neustart um korrekt dargestellt zu werden
+; Tasmota muss mit dem Internet verbunden sein um die aktuelle Uhrzeit via NTP zu erhalten. Ansonsten muss das Skript angepasst werden.
+
+; Anleitung:
+; ESP32: Dieses Skript einfach in den internen Editor einfuegen und ggf. diese Kommentare entfernen um Platz zu sparen. IP Zeile oben loeschen.
+; ESP8266: ScriptEditor runterladen um dieses Skript auf den ESP zu uebertragen. Der Editor entfernt alle Kommentare und leere Zeilen
+; https://tasmota.github.io/docs/Scripting-Language/#optional-external-editor
+; IP eures ESPs oben im Script eingeben, damit der Editor das Skript korrekt senden kann
+; Skript an euren Zaehler anpassen:
+; Runterscrollen zu der ;-- SML -- Sektion und die Zeilen anpassen.
+; https://tasmota.github.io/docs/Smart-Meter-Interface/
+; Damit die Diagramme und Tabellen beim ersten Einrichten funktionieren folgendes in die Console auf eurem ESP eingeben (; am Anfang entfernen)
+;backlog script >dval=EnFrGrid; script >dcon={0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0};
+;backlog script >mval=EnFrGrid; script >mcon={0 0 0 0 0 0 0 0 0 0 0 0};
+;backlog script >yval=EnFrGrid; Zaehlerstand beim Jahreswechsel. Statt EnFrGrid koennt ihr dort auch euren alten Zaehlerstand eingeben, falls ihr diesen am Ende des Jahres oder Neujahr notiert habt (kWh).
+;script >=#rst24h
+;script >svars
+; Um spaeter fehlende oder falsche Werte in den Tabellen zu aendern, koennen folgende Befehle in der Console eingegeben werden:
+; script?var beliebige Variable auslesen z.B. script?dcon[1] (erster Tag in Monatstabelle lesen)
+; script >var=1 beliebige Variable schreiben z.B. script >dcon[1]=10 (erster Tag in Monatstabelle = 10 kWh)
+; script >=#rst24h Loesche 24h Diagramm
+; script >svars Alle Werte/Diagramme speichern (passiert sonst immer um Mitternacht)
+
+
+; -- ARRAYS --
+; 24h power chart
+M:p:sday=0 288
+; Tagesnetzbezug Tabelle 1-31
+M:p:dcon=0 31
+; Monatsverbrauch Tabelle 1-12
+M:p:mcon=0 12
+; 4h Chart, Neuer Wert alle 30s
+M:s4h=0 480
+
+; -- VARS --
+; Netzbezug [kWh]
+EnFrGrid=0
+; Aktuelle Leistung +/- [W]
+power=0
+; Tages, Monats, Jahres Verbrauch
+p:mval=0
+p:dval=0
+p:yval=0
+;p:vn=12000 optional um per Slider Y-Achse Werte zu begrenzen
+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
+
+
+; -- BOOT --
+>B
+=>otaurl !!NEVER UPGRADE VIA WEB SERVER!!
+=>sensor53 r
+is(0 "Jan|Feb|Mär|Apr|Mai|Jun|Jul|Aug|Sep|Okt|Nov|Dez|")
+;Deaktiviere MQTT beim Start, verhindert das falsche Werte gesendet werden
+smlj=0
+
+
+; -- SUBS --
+; Resette 24h Chart
+#rst24h
+for tmp 1 sday[-1] 1
+ sday[tmp]=0
+next
+
+; Tagesverbrauch Tabelle
+#daysub
+if wm>0 {
+wcs
+wcs
+}
+
+; Netzverbrauch Monat Tabelle
+#monthsub
+if wm>0 {
+wcs
+wcs
+}
+
+
+;-- SML --
+>M 1
+;1=meter1 14=GPIO14 s=SML 0=filterOff 16=filterOn 9600=baud MT175=Name
++1,14,s,16,9600,SML
+;1. line = sml[1] (aktuelle Leistung W), 2. = sml[2] (Netzbezug kWh)
+1,77070100100700ff@1,Leistung,W,Power_curr,0
+1,77070100010800ff@1000,Verbrauch,KWh,Total_in,2
+;optional - Falls diese Werte von deinem Zaehler gesendet werden
+;1,77070100200700ff@1,Spannung,V,Volt,1
+;1,770701001f0700ff@1,Strom,A,Current,2
+;1,770701000e0700ff@1,Frequenz,Hz,Frequency,1
+;DWS74 Bugfix
+;1,=so2,1
+#
+
+
+; -- JEDE SEKUNDE --
+>S
+; Start MQTT erst wenn Daten vom Stromzaehler kommen
+if (sml[2]>0)
+{
+ smlj=1
+}
+
+; Warte auf NTP
+if (year<2020)
+{
+ print NTP not ready
+ break
+}
+
+; alle 3s
+if (secs%3==0)
+{
+ ; Aktuelle Leistung [W]
+ ;power=rnd(1000)-500 google chart testing
+ ; kopiere Leistung vom Zaehler (aus SML Variable)
+ power=sml[1]
+ ; Leistung aufsummieren 4h/24h Diagramm
+ avgv+=power
+ avgv2+=power
+ avgvc+=1
+ avgvc2+=1
+}
+
+; alle 30s
+if (secs%30==0)
+{
+ ; 4h chart. idx wird automatisch gesetzt
+ s4h=avgv/avgvc
+ avgv=0
+ avgvc=0
+
+ ; Setze 4h Chart X-Achse alle 30s => /120 Werte pro Stunde. Arraygroesse = 480
+ ; tasmota calc [hh:mm] via cnthX/Y. mm = X%Y * 60/Y. hh = X/Y
+ cstr2="cnth"+s(1.0((((hours+20)*120)+(mins*2)+(int(secs/30)))%2880+1))+"/120"
+}
+
+; alle 60s
+if (secs%60==0)
+{
+ hour=hours
+ ;Zeit seit letztem Boot
+ utm=s(2.0(int(uptime/1440)))+"d "+s(2.0(int(uptime/60)%24))+"h "+s(2.0(uptime%60))+"m"
+
+ ; kopiere Netzbezug [kWh] vom Zaehler (aus SML Variable)
+ EnFrGrid=sml[2]
+ ; Tagesverbrauch [kWh]
+ dcon[day]=EnFrGrid-dval
+ ; Monatsverbrauch [kWh]
+ mcon[month]=EnFrGrid-mval
+
+ ;=>publish stat/%topic%/script/consday %2(dcon[day])%
+ ;=>publish stat/%topic%/script/consmonth %2(mcon[month])%
+ ;=>publish stat/%topic%/script/consyear %2(yval)%
+
+ ; 24h Chart. Berechne Durschnittsleistung [W] der letzten 5min => ins Array[1-288]
+ m5=int((((hours*60)+mins)/5)+1)
+ ; set idx (pointer starts from 0)
+ sday[0]=m5
+ if (chg[m5]>0)
+ {
+ sday[m5]=int(avgv2/avgvc2)
+ avgv2=0
+ avgvc2=0
+ }
+
+ ; Aktualisiere 24h Chart alle 5Min => Arraygröße 288
+ ; tasmota calc [hh:mm] via cnthX/Y. mm = X%Y * 60/Y. hh = X/Y
+ cstr="cnth"+s(1.0(((hours)*12)+int(mins/5))+1)+"/12"
+
+ ; Tagesverbrauch Berechnung um Mitternacht
+ if ((chg[hour]>0) and (hour==0))
+ {
+ if (day>1)
+ {
+ da=day
+ }
+ else
+ {
+ ; Monatswechsel
+ for tmp (da+1) 31 1
+ dcon[tmp]=0
+ next
+ ; monthly values
+ mval=EnFrGrid
+ }
+ if (chg[year]>0)
+ {
+ ; Jahreswechsel
+ yval=EnFrGrid
+ }
+ ; daily values
+ dval=EnFrGrid
+ ; nur 1x um Mitternacht speichern
+ svars
+ }
+}
+
+
+; WEB INTERFACE
+>W
+; Auto reload
+;$
+
+; optional um per Slider Y-Achse Werte zu begrenzen, suche im Skript nach vn
+;sl(4000 20000 vn "4 kW" "12 kW" "20 kW")
+
+; Verbrauch
+Tagesverbrauch{m}%2(EnFrGrid-dval)% kWh
+Monatsverbrauch{m}%2(EnFrGrid-mval)% kWh
+Jahresverbrauch{m}%2(EnFrGrid-yval)% kWh
+
+; Zeit
+Datum{m}%s(2.0day)%.%s(2.0month)%.%s(2.0year)% - %s(2.0hours)%:%s(2.0mins)%:%s(2.0secs)%
+Uptime{m}%0utm%
+$
+
+; 4h Leistung Diagramm
+$
+$gc(lt s4h "wr" "Leistung [W]" cstr2)
+$var options = {
+$chartArea:{left:60,width:'83%%'},
+$legend:'none',
+;$vAxis:{format:'# W',viewWindow:{max:%vn%}}, optional um per Slider Y-Achse Werte zu begrenzen, suche im Skript nach vn
+;$vAxis:{format:'# W',viewWindow:{max:5000}}, optional um Y-Achse Werte auf 5kW zu begrenzen
+$vAxis:{format:'# W'},
+$explorer:{actions:['dragToZoom', 'rightClickToReset']},
+$series: {0: {type: 'area'}},
+$title:'Verbrauch 4 Stunden [Watt]'
+$};
+$gc(e)
+
+; 24h Leistung Diagramm
+$
+$gc(lt sday "wr" "Leistung [W]" cstr)
+$var options = {
+$chartArea:{left:60,width:'83%%'},
+$legend:'none',
+;$vAxis:{format:'# W',viewWindow:{max:%vn%}}, optional um per Slider Y-Achse Werte zu begrenzen, suche im Skript nach vn
+;$vAxis:{format:'# W',viewWindow:{max:5000}}, optional um Y-Achse Werte auf 5kW zu begrenzen
+$vAxis:{format:'# W'},
+$explorer:{actions:['dragToZoom', 'rightClickToReset']},
+$series: {0: {type: 'area'}},
+$title:'Verbrauch 24 Stunden [Watt]'
+$};
+$gc(e)
+
+; Einfacher Saeulenchart mit 2 Reihen
+;$
+;$gc(c dprod "wr" "kWh" "cnt1" "Tägliche Einspeisung")
+
+; Tagesverbrauch Tabelle
+%=#daysub
+
+; Netzverbrauch Monat Tabelle
+%=#monthsub
+
+$
+$Version 11.11.2024 by ottelo.jimdo.de
+$Hinweis: Die Daten werden immer um Mitternacht gespeichert!
+$Sofort speichern dies in Console eingeben: "script >svars"
+$
+
+; -- END SCRIPT --
+#
\ No newline at end of file
diff --git a/Tasmota Script for Sonoff Pow (R2) or Gosund EP2 Energy metering plugs.txt b/Tasmota Script for Sonoff Pow (R2) or Gosund EP2 Energy metering plugs.txt
new file mode 100644
index 0000000..d5f848c
--- /dev/null
+++ b/Tasmota Script for Sonoff Pow (R2) or Gosund EP2 Energy metering plugs.txt
@@ -0,0 +1,313 @@
+>D 40
+; IP for external ScriptEditor
+IP=192.168.178.31
+
+
+; Beschreibung:
+; Skript Version ganz unten
+; Tasmota SML Skript mit Google Chart (Diagramme) fuer Sonoff Pow (R2) / Gosund EP2 Energiemess-Steckdosen
+; 2 Liniendiagramme: Leistung der letzten 4 Stunden (fein aufgeloest) und Leistung der letzten 24h (grob aufgeloest)
+; Das 4h Diagramm wird nicht gespeichert und ist nach jedem Neustart neu befuellt
+; Tabellen mit Anzeige des Verbrauchs pro Tag und pro Monat
+; Diagramme und Tabelle benötigen ca. 60s nach einem Neustart um korrekt dargestellt zu werden
+; Tasmota muss mit dem Internet verbunden sein um die aktuelle Uhrzeit via NTP zu erhalten. Ansonsten muss das Skript angepasst werden.
+; Dieses Skript benoetigt ein angepasstes Tasmota Image, kompiliert mit USE_ENERGY_SENSOR und andere #defines. Siehe
+; https://pastebin.com/SPm2mRgn fuer mehr Infos oder schaue auf mein Blog ottelo.jimdo.de
+
+; Anleitung:
+; ESP32: Dieses Skript einfach in den internen Editor einfuegen und ggf. diese Kommentare entfernen um Platz zu sparen. IP Zeile oben loeschen.
+; ESP8266: ScriptEditor runterladen um dieses Skript auf den ESP zu uebertragen. Der Editor entfernt alle Kommentare und leere Zeilen
+; https://tasmota.github.io/docs/Scripting-Language/#optional-external-editor
+; IP eures ESPs oben im Script eingeben, damit der Editor das Skript korrekt senden kann
+; Skript an euren Zaehler anpassen:
+; Runterscrollen zu der ;-- SML -- Sektion und die Zeilen anpassen.
+; https://tasmota.github.io/docs/Smart-Meter-Interface/
+; Damit die Diagramme und Tabellen beim ersten Einrichten funktionieren folgendes in die Console auf eurem ESP eingeben (; am Anfang entfernen)
+;backlog script >dval=EnFrGrid; script >dcon={0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0};
+;backlog script >mval=EnFrGrid; script >mcon={0 0 0 0 0 0 0 0 0 0 0 0};
+;script >yval=EnFrGrid Zaehlerstand beim Jahreswechsel. Statt EnFrGrid koennt ihr dort auch euren alten Zaehlerstand eingeben, falls ihr diesen am Ende des Jahres oder Neujahr notiert habt (kWh).
+;script >=#rst24h
+;script >svars
+; Um spaeter fehlende oder falsche Werte in den Tabellen zu aendern, koennen folgende Befehle in der Console eingegeben werden:
+; script?var beliebige Variable auslesen z.B. script?dcon[1] (erster Tag in Monatstabelle lesen)
+; script >var=1 beliebige Variable schreiben z.B. script >dcon[1]=10 (erster Tag in Monatstabelle = 10 kWh)
+; script >=#rst24h Loesche 24h Diagramm
+; script >svars Alle Werte/Diagramme speichern (passiert sonst immer um Mitternacht)
+
+
+; -- ARRAYS --
+; 24h power chart
+M:p:sday=0 288
+; Tagesverbrauch Tabelle 1-31
+M:p:dcon=0 31
+; Monatsverbrauch Tabelle 1-12
+M:p:mcon=0 12
+; 4h Chart, Neuer Wert alle 30s
+M:s4h=0 480
+
+; -- VARS --
+; Zaehlerwert [kWh]
+EnFrGrid=0
+; Aktuelle Leistung +/- [W]
+power=0
+; Tages, Monats, Jahres Verbrauch
+p:mval=0
+p:dval=0
+p:yval=0
+;p:vn=12000 optional um per Slider Y-Achse Werte zu begrenzen
+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
+
+
+; -- BOOT --
+>B
+=>otaurl !!NEVER UPGRADE VIA WEB SERVER!!
+=>sensor53 r
+is(0 "Jan|Feb|Mär|Apr|Mai|Jun|Jul|Aug|Sep|Okt|Nov|Dez|")
+;Deaktiviere MQTT beim Start, verhindert das falsche Werte gesendet werden
+smlj=0
+
+
+; -- SUBS --
+; Resette 24h Chart
+#rst24h
+for tmp 1 sday[-1] 1
+ sday[tmp]=0
+next
+
+; Tagesverbrauch Tabelle
+#daysub
+if wm>0 {
+wcs
+wcs
+}
+
+; Netzverbrauch Monat Tabelle
+#monthsub
+if wm>0 {
+wcs
+wcs
+}
+
+
+
+; -- JEDE SEKUNDE --
+>S
+; Start MQTT erst wenn Daten vom Energiechip der Steckdose kommen
+if (enrg[1]>0)
+{
+ smlj=1
+}
+
+; Warte auf NTP
+if (year<2020)
+{
+ print NTP not ready
+ break
+}
+
+; alle 3s
+if (secs%3==0)
+{
+ ; Aktuelle Leistung [W]
+ ;power=rnd(1000) for google chart testing
+ ; enrg[n] = hole Wert vom energy register n 0=Gesamtverbrauch, 1..3 Spannung von Phase 1..3, 4..6 aktuell von Phase 1..3, 7..9 Leistung von Phase 1..3, 10=Verbrauch ab Start, 11=Tagesverbrauch, 12=Verbrauch Gestern (USE_ENERGY_SENSOR)
+ power=enrg[7]
+ ; Leistung aufsummieren 4h/24h Diagramm
+ avgv+=power
+ avgv2+=power
+ avgvc+=1
+ avgvc2+=1
+}
+
+; alle 30s
+if (secs%30==0)
+{
+ ; 4h chart. idx wird automatisch gesetzt
+ s4h=avgv/avgvc
+ avgv=0
+ avgvc=0
+
+ ; Setze 4h Chart X-Achse alle 30s => /120 Werte pro Stunde. Arraygroesse = 480
+ ; tasmota calc [hh:mm] via cnthX/Y. mm = X%Y * 60/Y. hh = X/Y
+ cstr2="cnth"+s(1.0((((hours+20)*120)+(mins*2)+(int(secs/30)))%2880+1))+"/120"
+}
+
+; alle 60s
+if (secs%60==0)
+{
+ hour=hours
+ ;Zeit seit letztem Boot
+ utm=s(2.0(int(uptime/1440)))+"d "+s(2.0(int(uptime/60)%24))+"h "+s(2.0(uptime%60))+"m"
+
+ ; kopiere Verbrauch [kWh] vom Energiechip
+ EnFrGrid=enrg[11]
+ ; Tagesverbrauch [kWh]
+ dcon[day]=EnFrGrid-dval
+ ; Monatsverbrauch [kWh]
+ mcon[month]=EnFrGrid-mval
+
+ ;=>publish stat/%topic%/script/consday %2(dcon[day])%
+ ;=>publish stat/%topic%/script/consmonth %2(mcon[month])%
+ ;=>publish stat/%topic%/script/consyear %2(yval)%
+
+ ; 24h Chart. Berechne Durschnittsleistung [W] der letzten 5min => ins Array[1-288]
+ m5=int((((hours*60)+mins)/5)+1)
+ ; set idx (pointer starts from 0)
+ sday[0]=m5
+ if (chg[m5]>0)
+ {
+ sday[m5]=int(avgv2/avgvc2)
+ avgv2=0
+ avgvc2=0
+ }
+
+ ; Aktualisiere 24h Chart alle 5Min => Arraygröße 288
+ ; tasmota calc [hh:mm] via cnthX/Y. mm = X%Y * 60/Y. hh = X/Y
+ cstr="cnth"+s(1.0(((hours)*12)+int(mins/5))+1)+"/12"
+
+ ; Tagesverbrauch Berechnung um Mitternacht
+ if ((chg[hour]>0) and (hour==0))
+ {
+ if (day>1)
+ {
+ da=day
+ }
+ else
+ {
+ ; Monatswechsel
+ for tmp (da+1) 31 1
+ dcon[tmp]=0
+ next
+ ; monthly values
+ mval=EnFrGrid
+ }
+ if (chg[year]>0)
+ {
+ ; Jahreswechsel
+ yval=EnFrGrid
+ }
+ ; daily values
+ dval=EnFrGrid
+ ; save only once at midnight
+ svars
+ }
+}
+
+
+; WEB INTERFACE
+>W
+; Auto reload
+;$
+
+; optional um per Slider Y-Achse Werte zu begrenzen, suche im Skript nach vn
+;sl(4000 20000 vn "4 kW" "12 kW" "20 kW")
+
+; Verbrauch
+Tagesverbrauch{m}%2(EnFrGrid-dval)% kWh
+Monatsverbrauch{m}%2(EnFrGrid-mval)% kWh
+Jahresverbrauch{m}%2(EnFrGrid-yval)% kWh
+
+; Zeit
+Datum{m}%s(2.0day)%.%s(2.0month)%.%s(2.0year)% - %s(2.0hours)%:%s(2.0mins)%:%s(2.0secs)%
+Uptime{m}%0utm%
+$
+
+; 4h Leistung Diagramm
+$
+$gc(lt s4h "wr" "Leistung [W]" cstr2)
+$var options = {
+$chartArea:{left:60,width:'83%%'},
+$legend:'none',
+;$vAxis:{format:'# W',viewWindow:{max:%vn%}}, optional um per Slider Y-Achse Werte zu begrenzen, suche im Skript nach vn
+;$vAxis:{format:'# W',viewWindow:{max:5000}}, optional um Y-Achse Werte auf 5kW zu begrenzen
+$vAxis:{format:'# W'},
+$explorer:{actions:['dragToZoom', 'rightClickToReset']},
+$series: {0: {type: 'area'}},
+$title:'Verbrauch 4 Stunden [Watt]'
+$};
+$gc(e)
+
+; 24h Leistung Diagramm
+$
+$gc(lt sday "wr" "Leistung [W]" cstr)
+$var options = {
+$chartArea:{left:60,width:'83%%'},
+$legend:'none',
+;$vAxis:{format:'# W',viewWindow:{max:%vn%}}, optional um per Slider Y-Achse Werte zu begrenzen, suche im Skript nach vn
+;$vAxis:{format:'# W',viewWindow:{max:5000}}, optional um Y-Achse Werte auf 5kW zu begrenzen
+$vAxis:{format:'# W'},
+$explorer:{actions:['dragToZoom', 'rightClickToReset']},
+$series: {0: {type: 'area'}},
+$title:'Verbrauch 24 Stunden [Watt]'
+$};
+$gc(e)
+
+; Einfacher Saeulenchart mit 2 Reihen
+;$
+;$gc(c dprod "wr" "kWh" "cnt1" "Tägliche Einspeisung")
+
+; Tagesverbrauch Tabelle
+%=#daysub
+
+; Netzverbrauch Monat Tabelle
+%=#monthsub
+
+$
+$Tasmota Script fuer Sonoff Pow (R2) / Gosund EP2 Steckdosen mit Energiemessung
+$Version 11.11.2024 by ottelo.jimdo.de
+$Hinweis: Die Daten werden immer um Mitternacht gespeichert!
+$Sofort speichern dies in Console eingeben: "script >svars"
+$
+
+; -- END SCRIPT --
+#
\ No newline at end of file