Code: Alles auswählen
val nElevationMin = 15
val nElevationMax = 65
val nAzimutMin = 150
val nAzimutMax = 260
val nIntensityMin = 150
val nCloudynessMax = 40
var Timer tSchatten = null
rule "Beschattung"
when
Item LokaleSonnendaten_Position_Elevation changed
then
if(SonnenschutzEG_Aktiv.state != ON)
return;
if(!(LokaleSonnendaten_Position_Elevation.state instanceof Number)) {
logWarn("shade","Elevation ungültig! Abbruch!")
return;
}
if(!(LokaleSonnendaten_Azimut.state instanceof Number)) {
logWarn("shade","Azimut ungültig! Abbruch!")
return;
}
val nElevation = (LokaleSonnendaten_Position_Elevation.state as Number).floatValue
val nAzimut = (LokaleSonnendaten_Azimut.state as Number).floatValue
var nIntens = 100
if(LokaleSonnendaten_DirekteStrahlung.state instanceof Number)
nIntens = (LokaleSonnendaten_DirekteStrahlung.state as DecimalType).intValue
var nCloud = 0
if(LokaleWettervorhersage_Bewolkung.state instanceof Number)
nCloud = (LokaleWettervorhersage_Bewolkung.state as Number).intValue
if(nElevation < nElevationMin || nElevation > nElevationMax || nAzimut < nAzimutMin || nAzimut > nAzimutMax || nIntens < nIntensityMin || nCloud > nCloudynessMax) {
logInfo("shade","Jalousien Wohn/Esszimmer Beschattung aus!")
} else {
logInfo("shade","Jalousien Wohn/Esszimmer Beschattung an!")
if((EGBlumenfenster.state as Number) < 10 && (EGBlumenfenster.state as Number) != 69)
EGBlumenfenster.sendCommand(69)
if((EGBalkontuere.state as Number) < 10 && (EGBalkontuere.state as Number) != 47)
EGBalkontuere.sendCommand(47)
if((EGTerassentuere.state as Number) < 10 && (EGTerassentuere.state as Number) != 47)
EGTerassentuere.sendCommand(47)
if((EGWohnzimmer.state as Number) < 10 && (EGWohnzimmer.state as Number) != 84)
EGWohnzimmer.sendCommand(84)
if(tSchatten === null)
tSchatten = createTimer(now.plusSeconds(150), [|
if((EGBlumenfenster.state as Number) == 69)
KNXDeviceJalousieaktor1126_BlumenfensterLamellen.sendCommand(50)
if((EGBalkontuere.state as Number) == 47)
KNXDeviceJalousieaktor1126_BalkontureLamellen.sendCommand(50)
if((EGTerassentuere.state as Number) == 47)
KNXDeviceJalousieaktor1126_TerassentureLamellen.sendCommand(50)
if((EGWohnzimmer.state as Number) == 84)
KNXDeviceJalousieaktor1126_WohnzimmerLamellen.sendCommand(50)
tSchatten = null
])
}
end
Nach 150 Sekunden startet der Scheduler den Code, der im Lambda übergeben wurde (alles in den eckigen Klammern)
Der Code prüft einzeln für jede Jalousie, ob die Position die Beschattungsposition ist. Ist das der Fall, so wird bei der entsprechenden Jalousie der Lamellenwinkel eingestellt. Zum Schluss wird der Zeiger auf den Timer gelöscht, damit bei nächsten Mal wieder der Timer verwendet werden kann.