Sieht bei mir folgendermaßen aus:
Thing:
Code: Alles auswählen
Bridge openweathermap:weather-api:bridge "openweatherMap Api" [ apikey="0123456789abcdef0123456789abcdef", refreshInterval=10, language="de" ] {
Thing weather-and-forecast local "Wetter lokal" [ forecastDays=0, forecastHours=24, step=3, location="49.9,8.6" ]
}
Itemliste:
Code: Alles auswählen
Group gOWM "OpenWeatherMap" (gWeather) ["WeatherService"]
Switch Schatten "Beschattung aktivieren [%s]" (gWeather)
Number:Temperature Wetter_Fc03Temperature "Temperatur + 3h" (gOWM) {channel="openweathermap:weather-and-forecast:bridge:local:forecastHours03#temperature", unit="℃"}
Number:Temperature Wetter_Fc06Temperature "Temperatur + 6h" (gOWM) {channel="openweathermap:weather-and-forecast:bridge:local:forecastHours06#temperature", unit="℃"}
Number:Temperature Wetter_Fc09Temperature "Temperatur + 9h" (gOWM) {channel="openweathermap:weather-and-forecast:bridge:local:forecastHours09#temperature", unit="℃"}
Number:Temperature Wetter_Fc12Temperature "Temperatur +12h" (gOWM) {channel="openweathermap:weather-and-forecast:bridge:local:forecastHours12#temperature", unit="℃"}
Number:Temperature Wetter_Fc15Temperature "Temperatur +15h" (gOWM) {channel="openweathermap:weather-and-forecast:bridge:local:forecastHours15#temperature", unit="℃"}
Number:Temperature Wetter_Fc18Temperature "Temperatur +18h" (gOWM) {channel="openweathermap:weather-and-forecast:bridge:local:forecastHours18#temperature", unit="℃"}
Number:Temperature Wetter_Fc21Temperature "Temperatur +21h" (gOWM) {channel="openweathermap:weather-and-forecast:bridge:local:forecastHours21#temperature", unit="℃"}
Number:Temperature Wetter_Fc24Temperature "Temperatur +24h" (gOWM) {channel="openweathermap:weather-and-forecast:bridge:local:forecastHours24#temperature", unit="℃"}
Das Item Schatten gibt an, ob die Beschattung an diesem Tag aktiviert werden soll.
Die Rule:
Code: Alles auswählen
var maxTemp = 0.0
rule "update Schatten"
when
Time cron "0 55 6 * * ?"
then
maxTemp = 0
gOWM.members.filter[ i |
i.name.contains("Temperature") && i.name.contains("Fc") && (i.state instanceof Number)].forEach[ j |
if((j.state as Number).floatValue > maxTemp)
maxTemp = (j.state as Number).floatValue
logInfo("schatten", "{} ist {}, Maximum ist {}",j.name,j.state,maxTemp)
]
if (maxTemp > 23)
Schatten.postUpdate(ON)
else
Schatten.postUpdate(OFF)
end
Die Rule setzt zunächst den aktuellen Maximalwert auf 0 (wenn man unter allen Umständen die echte Maximaltemperatur haben möchte, könnte man hier auch -273.15 eintragen, um sicherzugehen, auch wirklich
jeden Temperaturwert zu berücksichtigen

aber mich interessiert nur die Überschreitung meiner Schwelltemperatur von 23 °C...
Dann filtert sie die Gruppe aller Wetteritems (da sind noch diverse andere Items mit dabei...) auf diejenigen, welche im Namen Temperature haben und die Kennung Fc (was bei mir für Forecast steht). Außerdem werden nur die Items berücksichtigt, deren Status eine gültige Zahl enthält.
Die gefilterte Liste wird nun durchlaufen und der Status als Zahl mit maxTemp verglichen. Ist der Wert höher als maxTemp, so wird maxTemp aktualisiert.
Nachdem die Liste durchlaufen wurde, steht die Maximaltemperatur fest und kann ausgewertet werden.
Eine zweite Rule fährt die Läden auf Beschattungsposition, eine dritte Rule fährt sie wieder hoch, falls die Beschattung aktiv war, beides geschieht zu bestimmten Uhrzeiten bzw. wenn die Sonne eine bestimmte Position erreicht hat.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet