HM-ES-TX-WM/Strom-Script01: Unterschied zwischen den Versionen
K |
K |
||
Zeile 8: | Zeile 8: | ||
− | <br/><br/><br/><span style="line-height: 1.6">Es werden folgende Systemvariablen für Script 1 und Script 2 benötigt:</span> | + | <br/><br/><br/><br/><span style="line-height: 1.6">Es werden folgende Systemvariablen für Script 1 und Script 2 benötigt:</span> |
{| border="1" cellpadding="1" cellspacing="1" | {| border="1" cellpadding="1" cellspacing="1" | ||
Zeile 48: | Zeile 48: | ||
''Universal für Strom und Gas sowie Einsatz von CuxD Exec. Bitte Hinweise am Anfang des Scrips beachten!!'' | ''Universal für Strom und Gas sowie Einsatz von CuxD Exec. Bitte Hinweise am Anfang des Scrips beachten!!'' | ||
<div style="background:#eee; border:1px solid #ccc; padding:5px 10px"> | <div style="background:#eee; border:1px solid #ccc; padding:5px 10px"> | ||
− | :<div id="bloop_customfont" style="margin: 0px">!! Energy Costs Part 2 </div><div id="bloop_customfont" style="margin: 0px">!!</div><div id="bloop_customfont" style="margin: 0px">!! Berechnet die verbrauchten kWh seit dem letzten Aufruf von Script 1 also im Idealfall</div><div id="bloop_customfont" style="margin: 0px">!! den Verbrauch seit Mitternacht</div><div id="bloop_customfont" style="margin: 0px">!!</div><div id="bloop_customfont" style="margin: 0px">!! kann beliebig oft laufen</div><div id="bloop_customfont" style="margin: 0px">!! funktioniert nur in Zusammenhang mit Script 1 richtig</div><div id="bloop_customfont" style="margin: 0px">!!</div><div id="bloop_customfont" style="margin: 0px">!! 02/15 </div><div id="bloop_customfont" style="margin: 0px">!! (c) by thkl</div><div id="bloop_customfont" style="margin: 0px">!!</div><div id="bloop_customfont" style="margin: 0px">!! Benötigte SystemVariablen:</div><div id="bloop_customfont" style="margin: 0px">!! Name : eCountToday Typ: Zahl Einheit kWh</div><div id="bloop_customfont" style="margin: 0px">!! Name : eCostToday Typ: Zahl Einheit: EUR</div><div id="bloop_customfont" style="margin: 0px">!! Name : eEXMemory Typ: Zeichenkette</div><div id="bloop_customfont" style="margin: 0px">!!</div><div id="bloop_customfont" style="margin: 0px">!! Verbrauchte Energie wird nach Scriptlauf in eCountToday in kWh gespeichert Kosten in eCostToday</div><div id="bloop_customfont" style="margin: 0px">!! serialCounter mit Seriennummer des HM Zählers füllen</div><div id="bloop_customfont" style="margin: 0px">!! useAsGasCounter true = Gaszähler ; false = Elektro</div><div id="bloop_customfont" style="margin: 0px"><br/></div><div id="bloop_customfont" style="margin: 0px">string serialCounter = "";</div><div id="bloop_customfont" style="margin: 0px">boolean useAsGasCounter = false;</div><div id="bloop_customfont" style="margin: 0px">string cuxddevice = "";</div><div id="bloop_customfont" style="margin: 0px"><br/></div><div id="bloop_customfont" style="margin: 0px">var dpname = "ENERGY_COUNTER";</div><div id="bloop_customfont" style="margin: 0px">if (useAsGasCounter==true) {</div><div id="bloop_customfont" style="margin: 0px"> dpname = "GAS_ENERGY_COUNTER";</div><div id="bloop_customfont" style="margin: 0px">}</div><div id="bloop_customfont" style="margin: 0px"><br/></div><div id="bloop_customfont" style="margin: 0px">string stdout;string stderr;</div><div id="bloop_customfont" style="margin: 0px">string cmd = "/bin/sh -c 'cat /etc/config/energyPrice|sed -r \"s/\\"//g\"'";</div><div id="bloop_customfont" style="margin: 0px"><br/></div><div id="bloop_customfont" style="margin: 0px">var eEXMemory = dom.GetObject("eEXMemory");</div><div id="bloop_customfont" style="margin: 0px">var svCountToday = dom.GetObject("eCountToday");</div><div id="bloop_customfont" style="margin: 0px">var svCostToday = dom.GetObject("eCostToday");</div><div id="bloop_customfont" style="margin: 0px">object devEnergyDP = dom.GetObject("BidCos-RF."#serialCounter#":1."#dpname);</div><div id="bloop_customfont" style="margin: 0px">string tmpSVal = eEXMemory.State();</div><div id="bloop_customfont" style="margin: 0px">real devcount = devEnergyDP.State();</div><div id="bloop_customfont" style="margin: 0px">real statelast = tmpSVal.ToFloat();</div><div id="bloop_customfont" style="margin: 0px">real cntoday = devcount-statelast;</div><div id="bloop_customfont" style="margin: 0px"><br/></div><div id="bloop_customfont" style="margin: 0px">if (cuxddevice!="") {</div><div id="bloop_customfont" style="margin: 0px"> dom.GetObject("CUxD."#cuxddevice#":1.CMD_SETS").State(cmd);</div><div id="bloop_customfont" style="margin: 0px"> dom.GetObject("CUxD."#cuxddevice#":1.CMD_QUERY_RET").State(1);</div><div id="bloop_customfont" style="margin: 0px"> stdout = dom.GetObject("CUxD."#cuxddevice#":1.CMD_RETS").State();</div><div id="bloop_customfont" style="margin: 0px">} else {</div><div id="bloop_customfont" style="margin: 0px"> system.Exec(cmd, &stdout, &stderr);</div><div id="bloop_customfont" style="margin: 0px">}</div><div id="bloop_customfont" style="margin: 0px"><br/></div><div id="bloop_customfont" style="margin: 0px">string sep = "\n";</div><div id="bloop_customfont" style="margin: 0px">string part;</div><div id="bloop_customfont" style="margin: 0px">string strCur;</div><div id="bloop_customfont" style="margin: 0px">real pricekwh=0.0;</div><div id="bloop_customfont" style="margin: 0px">real condvalue=0.0;</div><div id="bloop_customfont" style="margin: 0px">real heatvalue=0.0;</div><div id="bloop_customfont" style="margin: 0px"><br/></div><div id="bloop_customfont" style="margin: 0px">foreach(part,stdout.Split(sep)) {</div><div id="bloop_customfont" style="margin: 0px"> string key = part.StrValueByIndex(":",0);</div><div id="bloop_customfont" style="margin: 0px"> string val = part.StrValueByIndex(":",1);</div><div id="bloop_customfont" style="margin: 0px"> </div><div id="bloop_customfont" style="margin: 0px"> if (useAsGasCounter==true) {</div><div id="bloop_customfont" style="margin: 0px"> if (key=="gasHeatingValue"){heatvalue = val.ToFloat();}</div><div id="bloop_customfont" style="margin: 0px"> if (key=="gasConditionNumber"){condvalue = val.ToFloat();}</div><div id="bloop_customfont" style="margin: 0px"> if (key=="gasPrice"){pricekwh = val.ToFloat();}</div><div id="bloop_customfont" style="margin: 0px"> } else {</div><div id="bloop_customfont" style="margin: 0px"> if (key=="curPrice"){pricekwh = val.ToFloat();}</div><div id="bloop_customfont" style="margin: 0px"> }</div><div id="bloop_customfont" style="margin: 0px">}</div><div id="bloop_customfont" style="margin: 0px"><br/></div><div id="bloop_customfont" style="margin: 0px">if (useAsGasCounter==true) {</div><div id="bloop_customfont" style="margin: 0px"> real consumtion = heatvalue * condvalue * cntoday;</div><div id="bloop_customfont" style="margin: 0px"> real costtoday = pricekwh * consumtion;</div><div id="bloop_customfont" style="margin: 0px"> svCountToday.State( | + | :<div id="bloop_customfont" style="margin: 0px">!! Energy Costs Part 2 </div><div id="bloop_customfont" style="margin: 0px">!!</div><div id="bloop_customfont" style="margin: 0px">!! Berechnet die verbrauchten kWh seit dem letzten Aufruf von Script 1 also im Idealfall</div><div id="bloop_customfont" style="margin: 0px">!! den Verbrauch seit Mitternacht</div><div id="bloop_customfont" style="margin: 0px">!!</div><div id="bloop_customfont" style="margin: 0px">!! kann beliebig oft laufen</div><div id="bloop_customfont" style="margin: 0px">!! funktioniert nur in Zusammenhang mit Script 1 richtig</div><div id="bloop_customfont" style="margin: 0px">!!</div><div id="bloop_customfont" style="margin: 0px">!! 02/15 </div><div id="bloop_customfont" style="margin: 0px">!! (c) by thkl</div><div id="bloop_customfont" style="margin: 0px">!!</div><div id="bloop_customfont" style="margin: 0px">!! Benötigte SystemVariablen:</div><div id="bloop_customfont" style="margin: 0px">!! Name : eCountToday Typ: Zahl Einheit kWh</div><div id="bloop_customfont" style="margin: 0px">!! Name : eCostToday Typ: Zahl Einheit: EUR</div><div id="bloop_customfont" style="margin: 0px">!! Name : eEXMemory Typ: Zeichenkette</div><div id="bloop_customfont" style="margin: 0px">!!</div><div id="bloop_customfont" style="margin: 0px">!! Verbrauchte Energie wird nach Scriptlauf in eCountToday in kWh gespeichert Kosten in eCostToday</div><div id="bloop_customfont" style="margin: 0px">!! serialCounter mit Seriennummer des HM Zählers füllen</div><div id="bloop_customfont" style="margin: 0px">!! useAsGasCounter true = Gaszähler ; false = Elektro</div><div id="bloop_customfont" style="margin: 0px"><br/></div><div id="bloop_customfont" style="margin: 0px">string serialCounter = "";</div><div id="bloop_customfont" style="margin: 0px">boolean useAsGasCounter = false;</div><div id="bloop_customfont" style="margin: 0px">string cuxddevice = "";</div><div id="bloop_customfont" style="margin: 0px"><br/></div><div id="bloop_customfont" style="margin: 0px">var dpname = "ENERGY_COUNTER";</div><div id="bloop_customfont" style="margin: 0px">if (useAsGasCounter==true) {</div><div id="bloop_customfont" style="margin: 0px"> dpname = "GAS_ENERGY_COUNTER";</div><div id="bloop_customfont" style="margin: 0px">}</div><div id="bloop_customfont" style="margin: 0px"><br/></div><div id="bloop_customfont" style="margin: 0px">string stdout;string stderr;</div><div id="bloop_customfont" style="margin: 0px">string cmd = "/bin/sh -c 'cat /etc/config/energyPrice|sed -r \"s/\\"//g\"'";</div><div id="bloop_customfont" style="margin: 0px"><br/></div><div id="bloop_customfont" style="margin: 0px">var eEXMemory = dom.GetObject("eEXMemory");</div><div id="bloop_customfont" style="margin: 0px">var svCountToday = dom.GetObject("eCountToday");</div><div id="bloop_customfont" style="margin: 0px">var svCostToday = dom.GetObject("eCostToday");</div><div id="bloop_customfont" style="margin: 0px">object devEnergyDP = dom.GetObject("BidCos-RF."#serialCounter#":1."#dpname);</div><div id="bloop_customfont" style="margin: 0px">string tmpSVal = eEXMemory.State();</div><div id="bloop_customfont" style="margin: 0px">real devcount = devEnergyDP.State();</div><div id="bloop_customfont" style="margin: 0px">real statelast = tmpSVal.ToFloat();</div><div id="bloop_customfont" style="margin: 0px">real cntoday = devcount-statelast;</div><div id="bloop_customfont" style="margin: 0px"><br/></div><div id="bloop_customfont" style="margin: 0px">if (cuxddevice!="") {</div><div id="bloop_customfont" style="margin: 0px"> dom.GetObject("CUxD."#cuxddevice#":1.CMD_SETS").State(cmd);</div><div id="bloop_customfont" style="margin: 0px"> dom.GetObject("CUxD."#cuxddevice#":1.CMD_QUERY_RET").State(1);</div><div id="bloop_customfont" style="margin: 0px"> stdout = dom.GetObject("CUxD."#cuxddevice#":1.CMD_RETS").State();</div><div id="bloop_customfont" style="margin: 0px">} else {</div><div id="bloop_customfont" style="margin: 0px"> system.Exec(cmd, &stdout, &stderr);</div><div id="bloop_customfont" style="margin: 0px">}</div><div id="bloop_customfont" style="margin: 0px"><br/></div><div id="bloop_customfont" style="margin: 0px">string sep = "\n";</div><div id="bloop_customfont" style="margin: 0px">string part;</div><div id="bloop_customfont" style="margin: 0px">string strCur;</div><div id="bloop_customfont" style="margin: 0px">real pricekwh=0.0;</div><div id="bloop_customfont" style="margin: 0px">real condvalue=0.0;</div><div id="bloop_customfont" style="margin: 0px">real heatvalue=0.0;</div><div id="bloop_customfont" style="margin: 0px"><br/></div><div id="bloop_customfont" style="margin: 0px">foreach(part,stdout.Split(sep)) {</div><div id="bloop_customfont" style="margin: 0px"> string key = part.StrValueByIndex(":",0);</div><div id="bloop_customfont" style="margin: 0px"> string val = part.StrValueByIndex(":",1);</div><div id="bloop_customfont" style="margin: 0px"> </div><div id="bloop_customfont" style="margin: 0px"> if (useAsGasCounter==true) {</div><div id="bloop_customfont" style="margin: 0px"> if (key=="gasHeatingValue"){heatvalue = val.ToFloat();}</div><div id="bloop_customfont" style="margin: 0px"> if (key=="gasConditionNumber"){condvalue = val.ToFloat();}</div><div id="bloop_customfont" style="margin: 0px"> if (key=="gasPrice"){pricekwh = val.ToFloat();}</div><div id="bloop_customfont" style="margin: 0px"> } else {</div><div id="bloop_customfont" style="margin: 0px"> if (key=="curPrice"){pricekwh = val.ToFloat();}</div><div id="bloop_customfont" style="margin: 0px"> }</div><div id="bloop_customfont" style="margin: 0px">}</div><div id="bloop_customfont" style="margin: 0px"><br/></div><div id="bloop_customfont" style="margin: 0px">if (useAsGasCounter==true) {</div><div id="bloop_customfont" style="margin: 0px"> real consumtion = heatvalue * condvalue * cntoday;</div><div id="bloop_customfont" style="margin: 0px"> real costtoday = pricekwh * consumtion;</div><div id="bloop_customfont" style="margin: 0px"> svCountToday.State(cntoday);<br/></div><div id="bloop_customfont" style="margin: 0px"> svCostToday.State(costtoday);</div><div id="bloop_customfont" style="margin: 0px">} else {</div><div id="bloop_customfont" style="margin: 0px"> real costtoday = pricekwh * (cntoday/1000);</div><div id="bloop_customfont" style="margin: 0px"> svCountToday.State((cntoday/1000));</div><div id="bloop_customfont" style="margin: 0px"> svCostToday.State(costtoday);</div><div id="bloop_customfont" style="margin: 0px">}<br/></div> |
</div> | </div> | ||
| |
Version vom 14. Februar 2015, 14:14 Uhr
Thomas hat 3 Scripte geschrieben, die den heutigen und gestrigen Verbrauch in eine SysVar schreiben.
Ausserdem werden die Kosten aus dem entsprechenden Strompreis Eintrag in der Systemsteuerung der CCU berechnet.
Inhaltsverzeichnis
- 1 Script 1 darf nur einmal am Tag (um 0 Uhr zweckmässigerweise) laufen und ermittelt den gestrigen Verbrauch und speichert den Zählerstand.
- 2 Script 2 kann beliebig oft laufen und ermittelt den Vebrauch des aktuellen Tages
- 3 Script 3 für die Berrechnung der jährlichen Energiekosten Strom oder Gas universell.
- 4 Script 4 setzt die CCU interne Zähl-Variable auf den aktuellen Zählerstand
Es werden folgende Systemvariablen für Script 1 und Script 2 benötigt:
eCountToday |
Zahl Einheit kWh |
eCountYesterday |
Zahl Einheit kWh |
eCostToday |
Zahl Einheit: EUR |
eCostYesterday |
Zahl Einheit: EUR |
eEXMemory |
Zeichenkette Einheit : WH (Einheit is egal is nur Show) |
"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.
Universal für Strom und Gas sowie Einsatz von CuxD Exec. Bitte Hinweise am Anfang des Scrips beachten!!
- !! 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/m3!! Name : eCostYesterday Typ: Zahl Einheit : EUR!! Name : eEXMemory Typ: Zeichenkette!!!! Verbrauchte Energie wird nach Scriptlauf in eCountYesterday in kWh/m3 gespeichert Kosten in eCostYesterday!! serialCounter mit Seriennummer des HM Zählers füllen!! useAsGasCounter = 0 ; Elektroenergie wird gezählt =1 Gas wird gezählt!! cuxddevice wenn mit Seriennummer eines CuxD Exec Gerätes gefüllt wird das sonst system.exec verwendetvar serialCounter = "";var useAsGasCounter = 0;var cuxddevice = "";var dpname = "ENERGY_COUNTER";if (useAsGasCounter==1) {dpname = "GAS_ENERGY_COUNTER";}string stdout;string stderr;string cmd = "/bin/sh -c 'cat /etc/config/energyPrice|sed -r \"s/\\"//g\"'";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;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;real condvalue=0;real heatvalue=0;foreach(part,stdout.Split(sep)) {string key = part.StrValueByIndex(":",0);string val = part.StrValueByIndex(":",1);if (useAsGasCounter==1) {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 (key=="currency") {strCur=val;}}eEXMemory.State(devcount.ToString());if (useAsGasCounter==1) {real consumtion = 0;consumtion = heatvalue * condvalue * cnyday;real costyed = pricekwh * consumtion;svCountYesterday.State((cnyday));svCostYesterday.State(costyed);} else {real costyed = pricekwh * (cnyday/1000);svCountYesterday.State((cnyday/1000));svCostYesterday.State(costyed);}
Script 2 kann beliebig oft laufen und ermittelt den Vebrauch des aktuellen Tages
Universal für Strom und Gas sowie Einsatz von CuxD Exec. Bitte Hinweise am Anfang des Scrips beachten!!
- !! 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!! useAsGasCounter true = Gaszähler ; false = Elektrostring serialCounter = "";boolean useAsGasCounter = false;string cuxddevice = "";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\"'";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;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 (useAsGasCounter==true) {real consumtion = heatvalue * condvalue * cntoday;real costtoday = pricekwh * consumtion;svCountToday.State(cntoday);svCostToday.State(costtoday);} else {real costtoday = pricekwh * (cntoday/1000);svCountToday.State((cntoday/1000));svCostToday.State(costtoday);}
Script 3 für die Berrechnung der jährlichen Energiekosten Strom oder Gas universell.
Hier wird schon zwischen Elektro und Gas Zähler unterschieden. Auch kann optional ein CuxD Exec Device statt system.exec verwendet werden. Siehe Kommentare im Script
Folgende Variablen:
eLastInvoice |
Zahl |
hier den Zählerstand der letzten Energieabrechnung in kWh oder m3 eintragen |
eStart |
Zeichenkette |
hier den aktuellen Zählerstand und den Zählerstand des Energiemessgerätes in ganzen kWh oder m3 eintragen und zwar wie folgt: |
|
|
Zählerstand EZähler|Zählerstand HM Zähler (Beispiel 17456|5 ; wenn der Schwarze Kasten im E-Verteiler 17456 zeigt und gleichzeitig das HM Gerät 5) Achtung das HM Gerät zählt in WattStunden also / 1000 |
|
|
Die Variable eStart dient der Differenzrechnung um bei jedem Scriptaufruf auf den aktuellen Zählerstand des richtigen EZählers berechnen zu können |
eUsedEnergyCost |
Zahl |
Einheit :EUR - Energiekosten |
eUsedEnergyCount |
Zahl |
Einheit :kWh oder m3 - Verbrauchte kWh oder m3 |
eTotalEnergyCount |
Zahl |
Einheit :kWh oder m3 - aktueller Stand des Zählers |
|
|
|
|
|
Folgende Variablen am Anfang des Scriptes anpassen: |
useAsGasCounter |
|
useAsGasCounter = 0 - E Zähler ; = 1 Gas Zähler |
cuxddevice |
|
cuxddevice = Seriennummer des CuxD Exec Devices. Wenn nicht vorhanden leer lassen dann wird system.exec genommen |
var serialCounter |
|
"XXXXX"; -> hier wieder Seriennummer anpassen |
!! Energy Costs Part 3
!!
!! Berechnet die verbrauchten kWh/m3 seit der letzten Abrechnung des Energielieferanten
!!
!! kann beliebig oft laufen
!!
!! 02/15
!! (c) by thkl
!!
!! Benötigte SystemVariablen:
!! Name : eLastInvoice Typ:Zahl -> hier den Zählerstand der letzten Energieabrechnung in kWh oder m3 eintragen.
!! Name : eStart Typ: Zeichenkette -> hier den aktuellen Zählerstand und den Zählerstand des Energiemessgerätes in ganzen kWh eintragen und zwar wie folgt:
!! Zählerstand EZähler|Zählerstand HM Zähler (Beispiel 17456|5 ; wenn der Schwarze Kasten im E-Verteiler 17456 zeigt und gleichzeitig das HM Gerät 5) Achtung das HM Gerät zählt in WattStunden (alternativ natürlich die Gaszählerwerte)
!! also / 1000
!! Name : eUsedEnergyCost Typ: Zahl Einheit :EUR
!! Name : eUsedEnergyCount Typ: Zahl Einheit :kWh oder m3
!! Name : eTotalEnergyCount Typ: Zahl Einheit :kWh oder m3
!! Energiekosten werden nach Scriptlauf in eUsedEnergyCost gespeichert
!! Verbrauchte KwH werden nach Scriptlauf in eUsedEnergyCount gespeichert
!! aktueller Stand des Stromzählers wird in eTotalEnergyCount gespeichert!!
!! serialCounter = "" - Hier die Seriennummer des HM Zählregrätes eintragen
!! useAsGasCounter = 0 - E Zähler ; = 1 Gas Zähler
!! cuxddevice = Seriennummer des CuxD Exec Devices. Wenn nicht vorhanden leer lassen dann wird system.exec genommen
var serialCounter = "";
var useAsGasCounter = 0;
var cuxddevice = "";
!! ================ ab hier nichts mehr aendern
var dpname = "ENERGY_COUNTER";
if (useAsGasCounter==1) {
dpname = "GAS_ENERGY_COUNTER";
}
var svLastInvoice = dom.GetObject("eLastInvoice");
var svMemory = dom.GetObject("eStart");
var svUsedEnergyCost = dom.GetObject("eUsedEnergyCost");
var svUsedEnergyCount = dom.GetObject("eUsedEnergyCount");
var svTotalEnergyCount = dom.GetObject("eTotalEnergyCount");
var memory = svMemory.State();
var countLastIncoice = svLastInvoice.State();
object devEnergyDP = dom.GetObject("BidCos-RF."#serialCounter#":1."#dpname);
real oec = memory.StrValueByIndex("|",0).ToFloat();
real shc = memory.StrValueByIndex("|",1).ToFloat();
real chc = devEnergyDP.State();
string stdout;string stderr;
string cmd = "/bin/sh -c 'cat /etc/config/energyPrice|sed -r \"s/\\"//g\"'";
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;
real condvalue=0;
real heatvalue=0;
foreach(part,stdout.Split(sep)) {
string key = part.StrValueByIndex(":",0);
string val = part.StrValueByIndex(":",1);
if (useAsGasCounter==1) {
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 (key=="currency") {
strCur=val;
}
}
if (useAsGasCounter==1) {
real cec = (chc - shc)+oec;
real uec = cec-countLastIncoice;
real consumtion = heatvalue * condvalue * uec;
real costyear = pricekwh * consumtion;
svUsedEnergyCost.State(costyear);
svUsedEnergyCount.State(uec);
svTotalEnergyCount.State(cec);
} else {
real cec = ((chc/1000) - shc)+oec;
real uec = cec-countLastIncoice;
real costyear = pricekwh * (uec);
svUsedEnergyCost.State(costyear);
svUsedEnergyCount.State(uec);
svTotalEnergyCount.State(cec);
}
Script 4 setzt die CCU interne Zähl-Variable auf den aktuellen Zählerstand
dom.GetObject("svEnergyCounter_XXXXX_XXXXXXXXXX:1").State(dom.GetObject("BidCos-RF.SERIENNUMMER:1.ENERGY_COUNTER").State()+12345);
Wobei 12345 der Stand des richtigen Zählers bei 0 Stellung des HM Zählers ist. Bei Bedarf kann man natürlich den HM Zähler durch Batterie raus wieder auf 0 setzen.
Wichtig: Der Eintrag svEnergyCounter_XXXXX_XXXXXXXXXX:1 ist auf jeder CCU bei jedem Zählgerät unterschiedlich. Du kannst diesen Namen wie folgt ermitteln:
Rufe im WebUI die Programme auf und blende die Systeminternen Programme mit ein. Du wirst ein Programm finden welches prgEnergyCounter_XXXXXX_XXXXXXXXX:1 heisst.
Wobei die ersten 5 Stellen die interne Objektnummer und die nächsten Stellen die Seriennummer des Zählgerätes sind. Diesen Teil kopiere und ersetze im Script oben.
.