Hello,
I wonder if I could ask you to have a look on my rule code for my automatic shadowing with the rollershutters. It is working so far but I have a feeling, it is very C64 style.
Thanks for your help
var boolean development = false
var Number schliesswertGr = 80
var Number schliesswertKl = 75
var Number aussentempschwelle = 15
rule "Temperatur Differenz Aussen"
when
Item TemperatureAussenHinten received update
or
Item TemperatureAussenVorne received update
or
Item HeatPump_Temperature_1 received update
or
Item RolloAutomatik changed to ON
then
//Temperaturdifferenz berechnen und senden
var Number TempAussenVorne = (TemperatureAussenVorne.state)
var Number TempAussenHinten = (TemperatureAussenHinten.state)
var Number TempAussDiff = (TempAussenVorne - TempAussenHinten)
var boolean sonne = (Sun.state)
if (sonne == ON) sonne = true
else sonne = false
//Azimuth und Elivation auslesen
var Number AzimuthNow = (Azimuth.state)
var Number ElevationNow = (Elevation.state)
var Number Diff = (TempAussenHinten - TempAussDiff)
var Number tau = 0.05 // Glaettungsfaktor, 1 waere keine Glaettung
TempAussDiff = TempAussDiff + (tau * Diff)
TemperatureAussenDifferenz.postUpdate(TempAussDiff)
if (TempAussDiff >= 6 && RolloAutomatik.state == ON && TemperatureAussenHinten.state > aussentempschwelle && sonne == false || sonne && TempAussDiff >= 3 && RolloAutomatik.state == ON && TemperatureAussenHinten.state > aussentempschwelle || development ) {
sonne = true
Sun.postUpdate(ON)
if (ElevationNow < 45 && ElevationNow > 0) {
if (AzimuthNow > 105 && AzimuthNow < 196) {
AziOGSued.sendCommand(ON)
AziEGSued.sendCommand(ON)
AziOGWest.sendCommand(OFF)
AziEGWest.sendCommand(OFF)
AziEGSuedMitte.sendCommand(ON)
}
if (AzimuthNow > 196 && AzimuthNow < 270) {
AziOGSued.sendCommand(ON)
AziEGSued.sendCommand(ON)
AziOGWest.sendCommand(ON)
AziEGWest.sendCommand(ON)
AziEGSuedMitte.sendCommand(ON)
}
if (AzimuthNow > 270 && AzimuthNow < 350) {
AziOGSued.sendCommand(OFF)
AziEGSued.sendCommand(OFF)
AziOGWest.sendCommand(ON)
AziEGWest.sendCommand(ON)
AziEGSuedMitte.sendCommand(OFF)
}
}
else if (ElevationNow > 45 && ElevationNow < 80) {
if (AzimuthNow > 100 && AzimuthNow < 196) {
AziOGSued.sendCommand(OFF)
AziEGSued.sendCommand(ON)
AziOGWest.sendCommand(OFF)
AziEGWest.sendCommand(OFF)
AziEGSuedMitte.sendCommand(ON)
}
if (AzimuthNow > 196 && AzimuthNow < 270) {
AziOGSued.sendCommand(OFF)
AziEGSued.sendCommand(ON)
AziOGWest.sendCommand(ON)
AziEGWest.sendCommand(ON)
AziEGSuedMitte.sendCommand(ON)
}
if (AzimuthNow > 270 && AzimuthNow < 350) {
AziOGSued.sendCommand(OFF)
AziEGSued.sendCommand(OFF)
AziOGWest.sendCommand(ON)
AziEGWest.sendCommand(ON)
AziEGSuedMitte.sendCommand(OFF)
}
}
}
else if (TempAussDiff < 3 && sonne) {
Thread::sleep(300000) // schlafe 5 minuten
if (TempAussDiff < 3) {
sonne = false
Sun.postUpdate(OFF)
AziOGSued.sendCommand(OFF)
AziEGSued.sendCommand(OFF)
AziEGSuedMitte.sendCommand(OFF)
AziOGWest.sendCommand(OFF)
AziEGWest.sendCommand(OFF)
}
}
else {
AziOGSued.postUpdate(OFF)
AziEGSued.postUpdate(OFF)
AziEGSuedMitte.postUpdate(OFF)
AziOGWest.postUpdate(OFF)
AziEGWest.postUpdate(OFF)
}
end
rule "Rolladen AziOGSued"
when
Item AziOGSued received command ON
then
SchlafzimmerRollo_S.sendCommand(schliesswertKl)
KindMaxRollo_S.sendCommand(schliesswertKl)
end
rule "Rolladen AziOGWest"
when
Item AziOGWest received command ON
then
KindEmmiRollo_W.sendCommand(schliesswertGr)
end
rule "Rolladen AziEGSued"
when
Item AziEGSued received command ON
then
WohnzimmerRollo_SW.sendCommand(schliesswertGr)
WohnzimmerRollo_SO.sendCommand(schliesswertGr)
end
rule "Rolladen AziEGWest"
when
Item AziEGWest received command ON
then
WohnzimmerRollo_W.sendCommand(schliesswertGr)
BueroRollo_W.sendCommand(schliesswertGr)
end
rule "Rolladen AziEGSuedMitte"
when
Item AziEGSuedMitte received command ON
then
var aussperrschutz = WohnzimmerFenster_S.state
if (aussperrschutz == NULL){
aussperrschutz = 'OPEN'
}
if (aussperrschutz == 'CLOSED'){
WohnzimmerRollo_S.sendCommand(schliesswertGr)
}
end
// *********************************************
// OFF RULES
// *********************************************
rule "Rolladen AziOGSued"
when
Item AziOGSued received command OFF
then
if ()
SchlafzimmerRollo_S.sendCommand(0)
KindMaxRollo_S.sendCommand(0)
end
rule "Rolladen AziOGWest"
when
Item AziOGWest received command OFF
then
KindEmmiRollo_W.sendCommand(0)
//KindMaxRollo_W.sendCommand(0)
end
rule "Rolladen AziEGSued"
when
Item AziEGSued received command OFF
then
WohnzimmerRollo_SW.sendCommand(0)
WohnzimmerRollo_SO.sendCommand(0)
end
rule "Rolladen AziEGWest"
when
Item AziEGWest received command OFF
then
WohnzimmerRollo_W.sendCommand(0)
BueroRollo_W.sendCommand(0)
end
rule "Rolladen AziEGSuedMitte"
when
Item AziEGSuedMitte received command OFF
then
WohnzimmerRollo_S.sendCommand(0)
end