Gruppen sortieren, summieren etc.

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
japhias
Beiträge: 9
Registriert: 19. Apr 2020 01:03
Answers: 0

Gruppen sortieren, summieren etc.

Beitrag 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

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: Gruppen sortieren, summieren etc.

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

japhias
Beiträge: 9
Registriert: 19. Apr 2020 01:03
Answers: 0

Re: Gruppen sortieren, summieren etc.

Beitrag 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

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: Gruppen sortieren, summieren etc.

Beitrag 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% ;)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten