Re: Jalousien nach Sonnenstand
Verfasst: 19. Mär 2021 09:43
Hi Udo,
Mega. Funktioniert.
Bei mir läuft alles auf OH3
Danke
Mega. Funktioniert.
Bei mir läuft alles auf OH3
Danke
Code: Alles auswählen
val nElevationMinSuedOst = 15 //15
val nElevationMaxSuedOst = 65 //65
val nElevationMinSuedWest = 15 //15
val nElevationMaxSuedWest = 65 //65
val nAzimutMin_SuedOst = 77 //140
val nAzimutMaxSuedOst = 180 //260
val nAzimutMin_SuedWest = 162 //140
val nAzimutMaxSuedWest = 270 //260
val nIntensityMin = 150 //150
val nCloudynessMax = 80 //80
var Timer tSchatten = null
rule "Beschattung SüdOst"
when
Item Astro_Lokale_Sonnendaten_Hohenwinkel changed
then
if(Sonnenschutz_Aktiv.state != ON)
return;
// if(!(LokaleSonnendaten_DiffuseStrahlung.state instanceof Number)) {
// logWarn("shade","DiffuseStrahlung! Abbruch!")
// return;
if(!(Astro_Lokale_Sonnendaten_Hohenwinkel.state instanceof Number)) {
logWarn("shade","Elevation ungültig! Abbruch!")
return;
}
if(!(Astro_Lokale_Sonnendaten_Azimut.state instanceof Number)) {
logWarn("shade","Azimut ungültig! Abbruch!")
return;
}
val nElevation = (Astro_Lokale_Sonnendaten_Hohenwinkel.state as Number).floatValue
val nAzimut = (Astro_Lokale_Sonnendaten_Azimut.state as Number).floatValue
var nIntens = 100
if(Astro_Lokale_Sonnendaten_Direkte_Strahlung.state instanceof Number)
nIntens = (Astro_Lokale_Sonnendaten_Direkte_Strahlung.state as DecimalType).intValue
var nCloud = 0
if(LocalWeatherAndForecast_Bewolkung.state instanceof Number)
nCloud = (LocalWeatherAndForecast_Bewolkung.state as Number).intValue
if(nElevation < nElevationMinSuedOst || nElevation > nElevationMaxSuedOst || nAzimut < nAzimutMin_SuedOst || nAzimut > nAzimutMaxSuedOst || nIntens < nIntensityMin || nCloud > nCloudynessMax) {
logInfo("shade","Jalousien Süd/Ost Beschattung aus!")
gRollos_SuedOst.sendCommand(UP) // Rollläden hochfahren
} else {
logInfo("shade","Jalousien Süd/ Ost Beschattung an!")
gRollos_SuedOst.sendCommand(DOWN) // Rollläden herunterfahren
}
end
rule "Beschattung SüdWest"
when
Item Astro_Lokale_Sonnendaten_Hohenwinkel changed
then
if(Sonnenschutz_Aktiv.state != ON)
return;
// if(!(LokaleSonnendaten_DiffuseStrahlung.state instanceof Number)) {
// logWarn("shade","DiffuseStrahlung! Abbruch!")
// return;
if(!(Astro_Lokale_Sonnendaten_Hohenwinkel.state instanceof Number)) {
logWarn("shade","Elevation ungültig! Abbruch!")
return;
}
if(!(Astro_Lokale_Sonnendaten_Azimut.state instanceof Number)) {
logWarn("shade","Azimut ungültig! Abbruch!")
return;
}
val nElevation = (Astro_Lokale_Sonnendaten_Hohenwinkel.state as Number).floatValue
val nAzimut = (Astro_Lokale_Sonnendaten_Azimut.state as Number).floatValue
var nIntens = 100
if(Astro_Lokale_Sonnendaten_Direkte_Strahlung.state instanceof Number)
nIntens = (Astro_Lokale_Sonnendaten_Direkte_Strahlung.state as DecimalType).intValue
var nCloud = 0
if(LocalWeatherAndForecast_Bewolkung.state instanceof Number)
nCloud = (LocalWeatherAndForecast_Bewolkung.state as Number).intValue
if(nElevation < nElevationMinSuedWest || nElevation > nElevationMaxSuedWest || nAzimut < nAzimutMin_SuedWest || nAzimut > nAzimutMaxSuedWest || nIntens < nIntensityMin || nCloud > nCloudynessMax) {
logInfo("shade","Jalousien Süd/West Beschattung aus!")
gRollos_SuedWest.sendCommand(UP) // Rollläden hochfahren
} else {
logInfo("shade","Jalousien Süd/West Beschattung an!")
gRollos_SuedWest.sendCommand(DOWN) // Rollläden herunterfahren
}
end
Code: Alles auswählen
Group:Rollershutter gRollos_SuedOst
Group:Rollershutter gRollos_SuedWest
Code: Alles auswählen
val nElevationMinSuedOst = 15 // 15
val nElevationMaxSuedOst = 65 // 65
val nElevationMinSuedWest = 15 // 15
val nElevationMaxSuedWest = 65 // 65
val nAzimutMin_SuedOst = 77 // 140
val nAzimutMaxSuedOst = 180 // 260
val nAzimutMin_SuedWest = 162 // 140
val nAzimutMaxSuedWest = 270 // 260
val nIntensityMin = 150 // 150
val nCloudynessMax = 80 // 80
var Timer tSchatten = null
rule "Beschattung SüdOst und SüdWest"
when
Item Astro_Lokale_Sonnendaten_Hohenwinkel changed
then
if(Sonnenschutz_Aktiv.state != ON)
return;
// if(!(LokaleSonnendaten_DiffuseStrahlung.state instanceof Number)) {
// logWarn("shade","DiffuseStrahlung! Abbruch!")
// return;
if(!(Astro_Lokale_Sonnendaten_Hohenwinkel.state instanceof Number)) {
logWarn("shade","Elevation ungültig! Abbruch!")
return;
}
if(!(Astro_Lokale_Sonnendaten_Azimut.state instanceof Number)) {
logWarn("shade","Azimut ungültig! Abbruch!")
return;
}
val nElevation = (Astro_Lokale_Sonnendaten_Hohenwinkel.state as Number).floatValue
val nAzimut = (Astro_Lokale_Sonnendaten_Azimut.state as Number).floatValue
var nIntens = 100
if(Astro_Lokale_Sonnendaten_Direkte_Strahlung.state instanceof Number)
nIntens = (Astro_Lokale_Sonnendaten_Direkte_Strahlung.state as Number).intValue
var nCloud = 0
if(LocalWeatherAndForecast_Bewolkung.state instanceof Number)
nCloud = (LocalWeatherAndForecast_Bewolkung.state as Number).intValue
logDebug("shade", " Intensität : {} (Minimum {})", nIntens, nIntensityMin)
logDebug("shade", " Wolken : {} (Maximum {})", nCloud, nCloudynessMax)
logDebug("shade", "Elevation Süd-Ost : {} (Minimum {}, Maximum {})", nElevation, nElevationMinSuedOst, nElevationMaxSuedOst)
logDebug("shade", "Elevation Süd-West: {} (Minimum {}, Maximum {})", nElevation, nElevationMinSuedWest, nElevationMaxSuedWest)
logDebug("shade", " Azimut Süd-Ost : {} (Minimum {}, Maximum {})", nAzimut, nCloudynessMax, nAzimutMin_SuedOst, nAzimutMaxSuedOst)
logDebug("shade", " Azimut Süd-West: {} (Minimum {}, Maximum {})", nAzimut, nCloudynessMax, nAzimutMin_SuedWest, nAzimutMaxSuedWest)
if(nElevation < nElevationMinSuedOst || nElevation > nElevationMaxSuedOst || nAzimut < nAzimutMin_SuedOst || nAzimut > nAzimutMaxSuedOst || nIntens < nIntensityMin || nCloud > nCloudynessMax) {
logInfo("shade","Jalousien Süd/Ost Beschattung aus!")
gRollos_SuedOst.sendCommand(UP) // Rollläden hochfahren
} else {
logInfo("shade","Jalousien Süd/ Ost Beschattung an!")
gRollos_SuedOst.sendCommand(DOWN) // Rollläden herunterfahren
}
if(nElevation < nElevationMinSuedWest || nElevation > nElevationMaxSuedWest || nAzimut < nAzimutMin_SuedWest || nAzimut > nAzimutMaxSuedWest || nIntens < nIntensityMin || nCloud > nCloudynessMax) {
logInfo("shade","Jalousien Süd/West Beschattung aus!")
gRollos_SuedWest.sendCommand(UP) // Rollläden hochfahren
} else {
logInfo("shade","Jalousien Süd/West Beschattung an!")
gRollos_SuedWest.sendCommand(DOWN) // Rollläden herunterfahren
}
end
Code: Alles auswählen
log:set DEBUG org.openhab.core.model.script.shade
Code: Alles auswählen
val nElevationMinSuedOst = 15 // 15
val nElevationMaxSuedOst = 65 // 65
val nElevationMinSuedWest = 15 // 15
val nElevationMaxSuedWest = 65 // 65
val nAzimutMin_SuedOst = 77 // 140
val nAzimutMaxSuedOst = 180 // 260
val nAzimutMin_SuedWest = 162 // 140
val nAzimutMaxSuedWest = 270 // 260
val nIntensityMin = 150 // 150
val nCloudynessMax = 80 // 80
var Timer tSchatten = null
rule "Beschattung SüdOst und SüdWest"
when
Item Astro_Lokale_Sonnendaten_Hohenwinkel changed
then
if(Sonnenschutz_Aktiv.state != ON)
return;
// if(!(LokaleSonnendaten_DiffuseStrahlung.state instanceof Number)) {
// logWarn("shade","DiffuseStrahlung! Abbruch!")
// return;
if(!(Astro_Lokale_Sonnendaten_Hohenwinkel.state instanceof Number)) {
logWarn("shade","Elevation ungültig! Abbruch!")
return;
}
if(!(Astro_Lokale_Sonnendaten_Azimut.state instanceof Number)) {
logWarn("shade","Azimut ungültig! Abbruch!")
return;
}
val nElevation = (Astro_Lokale_Sonnendaten_Hohenwinkel.state as Number).floatValue
val nAzimut = (Astro_Lokale_Sonnendaten_Azimut.state as Number).floatValue
var nIntens = 100
if(Astro_Lokale_Sonnendaten_Direkte_Strahlung.state instanceof Number)
nIntens = (Astro_Lokale_Sonnendaten_Direkte_Strahlung.state as Number).intValue
var nCloud = 0
if(LocalWeatherAndForecast_Bewolkung.state instanceof Number)
nCloud = (LocalWeatherAndForecast_Bewolkung.state as Number).intValue
var Boolean bSuedWest = true
var Boolean bSuedOst = true
if(nCloud > nCloudynessMax) {
logInfo("shade","Bewölkung {} überschreitet Maximum {}, Beschattung aus!", nCloud, nCloudynessMax)
bSuedWest = false
bSuedOst = false
}
if(nIntens < nIntensityMin) {
logInfo("shade","Intensität {} unterschreitet Minimum {}, Beschattung aus!", nIntens, nIntensityMin)
bSuedWest = false
bSuedOst = false
}
if(nElevation < nElevationMinSuedOst) {
logInfo("shade","Elevation {} unterhalb Minimum Süd-Ost {}, Beschattung Süd-Ost aus!", nElevation, nElevationMinSuedOst)
bSuedOst = false
}
if(nElevation < nElevationMinSuedWest) {
logInfo("shade","Elevation {} unterhalb Minimum Süd-West {}, Beschattung Süd-West aus!", nElevation, nElevationMinSuedWest)
bSuedWest = false
}
if(nElevation > nElevationMaxSuedOst) {
logInfo("shade","Elevation {} oberhalb Maximum Süd-Ost {}, Beschattung Süd-Ost aus!", nElevation, nElevationMaxSuedOst)
bSuedOst = false
}
if(nElevation > nElevationMaxSuedWest) {
logInfo("shade","Elevation {} oberhalb Maximum Süd-West {}, Beschattung Süd-West aus!", nElevation, nElevationMaxSuedWest)
bSuedWest = false
}
if(nAzimut > nAzimutMaxSuedOst) {
logInfo("shade","Azimut {} oberhalb Maximum Süd-Ost {}, Beschattung Süd-Ost aus!", nAzimut > nAzimutMaxSuedOst)
bSuedOst = false
}
if(nAzimut > nAzimutMaxSuedWest) {
logInfo("shade","Azimut {} oberhalb Maximum Süd-West {}, Beschattung Süd-West aus!", nAzimut > nAzimutMaxSuedWest)
bSuedWest = false
}
if(nAzimut < nAzimutMin_SuedOst) {
logInfo("shade","Azimut {} unterhalb Minimum Süd-Ost {}, Beschattung Süd-Ost aus!", nAzimut > nAzimutMin_SuedOst)
bSuedWest = false
}
if(nAzimut < nAzimutMin_SuedWest) {
logInfo("shade","Azimut {} unterhalb Minimum Süd-West {}, Beschattung Süd-West aus!", nAzimut > nAzimutMin_SuedWest)
bSuedWest = false
}
if(!bSuedOst) {
// logInfo("shade","Jalousien Süd/Ost Beschattung aus!")
gRollos_SuedOst.sendCommand(UP) // Rollläden hochfahren
} else {
// logInfo("shade","Jalousien Süd/ Ost Beschattung an!")
gRollos_SuedOst.sendCommand(DOWN) // Rollläden herunterfahren
}
if(!bSuedWest) {
// logInfo("shade","Jalousien Süd/West Beschattung aus!")
gRollos_SuedWest.sendCommand(UP) // Rollläden hochfahren
} else {
// logInfo("shade","Jalousien Süd/West Beschattung an!")
gRollos_SuedWest.sendCommand(DOWN) // Rollläden herunterfahren
}
end
Code: Alles auswählen
import java.util.HashMap
val HashMap<String,Number> hmShade = newHashMap( "Rollladen_1" -> 25, "Rollladen_2" -> 43, "RollKueche" -> 17)
val HashMap<String,Number> hmOpen = newHashMap( "Rollladen_1" -> 0, "Rollladen_2" -> 0, "RollKueche" -> 0)
rule "Schatten"
when
Item Elevation changed
then
// Auswertung der Grenzwerte und Entscheidung, ob Beschattung für die jeweilige Seite aktiv sein soll
... // Code wie oben
// ab hier Steuerung der einzelnen Rollläden auf ihre Sollposition
gRollos_SuedWest.members.forEach[r|
var soll = if(bSuedWest) hmShade.get(r.name) else hmOpen.get(r.name)
if((r.state as Number) != soll)
r.sendCommand(soll)
]
gRollos_SuedOst.members.forEach[r|
var soll = if(bSuedOst) hmShade.get(r.name) else hmOpen.get(r.name)
if((r.state as Number) != soll)
r.sendCommand(soll)
]
end