Jetzt kann mit dem Skript folgendes gemacht werden:
- Der Stromverbrauch (aktueller Tag, aktuelle Woche, aktueller Monat und aktuelles Jahr) wird angezeigt.
- Stromkosten und -verbauch bei "aktueller Tag, letzte Woche, letzter Monat, letztes Jahr".
- Die Stromkosten werden aus den Systemeinstellungen übernommen und müssen im Skript nicht angegeben werden.
- Hochrechnung für den Jahresverbrauch (aktuelles Jahr ab installation, folgende Jahre ab 01.01.)
- Funktioniert im Grunde mit allen HMIP Mess-Aktoren (z.B. HMIP-PSM oder HMIP-BSM)
- Die Jahreshochrechnung ist farblich markiert.
Installation:
Zu Beginn erstellt man für die HMIP-PSM folgende Systemvariablen und ordnen sie dem Kanal des Gerätes zu. Das XX steht dabei als Kürzel, damit man mehrere Geräte messen kann. Bei mir habe zum Beispiel anstelle XX - KK für Küche Kühlschrank gewählt.
XX Verbrauch gestern - Zeichenkette
XX aktuelle Woche - Zahl, Einheit kWh
XX letzte Woche - Zeichenkette
XX aktueller Monat - Zahl, Einheit kWh
XX letzter Monat - Zeichenkette
XX aktuelles Jahr - Zahl, Einheit kWh
XX letztes Jahr - Zeichenkette
XX Verbrauch heute - Zeichenkette
XX Aktualisierung - Zeichenkette
XX Prognose akt Jahr - Zeichenkette
XX Zaehlerstand - Zahl, Einheit kWh
XX Referenz Zaehlerstand - Zahl, Einheit kWh
Ist das richtig gemacht, sieht das dann bei dem Gerät in etwa so aus - nur mit anderen Werten: Als nächstes wird folgendes Programm erstellt: Wenn noch nicht vorhanden, sollte CUx-Daemon installiert werden. Für die Abfrage des Strompreises aus den Systemeinstellungen ist im CuxD ein neues Gerät zu erzeugen: viewtopic.php?t=12780Schritt 1 und 2 durchführen.
Bei dem Skript muss zu Beginn etwas angepasst werden. Zunächst besorgt man die ID des Kanals sowie die Seriennummer der Schalt-Mess-Steckdose. Dabei hilft das folgende Posting viewtopic.php?f=27&t=20945#p175170
Danach trägt man die ermittelten Werte im Skript (Zeile 2) ein. Außerdem wird im Skript in Zeil 1 noch das XX durch das selbstgewählte Kürzel ersetzt.
Unter Installationsdatum wird das Datum eingetragen, wenn das Skript in Betrieb gebommmen wird. Das dient der Berechnung der Prognose für das laufende Jahr. Es sollte zugleich der Zählerstand in der CCU resettet werden.
Code: Alles auswählen
string type = "KK";
object counter = (dom.GetObject(ID_SYSTEM_VARIABLES)).Get("svEnergyCounter_0000_0006543621FC58:6");
! Installationsdatum dieses Skriptes
var instdate = "23.06.2018";
string d = instdate.StrValueByIndex(".",0);
string m = instdate.StrValueByIndex(".",1);
string y = instdate.StrValueByIndex(".",2);
integer startjahr = y.ToInteger();
instdate = y#"-"#m#"-"#d;
integer heute = system.Date("%j").ToInteger();
integer aktjahr = system.Date("%Y").ToInteger();
integer tage = 0;
if (aktjahr == startjahr) {}
else {instdate = aktjahr#"-01-01";}
tage = heute - instdate.ToTime().Format("%j").ToInteger();
WriteLine (tage);
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;
real price=0;
foreach(part,stdout.Split(sep)) {
string key = part.StrValueByIndex(":",0);
string val = part.StrValueByIndex(":",1);
if (key=="curPrice"){
price = val.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"); ! Zahl
object d = dom.GetObject(type # " Referenz Zaehlerstand");
object e = dom.GetObject(type # " Verbrauch gestern");
object f = dom.GetObject(type # " aktuelle Woche");
object g = dom.GetObject(type # " letzte Woche");
object h = dom.GetObject(type # " aktueller Monat");
object i = dom.GetObject(type # " letzter Monat");
object j = dom.GetObject(type # " aktuelles Jahr");
object k = dom.GetObject(type # " letztes Jahr");
object l = dom.GetObject(type # " Verbrauch heute");
object m = dom.GetObject(type # " Prognose akt Jahr");
object n = dom.GetObject(type # " Anzahl Tage");
! 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");}
! Aktueller Zähler aus der CCU in speichern:
object c = dom.GetObject(type # " Zaehlerstand");
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")
{
f.State(f.Value() + c.Value() - d.Value());
h.State(h.Value() + c.Value() - d.Value());
j.State(j.Value() + c.Value() - d.Value());
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);
! Berechnung der Prognose für das Laufende Jahr:
! if (methode.Value() == "1")
! {
! Methode 1
! var at = dom.GetObject(type # " Anzahl Tage").Value();
var year = dom.GetObject(type # " aktuelles Jahr").Value();
var mo = year * 365 / tage;
var meuro = mo * price;
var mausgabe = "<font color=yellow>" # mo.ToString(2) # " kWh, " # meuro.ToString(2) # " Euro</font>";
m.State(mausgabe);
! var ata = at + 1;
! n.State(ata);
! }
d.State(c.Value());
! Weitermachen, wenn Mitternacht und zugleich Montag
if(system.Date("%a") == "Mon")
{
var lw = dom.GetObject(type # " aktuelle Woche").Value();
var lweuro = lw * price;
var lwausgabe = lw.ToString(2) # " kWh, " # lweuro.ToString(2) # " Euro";
g.State(lwausgabe);
f.State(0);
}
! Weitermachen, wenn Mitternacht und zugleich Monatsanfang
if(system.Date("%d") == "01")
{
var lm = dom.GetObject(type # " aktueller Monat").Value();
var lmeuro = lm * price;
var lmausgabe = lm.ToString(2) # " kWh, " # lmeuro.ToString(2) # " Euro";
i.State(lmausgabe);
h.State(0);
}
! Weitermachen, wnn Mitternacht, Monatsanfang und zugleich Jahresanfang
if(system.Date("%m") == "01")
{
var lj = dom.GetObject(type # " aktueller Monat").Value();
var ljeuro = lm * price;
var ljausgabe = lj.ToString(2) # " kWh, " # ljeuro.ToString(2) # " Euro";
k.State(ljausgabe);
j.State(0);
n.State(0);
}
}
! 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);
}
Ursprüngliches Posting
Guten Morgen,
ich such seine Möglichkeit, den Leistungsverbrauch hinter den Schalt-Mess-Aktoren für einen bestimmten Zeitraum (Montag/Jahr) zu bestimmen. Beispiel: Mein Kühlschrank hängt an der HMIP-PSM Steckdose. Wie viel Energie pro Jahr benötigt er [kWh]?
In den letzten Tagen habe ich immer mal verschiedene Suchbegriffe versucht, aber alles, was ich zu dem Thema gefunden habe, bezog sich auf die Messung am Stromzähler via HM-ES-TX-WM, oder auf den Stromverbrauch der Aktoren selbst.
Vermutlich gibt es da schon ein Script oder so und ich bin nur zu doof, dass zu finden...