Re: Wasserzähler
Verfasst: 16. Apr 2020 00:57
Funktioniert es denn mit der korrigierten Version?
Code: Alles auswählen
// Globale Variablen zu Beginn der Datei definieren!
var Number nWasseruhrAlt = null
rule "Beregnung Start"
when
Channel 'astro:sun:plus30:set#event' triggered START or Item Beregner changed to ON //Beregnung Starten 30 min nach Sonnenuntergang und Zähler starten wenn Manuel gestartet.
then
if(!(Rasen_Zaehlerstand_Wasseruhr.state instanceof Number)) { // Zählerstand ist keine gültige Zahl
logWarn("sprinkling","Beregnungsstart - Zählerstand kann nicht abgerufen werden!") // Warnmeldung
return; // Und Abbruch der Rule
}
if (Bewaesserungsautomatik.state == ON && Regen_Sensor_1.state == ON) {
Beregner.sendCommand(ON) // automatisch Starten wenn bedingungen erfüllt
}
nWasseruhrAlt = Rasen_Zaehlerstand_Wasseruhr.state as Number // alten Zählerstand retten
logInfo("sprinkling","Zählerstand bei Start: {} cm³", nWasseruhrAlt ) // und Erfolg melden
end
rule "Beregnung Stop"
when
Item Rasen_Zaehlerstand_Wasseruhr changed or Item Regen_Sensor_1 changed // starten wenn Zähler sich ändert oder es Regnet
then
val nWasseruhrNeu = Rasen_Zaehlerstand_Wasseruhr.state as Number
val nWassermenge = Soll_Wassermenge_Sprenkler.state as Number // aktueller Zählerstand
if(Regen_Sensor_1.state != ON) { // Regensensor Prüfen ob Nass
Beregner.sendCommand(OFF) // Regensensor Nass Bewässerung ausschalten
logInfo("sprinkling","Regen eingesetzt, Zählerstand bei Stop: {} cm³",nWasseruhrNeu) // Meldung ausgeben
nWasseruhrAlt = null // alten Zählerstand löschen
return; // Deshalb Abbruch
}
if(!(Rasen_Zaehlerstand_Wasseruhr.state instanceof Number)) { // Zählerstand ist keine gültige Zahl
logWarn("sprinkling","Beregnungsstop - Zählerstand kann nicht abgerufen werden!") // Warnmeldung
Beregner.sendCommand(OFF) //Wasser aus und Abbruch
return; // Und Abbruch der Rule
}
if(nWasseruhrAlt === null) { // Alter Zählerstand nicht gesetzt
logWarn("sprinkling","Beregnungsstop - Kein Vergleichszählerstand!") // Warnmeldung
Beregner.sendCommand(OFF) //Wasser aus und Abbruch
return; // Und Abbruch der Rule
}
if(nWasseruhrAlt + nWassermenge <= nWasseruhrNeu) { // Liter Beregnung mit Setpoint setzen
Beregner.sendCommand(OFF) // Beregner ausschalten
logInfo("sprinkling","Zählerstand bei Stop: {} cm³",nWasseruhrNeu) // Meldung ausgeben
nWasseruhrAlt = null // alten Zählerstand löschen
}
end
rule "Reset Schalter Wassertageszähler zurücksetzen"
when
Item Rasen_WasserZaehler_Reset received command ON
then
triggeringItem.sendCommand(OFF)
Wasseruhr_Impuls_Abfrage.sendCommand(ON)
Wasseruhr_Impuls_Abfrage.sendCommand(OFF)
end
Code: Alles auswählen
Frame label="Garten" {
Switch item=Garten_Licht_Hecke
Text item=Beregner label="Bewässerung: [%s]" icon="lawnmower" {
Frame label="Bewässerung" {
Switch item=Beregner label="Rassenbewässerung: [%s]" icon="lawnmower" visibility=[Bewaesserungsautomatik==OFF]
Text item=TagesZaehler_Rasensprenger icon="faucet" {
Switch item=Rasen_WasserZaehler_Reset icon="settings"
}
Switch item=Bewaesserungsautomatik
Text item=Regen_Sensor_1 icon="flow" label="Boden: [MAP(bodenfeuchte.map):%s]" valuecolor=[ON="red", OFF="green"]
Text item=Soll_Wassermenge_Sprenkler icon="faucet" {
Setpoint item=Soll_Wassermenge_Sprenkler label="Soll Wassermenge: [%.1f cm³]" step=250 minValue=250 maxValue=3000
}
}
Frame label="Gesammt" {
Text item=Rasen_Zaehlerstand_Wasseruhr
}
}
}