Code: Alles auswählen
!! Energy Costs Part 2a
!!
!! Berechnet die verbrauchten kWh/m3 und den Preis für Gas/Strom für den aktuellen Tag
!! Der erste Aufruf des Tages speichert den Verbrauch des Vortages
!!
!! kann beliebig oft laufen sollte aber günstigerweise mindestens einmal jeden Tag um 0 Uhr laufen
!!
!! 02/15
!! (c) by thkl
!!
!! Benötigte SystemVariablen:
!! Name : Stromverbrauch_heute Typ: Zahl Einheit kWh / m3
!! Name : eCostToday Typ: Zahl Einheit: EUR
!!
!! Name : Stromverbrauch_gestern Typ: Zahl Einheit kWh / m3
!! Name : eCostYesterday Typ: Zahl Einheit: EUR
!!
!! Name : eEXMemory Typ: Zeichenkette
!!
!! serialCounter mit Seriennummer des HM Zählers füllen
!! useAsGasCounter = true -> Gaszähler ; false -> Elektrozähler
!! cuxddevice = Seriennummer des CuxD Exec Devices (optional - sonst wird system.exe genutzt)
string serialCounter = "NEQ0862478";
boolean useAsGasCounter = false;
string cuxddevice = "";
!! ================== do not change anything below ==========
var dpname = "ENERGY_COUNTER";
if (useAsGasCounter==true) {dpname = "GAS_ENERGY_COUNTER";}
string stdout;string stderr;
string cmd = "/bin/sh -c 'cat /etc/config/energyPrice|sed -r \"s/\\"//g\"'";
object devEnergyDP = dom.GetObject("BidCos-RF."#serialCounter#":1."#dpname);
var eEXMemory = dom.GetObject("eEXMemory");
!! integer lastSetMemory = eEXMemory.Timestamp().ToInteger();
integer day = system.Date("%j").ToInteger();
integer year = system.Date("%Y");
integer lastSetDay = eEXMemory.Timestamp().Yearday();
integer lastSetYear = eEXMemory.Timestamp().Year();
boolean braveNewDay = false;
if ((day>lastSetDay) || (year > lastSetYear)) {
braveNewDay = true;
}
string tmpSVal = eEXMemory.State();
real devcount = devEnergyDP.State();
real statelast = tmpSVal.ToFloat();
real cnyday = devcount-statelast;
if (cuxddevice!="") {
dom.GetObject("CUxD."#cuxddevice#":1.CMD_SETS").State(cmd);
dom.GetObject("CUxD."#cuxddevice#":1.CMD_QUERY_RET").State(1);
stdout = dom.GetObject("CUxD."#cuxddevice#":1.CMD_RETS").State();
} else {
system.Exec(cmd, &stdout, &stderr);
}
string sep = "\n";
string part;
string strCur;
real pricekwh=0.0;
real condvalue=0.0;
real heatvalue=0.0;
foreach(part,stdout.Split(sep)) {
string key = part.StrValueByIndex(":",0);
string val = part.StrValueByIndex(":",1);
if (useAsGasCounter==true) {
if (key=="gasHeatingValue"){heatvalue = val.ToFloat();}
if (key=="gasConditionNumber"){condvalue = val.ToFloat();}
if (key=="gasPrice"){pricekwh = val.ToFloat();}
} else {
if (key=="curPrice"){pricekwh = val.ToFloat();}
}
}
if (braveNewDay==true) {
eEXMemory.State(devcount.ToString());
}
real enerycost = 0.0;
real enerycount = 0.0;
if (useAsGasCounter==true) {
real consumtion = 0;
consumtion = heatvalue * condvalue * cnyday;
enerycost = pricekwh * consumtion;
enerycount = cnyday;
} else {
enerycount = (cnyday/1000);
enerycost = pricekwh * enerycount;
}
if (braveNewDay==true) {
dom.GetObject("Stromverbrauch_gestern").State(enerycount);
dom.GetObject("eCostYesterday").State(enerycost);
} else {
dom.GetObject("Stromverbrauch_heute").State(enerycount);
dom.GetObject("eCostToday").State(enerycost);
}/code]