Guten Abend,
also bei mir hat auch der Backofen seinen würdigen Beitrag zum Einstellen des Zählsensors geliefert. Allerdings habe ich mir nicht die Mühe mit dem Anzeichnen etc gemacht. Einmal (Backofen einschalten) LED Blinkt, Klebefolie ab und rauf damit. Bleeding Edge halt.
Aber mal zu was konstruktivem. Ich hab inzwischen 2 Script gebaut, welche den gestrigen und aktuellen Stromverbrauch ermitteln (inkl. Kosten) und zur weiteren Nutzung in Variablen speichern. Könnte man natürlich auch für den Displaytaster nutzen.
Ich beschreib das mal kurz:
Es werden folgende Systemvariablen benötigt:
Name : eCountToday Typ: Zahl Einheit kWh
Name : eCountYesterday Typ: Zahl Einheit kWh
Name : eCostToday Typ: Zahl Einheit: EUR
Name : eCostYesterday Typ: Zahl Einheit : EUR
Name : eEXMemory Typ: Zeichenkette Einheit : WH (Einheit is egal is nur Show)
var serialCounter = "XXXXX"; in jedem der Scripts mit der Seriennummer des eigenen Aktors füllen.
Script 1 darf nur einmal am Tag (um 0 Uhr zweckmässigerweise) laufen und ermittelt den gestrigen Verbrauch und speichert den Zählerstand.
Code: Alles auswählen
!! Energy Costs Part 1
!!
!! Berechnet die verbrauchten kWh seit dem letzten Aufruf + Preis
!! sollte einmal tgl. um 0 Uhr laufen
!! 02/15
!! (c) by thkl
!!
!! Benötigte SystemVariablen:
!! Name : eCountYesterday Typ: Zahl Einheit kWh
!! Name : eCostYesterday Typ: Zahl Einheit : EUR
!! Name : eEXMemory Typ: Zeichenkette
!!
!! Verbrauchte Energie wird nach Scriptlauf in eCountYesterday in kWh gespeichert Kosten in eCostYesterday
!! serialCounter mit Seriennummer des HM Zählers füllen
var serialCounter = "XXXXX";
var dpname = "ENERGY_COUNTER";
var priceKey = "curPrice";
var eEXMemory = dom.GetObject("eEXMemory");
var svCountYesterday = dom.GetObject("eCountYesterday");
var svCostYesterday = dom.GetObject("eCostYesterday");
object devEnergyDP = dom.GetObject("BidCos-RF."#serialCounter#":1."#dpname);
string tmpSVal = eEXMemory.State();
real devcount = devEnergyDP.State();
real statelast = tmpSVal.ToFloat();
real cnyday = devcount-statelast;
string stdout;string stderr;
string cmd = "/bin/sh -c 'cat /etc/config/energyPrice|sed -r \"s/\\"//g\"'";
system.Exec(cmd, &stdout, &stderr);
string sep = "\n";
string part;
string strCur;
real price;
foreach(part,stdout.Split(sep)) {
string key = part.StrValueByIndex(":",0);
string val = part.StrValueByIndex(":",1);
if (key==priceKey){
price = val.ToFloat();
}
if (key=="currency") {
strCur=val;
}
}
eEXMemory.State(devcount.ToString());
integer kwf = 1;
if (priceKey=="curPrice") {
kwf = 1000;
}
real costyed = price * (cnyday/kwf);
svCountYesterday.State((cnyday/kwf));
svCostYesterday.State(costyed);
Script 2 kann beliebig oft laufen (zb auch durch den Taster getriggert) und ermittelt den Vebrauch des aktuellen Tages
Code: Alles auswählen
!! Energy Costs Part 2
!!
!! Berechnet die verbrauchten kWh seit dem letzten Aufruf von Script 1 also im Idealfall
!! den Verbrauch seit Mitternacht
!!
!! kann beliebig oft laufen
!! funktioniert nur in Zusammenhang mit Script 1 richtig
!!
!! 02/15
!! (c) by thkl
!!
!! Benötigte SystemVariablen:
!! Name : eCountToday Typ: Zahl Einheit kWh
!! Name : eCostToday Typ: Zahl Einheit: EUR
!! Name : eEXMemory Typ: Zeichenkette
!!
!! Verbrauchte Energie wird nach Scriptlauf in eCountToday in kWh gespeichert Kosten in eCostToday
!! serialCounter mit Seriennummer des HM Zählers füllen
var serialCounter = "XXXXX";
var dpname = "ENERGY_COUNTER";
var priceKey = "curPrice";
var eEXMemory = dom.GetObject("eEXMemory");
var svCountToday = dom.GetObject("eCountToday");
var svCostToday = dom.GetObject("eCostToday");
object devEnergyDP = dom.GetObject("BidCos-RF."#serialCounter#":1."#dpname);
string tmpSVal = eEXMemory.State();
real devcount = devEnergyDP.State();
real statelast = tmpSVal.ToFloat();
real cntoday = devcount-statelast;
string stdout;string stderr;
string cmd = "/bin/sh -c 'cat /etc/config/energyPrice|sed -r \"s/\\"//g\"'";
system.Exec(cmd, &stdout, &stderr);
string sep = "\n";
string part;
string strCur;
real price;
foreach(part,stdout.Split(sep)) {
string key = part.StrValueByIndex(":",0);
string val = part.StrValueByIndex(":",1);
if (key==priceKey){
price = val.ToFloat();
}
if (key=="currency") {
strCur=val;
}
}
integer kwf = 1;
if (priceKey=="curPrice") {
kwf = 1000;
}
real costtoday = price * (cntoday/kwf);
svCountToday.State((cntoday/kwf));
svCostToday.State(costtoday);
Wichtig, in der Systemsteuerung unter Allgemeine Einstellungen muss der Energiepreis eingetragen werden.
Was passiert ist :
Script 1 wenn es um 0 Uhr läuft nimmt sich aus eEXMemory den gespeicherten Wert und zieht ihn vom aktuellen Zählerstand ab.
Damit hat man den Verbrauchswert des Vortages. Dieser und die Umrechnung in Euro wird in eCountYesterday bzw eCostYesterday gespeichert.
Gleichzeitig wird in eEXMemory der aktuelle Zählerstand gespeichert.
Script 2 nimmt den Zählerstand aus eEXMemory und zieht ihn vom aktuellen Zählerstand des Gerätes ab.
Damit hat man den aktuellen Verbrauch. Der Wert und die in Euro umgerechneten Kosten werden in eCountToday und eCostToday gespeichert.
Script 2 kann ggf auch per Timer einmal / h oder ähnliches laufen.
Ich hatte das jetzt 2 Tage im Test, funktioniert ganz hervorragend ...
P.S: Ich hab das Script auch gleich für die Gasmessungen angepasst.
Hier bitte folgendes ändern:
(Variableneinheiten sind keine kWh sondern m3 und in den Scripts
var dpname = "ENERGY_COUNTER";
var priceKey = "curPrice";
wird zu
var dpname = "GAS_ENERGY_COUNTER";
var priceKey = "gasPrice";