Seite 1 von 1

Openweather / Alternative

Verfasst: 30. Jan 2024 11:42
von Thomasv
Hallo alle miteinander,

ich möchte eine Regel erstellen, die Morgens nach dem Aufstehen die Tageshöchsstemperatur checkt (Also die Vorhergesagte) und ab einem bestimmten Wert die Rolläden morgens in eine Sonnenschutzstellung fährt.
Bei Openweather habe ich eine API erstellt, da scheint aber "Tageshöchstwert" nur im Bezahl Plan zu finden zu sein, und dafür finde ich dann 35,- ein wenig happig :-)
Underground Weather funktioniert nur mit einer eigenen Station - hat jemand eine Idee, wo ich den Wert herbekommen kann?

Danke,

Re: Openweather / Alternative

Verfasst: 30. Jan 2024 12:54
von peter-pan
Ich habe das Binding zwar nicht mehr im Einsatz, aber eigentlich hat das mal funktioniert und zwar über das One-Call-Thing innerhalb der Bridge
.things

Code: Alles auswählen

       Thing onecall              local "OWM WetterInfo OneCall"   [location="12.34,5.678,1502", forecastHours=24, numberOfAlerts=3, forecastMinutes=60]
Die Items dazu:
.items

Code: Alles auswählen

Number:Temperature      OneCall_ForecastToday_Mintemperature        "Minimum Temperature"          <Temperature>   (gOCact)         ["Point"]          {channel="openweathermap:onecall:bridge:local:forecastToday#min-temperature" }        
Number:Temperature      OneCall_ForecastToday_Maxtemperature        "Maximum Temperature"          <Temperature>   (gOCact)         ["Point"]          {channel="openweathermap:onecall:bridge:local:forecastToday#max-temperature" }        
Die URL dazu sieht ungefähr so aus:

Code: Alles auswählen

https://api.openweathermap.org/data/2.5/onecall?lat=12.34&lon=5.678&exclude=minutely,hourly&appid=verrat_ich_nicht&lang=de&units=metric
Allerdings basiert mein Key auf der Version 2.5. Ich weiss nicht, ob es die noch gibt. Bei mir funktioniert sie noch.

Re: Openweather / Alternative

Verfasst: 30. Jan 2024 14:06
von udo1toni
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.

Re: Openweather / Alternative

Verfasst: 30. Jan 2024 18:00
von peter-pan
..sorry. Ich hab einfach das one-call-Thing genommen, da gibt es die Werte, soweit ich mich noch erinnern kann, direkt.

Das ganze Thing sieht eigentlich so aus:
.things

Code: Alles auswählen

Bridge openweathermap:weather-api:bridge "OWM Account"              [apikey="hierkommtdein apikeyrein", refreshInterval=30, language="de"] {
        Thing weather-and-forecast local "OWM WetterInfo lokal"     [location="12.3456,1.23456,999", forecastHours=120, forecastDays=0]
        Thing uvindex              local "OWM UV Index"             [location="12.3456,1.23456,999", forecastDays=7]
        Thing onecall              local "OWM WetterInfo OneCall"   [location="12.3456,1.23456,999", forecastHours=24, numberOfAlerts=3, forecastMinutes=60]
        Thing air-pollution        local "OWM Luftverschmutzung"    [location="12.3456,1.23456,999"]
}
Ich hatte ursprünglich auch mal mit der Version(und der Rule) von Udo gearbeitet, bin dann aber als die "onecall"-Version herauskam, auf diese Version(Thing) gewechselt, da hier die Min-/Max-Werte direkt aufgelöst werden.

Im Browser kann man sich die JSON-Werte über die folgenden Adressen anschauen

Code: Alles auswählen

//  https://api.openweathermap.org/data/2.5/forecast?lat=44.34&lon=10.99&appid={API key}&lang=de&units=metric  // forecast
//  https://api.openweathermap.org/data/2.5/weather?lat=44.34&lon=10.99&appid={API key}&lang=de&units=metric   // current

//  https://api.openweathermap.org/data/2.5/onecall?lat={lat}&lon={lon}&exclude={part}&appid={API key}&lang=de&units=metric  // onecall
Im Moment benutze ich das Binding aber gar nicht mehr.

Re: Openweather / Alternative

Verfasst: 30. Jan 2024 18:20
von udo1toni
Ja, onecall wollte ich auch mal konfigurieren... man kommt halt zu nix vor lauter lauter...

Re: Openweather / Alternative

Verfasst: 30. Jan 2024 18:56
von peter-pan
udo1toni hat geschrieben: 30. Jan 2024 18:20 Ja, onecall wollte ich auch mal konfigurieren... man kommt halt zu nix vor lauter lauter...
ja genau, wenn man immer den andern helfen muss, kommt man selber zu nichts mehr ;) .
Aber, warum auch ändern; es heisst nicht umsonst: Never change a running system :)