Re: Thing update jede Nacht 02.22 Uhr
Verfasst: 9. Okt 2020 10:52
Das wird bei jedem Ereignis geschrieben. Wenn Du einen Raspberry nutzt, kannst Du ZRAM verwenden, damit werden die Schreibzugriffe für logs in eine RAMDisk umgeleitet. WEnn das System neu gestartet wird, kümmert sich ZRAM darum, die Inhalte vor dem Neustart auf die SD-Karte zu schreiben. Damit wird Wearout verhindert. Ob das für das NAS auch funktioniert, kann ich Dir nicht sagen.
Noch eine kleine Optimierung am Code:
Es ist nur ein Timer notwendig. Macht keinen großen Unterschied, ist aber sauberer. In der ersten Rule war ein kleiner Fehler, den Trigger betreffend.
Noch eine kleine Optimierung am Code:
Code: Alles auswählen
var Timer tBathVent = null
var Boolean bBathVentOn = false
rule "Auto Badlüftung"
when
Item BadLueftung_AutoAktiv changed
then
if(BadLueftung_AutoAktiv.state == OFF) {
RS_02_Schalter.sendCommand(OFF)
tBathVent?.cancel
tBathVent = null
BadLueftung_Ausschaltzeit.postUpdate(now.toString)
}
sendPushoverMessage(pushoverBuilder("Badlüftung Automatik "+if(BadLueftung_AutoAktiv.state != ON) "aus" else "ein" + "geschaltet"))
end
rule "Lüftung EIN / AUS" // Badlüftung automatisch aktiviert
when
Item RS_01_SensorTemperature changed or // Temperaturwechsel oder
Item RS_01_SensorRelativeHumidity changed // Feuchtigkeitswechsel
then
if(BadLueftung_AutoAktiv.state == OFF) return;
val Number nSensTemp = if(RS_01_SensorTemperature.state instanceof Number) (RS_01_SensorTemperature.state as Number).floatValue else 0
val Number nSensHum = if(RS_01_SensorRelativeHumidity.state instanceof Number) (RS_01_SensorRelativeHumidity.state as Number).floatValue else 0
val Number nLowTemp = if(LueftungTempUntergrenze.state instanceof Number) (LueftungTempUntergrenze.state as Number).floatValue else 0
val Number nLowHum = if(LueftungFeuchtUntergrenze.state instanceof Number) (LueftungFeuchtUntergrenze.state as Number).floatValue else 0
val Number nHighTemp = if(LueftungTempObergrenze.state instanceof Number) (LueftungTempObergrenze.state as Number).floatValue else 0
val Number nHighHum = if(LueftungFeuchtObergrenze.state instanceof Number) (LueftungFeuchtObergrenze.state as Number).floatValue else 0
if(nSensTemp >= nHighTemp && nSensHum >= nHighHum && tBathVent === null && RS_02_Schalter.state != ON) { // Bedingungen für Einschalten
RS_02_Schalter.sendCommand(ON)
bBathVentOn = true
BadLueftung_Einschaltzeit.postUpdate(now.toString)
sendPushoverMessage(pushoverBuilder("Bad Lüftung automatisch EIN"))
tBathVent = createTimer(now.plusHours(4),[ |
if(bBathVentOn) {
RS_02_Schalter.sendCommand(OFF)
BadLueftung_Ausschaltzeit.postUpdate(now.toString)
sendPushoverMessage(pushoverBuilder("Bad Lüftung nach Zeit automatisch AUS"))
bBathVentOn = false
tBathVent.reschedule(now.plusHours(2))
} else
tBathVent = null
])
}
if((nSensTemp <= nLowTemp || nSensHum <= nLowHum) && RS_02_Schalter.state == ON) { // Bedingungen für Ausschalten
RS_02_Schalter.sendCommand(OFF)
tBathVent?.cancel
tBathVent = null
BadLueftung_Ausschaltzeit.postUpdate(now.toString)
sendPushoverMessage(pushoverBuilder("Bad Lüftung nach Wert automatisch AUS"))
}
end