Muss leider weiter ausholen.

Um den Energieverbrauch zu erfassen, haben wir für die WP Heizung einen Zähler eingebaut. Da kam die Idee auf, die Laufzeiten für den Kompressor und der elektrischen Heizung mit zu erfassen. Da die WP ziemlich einfach gestrickt ist, geht das nur über den Bezug.
0,1kW Grundlast
+0,8kW Kompressor
+3kW Heizkartusche Stufe 1
+6kW Heizkartusche Stufe 2
Daraus ergeben sich mehrere States:
0,9kW = Kompressorbetrieb
3,9kW = Kompressor und Heizpatrone Stufe 1
3,1kW = nur Heizpatrone Stufe 1 usw...
Hier die Rule, abgeleitet von diesem Thread: viewtopic.php?p=62227
Code: Alles auswählen
var long HeaterStart1 = 0
var long HeaterStart2 = 0
rule "WP aktiv"
when
Item NibePower changed
then
var power = NibePower.state //Energieverbrauch WP
var counter1 = NibeCounter1.state //Laufzeit Kompressor
var counter2 = NibeCounter2.state //Laufzeit Heizpatrone
var counter3 = NibeCounter3.state //Laufzeit Kompressor & Heizpatrone
if(power >= 240 && power <= 1500) {counter1 = ON} //Kompressor
else {counter1 = OFF}
if(power >= 2800 && power <= 3300) {counter2 = ON} // Heizkartusche Stufe 1
else {counter2 = OFF}
if(power >= 5800 && power <= 6300) {counter2 = ON} // Heizkartusche Stufe 2
else {counter2 = OFF}
// if(power >= 3200 && power <= 4500) {counter3 = ON} // Kompressor & HP Stufe 1
// else {counter3 = OFF}
// if(power >= 6200 && power <= 7500) {counter3 = ON} // Kompressor & HP Stufe 2
// else {counter3 = OFF}
if(NibeCounter1.state != counter1) {
NibeState1.sendCommand(counter1.toString)
}
if(NibeCounter2.state != counter2) {
NibeState2.sendCommand(counter2.toString)
}
// if(NibeCounter3.state != counter3) {
// NibeState1.sendCommand(counter1.toString)
// NibeState2.sendCommand(counter2.toString)
// }
end
rule "Laufzeit Kompressor"
when
Item NibeState1 changed
then
if(newState == OFF) {
var iCounter1 = 0
if(NibeCounter1.state instanceof Number)
iCounter1 = (NibeCounter1.state as Number).intValue
iCounter1 += (now.toEpochSecond - HeaterStart1).intValue
logInfo("Nibe WP", "Kompressor Laufzeit heute {} Sekunden", iCounter1)
NibeCounter1.postUpdate(iCounter1)
}
else {
HeaterStart1 = now.toEpochSecond
}
end
rule "Laufzeit Heizkartusche"
when
Item NibeState2 changed
then
if(newState == OFF) {
var iCounter2 = 0
if(NibeCounter2.state instanceof Number)
iCounter2 = (NibeCounter2.state as Number).intValue
iCounter2 += (now.toEpochSecond - HeaterStart2).intValue
logInfo("Nibe WP", "Heizkartusche Laufzeit {} Sekunden", iCounter2)
NibeCounter2.postUpdate(iCounter2)
}
else {
HeaterStart2 = now.toEpochSecond
}
end
rule "Reset Laufzeit"
when
Item NibeStateReset changed
then
if(newState == ON) {
NibeCounter1.postUpdate(0)
NibeCounter2.postUpdate(0)
}
end
Code: Alles auswählen
Number:Time NibeCounter1 "Laufzeit [%.0f min]" <time>
Number:Time NibeCounter2 "Laufzeit [%.0f min]" <time>
Number:Time NibeCounter3 "Laufzeit [%.0f min]" <time>
Number:Time iCounter1 "Laufzeit [%.0f min]" <time>
Number:Time iCounter2 "Laufzeit [%.0f min]" <time>
Switch NibeState1 <switch> (gNibe)
Switch NibeState2 <switch> (gNibe)
Switch NibeStateReset <switch> (gNibe)
Mit dieser Rule klappt es, sieht irgendwie nicht so elegannt aus:
Code: Alles auswählen
rule "WP aktiv"
when
Item NibePower changed
then
var power = NibePower.state //Energieverbrauch WP
var counter1 = NibeCounter1.state //Laufzeit Kompressor
var counter2 = NibeCounter2.state //Laufzeit Heizpatrone
// beides aus
if(power <= 200) counter1 = OFF
if(power <= 200) counter2 = OFF
// nur Kompressor
if(power >= 240 && power <= 1500) counter1 = ON
if(power >= 240 && power <= 1500) counter2 = OFF
// nur Heizpatrone
if(power >= 2800 && power <= 3200) counter1 = OFF
if(power >= 2800 && power <= 3200) counter1 = ON
if(power >= 5800 && power <= 6200) counter1 = OFF
if(power >= 5800 && power <= 6200) counter1 = ON
// Kompressor und Heizpatrone
if(power >= 3200 && power <= 4500) counter1 = ON
if(power >= 3200 && power <= 4500) counter2 = ON
if(power >= 6200 && power <= 7500) counter1 = ON
if(power >= 6200 && power <= 7500) counter2 = ON
if(NibeCounter1.state != counter1) {
NibeState1.sendCommand(counter1.toString)
}
if(NibeCounter2.state != counter2) {
NibeState2.sendCommand(counter2.toString)
}
end
edit1:
Bin ein bischen weiter, aktuell sieht es so aus:
Code: Alles auswählen
rule "WP aktiv"
when
Item NibePower changed
then
var power = NibePower.state //Energieverbrauch WP
var counter1 = NibeCounter1.state //Laufzeit Kompressor
var counter2 = NibeCounter2.state //Laufzeit Heizpatrone
// Kompressor
if(power >= 240 && power <= 1500 || power >= 3600 && power <= 4400 || power >= 6600 && power <= 7400) {
counter1 = ON
}
else {
counter1 = OFF
}
// Heizkartusche
if(power >= 2900 && power <= 4400 || power >= 5900 && power <= 7400) {
counter2 = ON
}
else {
counter2 = OFF
}
if(NibeCounter1.state != counter1) {
NibeState1.sendCommand(counter1.toString)
}
if(NibeCounter2.state != counter2) {
NibeState2.sendCommand(counter2.toString)
}
end
Gruß