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