Hallo und vielen Dank für diese Idee!

Ich hab (für mich) ein wenig "rumgespielt" und folgendes bei mir laufen:
ich habe das userReadings-Zeugs in myUtils "ausgelagert" und erweitert
sub my_userReadingsWetterCom($$$$)
{
my ($Device, $Start, $End, $Mode) = @_;
my $LoopStart = $Start;
my $ReturnTxt = "kein Niederschlag";
my $ReturnNum = 0;
my $RainVolume = 0;
my $RainVolumeAvg = 0;
my $FieldNum = "01";
my $NoRainLimit = AttrVal($Device, "my_NoRainLimit", 0);
my $LowRainLimit = AttrVal($Device, "my_LowRainLimit", 2);
my $MediumRainLimit = AttrVal($Device, "my_MediumRainLimit", 5);
my $HighRainLimit = AttrVal($Device, "my_HighRainLimit", 10);
# Log3(undef, 1, "my_userReadingsWetterCom Start: $Start End: $End");
while($LoopStart <= $End)
{
$FieldNum = sprintf("%02u", $LoopStart);
$RainVolume += ReadingsNum($Device,"feld-$FieldNum",0);
$LoopStart++;
}
$RainVolumeAvg = $RainVolume / ($End - $Start);
# Log3(undef, 1, "my_userReadingsWetterCom RainVolume: $RainVolume RainVolumeAvg: $RainVolumeAvg NoRainLimit: $NoRainLimit LowRainLimit: $LowRainLimit MediumRainLimit: $MediumRainLimit HighRainLimit: $HighRainLimit");
if($RainVolumeAvg > $HighRainLimit)
{
$ReturnTxt = "sehr starker Niederschlag";
$ReturnNum = 4;
}
elsif($RainVolumeAvg > $MediumRainLimit)
{
$ReturnTxt = "starker Niederschlag";
$ReturnNum = 3;
}
elsif($RainVolumeAvg > $LowRainLimit)
{
$ReturnTxt = "Niederschlag";
$ReturnNum = 2;
}
elsif($RainVolumeAvg > $NoRainLimit)
{
$ReturnTxt = "leichter Niederschlag";
$ReturnNum = 1;
}
if($Mode eq "txt")
{
return $ReturnTxt;
}
else
{
return $ReturnNum;
}
}
(jaja, ich weiß: Prototypen / will jetzt aber hier gar nicht diskutieren, ich mach das so basta, wer ohne will: feel free

)
EDIT: einige Fehler korrigiert! SORRY!
Die Logeinträge kann man nat. auch rausnehmen, waren nur für mich zum "Debuggen"...
Dann nat. die userReadings anpassen.
Ich habe hier mal die Möglichkeit mit Nummer (besser für programmatische Reaktionen) und Text (habe ich als "Anzeige"):
Status:feld-01.* {my_userReadingsWetterCom("$name", 1, 7, "txt")},
Status1h:feld-01.* {my_userReadingsWetterCom("$name", 8, 15, "txt")},
Status2h:feld-01.* {my_userReadingsWetterCom("$name", 16, 21, "txt")},
Status_num:feld-01.* {my_userReadingsWetterCom("$name", 1, 7, "num")},
Status1h_num:feld-01.* {my_userReadingsWetterCom("$name", 8, 15, "num")},
Status2h_num:feld-01.* {my_userReadingsWetterCom("$name", 16, 21, "num")}
Man kann nun leicht anpassen, wenn man andere "field-Nummern" haben will oder weitere Unterteilungen der Zeit bzw. wenn jemand andere Nummern-Zeit-Zuordnungen will, einfach entsprechend Start/Stopp anpassen...

EDIT: entsprechend habe ich auch mein stateFormat angepasst
date time_04
</br>Aktuell: Status
</br>In 1h: Status1h
</br>In 2h: Status2h
</br>regen
Und dann habe ich noch eigene Attribute beigefügt, wo ich eben "einstellen" kann, was für mich "kein Regen", "wenig Regen", "Regen" und "(sehr) viel Regen" bedeutet...
Zum Vergleich wird immer der Durchschnittswert des angegebenen "Zeitraums" (bzw. Start-Field -> End-Field) genommen...
userattr my_NoRainLimit my_LowRainLimit my_MediumRainLimit my_HighRainLimit
Dann halt noch die Attribute entsprechend mit den Limit-Werten versehen, meine aktuelle Einstellung (mag sich noch ändern

):
my_HighRainLimit 10
my_LowRainLimit 3
my_MediumRainLimit 6
my_NoRainLimit 0.5
Ich hoffe ich hab jetzt (hier beim Posten) keinen "Murks" reingebracht...
...viel testen konnte ich noch nicht, da es (nat.) gerade NICHT regnet und auch nichts angekündigt ist...
...vielleicht kann das ja noch wer brauchen (oder verbessern).
Achja: ich hab das mal parallel mit meinem Regensensor laufen lassen...
...naja die Markise würde ich danach nicht steuern...
...aber so als "Forecast" ist es echt toll!

Gruß, Joachim