diff --git a/fhem/contrib/DS_Starter/76_SolarForecast.pm b/fhem/contrib/DS_Starter/76_SolarForecast.pm index 695cf7519..636e66513 100644 --- a/fhem/contrib/DS_Starter/76_SolarForecast.pm +++ b/fhem/contrib/DS_Starter/76_SolarForecast.pm @@ -150,6 +150,120 @@ my %htilt = ( # Fa "90" => 1.26 ); +my %weather_ids = ( + # s => 0 , 0 - 3 DWD -> kein signifikantes Wetter + # s => 1 , 45 - 99 DWD -> signifikantes Wetter + '0' => { s => '0', icon => 'weather_sun', txtd => 'sonnig' }, + '1' => { s => '0', icon => 'weather_cloudy_light', txtd => 'Bewölkung abnehmend' }, + '2' => { s => '0', icon => 'weather_cloudy', txtd => 'Bewölkung unverändert' }, + '3' => { s => '0', icon => 'weather_cloudy_heavy', txtd => 'Bewölkung zunehmend' }, + '4' => { s => '0', icon => 'unknown', txtd => 'Sicht durch Rauch oder Asche vermindert' }, + '5' => { s => '0', icon => 'unknown', txtd => 'trockener Dunst (relative Feuchte < 80 %)' }, + '6' => { s => '0', icon => 'unknown', txtd => 'verbreiteter Schwebstaub, nicht vom Wind herangeführt' }, + '7' => { s => '0', icon => 'unknown', txtd => 'Staub oder Sand bzw. Gischt, vom Wind herangeführt' }, + '8' => { s => '0', icon => 'unknown', txtd => 'gut entwickelte Staub- oder Sandwirbel' }, + '9' => { s => '0', icon => 'unknown', txtd => 'Staub- oder Sandsturm im Gesichtskreis, aber nicht an der Station' }, + + '10' => { s => '0', icon => 'weather_fog', txtd => 'Nebel' }, + '11' => { s => '0', icon => 'weather_rain_fog', txtd => 'Nebel mit Regen' }, + '12' => { s => '0', icon => 'weather_fog', txtd => 'durchgehender Bodennebel' }, + '13' => { s => '0', icon => 'unknown', txtd => 'Wetterleuchten sichtbar, kein Donner gehört' }, + '14' => { s => '0', icon => 'unknown', txtd => 'Niederschlag im Gesichtskreis, nicht den Boden erreichend' }, + '15' => { s => '0', icon => 'unknown', txtd => 'Niederschlag in der Ferne (> 5 km), aber nicht an der Station' }, + '16' => { s => '0', icon => 'unknown', txtd => 'Niederschlag in der Nähe (< 5 km), aber nicht an der Station' }, + '17' => { s => '0', icon => 'unknown', txtd => 'Gewitter (Donner hörbar), aber kein Niederschlag an der Station' }, + '18' => { s => '0', icon => 'unknown', txtd => 'Markante Böen im Gesichtskreis, aber kein Niederschlag an der Station' }, + '19' => { s => '0', icon => 'unknown', txtd => 'Tromben (trichterförmige Wolkenschläuche) im Gesichtskreis' }, + + '20' => { s => '0', icon => 'unknown', txtd => 'nach Sprühregen oder Schneegriesel' }, + '21' => { s => '0', icon => 'unknown', txtd => 'nach Regen' }, + '22' => { s => '0', icon => 'unknown', txtd => 'nach Schnefall' }, + '23' => { s => '0', icon => 'unknown', txtd => 'nach Schneeregen oder Eiskörnern' }, + '24' => { s => '0', icon => 'unknown', txtd => 'nach gefrierendem Regen' }, + '25' => { s => '0', icon => 'unknown', txtd => 'nach Regenschauer' }, + '26' => { s => '0', icon => 'unknown', txtd => 'nach Schneeschauer' }, + '27' => { s => '0', icon => 'unknown', txtd => 'nach Graupel- oder Hagelschauer' }, + '28' => { s => '0', icon => 'unknown', txtd => 'nach Nebel' }, + '29' => { s => '0', icon => 'unknown', txtd => 'nach Gewitter' }, + + '30' => { s => '0', icon => 'unknown', txtd => 'leichter oder mäßiger Sandsturm, an Intensität abnehmend' }, + '31' => { s => '0', icon => 'unknown', txtd => 'leichter oder mäßiger Sandsturm, unveränderte Intensität' }, + '32' => { s => '0', icon => 'unknown', txtd => 'leichter oder mäßiger Sandsturm, an Intensität zunehmend' }, + '33' => { s => '0', icon => 'unknown', txtd => 'schwerer Sandsturm, an Intensität abnehmend' }, + '34' => { s => '0', icon => 'unknown', txtd => 'schwerer Sandsturm, unveränderte Intensität' }, + '35' => { s => '0', icon => 'unknown', txtd => 'schwerer Sandsturm, an Intensität zunehmend' }, + '36' => { s => '0', icon => 'weather_snow_light', txtd => 'leichtes oder mäßiges Schneefegen, unter Augenhöhe' }, + '37' => { s => '0', icon => 'weather_snow_heavy', txtd => 'starkes Schneefegen, unter Augenhöhe' }, + '38' => { s => '0', icon => 'weather_snow_light', txtd => 'leichtes oder mäßiges Schneetreiben, über Augenhöhe' }, + '39' => { s => '0', icon => 'weather_snow_heavy', txtd => 'starkes Schneetreiben, über Augenhöhe' }, + + '40' => { s => '0', icon => 'weather_fog', txtd => 'Nebel in einiger Entfernung' }, + '41' => { s => '0', icon => 'weather_fog', txtd => 'Nebel in Schwaden oder Bänken' }, + '42' => { s => '0', icon => 'weather_fog', txtd => 'Nebel, Himmel erkennbar, dünner werdend' }, + '43' => { s => '0', icon => 'weather_fog', txtd => 'Nebel, Himmel nicht erkennbar, dünner werdend' }, + '44' => { s => '0', icon => 'weather_fog', txtd => 'Nebel, Himmel erkennbar, unverändert' }, + '45' => { s => '1', icon => 'weather_fog', txtd => 'Nebel' }, + '46' => { s => '0', icon => 'weather_fog', txtd => 'Nebel, Himmel erkennbar, dichter werdend' }, + '47' => { s => '0', icon => 'weather_fog', txtd => 'Nebel, Himmel nicht erkennbar, dichter werdend' }, + '48' => { s => '1', icon => 'weather_fog', txtd => 'Nebel mit Reifbildung' }, + '49' => { s => '0', icon => 'weather_fog', txtd => 'Nebel mit Reifansatz, Himmel nicht erkennbar' }, + + '50' => { s => '0', icon => 'weather_rain', txtd => 'unterbrochener leichter Sprühregen' }, + '51' => { s => '1', icon => 'weather_rain_light', txtd => 'leichter Sprühregen' }, + '52' => { s => '0', icon => 'weather_rain', txtd => 'unterbrochener mäßiger Sprühregen' }, + '53' => { s => '1', icon => 'weather_rain_light', txtd => 'leichter Sprühregen' }, + '54' => { s => '0', icon => 'weather_rain_heavy', txtd => 'unterbrochener starker Sprühregen' }, + '55' => { s => '1', icon => 'weather_rain_heavy', txtd => 'starker Sprühregen' }, + '56' => { s => '1', icon => 'weather_rain_light', txtd => 'leichter gefrierender Sprühregen' }, + '57' => { s => '1', icon => 'weather_rain_heavy', txtd => 'mäßiger oder starker gefrierender Sprühregen' }, + '58' => { s => '0', icon => 'weather_rain_light', txtd => 'leichter Sprühregen mit Regen' }, + '59' => { s => '0', icon => 'weather_rain_heavy', txtd => 'mäßiger oder starker Sprühregen mit Regen' }, + + '60' => { s => '0', icon => 'weather_rain_light', txtd => 'unterbrochener leichter Regen oder einzelne Regentropfen' }, + '61' => { s => '1', icon => 'weather_rain_light', txtd => 'leichter Regen' }, + '62' => { s => '0', icon => 'weather_rain', txtd => 'unterbrochener mäßiger Regen' }, + '63' => { s => '1', icon => 'weather_rain', txtd => 'mäßiger Regen' }, + '64' => { s => '0', icon => 'weather_rain_heavy', txtd => 'unterbrochener starker Regen' }, + '65' => { s => '1', icon => 'weather_rain_heavy', txtd => 'starker Regen' }, + '66' => { s => '1', icon => 'weather_rain_snow_light', txtd => 'leichter gefrierender Regen' }, + '67' => { s => '1', icon => 'weather_rain_snow_heavy', txtd => 'mäßiger oder starker gefrierender Regen' }, + '68' => { s => '0', icon => 'weather_rain_snow_light', txtd => 'leichter Schneeregen' }, + '69' => { s => '0', icon => 'weather_rain_snow_heavy', txtd => 'mäßiger oder starker Schneeregen' }, + + '70' => { s => '0', icon => 'weather_snow_light', txtd => 'unterbrochener leichter Schneefall oder einzelne Schneeflocken' }, + '71' => { s => '1', icon => 'weather_snow_light', txtd => 'leichter Schneefall' }, + '72' => { s => '0', icon => 'weather_snow', txtd => 'unterbrochener mäßiger Schneefall' }, + '73' => { s => '1', icon => 'weather_snow', txtd => 'mäßiger Schneefall' }, + '74' => { s => '0', icon => 'weather_snow_heavy', txtd => 'unterbrochener starker Schneefall' }, + '75' => { s => '1', icon => 'weather_snow_heavy', txtd => 'starker Schneefall' }, + '76' => { s => '0', icon => 'weather_frost', txtd => 'Eisnadeln (Polarschnee)' }, + '77' => { s => '1', icon => 'weather_frost', txtd => 'Schneegriesel' }, + '78' => { s => '0', icon => 'weather_frost', txtd => 'Schneekristalle' }, + '79' => { s => '0', icon => 'weather_frost', txtd => 'Eiskörner (gefrorene Regentropfen)' }, + + '80' => { s => '1', icon => 'weather_rain_light', txtd => 'leichter Regenschauer' }, + '81' => { s => '1', icon => 'weather_rain', txtd => 'mäßiger oder starkerRegenschauer' }, + '82' => { s => '1', icon => 'weather_rain_heavy', txtd => 'sehr starker Regenschauer' }, + '83' => { s => '0', icon => 'weather_snow', txtd => 'mäßiger oder starker Schneeregenschauer' }, + '84' => { s => '0', icon => 'weather_snow_light', txtd => 'leichter Schneeschauer' }, + '85' => { s => '1', icon => 'weather_snow_light', txtd => 'leichter Schneeschauer' }, + '86' => { s => '1', icon => 'weather_snow_heavy', txtd => 'mäßiger oder starker Schneeschauer' }, + '87' => { s => '0', icon => 'weather_snow_heavy', txtd => 'mäßiger oder starker Graupelschauer' }, + '88' => { s => '0', icon => 'unknown', txtd => 'leichter Hagelschauer' }, + '89' => { s => '0', icon => 'unknown', txtd => 'mäßiger oder starker Hagelschauer' }, + + '90' => { s => '0', icon => 'weather_thunderstorm', txtd => '' }, + '91' => { s => '0', icon => 'weather_storm', txtd => '' }, + '92' => { s => '0', icon => 'weather_thunderstorm', txtd => '' }, + '93' => { s => '0', icon => 'weather_thunderstorm', txtd => '' }, + '94' => { s => '0', icon => 'weather_thunderstorm', txtd => '' }, + '95' => { s => '1', icon => 'weather_thunderstorm', txtd => 'leichtes oder mäßiges Gewitter ohne Graupel oder Hagel' }, + '96' => { s => '1', icon => 'weather_storm', txtd => 'starkes Gewitter ohne Graupel oder Hagel,Gewitter mit Graupel oder Hagel' }, + '97' => { s => '0', icon => 'weather_storm', txtd => 'starkes Gewitter mit Regen oder Schnee' }, + '98' => { s => '0', icon => 'weather_storm', txtd => 'starkes Gewitter mit Sandsturm' }, + '99' => { s => '1', icon => 'weather_storm', txtd => 'starkes Gewitter mit Graupel oder Hagel' }, +); + my @chours = (5..21); # Stunden des Tages mit möglichen Korrekturwerten my $defpvme = 16.52; # default Wirkungsgrad Solarmodule my $definve = 98.3; # default Wirkungsgrad Wechselrichter @@ -1447,9 +1561,9 @@ sub forecastGraphic { for my $i (0..$maxhours-1) { # keine Anzeige bei Null Ertrag bzw. in der Nacht , Typ pcvo & diff haben aber immer Daten in der Nacht if ($pv{$i} || $show_night || ($type eq 'pvco') || ($type eq 'diff')) { # FHEM Wetter Icons (weather_xxx) , Skalierung und Farbe durch FHEM Bordmittel - my $night = ($we{$i} > 99) ? 1 : 0; - $we{$i} -= 100 if ($night); - my $icon_name = weather_icon($we{$i}); # unknown -> FHEM Icon Fragezeichen im Kreis wird als Ersatz Icon ausgegeben + my $night = ($we{$i} > 99) ? 1 : 0; + $we{$i} -= 100 if ($night); + my ($icon_name, $title) = weather_icon($we{$i}); # unknown -> FHEM Icon Fragezeichen im Kreis wird als Ersatz Icon ausgegeben Log3($name, 3, "$name - unknown weather id: ".$we{$i}.", please inform the maintainer") if($icon_name eq 'unknown'); $icon_name .='@'.$colorw if (defined($colorw) && !$night); @@ -1461,7 +1575,7 @@ sub forecastGraphic { Log3($name, 3, qq{$name - the icon $we{$i} not found. Please check attribute "iconPath" of your FHEMWEB instance and/or update your FHEM software}); } - $ret .= "