Script für Energiezähler und Jahresprognose - Verbrauch und Kosten V3.2
Moderator: Co-Administratoren
Re: Script für Energiezähler und Jahresprognose - Verbrauch und Kosten V3.2
Hey danke funktioniert jetzt.
Re: Script für Energiezähler und Jahresprognose - Verbrauch und Kosten V3.2
Hallo,GEVJan hat geschrieben: ↑29.07.2021, 16:42Hallo zusammen,
Auf Wunsch habe ich mein überarbeitetes Energiescript mit Jahresprognose, hier noch einmal mit überarbeiteter Erklärung in einem neuen Thread veröffentlicht.
Den ursprünglichen Thread von Sebastian65432 gibt es hier: viewtopic.php?f=60&t=44005
Dies ist V3.2 vom 11.05.2022
In V3.2 wurde ein Fehler behoben, welcher verhinderte, dass die Variable "XX letztes Jahr " korrekt befüllt wurde.
Mit dem Script können folgende Daten erfasst und in Systemvariablen geschrieben werden:
-Energieverbrauch in kWh und Kosten in € von:
-Heute
-gestern
-aktueller Woche
-letzter Woche
-aktuellem Monat
-letztem Monat
-aktuellem Jahr
-letztem Jahr
-Prognose des Energieverbrauchs und der Kosten für das laufende Jahr
Funktioniert mit HmIP-Messaktoren (HM-Aktoren konnte ich nicht ausprobieren).
Es wird ein funktionierender CUxD mit angelegtem CUxD.EXEC-Gerät vorrausgesetzt!
Vorbereitungen:
1.Strompreis einpflegen
Strompreis unter "Systemeinstellungen" -> "Allgemeine Einstellungen" einpflegen
2. Systemvariablen anlegen
Zu Beginn muss man sich für ein Kürzel entscheiden, welches den SV'n vorangestellt wird. Pro Messaktor wird natürlich ein eigenes Kürzel verwendet und eigene SV'n erstellt.
Folgende SV'n müssen angelegt werden (XX steht für das verwendete Kürzel. Auf die Schreibweise achten!):
XX aktuelle Woche Zahl -> Zahl, Einheit kWh
XX aktuelle Woche -> Zeichenkette
XX letzte Woche -> Zeichenkette
XX aktueller Monat Zahl -> Zahl, Einheit kWh
XX aktueller Monat -> Zeichenkette
XX letzter Monat -> Zeichenkette
XX aktuelles Jahr Zahl -> Zahl, Einheit kWh
XX aktuelles Jahr -> Zeichenkette
XX letztes Jahr -> Zeichenkette
XX Verbrauch heute -> Zeichenkette
XX Verbrauch gestern -> Zeichenkette
XX Aktualisierung -> Zeichenkette
XX Prognose aktuelles Jahr -> Zeichenkette
XX Zaehlerstand -> Zahl, Einheit kWh
XX Referenz Zaehlerstand -> Zahl, Einheit kWh
Aussehen müsste das unter "Status und Bedienung" dann etwa so:
Status.JPG
3. ISE-ID des Messaktors ermitteln
Folgendes Script gibt einem die ISE_ID's der Messaktoren. Einmal unter "Script testen" ausführen und die Ausgabe im nächsten Schritt weiterverwenden.
4. Script individualisierenCode: Alles auswählen
string svId; string list; list=""; foreach(svId, dom.GetObject(ID_SYSTEM_VARIABLES).EnumIDs()) { var oSV = dom.GetObject(svId); var nSV = oSV.Name(); var svValue = ""; if (nSV.StartsWith("svEnergyCounter_")) { svValue = oSV.Value(); list = list # nSV #" " #svValue #"\n"; }} WriteLine(list);
Zeile 3, 6 und 9 müssen angepasst werden
5.Programm anlegenCode: Alles auswählen
!Energiescript mit Prognose V3.2 !Individuelles Kürzel hier eintragen string type = "XXXX"; !Bei YYYY die ISE_ID und bei XXXXXXXXXXXXXX:Z die Gerätenummer mit Kanal Z (Bei einer HmIP-PSM z.B. Kanal 6) object counter = (dom.GetObject(ID_SYSTEM_VARIABLES)).Get("svEnergyCounter_YYYY_XXXXXXXXXXXXXX:Z"); ! Installationsdatum dieses Skriptes var instdate = "01.01.2000"; !Ab hier keine Einstellungen mehr string dd = instdate.StrValueByIndex(".",0); string mm = instdate.StrValueByIndex(".",1); string yy = instdate.StrValueByIndex(".",2); integer startjahr = yy.ToInteger(); instdate = yy#"-"#mm#"-"#dd; integer heute = system.Date("%j").ToInteger(); integer aktjahr = system.Date("%Y").ToInteger(); if (aktjahr == startjahr) {} else {instdate = aktjahr#"-01-01";} integer tage = heute - instdate.ToTime().Format("%j").ToInteger(); !Ziehen des Strompreises aus der CCU string stdout;string stderr; string cmd = '/bin/sh -c \'cat /etc/config/energyPrice|sed -r "s/\\"//g\"\''; dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd); dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1); stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State(); string sep = "\n"; string part; string price = (stdout.StrValueByIndex(":",2)).Substr(1,6); price = price.ToFloat(); if(counter) { ! Umrechnen von Wh in kWh: real curValue = counter.Value(); curValue = curValue / 1000.0; ! Alle Variabeln laden: object c = dom.GetObject(type # " Zaehlerstand"); object d = dom.GetObject(type # " Referenz Zaehlerstand"); object e = dom.GetObject(type # " Verbrauch gestern"); object f = dom.GetObject(type # " aktuelle Woche Zahl"); object g = dom.GetObject(type # " letzte Woche"); object h = dom.GetObject(type # " aktueller Monat Zahl"); object i = dom.GetObject(type # " letzter Monat"); object j = dom.GetObject(type # " aktuelles Jahr Zahl"); object k = dom.GetObject(type # " letztes Jahr"); object l = dom.GetObject(type # " Verbrauch heute"); object m = dom.GetObject(type # " Prognose aktuelles Jahr"); object o = dom.GetObject(type # " aktuelle Woche"); object p = dom.GetObject(type # " aktueller Monat"); object q = dom.GetObject(type # " aktuelles Jahr"); ! Beschriftung noch nicht ermittelter Werte: if (e.State().EndsWith ("Euro")) {} else {e.State("noch keine Werte");} if (g.State().EndsWith ("Euro")) {} else {g.State("noch keine Werte");} if (i.State().EndsWith ("Euro")) {} else {i.State("noch keine Werte");} if (k.State().EndsWith ("Euro")) {} else {k.State("noch keine Werte");} if (l.State().EndsWith ("Euro")) {} else {l.State("noch keine Werte");} if (m.State().EndsWith ("Euro")) {} else {m.State("noch keine Werte");} if (o.State().EndsWith ("Euro")) {} else {o.State("noch keine Werte");} if (p.State().EndsWith ("Euro")) {} else {p.State("noch keine Werte");} if (q.State().EndsWith ("Euro")) {} else {q.State("noch keine Werte");} ! Aktueller Zähler aus der CCU in speichern: c.State(curValue); ! WriteLine("Zaehlerstand wurde gesetzt auf: " # curValue); ! Datum und Uhrzeit der Aktualisierung speichern dom.GetObject(type # " Aktualisierung").State(system.Date("%F %X")); ! Berechnungen durchführen. Nur weitermachen wenn es wirklich Mitternacht ist if(system.Date("%H:%M") == "00:00") { ! Woche f.State(f.Value() + c.Value() - d.Value()); var og = f.Value(); var oeuro = price * og; var oausgabe = og.ToString(2) # " kWh, " # oeuro.ToString(2) # " Euro"; o.State(oausgabe); ! Monat h.State(h.Value() + c.Value() - d.Value()); var pg = h.Value(); var peuro = price * pg; var pausgabe = pg.ToString(2) # " kWh, " # peuro.ToString(2) # " Euro"; p.State(pausgabe); ! Jahr j.State(j.Value() + c.Value() - d.Value()); var qg = j.Value(); var qeuro = price * qg; var qausgabe = qg.ToString(2) # " kWh, " # qeuro.ToString(2) # " Euro"; q.State(qausgabe); ! Gestern var vg1 = dom.GetObject(type # " Zaehlerstand").Value(); var vg2 = dom.GetObject(type # " Referenz Zaehlerstand").Value(); var vg = vg1 - vg2; var vgeuro = vg * price; var vgausgabe = vg.ToString(2) # " kWh, " # vgeuro.ToString(2) # " Euro"; e.State(vgausgabe); ! Zählerstand Heute auf Gestern übertragen d.State(c.Value()); ! Berechnung der Prognose für das Laufende Jahr: var mo = j.Value() * 365 / tage; var meuro = price * mo; var mausgabe = mo.ToString(2) # " kWh, " # meuro.ToString(2) # " Euro"; m.State(mausgabe); ! Weitermachen, wenn Mitternacht und zugleich Montag if(system.Date("%a") == "Mon") { var lw = dom.GetObject(type # " aktuelle Woche Zahl").Value(); var lweuro = lw * price; var lwausgabe = lw.ToString(2) # " kWh, " # lweuro.ToString(2) # " Euro"; g.State(lwausgabe); f.State(0); o.State("noch keine Werte"); } ! Weitermachen, wenn Mitternacht und zugleich Monatsanfang if(system.Date("%d") == "01") { var lm = dom.GetObject(type # " aktueller Monat Zahl").Value(); var lmeuro = lm * price; var lmausgabe = lm.ToString(2) # " kWh, " # lmeuro.ToString(2) # " Euro"; i.State(lmausgabe); h.State(0); p.State("noch keine Werte"); ! Weitermachen, wnn Mitternacht, Monatsanfang und zugleich Jahresanfang if(system.Date("%m") == "01") { var lj = dom.GetObject(type # " aktuelles Jahr Zahl").Value(); var ljeuro = lj * price; var ljausgabe = lj.ToString(2) # " kWh, " # ljeuro.ToString(2) # " Euro"; k.State(ljausgabe); j.State(0); m.State(0); q.State("noch keine Werte"); } } } } ! Verbrauch heute var vh1 = dom.GetObject(type # " Zaehlerstand").Value(); var vh2 = dom.GetObject(type # " Referenz Zaehlerstand").Value(); var vh = vh1 - vh2; var vheuro = vh * price; var vhausgabe = vh.ToString(2) # " kWh, " # vheuro.ToString(2) # " Euro" ; l.State(vhausgabe); WriteLine(c.Value()); WriteLine(d.Value()); WriteLine(e.Value()); WriteLine(f.Value()); WriteLine(g.Value()); WriteLine(h.Value()); WriteLine(i.Value()); WriteLine(j.Value()); WriteLine(k.Value()); WriteLine(l.Value()); WriteLine(m.Value()); WriteLine(o.Value()); WriteLine(p.Value()); WriteLine(q.Value());
Zum Schluss noch ein Programm anlegen das wie folgt aussieht:
Programm.JPG
Zeitmodul.JPG
Das Programm enthält zwei Zeitmodule damit
1.Um 0:00Uhr das Script ausgelöst wird um die Messwerte vom Vortag in die entsprechenden SV'n zu schreiben.
2.Damit das Script um Punkt 0:00 Uhr nicht ausversehen doppelt ausgelöst wird.
Soo, Ich hoffe damit kann jemand was anfangen
Über Feedback und Verbesserungsvorschläge würde ich mich freuen!
Gruß, Jan
ich kann machen, was ich will. Das Ding läuft einfach nicht bei mir. Fehler ist:
Mar 24 17:43:17 localhost local0.err ReGaHss: ERROR: ScriptRuntimeError: !Energiescript mit Prognose V3.2 !Individuelles Kürzel hier eintragen string type = "PV"; !Bei YYYY die ISE_ID und bei XXXXXXXXXXXXXX:Z die Gerätenummer mit Kanal Z (Bei einer HmIP-PSM z.B. Kanal 6) object counter = (dom.GetObject(ID_SYSTEM_VARIABLES)).Get("svEnergyCounter_10208_0001DD89A45F3C:6"); ! Installationsdatum dieses Skriptes var instdate = "01.03.2023"; !Ab hier keine Einstellungen mehr string dd = instdate.StrValueByIndex(".",0); string mm = instdate.StrValueByIndex(".",1); string yy = instdate.StrValueByIndex(".",2); integer startjahr = yy.ToInteger(); instdate = yy#"-"#mm#"-"#dd; integer heute = system.Date("%j").ToInteger(); integer aktjahr = system.Date("%Y").ToInteger(); if (aktjahr == startjahr) {} else {instdate = aktjahr#"-01-01";} integer tage = heute - instdate.ToTime().Format("%j").ToInteger(); !Ziehen des Strompreises aus der CCU string stdout;string stderr; string cmd = '/bin/sh -c \'cat /etc/config/energyPrice|sed
Ist mir unerklärlich. Ich habe mich strikt an die Anweisungen zu den Zeilen 3, 6 und 9 gehalten. Rest ist unbearbeitet übernommen. Das Programm weist bei mir leichte Formatierungsabweichungen auf, weiter unten die 4 eckiogen Klammern werden anders formatiert. Und ein paar Einrückungen. Aber das kann es doch nicht sein... Habe den Code aus dem Beitrag direkt in mein Skript übernommen und die entsprechenden Wert geändert.
Hat jemand eine Idee?
Besten Dank!
-
- Beiträge: 50
- Registriert: 14.03.2016, 08:11
- Hat sich bedankt: 10 Mal
- Danksagung erhalten: 1 Mal
Re: Script für Energiezähler und Jahresprognose - Verbrauch und Kosten V3.2
Script läuft super. Messe damit einen HmIP-PSM-2 für ein BKW.
Bekomme nur den Verbrauch heute nicht angezeigt.
Woran könnte das liegen?
Bekomme nur den Verbrauch heute nicht angezeigt.
Woran könnte das liegen?
Re: Script für Energiezähler und Jahresprognose - Verbrauch und Kosten V3.2
Hey,
ich habe das Programm auch zur Zeit noch im Versuch.
Da ich nicht alle Werte bnötige, habe ich nur mal diese Systemvariablen angelegt: und gehofft das Programm befüllt es. Tut es leider nicht!
Kann das sein das alle Werte von einander abhängig sind
oder welchen Grund kann es noch haben.
Ich habe gestern den Trockner zweimal laufen lassen, leider hat sich
der Verbrauch heute nicht gefüllt!
ich habe das Programm auch zur Zeit noch im Versuch.
Da ich nicht alle Werte bnötige, habe ich nur mal diese Systemvariablen angelegt: und gehofft das Programm befüllt es. Tut es leider nicht!
Kann das sein das alle Werte von einander abhängig sind
oder welchen Grund kann es noch haben.
Ich habe gestern den Trockner zweimal laufen lassen, leider hat sich
der Verbrauch heute nicht gefüllt!
-
- Beiträge: 1
- Registriert: 02.06.2023, 07:18
- System: CCU und Access Point
Re: Script für Energiezähler und Jahresprognose - Verbrauch und Kosten V3.2
Guten Morgen
ich habe die SV und Script jetzt zum 3. mal installiert aber ich habe wohl noch einen Fehler.
Ich habe angeblich mit meinem 600W Balkonkraftwerk gestern 7033kWh und 1828,81€ Erzeugt.
Kann mir bitte jemand helfen
Das ist der Script den ich eingefügt habe:
!Energiescript mit Prognose V3.2
!Individuelles Kürzel hier eintragen
string type = "XX";
!Bei YYYY die ISE_ID und bei XXXXXXXXXXXXXX:Z die Gerätenummer mit Kanal Z (Bei einer HmIP-PSM z.B. Kanal 6)
object counter = (dom.GetObject(ID_SYSTEM_VARIABLES)).Get("svEnergyCounter_1234_00000191919192939:6");
! Installationsdatum dieses Skriptes
var instdate = "30.05.2023";
!Ab hier keine Einstellungen mehr
string dd = instdate.StrValueByIndex(".",0);
string mm = instdate.StrValueByIndex(".",1);
string yy = instdate.StrValueByIndex(".",2);
integer startjahr = yy.ToInteger();
instdate = yy#"-"#mm#"-"#dd;
integer heute = system.Date("%j").ToInteger();
integer aktjahr = system.Date("%Y").ToInteger();
if (aktjahr == startjahr) {}
else {instdate = aktjahr#"-01-01";}
integer tage = heute - instdate.ToTime().Format("%j").ToInteger();
!Ziehen des Strompreises aus der CCU
string stdout;string stderr;
string cmd = '/bin/sh -c \'cat /etc/config/energyPrice|sed -r "s/\\"//g\"\'';
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
string sep = "\n";
string part;
string price = (stdout.StrValueByIndex(":",2)).Substr(1,6);
price = price.ToFloat();
if(counter)
{
! Umrechnen von Wh in kWh:
real curValue = counter.Value();
curValue = curValue / 1000.0;
! Alle Variabeln laden:
object c = dom.GetObject(type # " Zaehlerstand");
object d = dom.GetObject(type # " Referenz Zaehlerstand");
object e = dom.GetObject(type # " Verbrauch gestern");
object f = dom.GetObject(type # " aktuelle Woche Zahl");
object g = dom.GetObject(type # " letzte Woche");
object h = dom.GetObject(type # " aktueller Monat Zahl");
object i = dom.GetObject(type # " letzter Monat");
object j = dom.GetObject(type # " aktuelles Jahr Zahl");
object k = dom.GetObject(type # " letztes Jahr");
object l = dom.GetObject(type # " Verbrauch heute");
object m = dom.GetObject(type # " Prognose aktuelles Jahr");
object o = dom.GetObject(type # " aktuelle Woche");
object p = dom.GetObject(type # " aktueller Monat");
object q = dom.GetObject(type # " aktuelles Jahr");
! Beschriftung noch nicht ermittelter Werte:
if (e.State().EndsWith ("Euro")) {} else {e.State("noch keine Werte");}
if (g.State().EndsWith ("Euro")) {} else {g.State("noch keine Werte");}
if (i.State().EndsWith ("Euro")) {} else {i.State("noch keine Werte");}
if (k.State().EndsWith ("Euro")) {} else {k.State("noch keine Werte");}
if (l.State().EndsWith ("Euro")) {} else {l.State("noch keine Werte");}
if (m.State().EndsWith ("Euro")) {} else {m.State("noch keine Werte");}
if (o.State().EndsWith ("Euro")) {} else {o.State("noch keine Werte");}
if (p.State().EndsWith ("Euro")) {} else {p.State("noch keine Werte");}
if (q.State().EndsWith ("Euro")) {} else {q.State("noch keine Werte");}
! Aktueller Zähler aus der CCU in speichern:
c.State(curValue);
! WriteLine("Zaehlerstand wurde gesetzt auf: " # curValue);
! Datum und Uhrzeit der Aktualisierung speichern
dom.GetObject(type # " Aktualisierung").State(system.Date("%F %X"));
! Berechnungen durchführen. Nur weitermachen wenn es wirklich Mitternacht ist
if(system.Date("%H:%M") == "00:00")
{
! Woche
f.State(f.Value() + c.Value() - d.Value());
var og = f.Value();
var oeuro = price * og;
var oausgabe = og.ToString(2) # " kWh, " # oeuro.ToString(2) # " Euro";
o.State(oausgabe);
! Monat
h.State(h.Value() + c.Value() - d.Value());
var pg = h.Value();
var peuro = price * pg;
var pausgabe = pg.ToString(2) # " kWh, " # peuro.ToString(2) # " Euro";
p.State(pausgabe);
! Jahr
j.State(j.Value() + c.Value() - d.Value());
var qg = j.Value();
var qeuro = price * qg;
var qausgabe = qg.ToString(2) # " kWh, " # qeuro.ToString(2) # " Euro";
q.State(qausgabe);
! Gestern
var vg1 = dom.GetObject(type # " Zaehlerstand").Value();
var vg2 = dom.GetObject(type # " Referenz Zaehlerstand").Value();
var vg = vg1 - vg2;
var vgeuro = vg * price;
var vgausgabe = vg.ToString(2) # " kWh, " # vgeuro.ToString(2) # " Euro";
e.State(vgausgabe);
! Zählerstand Heute auf Gestern übertragen
d.State(c.Value());
! Berechnung der Prognose für das Laufende Jahr:
var mo = j.Value() * 365 / tage;
var meuro = price * mo;
var mausgabe = mo.ToString(2) # " kWh, " # meuro.ToString(2) # " Euro";
m.State(mausgabe);
! Weitermachen, wenn Mitternacht und zugleich Montag
if(system.Date("%a") == "Mon")
{
var lw = dom.GetObject(type # " aktuelle Woche Zahl").Value();
var lweuro = lw * price;
var lwausgabe = lw.ToString(2) # " kWh, " # lweuro.ToString(2) # " Euro";
g.State(lwausgabe);
f.State(0);
o.State("noch keine Werte");
}
! Weitermachen, wenn Mitternacht und zugleich Monatsanfang
if(system.Date("%d") == "01")
{
var lm = dom.GetObject(type # " aktueller Monat Zahl").Value();
var lmeuro = lm * price;
var lmausgabe = lm.ToString(2) # " kWh, " # lmeuro.ToString(2) # " Euro";
i.State(lmausgabe);
h.State(0);
p.State("noch keine Werte");
! Weitermachen, wnn Mitternacht, Monatsanfang und zugleich Jahresanfang
if(system.Date("%m") == "01")
{
var lj = dom.GetObject(type # " aktuelles Jahr Zahl").Value();
var ljeuro = lj * price;
var ljausgabe = lj.ToString(2) # " kWh, " # ljeuro.ToString(2) # " Euro";
k.State(ljausgabe);
j.State(0);
m.State(0);
q.State("noch keine Werte");
}
}
}
}
! Verbrauch heute
var vh1 = dom.GetObject(type # " Zaehlerstand").Value();
var vh2 = dom.GetObject(type # " Referenz Zaehlerstand").Value();
var vh = vh1 - vh2;
var vheuro = vh * price;
var vhausgabe = vh.ToString(2) # " kWh, " # vheuro.ToString(2) # " Euro" ;
l.State(vhausgabe);
WriteLine(c.Value());
WriteLine(d.Value());
WriteLine(e.Value());
WriteLine(f.Value());
WriteLine(g.Value());
WriteLine(h.Value());
WriteLine(i.Value());
WriteLine(j.Value());
WriteLine(k.Value());
WriteLine(l.Value());
WriteLine(m.Value());
WriteLine(o.Value());
WriteLine(p.Value());
WriteLine(q.Value());
ich habe die SV und Script jetzt zum 3. mal installiert aber ich habe wohl noch einen Fehler.
Ich habe angeblich mit meinem 600W Balkonkraftwerk gestern 7033kWh und 1828,81€ Erzeugt.
Kann mir bitte jemand helfen
Das ist der Script den ich eingefügt habe:
!Energiescript mit Prognose V3.2
!Individuelles Kürzel hier eintragen
string type = "XX";
!Bei YYYY die ISE_ID und bei XXXXXXXXXXXXXX:Z die Gerätenummer mit Kanal Z (Bei einer HmIP-PSM z.B. Kanal 6)
object counter = (dom.GetObject(ID_SYSTEM_VARIABLES)).Get("svEnergyCounter_1234_00000191919192939:6");
! Installationsdatum dieses Skriptes
var instdate = "30.05.2023";
!Ab hier keine Einstellungen mehr
string dd = instdate.StrValueByIndex(".",0);
string mm = instdate.StrValueByIndex(".",1);
string yy = instdate.StrValueByIndex(".",2);
integer startjahr = yy.ToInteger();
instdate = yy#"-"#mm#"-"#dd;
integer heute = system.Date("%j").ToInteger();
integer aktjahr = system.Date("%Y").ToInteger();
if (aktjahr == startjahr) {}
else {instdate = aktjahr#"-01-01";}
integer tage = heute - instdate.ToTime().Format("%j").ToInteger();
!Ziehen des Strompreises aus der CCU
string stdout;string stderr;
string cmd = '/bin/sh -c \'cat /etc/config/energyPrice|sed -r "s/\\"//g\"\'';
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
string sep = "\n";
string part;
string price = (stdout.StrValueByIndex(":",2)).Substr(1,6);
price = price.ToFloat();
if(counter)
{
! Umrechnen von Wh in kWh:
real curValue = counter.Value();
curValue = curValue / 1000.0;
! Alle Variabeln laden:
object c = dom.GetObject(type # " Zaehlerstand");
object d = dom.GetObject(type # " Referenz Zaehlerstand");
object e = dom.GetObject(type # " Verbrauch gestern");
object f = dom.GetObject(type # " aktuelle Woche Zahl");
object g = dom.GetObject(type # " letzte Woche");
object h = dom.GetObject(type # " aktueller Monat Zahl");
object i = dom.GetObject(type # " letzter Monat");
object j = dom.GetObject(type # " aktuelles Jahr Zahl");
object k = dom.GetObject(type # " letztes Jahr");
object l = dom.GetObject(type # " Verbrauch heute");
object m = dom.GetObject(type # " Prognose aktuelles Jahr");
object o = dom.GetObject(type # " aktuelle Woche");
object p = dom.GetObject(type # " aktueller Monat");
object q = dom.GetObject(type # " aktuelles Jahr");
! Beschriftung noch nicht ermittelter Werte:
if (e.State().EndsWith ("Euro")) {} else {e.State("noch keine Werte");}
if (g.State().EndsWith ("Euro")) {} else {g.State("noch keine Werte");}
if (i.State().EndsWith ("Euro")) {} else {i.State("noch keine Werte");}
if (k.State().EndsWith ("Euro")) {} else {k.State("noch keine Werte");}
if (l.State().EndsWith ("Euro")) {} else {l.State("noch keine Werte");}
if (m.State().EndsWith ("Euro")) {} else {m.State("noch keine Werte");}
if (o.State().EndsWith ("Euro")) {} else {o.State("noch keine Werte");}
if (p.State().EndsWith ("Euro")) {} else {p.State("noch keine Werte");}
if (q.State().EndsWith ("Euro")) {} else {q.State("noch keine Werte");}
! Aktueller Zähler aus der CCU in speichern:
c.State(curValue);
! WriteLine("Zaehlerstand wurde gesetzt auf: " # curValue);
! Datum und Uhrzeit der Aktualisierung speichern
dom.GetObject(type # " Aktualisierung").State(system.Date("%F %X"));
! Berechnungen durchführen. Nur weitermachen wenn es wirklich Mitternacht ist
if(system.Date("%H:%M") == "00:00")
{
! Woche
f.State(f.Value() + c.Value() - d.Value());
var og = f.Value();
var oeuro = price * og;
var oausgabe = og.ToString(2) # " kWh, " # oeuro.ToString(2) # " Euro";
o.State(oausgabe);
! Monat
h.State(h.Value() + c.Value() - d.Value());
var pg = h.Value();
var peuro = price * pg;
var pausgabe = pg.ToString(2) # " kWh, " # peuro.ToString(2) # " Euro";
p.State(pausgabe);
! Jahr
j.State(j.Value() + c.Value() - d.Value());
var qg = j.Value();
var qeuro = price * qg;
var qausgabe = qg.ToString(2) # " kWh, " # qeuro.ToString(2) # " Euro";
q.State(qausgabe);
! Gestern
var vg1 = dom.GetObject(type # " Zaehlerstand").Value();
var vg2 = dom.GetObject(type # " Referenz Zaehlerstand").Value();
var vg = vg1 - vg2;
var vgeuro = vg * price;
var vgausgabe = vg.ToString(2) # " kWh, " # vgeuro.ToString(2) # " Euro";
e.State(vgausgabe);
! Zählerstand Heute auf Gestern übertragen
d.State(c.Value());
! Berechnung der Prognose für das Laufende Jahr:
var mo = j.Value() * 365 / tage;
var meuro = price * mo;
var mausgabe = mo.ToString(2) # " kWh, " # meuro.ToString(2) # " Euro";
m.State(mausgabe);
! Weitermachen, wenn Mitternacht und zugleich Montag
if(system.Date("%a") == "Mon")
{
var lw = dom.GetObject(type # " aktuelle Woche Zahl").Value();
var lweuro = lw * price;
var lwausgabe = lw.ToString(2) # " kWh, " # lweuro.ToString(2) # " Euro";
g.State(lwausgabe);
f.State(0);
o.State("noch keine Werte");
}
! Weitermachen, wenn Mitternacht und zugleich Monatsanfang
if(system.Date("%d") == "01")
{
var lm = dom.GetObject(type # " aktueller Monat Zahl").Value();
var lmeuro = lm * price;
var lmausgabe = lm.ToString(2) # " kWh, " # lmeuro.ToString(2) # " Euro";
i.State(lmausgabe);
h.State(0);
p.State("noch keine Werte");
! Weitermachen, wnn Mitternacht, Monatsanfang und zugleich Jahresanfang
if(system.Date("%m") == "01")
{
var lj = dom.GetObject(type # " aktuelles Jahr Zahl").Value();
var ljeuro = lj * price;
var ljausgabe = lj.ToString(2) # " kWh, " # ljeuro.ToString(2) # " Euro";
k.State(ljausgabe);
j.State(0);
m.State(0);
q.State("noch keine Werte");
}
}
}
}
! Verbrauch heute
var vh1 = dom.GetObject(type # " Zaehlerstand").Value();
var vh2 = dom.GetObject(type # " Referenz Zaehlerstand").Value();
var vh = vh1 - vh2;
var vheuro = vh * price;
var vhausgabe = vh.ToString(2) # " kWh, " # vheuro.ToString(2) # " Euro" ;
l.State(vhausgabe);
WriteLine(c.Value());
WriteLine(d.Value());
WriteLine(e.Value());
WriteLine(f.Value());
WriteLine(g.Value());
WriteLine(h.Value());
WriteLine(i.Value());
WriteLine(j.Value());
WriteLine(k.Value());
WriteLine(l.Value());
WriteLine(m.Value());
WriteLine(o.Value());
WriteLine(p.Value());
WriteLine(q.Value());
-
- Beiträge: 3747
- Registriert: 23.09.2017, 12:04
- Hat sich bedankt: 67 Mal
- Danksagung erhalten: 122 Mal
Re: Script für Energiezähler und Jahresprognose - Verbrauch und Kosten V3.2
Hallo
das Programm nimmt offenbar den Zähler der WebUi, damit bei einem Reset im Gerät durch Spannungsunterbrechung nicht alles durcheinander kommt.
Hast Du vor der Installation des Scrips denn den Zähler in der WEbUi mit Reset mal auf 0,0 gestellt?
Wenn der auf 7000 steht und nach Installation des Scriptes der Referezwert von gestern 0,0 ist (weil das Script ja noch nie den tagesverbrauch berechnet hat) Dann ist der erste Verbrauch erst mal 7000. Ab dem zweiten Tag sollte es dann allerdings stimmen.
Gleiches problem tritt dann mit Monat und Jahr auf.
Also ein mal bei 0,0 in der WebUi anfangen.
das Programm nimmt offenbar den Zähler der WebUi, damit bei einem Reset im Gerät durch Spannungsunterbrechung nicht alles durcheinander kommt.
Hast Du vor der Installation des Scrips denn den Zähler in der WEbUi mit Reset mal auf 0,0 gestellt?
Wenn der auf 7000 steht und nach Installation des Scriptes der Referezwert von gestern 0,0 ist (weil das Script ja noch nie den tagesverbrauch berechnet hat) Dann ist der erste Verbrauch erst mal 7000. Ab dem zweiten Tag sollte es dann allerdings stimmen.
Gleiches problem tritt dann mit Monat und Jahr auf.
Also ein mal bei 0,0 in der WebUi anfangen.
-
- Beiträge: 4
- Registriert: 28.06.2023, 07:42
- System: CCU
Re: Script für Energiezähler und Jahresprognose - Verbrauch und Kosten V3.2
Hallo,
auch ich versuche es schon seit Tagen dieses Skript für meine Klimaanlage zum laufen zu bringen. Ich habe alles so übernommen wie es die Herren freundlicherweise uns zu Verfügung gestellt haben. Die entsprechenden Zeilen abgeändert, Variablen 1zu1 angelegt und Programm geschrieben. Nix wird eingetragen! Immer noch Zählerstand Null usw.
Kann hier nochmals jemand drüberschauen? Ich finde dieses Skript einfach nur toll und möchte dass es endlich läuft.
Noch ne Info! Der Energiezähler CCU lässt sich auch nicht resetten, er zählt nicht und die versteckte Variable bzw. Programm ist auch nicht aufzufinden. Liegt hier der Hund begraben?
Ich würde mich freuen wenn jemand den Fehler findet.
Danke und Lg
auch ich versuche es schon seit Tagen dieses Skript für meine Klimaanlage zum laufen zu bringen. Ich habe alles so übernommen wie es die Herren freundlicherweise uns zu Verfügung gestellt haben. Die entsprechenden Zeilen abgeändert, Variablen 1zu1 angelegt und Programm geschrieben. Nix wird eingetragen! Immer noch Zählerstand Null usw.
Kann hier nochmals jemand drüberschauen? Ich finde dieses Skript einfach nur toll und möchte dass es endlich läuft.
Noch ne Info! Der Energiezähler CCU lässt sich auch nicht resetten, er zählt nicht und die versteckte Variable bzw. Programm ist auch nicht aufzufinden. Liegt hier der Hund begraben?
Code: Alles auswählen
!Energiescript mit Prognose V3.2
!Individuelles Kürzel hier eintragen
string type = "AC";
!Bei YYYY die ISE_ID und bei XXXXXXXXXXXXXX:Z die Gerätenummer mit Kanal Z (Bei einer HmIP-PSM z.B. Kanal 6)
object counter = (dom.GetObject(ID_SYSTEM_VARIABLES)).Get("svEnergyCounter_12522_MEQ0269871:2");
! Installationsdatum dieses Skriptes
var instdate = "28.06.2023";
!Ab hier keine Einstellungen mehr
string dd = instdate.StrValueByIndex(".",0);
string mm = instdate.StrValueByIndex(".",1);
string yy = instdate.StrValueByIndex(".",2);
integer startjahr = yy.ToInteger();
instdate = yy#"-"#mm#"-"#dd;
integer heute = system.Date("%j").ToInteger();
integer aktjahr = system.Date("%Y").ToInteger();
if (aktjahr == startjahr) {}
else {instdate = aktjahr#"-01-01";}
integer tage = heute - instdate.ToTime().Format("%j").ToInteger();
!Ziehen des Strompreises aus der CCU
string stdout;string stderr;
string cmd = '/bin/sh -c \'cat /etc/config/energyPrice|sed -r "s/\\"//g\"\'';
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
string sep = "\n";
string part;
string price = (stdout.StrValueByIndex(":",2)).Substr(1,6);
price = price.ToFloat();
if(counter)
{
! Umrechnen von Wh in kWh:
real curValue = counter.Value();
curValue = curValue / 1000.0;
! Alle Variabeln laden:
object c = dom.GetObject(type # " Zaehlerstand");
object d = dom.GetObject(type # " Referenz Zaehlerstand");
object e = dom.GetObject(type # " Verbrauch gestern");
object f = dom.GetObject(type # " aktuelle Woche Zahl");
object g = dom.GetObject(type # " letzte Woche");
object h = dom.GetObject(type # " aktueller Monat Zahl");
object i = dom.GetObject(type # " letzter Monat");
object j = dom.GetObject(type # " aktuelles Jahr Zahl");
object k = dom.GetObject(type # " letztes Jahr");
object l = dom.GetObject(type # " Verbrauch heute");
object m = dom.GetObject(type # " Prognose aktuelles Jahr");
object o = dom.GetObject(type # " aktuelle Woche");
object p = dom.GetObject(type # " aktueller Monat");
object q = dom.GetObject(type # " aktuelles Jahr");
! Beschriftung noch nicht ermittelter Werte:
if (e.State().EndsWith ("Euro")) {} else {e.State("noch keine Werte");}
if (g.State().EndsWith ("Euro")) {} else {g.State("noch keine Werte");}
if (i.State().EndsWith ("Euro")) {} else {i.State("noch keine Werte");}
if (k.State().EndsWith ("Euro")) {} else {k.State("noch keine Werte");}
if (l.State().EndsWith ("Euro")) {} else {l.State("noch keine Werte");}
if (m.State().EndsWith ("Euro")) {} else {m.State("noch keine Werte");}
if (o.State().EndsWith ("Euro")) {} else {o.State("noch keine Werte");}
if (p.State().EndsWith ("Euro")) {} else {p.State("noch keine Werte");}
if (q.State().EndsWith ("Euro")) {} else {q.State("noch keine Werte");}
! Aktueller Zähler aus der CCU in speichern:
c.State(curValue);
! WriteLine("Zaehlerstand wurde gesetzt auf: " # curValue);
! Datum und Uhrzeit der Aktualisierung speichern
dom.GetObject(type # " Aktualisierung").State(system.Date("%F %X"));
! Berechnungen durchführen. Nur weitermachen wenn es wirklich Mitternacht ist
if(system.Date("%H:%M") == "00:00")
{
! Woche
f.State(f.Value() + c.Value() - d.Value());
var og = f.Value();
var oeuro = price * og;
var oausgabe = og.ToString(2) # " kWh, " # oeuro.ToString(2) # " Euro";
o.State(oausgabe);
! Monat
h.State(h.Value() + c.Value() - d.Value());
var pg = h.Value();
var peuro = price * pg;
var pausgabe = pg.ToString(2) # " kWh, " # peuro.ToString(2) # " Euro";
p.State(pausgabe);
! Jahr
j.State(j.Value() + c.Value() - d.Value());
var qg = j.Value();
var qeuro = price * qg;
var qausgabe = qg.ToString(2) # " kWh, " # qeuro.ToString(2) # " Euro";
q.State(qausgabe);
! Gestern
var vg1 = dom.GetObject(type # " Zaehlerstand").Value();
var vg2 = dom.GetObject(type # " Referenz Zaehlerstand").Value();
var vg = vg1 - vg2;
var vgeuro = vg * price;
var vgausgabe = vg.ToString(2) # " kWh, " # vgeuro.ToString(2) # " Euro";
e.State(vgausgabe);
! Zählerstand Heute auf Gestern übertragen
d.State(c.Value());
! Berechnung der Prognose für das Laufende Jahr:
var mo = j.Value() * 365 / tage;
var meuro = price * mo;
var mausgabe = mo.ToString(2) # " kWh, " # meuro.ToString(2) # " Euro";
m.State(mausgabe);
! Weitermachen, wenn Mitternacht und zugleich Montag
if(system.Date("%a") == "Mon")
{
var lw = dom.GetObject(type # " aktuelle Woche Zahl").Value();
var lweuro = lw * price;
var lwausgabe = lw.ToString(2) # " kWh, " # lweuro.ToString(2) # " Euro";
g.State(lwausgabe);
f.State(0);
o.State("noch keine Werte");
}
! Weitermachen, wenn Mitternacht und zugleich Monatsanfang
if(system.Date("%d") == "01")
{
var lm = dom.GetObject(type # " aktueller Monat Zahl").Value();
var lmeuro = lm * price;
var lmausgabe = lm.ToString(2) # " kWh, " # lmeuro.ToString(2) # " Euro";
i.State(lmausgabe);
h.State(0);
p.State("noch keine Werte");
! Weitermachen, wnn Mitternacht, Monatsanfang und zugleich Jahresanfang
if(system.Date("%m") == "01")
{
var lj = dom.GetObject(type # " aktuelles Jahr Zahl").Value();
var ljeuro = lj * price;
var ljausgabe = lj.ToString(2) # " kWh, " # ljeuro.ToString(2) # " Euro";
k.State(ljausgabe);
j.State(0);
m.State(0);
q.State("noch keine Werte");
}
}
}
}
! Verbrauch heute
var vh1 = dom.GetObject(type # " Zaehlerstand").Value();
var vh2 = dom.GetObject(type # " Referenz Zaehlerstand").Value();
var vh = vh1 - vh2;
var vheuro = vh * price;
var vhausgabe = vh.ToString(2) # " kWh, " # vheuro.ToString(2) # " Euro" ;
l.State(vhausgabe);
WriteLine(c.Value());
WriteLine(d.Value());
WriteLine(e.Value());
WriteLine(f.Value());
WriteLine(g.Value());
WriteLine(h.Value());
WriteLine(i.Value());
WriteLine(j.Value());
WriteLine(k.Value());
WriteLine(l.Value());
WriteLine(m.Value());
WriteLine(o.Value());
WriteLine(p.Value());
WriteLine
Danke und Lg
Zuletzt geändert von Roland M. am 01.07.2023, 18:27, insgesamt 2-mal geändert.
Grund: Code-Tags eingefügt
Grund: Code-Tags eingefügt
- Roland M.
- Beiträge: 9887
- Registriert: 08.12.2012, 15:53
- System: CCU
- Wohnort: Graz, Österreich
- Hat sich bedankt: 256 Mal
- Danksagung erhalten: 1409 Mal
Re: Script für Energiezähler und Jahresprognose - Verbrauch und Kosten V3.2
Hallo und willkommen im Forum!
Roland
Wenn es nicht nur ein Fehler beim Kopiern ins Forum war, dann fehlt in der letzten Zeile so einiges...wolf.heilbronn hat geschrieben: ↑01.07.2023, 18:04Ich würde mich freuen wenn jemand den Fehler findet.Code: Alles auswählen
[...] WriteLine(m.Value()); WriteLine(o.Value()); WriteLine(p.Value()); WriteLine
Roland
Zur leichteren Hilfestellung bitte unbedingt beachten:
-----------------------------------------------------------------------
1. CCU2 mit ~100 Geräten (in Umstellung auf RaspberryMatic-OVA auf Proxmox-Server)
2. CCU2 per VPN mit ~50 Geräten (geplant: RaspberryMatic auf Charly)
3. CCU2 per VPN mit ~40 Geräten (geplant: RaspberryMatic auf CCU3)
CCU1, Test-CCU2, Raspi 1 mit kleinem Funkmodul, RaspberryMatic als VM unter Proxmox, Access Point,...
- Bezeichnung (HM-... bzw. HmIP-...) der betroffenen Geräte angeben (nicht Artikelnummer)
- Kurzbeschreibung des Soll-Zustandes (Was soll erreicht werden?)
- Kurzbeschreibung des Ist-Zustandes (Was funktioniert nicht?)
- Fehlermeldungen genau abschreiben, besser noch...
- Screenshots von Programmen, Geräteeinstellungen und Fehlermeldungen (direkt als jpg/png) einstellen!
-----------------------------------------------------------------------
1. CCU2 mit ~100 Geräten (in Umstellung auf RaspberryMatic-OVA auf Proxmox-Server)
2. CCU2 per VPN mit ~50 Geräten (geplant: RaspberryMatic auf Charly)
3. CCU2 per VPN mit ~40 Geräten (geplant: RaspberryMatic auf CCU3)
CCU1, Test-CCU2, Raspi 1 mit kleinem Funkmodul, RaspberryMatic als VM unter Proxmox, Access Point,...
-
- Beiträge: 4
- Registriert: 28.06.2023, 07:42
- System: CCU
Re: Script für Energiezähler und Jahresprognose - Verbrauch und Kosten V3.2
Hallo Roland,
danke für die Aufnahme.
Ja da fehlt wirklich was. Ist beim Kopieren wohl verrutscht.
WriteLine(o.Value());
WriteLine(p.Value());
WriteLine(q.Value());
Mit diesem endet das Skript. Trotzdem will es nicht funktionieren.
danke für die Aufnahme.
Ja da fehlt wirklich was. Ist beim Kopieren wohl verrutscht.
WriteLine(o.Value());
WriteLine(p.Value());
WriteLine(q.Value());
Mit diesem endet das Skript. Trotzdem will es nicht funktionieren.
- Baxxy
- Beiträge: 11026
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 631 Mal
- Danksagung erhalten: 2282 Mal
Re: Script für Energiezähler und Jahresprognose - Verbrauch und Kosten V3.2
Sieht so aus.wolf.heilbronn hat geschrieben: ↑01.07.2023, 18:04Der Energiezähler CCU lässt sich auch nicht resetten, er zählt nicht und die versteckte Variable bzw. Programm ist auch nicht aufzufinden. Liegt hier der Hund begraben?
Das Script hier nutzt diese interne Systemvariable als Datenquelle. Wenn die nicht vorhanden ist oder nicht funktioniert dann kann auch das Script nicht arbeiten.
Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen