Seite 1 von 1

Gruppen sortieren, summieren etc.

Verfasst: 12. Aug 2020 23:24
von japhias
Hallo Zusammen,

ich habe für openweathermap verschiedene items zum Speichern der Vorhersage angelegt, diese befinden sich in der gleichen Gruppe. Gibt es eine einfache Möglichkeit die Werte zu sortieren, damit man die maximale Temperatur des Tages herausfinden kann?

Code: Alles auswählen

Number:Temperature      HA_Wetterdienst_Temperatur_Forecast03h     "Wetterdienst Temperatur Forecast 3h"     (gWetter, gTempForecast)   { channel="openweathermap:weather-and-forecast:api:ha_wetterdienst_haus:forecastHours03#temperature" }
Number:Temperature      HA_Wetterdienst_Temperatur_Forecast06h     "Wetterdienst Temperatur Forecast 6h"     (gWetter, gTempForecast)   { channel="openweathermap:weather-and-forecast:api:ha_wetterdienst_haus:forecastHours06#temperature" }
Number:Temperature      HA_Wetterdienst_Temperatur_Forecast09h     "Wetterdienst Temperatur Forecast 9h"     (gWetter, gTempForecast)   { channel="openweathermap:weather-and-forecast:api:ha_wetterdienst_haus:forecastHours09#temperature" }
Number:Temperature      HA_Wetterdienst_Temperatur_Forecast12h     "Wetterdienst Temperatur Forecast 12h"     (gWetter, gTempForecast)   { channel="openweathermap:weather-and-forecast:api:ha_wetterdienst_haus:forecastHours12#temperature" }
Number:Temperature      HA_Wetterdienst_Temperatur_Forecast15h     "Wetterdienst Temperatur Forecast 15h"     (gWetter, gTempForecast)   { channel="openweathermap:weather-and-forecast:api:ha_wetterdienst_haus:forecastHours15#temperature" }
Number:Temperature      HA_Wetterdienst_Temperatur_Forecast18h     "Wetterdienst Temperatur Forecast 18h"     (gWetter, gTempForecast)   { channel="openweathermap:weather-and-forecast:api:ha_wetterdienst_haus:forecastHours18#temperature" }
Number:Temperature      HA_Wetterdienst_Temperatur_Forecast21h     "Wetterdienst Temperatur Forecast 21h"     (gWetter, gTempForecast)   { channel="openweathermap:weather-and-forecast:api:ha_wetterdienst_haus:forecastHours21#temperature" }
Eine andere Funktion wäre ein aufsummieren, um z.b. die Regenmenge herauszufinden, ist sowas auch möglich?
Gesucht sind einfache Gruppenfunktionen ohne Schleifen etc.
Danke für eure Hilfe

Re: Gruppen sortieren, summieren etc.

Verfasst: 12. Aug 2020 23:42
von udo1toni
das ist in diesem Fall nicht so einfach, denn die Items enthalten ja immer den Wert für now+x Stunden (x = 3,6,9,12,15,18,21).
Die Gruppe kann natürlich die erwartete Maximaltemperatur der kommenden 21 Stunden wiedergeben. Wenn es aber um den aktuellen Tag geht, müssen die Items gefiltert werden und der Maximalwert muss händisch bestimmt werden.

Re: Gruppen sortieren, summieren etc.

Verfasst: 13. Aug 2020 14:04
von japhias
Aber wenn ich die Werte nur um 0 Uhr aktualiesiere, dann kann ich die maximal Temperatur des Tages ermitteln wenn ich den maximalen Wert der items herausfinde. Das würde mich reichen

Re: Gruppen sortieren, summieren etc.

Verfasst: 13. Aug 2020 16:38
von udo1toni
Ja, das geht sicherlich. Wenn Du in der Gruppe gTempForecast exakt die Items ..Forcast03 bis ..Forcast21 hast, ist es das Einfachste, das PerRule zu erlegigen.

Code: Alles auswählen

rule "Berechne min- max- avg"
when
    Time cron "30 0 0 * * ?" // täglich um 00:00:30 Uhr 
then
    var Number nMin = 100
    var Number nMax = -100
    var Number nSum = 0
    gTempForcast.members.filter[j|j.state instanceof Number].forEach[i|
        if((i.state as Number).floatValue < nMin) nMin = (i.state as Number).floatValue
        if((i.state as Number).floatValue > nMax) nMax = (i.state as Number).floatValue
        nSum = nSum + (i.state as Number).floatValue
    ]
    val Number nAvg = nSum/gTempForcast.members.filter[j|j.state instanceof Number].size
    logInfo("temp","Vorhersage +3 - + 21h Max {}°C / Avg {} °C / Min {} °C",nMax,nAvg,nMin)
end
Hier gebe ich die errechneten Werte nur als log aus, natürlich kannst Du die Werte leicht auch in separate Items speichern, oder auch ein String Item verwenden, in dem Du alle Werte auf einmal ausgibst (nimmt in der UI weniger Platz weg...)

Ich gehe davon aus, dass die niedrigste Temperatur auf jeden Fall unter 100°C liegt und die maximale Temperatur auf jeden Fall über -100°C, ich denke, die Wahrscheinlichkeit fürbeide Annahmen ist 100% ;)