Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen
Verfasst: 11. Apr 2021 22:59
Bis auf die letzte Meldung konnte ich jetzt alles korrigieren.
Hier meine Rule:
@Udo: Vielleicht hast Du noch eine Idee bezüglich der Variable.
Hier meine Rule:
Code: Alles auswählen
var Boolean bShadeStart = false
var Boolean bShadeEnd = false
rule "reset some vars"
when
Time is midnight
then
bShadeStart = false
bShadeEnd = false
end
rule "Rollos Süd abfahren"
when
Item LokaleSonnendaten_Azimut changed
then
logDebug('autoShutter', 'Regel (Rollo Süd runter) wurde gestartet')
if(RolloautomatikSued.state != ON) {
logDebug('autoShutter', 'Beende, da Automatik generell nicht aktiv')
return;
}
if(bShadeStart) {
logDebug('autoShutter', 'Automatik heute bereits einmal gelaufen, wird daher ignoriert')
return;
}
if((LokaleSonnendaten_Azimut.state as Number).floatValue < (RolloAutomatikSuedAzimuthStart.state as Number)) {
logDebug('autoShutter', 'Azimuth ({}) hat noch nicht Schwellwert ({}) erreicht',LokaleSonnendaten_Azimut.state,RolloAutomatikSuedAzimuthStart.state)
return;
}
if((XiaomiHumidityPressureGarten_Temperature.state as Number).floatValue < (RolloAutomatikSuedTempMin.state as Number)) {
logDebug('autoShutter', 'Mindest-Temperatur ({}) wurde nicht erreicht durch aktuelle Temperatur ({})',RolloAutomatikSuedTempMin.state,XiaomiHumidityPressureGarten_Temperature.state)
return;
}
if((Localweatherandforecast_Bewolkung.state as Number).floatValue > (RolloAutomatikSuedWolkenMax.state as Number)) {
logDebug('autoShutter', 'Maximalbewölkung ({}) wurde überschritten ({})',RolloAutomatikSuedWolkenMax.state,Localweatherandforecast_Bewolkung.state)
return;
}
if((LokaleSonnendaten_Position_Elevation.state as Number).floatValue < (RolloAutomatikSuedElevationEnde.state as Number)) {
logDebug('autoShutter', 'Elevation für wieder abfahren ({}) ist groesser als aktuelle ({})',RolloAutomatikSuedElevationEnde.state,LokaleSonnendaten_Position_Elevation.state)
return;
}
// Rollos runterfahren
logDebug('autoShutter', 'Rollos werden abgefahren')
val nZiel = RolloAutomatikZielwert.state as Number
RollosSued.members.forEach[i|
if(i.state <= nZiel) {
logDebug('autoShutter', 'Fahre Rolladen {} auf {}%' + i.name,nZiel)
i.sendCommand(nZiel)
} else {
logDebug('autoShutter', 'Rolladen ist bereits weiter geschlossen ({}%) als er geschlossen werden sollte und wird daher ignoriert',i.state)
}
]
// Letzte Ausführung mit entsprechendem Zeitstempel belegen
sendBroadcastNotification("Verschattung Südseite aktiv") //Pushnachricht
bShadeStart = true
RolloAutomatikSuedStartLast.postUpdate(new DateTimeType(now))
end
rule "Rollo Süd wieder öffnen"
when
Item LokaleSonnendaten_Position_Elevation changed
then
val String logPrefix = 'Rolloautomatik - '
logDebug('autoShutter', 'Regel (Rollo Süd hoch) wurde gestartet')
if(RolloAutomatikSuedOeffnen.state != ON) {
logDebug('autoShutter', 'Beende, da Automatik generell nicht aktiv')
return;
}
if((LokaleSonnendaten_Position_Elevation.state as Number).floatValue > (RolloAutomatikSuedElevationEnde.state as Number)) {
logDebug('autoShutter', 'Beende, da Elevation ({}) nicht kleiner der eingestellten Elevation ({}) war',LokaleSonnendaten_Position_Elevation.state,RolloAutomatikSuedElevationEnde.state)
return;
}
if(!bShadeStart) {
logDebug('autoShutter', 'Beende, da heute noch keine Ausführung stattfand. Demzufolge kann auch kein automatisches Öffnen gewollt sein')
return;
}
if(bShadeEnd) {
logDebug('autoShutter', 'Beende, da heute bereits ein automatisches Wiederhochfahren stattfand')
return;
}
// Rollos wieder hoch
logDebug('autoShutter', 'Rollos werden hinaufgefahren')
val nZiel = RolloAutomatikZielwert.state as Number
RollosSued.members.forEach[i|
if(nZiel <= (i.state as Number) +5 && nZiel >= (i.state as Number) -5) {
logDebug('autoShutter', 'Fahre Rolladen {} auf 0%',i.name)
i.sendCommand(0)
} else {
logDebug('autoShutter', 'Fahre Rolladen {} nicht auf 0%, da dieser zwischenzeitlich manuell verändert wurde.',i.name)
}
]
// Letzte Ausführung mit entsprechendem Zeitstempel belegen
sendBroadcastNotification("Verschattung Südseite beendet") //Pushnachricht
RolloAutomatikSuedEndeLast.postUpdate(new DateTimeType())
bShadeEnd = true
end