diff --git a/fhem/CHANGED b/fhem/CHANGED index 6c14ff952..a1d6f7d66 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,8 @@ # Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Do not insert empty lines here, update check depends on it. + - updated: 77_UWZ: New Minor Release 1.4 multi languarge support, more Maps, + Routine for search AreaID + - updated: 74_AMAD: transmissionERROR Reading only expertMode is set - changed: 57_CALVIEW: value test, thx klausw - added: 98_DLNARenderer: Autodiscover, control and receive events from DLNA MediaRenderer devices diff --git a/fhem/FHEM/74_AMAD.pm b/fhem/FHEM/74_AMAD.pm index 46cc1ba26..14f2118e3 100644 --- a/fhem/FHEM/74_AMAD.pm +++ b/fhem/FHEM/74_AMAD.pm @@ -37,7 +37,7 @@ use TcpServerUtils; use Encode qw(encode); -my $modulversion = "2.4.0"; +my $modulversion = "2.4.1"; my $flowsetversion = "2.4.0"; @@ -1164,7 +1164,7 @@ sub AMAD_CommBridge_Read($) { elsif( !defined($device) ) { - readingsSingleUpdate( $bhash, "transmitterERROR", $name." has no device name sends", 1 ); + readingsSingleUpdate( $bhash, "transmitterERROR", $name." has no device name sends", 1 ) if( ReadingsVal( $bname, "expertMode", 0 ) eq "1" ); Log3 $name, 4, "AMAD ($name) - ERROR - no device name given. please check your global variable in automagic"; return; } @@ -1349,7 +1349,7 @@ sub AMAD_decrypt($) {

How to use AMAD?
@@ -1505,7 +1505,7 @@ sub AMAD_decrypt($) {

Wie genau verwendet man nun AMAD?
diff --git a/fhem/FHEM/77_UWZ.pm b/fhem/FHEM/77_UWZ.pm index d0a52d1e9..74718bb0b 100644 --- a/fhem/FHEM/77_UWZ.pm +++ b/fhem/FHEM/77_UWZ.pm @@ -38,19 +38,6 @@ ############################################## -### Wünsche von Usern -## -## Hi, -## benutze jetzt seid einigen Tagen erfolgreich das UWZ Modul. -## Habe da noch einen kleinen wunsch zum weblink: -## Könnte mal das attribut htmlattr mit einbinden? -## attr Unwetterzentrale htmlattr width="220" height="330" -## https://forum.fhem.de/index.php/topic,51233.msg461384.html#msg461384 -## -## - - - package main; use strict; @@ -73,7 +60,7 @@ use vars qw($readingFnAttributes); use vars qw(%defs); my $MODUL = "UWZ"; -my $version = "1.2.0"; +my $version = "1.4.0"; # ungerade Entwicklerversion Bsp.: 1.1, 1.3, 2.5 my $countrycode = "DE"; my $plz = "77777"; @@ -95,17 +82,67 @@ sub UWZ_Log($$$) { Log3 $instName, $loglevel, "$MODUL $instName: $sub.$xline " . $text; } +######################################## +sub UWZ_Map2Movie($$) { + my $uwz_movie_url = "http://www.meteocentrale.ch/uploads/media/"; + my ( $hash, $smap ) = @_; + my $lmap; + + $smap=lc($smap); + + ## Euro + $lmap->{'niederschlag-wolken'}=$uwz_movie_url.'UWZ_EUROPE_COMPLETE_niwofi.mp4'; + $lmap->{'stroemung'}=$uwz_movie_url.'UWZ_EUROPE_COMPLETE_stfi.mp4'; + $lmap->{'temperatur'}=$uwz_movie_url.'UWZ_EUROPE_COMPLETE_theta_E.mp4'; + + ## DE + $lmap->{'niederschlag-wolken-de'}=$uwz_movie_url.'UWZ_EUROPE_GERMANY_COMPLETE_niwofi.mp4'; + $lmap->{'stroemung-de'}=$uwz_movie_url.'UWZ_EUROPE_GERMANY_COMPLETE_stfi.mp4'; + + ## CH + $lmap->{'niederschlag-wolken-ch'}=$uwz_movie_url.'UWZ_EUROPE_SWITZERLAND_COMPLETE_niwofi.mp4'; + $lmap->{'stroemung-ch'}=$uwz_movie_url.'UWZ_EUROPE_SWITZERLAND_COMPLETE_stfi.mp4'; + + ## AT + $lmap->{'niederschlag-wolken-at'}=$uwz_movie_url.'UWZ_EUROPE_AUSTRIA_COMPLETE_niwofi.mp4'; + $lmap->{'stroemung-at'}=$uwz_movie_url.'UWZ_EUROPE_AUSTRIA_COMPLETE_stfi.mp4'; + + ## UK + $lmap->{'clouds-precipitation-uk'}=$uwz_movie_url.'UWZ_EUROPE_GREATBRITAIN_COMPLETE_niwofi.mp4'; + $lmap->{'currents-uk'}=$uwz_movie_url.'UWZ_EUROPE_GREATBRITAIN_COMPLETE_stfi.mp4'; + + return $lmap->{$smap}; +} + ######################################## sub UWZ_Map2Image($$) { my $uwz_de_url = "http://www.unwetterzentrale.de/images/map/"; my $uwz_at_url = "http://unwetter.wetteralarm.at/images/map/"; + my $uwz_ch_url = "http://alarm.meteocentrale.ch/images/map/"; my $uwz_en_url = "http://warnings.severe-weather-centre.co.uk/images/map/"; + my $uwz_li_url = "http://alarm.meteocentrale.li/images/map/"; + my $uwz_be_url = "http://alarm.meteo-info.be/images/map/"; + my $uwz_dk_url = "http://alarm.vejrcentral.dk/images/map/"; + my $uwz_fi_url = "http://vaaratasot.saa-varoitukset.fi/images/map/"; + my $uwz_fr_url = "http://alerte.vigilance-meteo.fr/images/map/"; + my $uwz_lu_url = "http://alarm.meteozentral.lu/images/map/"; + my $uwz_nl_url = "http://alarm.noodweercentrale.nl/images/map/"; + my $uwz_no_url = "http://advarsler.vaer-sentral.no/images/map/"; + my $uwz_pt_url = "http://avisos.centrometeo.pt/images/map/"; + my $uwz_se_url = "http://varningar.vader-alarm.se/images/map/"; + my $uwz_es_url = "http://avisos.alertas-tiempo.es/images/map/"; + + my ( $hash, $smap ) = @_; my $lmap; $smap=lc($smap); + + ## Euro $lmap->{'europa'}=$uwz_de_url.'europe_index.png'; + + ## DE $lmap->{'deutschland'}=$uwz_de_url.'deutschland_index.png'; $lmap->{'deutschland-small'}=$uwz_de_url.'deutschland_preview.png'; $lmap->{'niedersachsen'}=$uwz_de_url.'niedersachsen_index.png'; @@ -124,6 +161,8 @@ sub UWZ_Map2Image($$) { $lmap->{'hessen'}=$uwz_de_url.'hessen_index.png'; $lmap->{'brandenburg'}=$uwz_de_url.'brandenburg_index.png'; $lmap->{'berlin'}=$uwz_de_url.'brandenburg_index.png'; + + ## AT $lmap->{'oesterreich'}=$uwz_at_url.'oesterreich_index.png'; $lmap->{'burgenland'}=$uwz_at_url.'burgenland_index.png'; $lmap->{'kaernten'}=$uwz_at_url.'kaernten_index.png'; @@ -134,10 +173,40 @@ sub UWZ_Map2Image($$) { $lmap->{'tirol'}=$uwz_at_url.'tirol_index.png'; $lmap->{'vorarlberg'}=$uwz_at_url.'vorarlberg_index.png'; $lmap->{'wien'}=$uwz_at_url.'wien_index.png'; - $lmap->{'isobaren1'}="http://www.unwetterzentrale.de/images/icons/UWZ_ISO_00.jpg"; - $lmap->{'isobaren2'}="http://www.wetteralarm.at/uploads/pics/UWZ_EURO_ISO_GER_00.jpg"; - - ## Maps of United Kingdom + + ## CH + $lmap->{'schweiz'}=$uwz_ch_url.'schweiz_index.png'; + $lmap->{'aargau'}=$uwz_ch_url.'aargau_index.png'; + $lmap->{'appenzell_ausserrhoden'}=$uwz_ch_url.'appenzell_ausserrhoden_index.png'; + $lmap->{'appenzell_innerrhoden'}=$uwz_ch_url.'appenzell_innerrhoden_index.png'; + $lmap->{'basel_landschaft'}=$uwz_ch_url.'basel_landschaft_index.png'; + $lmap->{'basel_stadt'}=$uwz_ch_url.'basel_stadt_index.png'; + $lmap->{'bern'}=$uwz_ch_url.'bern_index.png'; + $lmap->{'fribourg'}=$uwz_ch_url.'fribourg_index.png'; + $lmap->{'geneve'}=$uwz_ch_url.'geneve_index.png'; + $lmap->{'glarus'}=$uwz_ch_url.'glarus_index.png'; + $lmap->{'graubuenden'}=$uwz_ch_url.'graubuenden_index.png'; + $lmap->{'jura'}=$uwz_ch_url.'jura_index.png'; + $lmap->{'luzern'}=$uwz_ch_url.'luzern_index.png'; + $lmap->{'neuchatel'}=$uwz_ch_url.'neuchatel_index.png'; + $lmap->{'nidwalden'}=$uwz_ch_url.'nidwalden_index.png'; + $lmap->{'obwalden'}=$uwz_ch_url.'obwalden_index.png'; + $lmap->{'schaffhausen'}=$uwz_ch_url.'schaffhausen_index.png'; + $lmap->{'schwyz'}=$uwz_ch_url.'schwyz_index.png'; + $lmap->{'solothurn'}=$uwz_ch_url.'solothurn_index.png'; + $lmap->{'stgallen'}=$uwz_ch_url.'stgallen_index.png'; + $lmap->{'ticino'}=$uwz_ch_url.'ticino_index.png'; + $lmap->{'thurgau'}=$uwz_ch_url.'thurgau_index.png'; + $lmap->{'uri'}=$uwz_ch_url.'uri_index.png'; + $lmap->{'waadt'}=$uwz_ch_url.'waadt_index.png'; + $lmap->{'wallis'}=$uwz_ch_url.'wallis_index.png'; + $lmap->{'zug'}=$uwz_ch_url.'zug_index.png'; + $lmap->{'zuerich'}=$uwz_ch_url.'zuerich_index.png'; + + ## LI + $lmap->{'liechtenstein'}=$uwz_li_url.'liechtenstein_index.png'; + + ## UK $lmap->{'unitedkingdom'}=$uwz_en_url.'unitedkingdom_index.png'; $lmap->{'eastofengland'}=$uwz_en_url.'eastofengland_index.png'; $lmap->{'eastmidlands'}=$uwz_en_url.'eastmidlands-index.png'; @@ -151,6 +220,43 @@ sub UWZ_Map2Image($$) { $lmap->{'wales'}=$uwz_en_url.'wales-index.png'; $lmap->{'westmidlands'}=$uwz_en_url.'westmidlands-index.png'; $lmap->{'yorkshireandthehumber'}=$uwz_en_url.'yorkshireandthehumber-index.png'; + + ## BE + $lmap->{'belgique'}=$uwz_be_url.'belgique_index.png'; + + ## DK + $lmap->{'denmark'}=$uwz_dk_url.'denmark_index.png'; + + ## FI + $lmap->{'finnland'}=$uwz_fi_url.'finnland_index.png'; + + ## FR + $lmap->{'france'}=$uwz_fr_url.'france_index.png'; + + ## LU + $lmap->{'letzebuerg'}=$uwz_lu_url.'letzebuerg_index.png'; + + ## NL + $lmap->{'nederland'}=$uwz_nl_url.'nederland_index.png'; + + ## NO + $lmap->{'norwegen'}=$uwz_no_url.'norwegen_index.png'; + + ## PT + $lmap->{'portugal'}=$uwz_pt_url.'portugal_index.png'; + + ## SE + $lmap->{'sverige'}=$uwz_se_url.'sverige_index.png'; + + ## ES + $lmap->{'espana'}=$uwz_es_url.'espana_index.png'; + + + ## Isobaren + $lmap->{'isobaren1'}="http://www.unwetterzentrale.de/images/icons/UWZ_ISO_00.jpg"; + $lmap->{'isobaren2'}="http://www.wetteralarm.at/uploads/pics/UWZ_EURO_ISO_GER_00.jpg"; + $lmap->{'isobaren3'}="http://www.severe-weather-centre.co.uk/uploads/pics/UWZ_EURO_ISO_ENG_00.jpg"; + return $lmap->{$smap}; } @@ -162,14 +268,11 @@ sub UWZ_Initialize($) { $hash->{UndefFn} = "UWZ_Undef"; $hash->{SetFn} = "UWZ_Set"; $hash->{GetFn} = "UWZ_Get"; - $hash->{AttrList} = "INTERVAL ". - "CountryCode ". # Added to set country/language - "URL ". - "PLZ ". - "download:0,1 ". + $hash->{AttrList} = "download:0,1 ". "savepath ". "maps ". "humanreadable:0,1 ". + "htmlattr ". $readingFnAttributes; foreach my $d(sort keys %{$modules{UWZ}{defptr}}) { @@ -187,25 +290,37 @@ sub UWZ_Define($$) { my @a = split( "[ \t][ \t]*", $def ); return "Error: Perl moduls ".$missingModul."are missing on this system" if( $missingModul ); - return "Wrong syntax: use define UWZ [CountryCode] [PLZ] [Interval] " if int(@a) > 6; + return "Wrong syntax: use define UWZ [CountryCode] [PLZ] [Interval] " if (int(@a) != 5 and ((lc $a[2]) ne "search")); - $hash->{STATE} = "Initializing"; - $hash->{CountryCode} = $a[2]; - $hash->{PLZ} = $a[3]; - - ## URL by CountryCode - $hash->{URL} = "http://feed.alertspro.meteogroup.com/AlertsPro/AlertsProPollService.php?method=getWarning&language=en&areaID=UWZ" . $a[2] . $a[3] if ( $hash->{CountryCode} eq "UK" ); - $hash->{URL} = "http://feed.alertspro.meteogroup.com/AlertsPro/AlertsProPollService.php?method=getWarning&language=de&areaID=UWZ" . $a[2] . $a[3] if ( $hash->{CountryCode} eq "DE" ); - - $hash->{fhem}{LOCAL} = 0; - $hash->{INTERVAL} = $a[4]; - $hash->{VERSION} = $version; - - RemoveInternalTimer($hash); - - #Get first data after 12 seconds - InternalTimer( gettimeofday() + 12, "UWZ_Start", $hash, 0 ); + if ((lc $a[2]) ne "search") { + $hash->{STATE} = "Initializing"; + $hash->{CountryCode} = $a[2]; + $hash->{PLZ} = $a[3]; + + ## URL by CountryCode + my $URL_language="en"; + if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) { + $URL_language="de"; + } + + $hash->{URL} = "http://feed.alertspro.meteogroup.com/AlertsPro/AlertsProPollService.php?method=getWarning&language=" . $URL_language . "&areaID=UWZ" . $a[2] . $a[3]; + + + $hash->{fhem}{LOCAL} = 0; + $hash->{INTERVAL} = $a[4]; + $hash->{VERSION} = $version; + + RemoveInternalTimer($hash); + + #Get first data after 12 seconds + InternalTimer( gettimeofday() + 12, "UWZ_Start", $hash, 0 ) if ((lc $hash->{CountryCode}) ne "search"); + + } else { + $hash->{STATE} = "Search-Mode"; + $hash->{CountryCode} = uc $a[2]; + $hash->{VERSION} = $version; + } return undef; } @@ -226,7 +341,7 @@ sub UWZ_Set($@) { my ( $hash, @a ) = @_; my $name = $hash->{NAME}; my $reUINT = '^([\\+]?\\d+)$'; - my $usage = "Unknown argument $a[1], choose one of update:noArg "; + my $usage = "Unknown argument $a[1], choose one of update:noArg " if ( (lc $hash->{CountryCode}) ne "search" ); return $usage if ( @a < 2 ); @@ -256,27 +371,59 @@ sub UWZ_Set($@) { return; } -##################################### + sub UWZ_Get($@) { my ( $hash, @a ) = @_; my $name = $hash->{NAME}; - my $usage = "Unknown argument $a[1], choose one of Sturm:noArg Schneefall:noArg Regen:noArg Extremfrost:noArg Waldbrand:noArg Gewitter:noArg Glaette:noArg Hitze:noArg Glatteisregen:noArg Bodenfrost:noArg Hagel:noArg "; - - return $usage if ( @a < 2 ); - if ($a[1] =~ /^Sturm/) { UWZ_GetCurrent($hash,2); } - elsif ($a[1] =~ /^Schneefall/) { UWZ_GetCurrent($hash,3); } - elsif ($a[1] =~ /^Regen/) { UWZ_GetCurrent($hash,4); } - elsif ($a[1] =~ /^Extremfrost/) { UWZ_GetCurrent($hash,5); } - elsif ($a[1] =~ /^Waldbrand/) { UWZ_GetCurrent($hash,6); } - elsif ($a[1] =~ /^Gewitter/) { UWZ_GetCurrent($hash,7); } - elsif ($a[1] =~ /^Glaette/) { UWZ_GetCurrent($hash,8); } - elsif ($a[1] =~ /^Hitze/) { UWZ_GetCurrent($hash,9); } - elsif ($a[1] =~ /^Glatteisregen/) { UWZ_GetCurrent($hash,10); } - elsif ($a[1] =~ /^Bodenfrost/) { UWZ_GetCurrent($hash,11); } - elsif ($a[1] =~ /^Hagel/) { UWZ_GetCurrentHail($hash); } - else { return $usage; } + if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) { + my $usage = "Unknown argument $a[1], choose one of Sturm:noArg Schneefall:noArg Regen:noArg Extremfrost:noArg Waldbrand:noArg Gewitter:noArg Glaette:noArg Hitze:noArg Glatteisregen:noArg Bodenfrost:noArg Hagel:noArg "; + + return $usage if ( @a < 2 ); + + if ($a[1] =~ /^Sturm/) { UWZ_GetCurrent($hash,2); } + elsif ($a[1] =~ /^Schneefall/) { UWZ_GetCurrent($hash,3); } + elsif ($a[1] =~ /^Regen/) { UWZ_GetCurrent($hash,4); } + elsif ($a[1] =~ /^Extremfrost/) { UWZ_GetCurrent($hash,5); } + elsif ($a[1] =~ /^Waldbrand/) { UWZ_GetCurrent($hash,6); } + elsif ($a[1] =~ /^Gewitter/) { UWZ_GetCurrent($hash,7); } + elsif ($a[1] =~ /^Glaette/) { UWZ_GetCurrent($hash,8); } + elsif ($a[1] =~ /^Hitze/) { UWZ_GetCurrent($hash,9); } + elsif ($a[1] =~ /^Glatteisregen/) { UWZ_GetCurrent($hash,10); } + elsif ($a[1] =~ /^Bodenfrost/) { UWZ_GetCurrent($hash,11); } + elsif ($a[1] =~ /^Hagel/) { UWZ_GetCurrentHail($hash); } + else { return $usage; } + } + + elsif ( (lc $hash->{CountryCode}) eq 'search' ) { + my $usage = "Unknown argument $a[1], choose one of SearchAreaID "; + + return $usage if ( @a < 3 ); + + if ($a[1] =~ /^SearchAreaID/) { UWZSearchLatLon($name, $a[2]); } + elsif ($a[1] =~ /^AreaID/) { my @splitparam = split(/,/,$a[2]); UWZSearchAreaID($splitparam[0],$splitparam[1]); } + else { return $usage; } + + } else { + my $usage = "Unknown argument $a[1], choose one of storm:noArg snow:noArg rain:noArg extremfrost:noArg forest-fire:noArg thunderstorms:noArg glaze:noArg heat:noArg glazed-rain:noArg soil-frost:noArg hail:noArg "; + + return $usage if ( @a < 2 ); + + if ($a[1] =~ /^storm/) { UWZ_GetCurrent($hash,2); } + elsif ($a[1] =~ /^snow/) { UWZ_GetCurrent($hash,3); } + elsif ($a[1] =~ /^rain/) { UWZ_GetCurrent($hash,4); } + elsif ($a[1] =~ /^extremfrost/) { UWZ_GetCurrent($hash,5); } + elsif ($a[1] =~ /^forest-fire/) { UWZ_GetCurrent($hash,6); } + elsif ($a[1] =~ /^thunderstorms/) { UWZ_GetCurrent($hash,7); } + elsif ($a[1] =~ /^glaze/) { UWZ_GetCurrent($hash,8); } + elsif ($a[1] =~ /^heat/) { UWZ_GetCurrent($hash,9); } + elsif ($a[1] =~ /^glazed-rain/) { UWZ_GetCurrent($hash,10); } + elsif ($a[1] =~ /^soil-frost/) { UWZ_GetCurrent($hash,11); } + elsif ($a[1] =~ /^hail/) { UWZ_GetCurrentHail($hash); } + else { return $usage; } + + } } ##################################### @@ -361,7 +508,6 @@ sub UWZ_Start($) { return unless (defined($hash->{NAME})); - $hash->{INTERVAL} = AttrVal( $name, "INTERVAL", $hash->{INTERVAL} ); if(!$hash->{fhem}{LOCAL} && $hash->{INTERVAL} > 0) { # set up timer if automatically call RemoveInternalTimer( $hash ); @@ -369,7 +515,7 @@ sub UWZ_Start($) { return undef if( AttrVal($name, "disable", 0 ) == 1 ); } - if ( AttrVal( $name, 'URL', '') eq '' && not defined( $hash->{URL} ) ) { + if ( not defined( $hash->{URL} ) ) { UWZ_Log $hash, 3, "missing URL"; return; @@ -429,8 +575,9 @@ sub UWZ_Done($) { my $newState; if (defined $values{WarnCount}) { # Message by CountryCode - $newState = "Warnings: " . $values{WarnCount} if ( $hash->{CountryCode} eq "UK" ); - $newState = "Warnungen: " . $values{WarnCount} if ( $hash->{CountryCode} eq "DE" ); + + $newState = "Warnings: " . $values{WarnCount}; + $newState = "Warnungen: " . $values{WarnCount} if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ); # end Message by CountryCode } else { $newState = "Error: Could not capture all data. Please check CountryCode and PLZ."; @@ -457,8 +604,6 @@ sub UWZ_Run($) { my ($name) = @_; my $ptext=$name; - my $UWZ_CC; - my $UWZ_INT; my $UWZ_download; my $UWZ_savepath; my $UWZ_humanreadable; @@ -469,9 +614,6 @@ sub UWZ_Run($) { return unless (defined($hash->{NAME})); my $readingStartTime = time(); - my $attrCountryCode = AttrVal( $name, 'CountryCode', '' ); - my $attrPLZ = AttrVal( $name, 'PLZ', "" ); - my $attrINTERVAL = AttrVal( $name, 'INTERVAL',''); my $attrdownload = AttrVal( $name, 'download',''); my $attrsavepath = AttrVal( $name, 'savepath',''); my $maps2fetch = AttrVal( $name, 'maps',''); @@ -480,24 +622,6 @@ sub UWZ_Run($) { my $attrhumanreadable = AttrVal( $name, 'humanreadable',''); ## end redundant Reading switch - # preset CountryCode - if ($attrCountryCode eq "") { - - $UWZ_CC = "DE"; - } else { - - $UWZ_CC = $attrCountryCode; - } - - # preset INTERVAL - if ($attrINTERVAL eq "") { - - $UWZ_INT = 3600; - } else { - - $UWZ_INT = $attrINTERVAL; - } - # preset download if ($attrdownload eq "") { @@ -574,7 +698,33 @@ sub UWZ_Run($) { "9" => "temperatur", # 9 = hitzewarnung "10" => "glatteisregen", "11" => "temperatur" ); # 11 = bodenfrost - + + my %typenames_de_str= ( "1" => "unknown", # <===== FIX HERE + "2" => "Sturm", + "3" => "Schnee", + "4" => "Regen", + "5" => "Temperatur", + "6" => "Waldbrand", + "7" => "Gewitter", + "8" => "Strassenglaette", + "9" => "Hitze", # 9 = hitzewarnung + "10" => "Glatteisregen", + "11" => "Bodenfrost" ); # 11 = bodenfrost + + + my %typenames_en_str= ( "1" => "unknown", # <===== FIX HERE + "2" => "storm", + "3" => "snow", + "4" => "rain", + "5" => "temperatur", + "6" => "forest fire", + "7" => "thunderstorms", + "8" => "slippery road", + "9" => "heat", # 9 = hitzewarnung + "10" => "black ice rain", + "11" => "soil frost" ); # 11 = bodenfrost + + my %severitycolor = ( "0" => "green", "1" => "unknown", # <===== FIX HERE "2" => "unknown", # <===== FIX HERE @@ -594,8 +744,8 @@ sub UWZ_Run($) { UWZ_Log $hash, 4, "Warn_".$i."_Type: ".$single_warning->{'type'}; $message .= "Warn_".$i."_Type|".$single_warning->{'type'}."|"; - UWZ_Log $hash, 4, "Warn_".$i."_uwzLevel: ".$single_warning->{'payload'}{'uwzLevel'}; - $message .= "Warn_".$i."_uwzLevel|".$single_warning->{'payload'}{'uwzLevel'}."|"; + UWZ_Log $hash, 4, "Warn_".$i."_uwzLevel: ".UWZ_GetUWZLevel($hash,UWZ_GetSeverityColor($hash,$single_warning->{'payload'}{'levelName'})); + $message .= "Warn_".$i."_uwzLevel|".UWZ_GetUWZLevel($hash,UWZ_GetSeverityColor($hash,$single_warning->{'payload'}{'levelName'}))."|"; UWZ_Log $hash, 4, "Warn_".$i."_Severity: ".$single_warning->{'severity'}; $message .= "Warn_".$i."_Severity|".$single_warning->{'severity'}."|"; @@ -620,8 +770,35 @@ sub UWZ_Run($) { UWZ_Log $hash, 4, "Warn_".$i."_End_Time: ".strftime("%H:%M", localtime($single_warning->{'dtgEnd'})); $message .= "Warn_".$i."_End_Time|".strftime("%H:%M", localtime($single_warning->{'dtgEnd'}))."|"; - UWZ_Log $hash, 4, "Warn_".$i."_Type_Str: ".ucfirst($typenames{ $single_warning->{'type'} }); - $message .= "Warn_".$i."_Type_Str|".ucfirst($typenames{ $single_warning->{'type'} })."|"; + + # Begin Language by AttrVal + if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) { + UWZ_Log $hash, 4, "Warn_".$i."_Type_Str: ".$typenames_de_str{ $single_warning->{'type'} }; + $message .= "Warn_".$i."_Type_Str|".$typenames_de_str{ $single_warning->{'type'} }."|"; + my %uwzlevelname = ( "0" => "Stufe Grün (keine Warnung)", + "1" => "Stufe Dunkelgrün (Wetterhinweise)", + "2" => "Stufe Gelb (Vorwarnung für Unwetterwarnung)", + "3" => "Warnstufe Orange (Unwetterwarnung)", + "4" => "Warnstufe Rot (Unwetterwarnung)", + "5" => "Warnstufe Violett (Unwetterwarnung)"); + UWZ_Log $hash, 4, "Warn_".$i."_uwzLevel_Str: ".$uwzlevelname{ UWZ_GetUWZLevel($hash,UWZ_GetSeverityColor($hash,$single_warning->{'payload'}{'levelName'})) }; + $message .= "Warn_".$i."_uwzLevel_Str|".$uwzlevelname{ UWZ_GetUWZLevel($hash,UWZ_GetSeverityColor($hash,$single_warning->{'payload'}{'levelName'})) }."|"; + + + } else { + UWZ_Log $hash, 4, "Warn_".$i."_Type_Str: ".$typenames_en_str{ $single_warning->{'type'} }; + $message .= "Warn_".$i."_Type_Str|".$typenames_en_str{ $single_warning->{'type'} }."|"; + my %uwzlevelname = ( "0" => "level green (no warnings)", + "1" => "level dark green (weather notice)", + "2" => "level yellow (severe weather watch)", + "3" => "Alert level Orange", + "4" => "Alert level Red", + "5" => "Alert level Violet"); + UWZ_Log $hash, 4, "Warn_".$i."_uwzLevel_Str: ".$uwzlevelname{ UWZ_GetUWZLevel($hash,UWZ_GetSeverityColor($hash,$single_warning->{'payload'}{'levelName'})) }; + $message .= "Warn_".$i."_uwzLevel_Str|".$uwzlevelname{ UWZ_GetUWZLevel($hash,UWZ_GetSeverityColor($hash,$single_warning->{'payload'}{'levelName'})) }."|"; + + } + } ## End of redundant Reading @@ -629,38 +806,40 @@ sub UWZ_Run($) { $message .= "Warn_".$i."_levelName|".$single_warning->{'payload'}{'levelName'}."|"; # Begin Language by AttrVal - if ( AttrVal( $name, 'CountryCode', '' ) eq "UK" ) { - - UWZ_Log $hash, 4, "Warn_".$i."_LongText: ".$enc->decode($single_warning->{'payload'}{'translationsLongText'}{'EN'}); - $message .= "Warn_".$i."_LongText|".$converter->convert($single_warning->{'payload'}{'translationsLongText'}{'EN'})."|"; - - UWZ_Log $hash, 4, "Warn_".$i."_ShortText: ".$enc->decode($single_warning->{'payload'}{'translationsShortText'}{'EN'}); - $message .= "Warn_".$i."_ShortText|".$converter->convert($single_warning->{'payload'}{'translationsShortText'}{'EN'})."|"; - - } else { + if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) { UWZ_Log $hash, 4, "Warn_".$i."_LongText: ".$enc->decode($single_warning->{'payload'}{'translationsLongText'}{'DE'}); $message .= "Warn_".$i."_LongText|".$converter->convert($single_warning->{'payload'}{'translationsLongText'}{'DE'})."|"; UWZ_Log $hash, 4, "Warn_".$i."_ShortText: ".$enc->decode($single_warning->{'payload'}{'translationsShortText'}{'DE'}); $message .= "Warn_".$i."_ShortText|".$converter->convert($single_warning->{'payload'}{'translationsShortText'}{'DE'})."|"; + + } else { + + UWZ_Log $hash, 4, "Warn_".$i."_LongText: ".$enc->decode($single_warning->{'payload'}{'translationsLongText'}{'EN'}); + $message .= "Warn_".$i."_LongText|".$converter->convert($single_warning->{'payload'}{'translationsLongText'}{'EN'})."|"; + + UWZ_Log $hash, 4, "Warn_".$i."_ShortText: ".$enc->decode($single_warning->{'payload'}{'translationsShortText'}{'EN'}); + $message .= "Warn_".$i."_ShortText|".$converter->convert($single_warning->{'payload'}{'translationsShortText'}{'EN'})."|"; } # end language by AttrVal UWZ_Log $hash, 4, "Warn_".$i."_IconURL: http://www.unwetterzentrale.de/images/icons/".$typenames{ $single_warning->{'type'} }."-".$single_warning->{'severity'}.".gif"; - $message .= "Warn_".$i."_IconURL|http://www.unwetterzentrale.de/images/icons/".$typenames{ $single_warning->{'type'} }."-".$severitycolor{ $single_warning->{'severity'} }.".gif|"; + $message .= "Warn_".$i."_IconURL|http://www.unwetterzentrale.de/images/icons/".$typenames{ $single_warning->{'type'} }."-".UWZ_GetSeverityColor($hash, $single_warning->{'payload'}{'levelName'} ).".gif|"; + ## Hagel start my $hagelcount = 0; # Begin Language by AttrVal - if ( AttrVal( $name, 'CountryCode', '' ) eq "UK" ) { - $hagelcount = my @hagelmatch = $single_warning->{'payload'}{'translationsLongText'}{'EN'} =~ /Hail/g; + if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) { + + $hagelcount = my @hagelmatch = $single_warning->{'payload'}{'translationsLongText'}{'DE'} =~ /Hagel/g; } else { - $hagelcount = my @hagelmatch = $single_warning->{'payload'}{'translationsLongText'}{'DE'} =~ /Hagel/g; + $hagelcount = my @hagelmatch = $single_warning->{'payload'}{'translationsLongText'}{'EN'} =~ /Hail/g; } # end language by AttrVal if ( $hagelcount ne 0 ) { @@ -691,25 +870,37 @@ sub UWZ_Run($) { ##################################### sub UWZAsHtml($;$) { - my ($hash,$items) = @_; + my ($name,$items) = @_; my $ret = ''; - - if (ReadingsVal($hash, "WarnCount", "") != 0 ) { + my $hash = $defs{$name}; + + my $attr; + if (AttrVal($name, "htmlattr", "none") ne "none") { + $attr = AttrVal($name, "htmlattr", ""); + } else { + $attr = 'width="100%"'; + } + + + if (ReadingsVal($name, "WarnCount", "") != 0 ) { $ret .= '
'; - $ret .= ''; + $ret .= '
'; - for ( my $i=0; $i'; - $ret .= ''; + $ret .= ''; @@ -725,8 +916,11 @@ sub UWZAsHtml($;$) { $ret .= '
'.ReadingsVal($hash, "Warn_".$i."_ShortText", "").'

'; - $ret .= ReadingsVal($hash, "Warn_".$i."_LongText", "").'

'; + $ret .= '
'.ReadingsVal($name, "Warn_".$i."_ShortText", "").'

'; + $ret .= ReadingsVal($name, "Warn_".$i."_LongText", "").'

'; - $ret .= ''; + $ret .= '
Start:'.localtime(ReadingsVal($hash, "Warn_".$i."_Start", "")).'
'; # language by AttrVal - $ret .= '' if ( AttrVal( $hash, 'CountryCode', '' ) eq "UK" ); - $ret .= '' if ( AttrVal( $hash, 'CountryCode', '' ) eq "DE" ); + if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) { + $ret .= ''; + } else { + $ret .= ''; + } # end language by AttrVal $ret .= '
Start:'.localtime(ReadingsVal($name, "Warn_".$i."_Start", "")).'End:'.localtime(ReadingsVal($hash, "Warn_".$i."_End", "")).'Ende:'.localtime(ReadingsVal($hash, "Warn_".$i."_End", "")).'Ende:'.localtime(ReadingsVal($name, "Warn_".$i."_End", "")).'End:'.localtime(ReadingsVal($name, "Warn_".$i."_End", "")).'
'; $ret .= '
'; $ret .= ''; $ret .= '
'; # language by AttrVal - $ret .='No Warnings' if ( AttrVal( $hash, 'CountryCode', '' ) eq "UK" ); - $ret .='Keine Warnungen' if ( AttrVal( $hash, 'CountryCode', '' ) eq "DE" ); + if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) { + $ret .='Keine Warnungen'; + } else { + $ret .='No Warnings'; + } # end language by AttrVal $ret .= '
'; @@ -740,22 +934,33 @@ sub UWZAsHtml($;$) { ##################################### sub UWZAsHtmlLite($;$) { - my ($hash,$items) = @_; + my ($name,$items) = @_; my $ret = ''; + my $hash = $defs{$name}; + my $attr; + if (AttrVal($name, "htmlattr", "none") ne "none") { + $attr = AttrVal($name, "htmlattr", ""); + } else { + $attr = 'width="100%"'; + } - if (ReadingsVal($hash, "WarnCount", "") != 0 ) { + if (ReadingsVal($name, "WarnCount", "") != 0 ) { $ret .= '
'; - $ret .= ''; + $ret .= '
'; - for ( my $i=0; $i'; - $ret .= '
'.ReadingsVal($hash, "Warn_".$i."_ShortText", "").'

'; - $ret .= ''; + $ret .= ''; + $ret .= ''; @@ -772,8 +977,11 @@ sub UWZAsHtmlLite($;$) { $ret .= '
Start:'.localtime(ReadingsVal($hash, "Warn_".$i."_Start", "")).'
'.ReadingsVal($name, "Warn_".$i."_ShortText", "").'

'; + $ret .= ''; # language by AttrVal - $ret .= '' if ( AttrVal( $hash, 'CountryCode', '' ) eq "UK" ); - $ret .= '' if ( AttrVal( $hash, 'CountryCode', '' ) eq "DE" ); + + if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) { + $ret .= ''; + } else { + $ret .= ''; + } # end language by AttrVal $ret .= '
Start:'.localtime(ReadingsVal($name, "Warn_".$i."_Start", "")).'End:'.localtime(ReadingsVal($hash, "Warn_".$i."_End", "")).'Ende:'.localtime(ReadingsVal($hash, "Warn_".$i."_End", "")).'Ende:'.localtime(ReadingsVal($name, "Warn_".$i."_End", "")).'End:'.localtime(ReadingsVal($name, "Warn_".$i."_End", "")).'
'; $ret .= '
'; $ret .= ''; $ret .= '
'; # language by AttrVal - $ret .='No Warnings' if ( AttrVal( $hash, 'CountryCode', '' ) eq "UK" ); - $ret .='Keine Warnungen' if ( AttrVal( $hash, 'CountryCode', '' ) eq "DE" ); + if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) { + $ret .='Keine Warnungen'; + } else { + $ret .='No Warnings'; + } # end language by AttrVal $ret .= '
'; @@ -787,15 +995,15 @@ sub UWZAsHtmlLite($;$) { ##################################### sub UWZAsHtmlFP($;$) { - my ($hash,$items) = @_; - my $tablewidth = ReadingsVal($hash, "WarnCount", "") * 80; + my ($name,$items) = @_; + my $tablewidth = ReadingsVal($name, "WarnCount", "") * 80; my $ret = ''; $ret .= ''; $ret .= ""; - for ( my $i=0; $i'; + for ( my $i=0; $i'; } $ret .= ""; @@ -805,11 +1013,49 @@ sub UWZAsHtmlFP($;$) { } +##################################### +sub UWZAsHtmlMovie($$) { + + my ($name,$land) = @_; + my $url = UWZ_Map2Movie($name,$land); + my $hash = $defs{$name}; + + my $ret = '
'; + $ret .= '
'; + + $ret .= ''; + $ret .= '
'; + + if(defined($url)) { + $ret .= ''; + + } else { + # language by AttrVal + if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) { + $ret .= 'unbekannte Landbezeichnung'; + } else { + $ret .='unknown movie setting'; + } + # end language by AttrVal + } + + $ret .= '
'; + + return $ret; +} + + + + ##################################### sub UWZAsHtmlKarteLand($$) { - my ($hash,$land) = @_; - my $url = UWZ_Map2Image($hash,$land); + my ($name,$land) = @_; + my $url = UWZ_Map2Image($name,$land); + my $hash = $defs{$name}; + my $ret = '
'; $ret .= ''; @@ -820,8 +1066,11 @@ sub UWZAsHtmlKarteLand($$) { } else { # language by AttrVal - $ret .='unknown map setting' if ( AttrVal( $hash, 'CountryCode', '' ) eq "UK" ); - $ret .= 'unbekannte Landbezeichnung' if ( AttrVal( $hash, 'CountryCode', '' ) eq "DE" ); + if ( $hash->{CountryCode} ~~ [ 'DE', 'AT', 'CH' ] ) { + $ret .= 'unbekannte Landbezeichnung'; + } else { + $ret .='unknown map setting'; + } # end language by AttrVal } @@ -831,6 +1080,153 @@ sub UWZAsHtmlKarteLand($$) { return $ret; } + +##################################### +sub UWZ_GetSeverityColor($$) { + my ($name,$warnname) = @_; + my @alert = split(/_/,$warnname); + if ( $alert[1] eq "forewarn" ) { + return "gelb"; + } else { + return $alert[2]; + } +} + + +##################################### +sub UWZ_GetUWZLevel($$) { + my ($name,$severitycolor) = @_; + my %UWZSeverity = ( "green" => "0", + "darkgreen" => "1", + "gelb" => "2", + "orange" => "3", + "red" => "4", + "violet" => "5"); + return $UWZSeverity{$severitycolor}; +} + + +##################################### +## +## UWZ Helper Functions +## +##################################### + +sub UWZSearchLatLon($$) { + + my ($name,$loc) = @_; + my $url = "http://alertspro.geoservice.meteogroup.de/weatherpro/SearchFeed.php?search=".$loc; + + my $agent = LWP::UserAgent->new( env_proxy => 1, keep_alive => 1, protocols_allowed => ['http'], timeout => 10 ); + my $request = HTTP::Request->new( GET => $url ); + my $response = $agent->request($request); + my $err_log = "Can't get $url -- " . $response->status_line unless( $response->is_success ); + + if ( $err_log ne "" ) { + print "Error|Error " . $response->status_line; + } + + use XML::Simple qw(:strict); + use Data::Dumper; + use Encode qw(decode encode); + + my $search = XMLin($response->content, KeyAttr => { city => 'id' }, ForceArray => [ 'city' ]); + + my $ret = '
'; + $ret .= '
'; + + $ret .= ''; + + $ret .= ''; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ''; + + foreach my $locres ($search->{cities}->{city}) + { + my $linecount=1; + while ( my ($key, $value) = each(%$locres) ) { + if ( $linecount % 2 == 0 ) { + $ret .= ''; + } else { + $ret .= ''; + } + $ret .= ""; + $ret .= ""; + $ret .= ""; + $ret .= ""; + + my @headerHost = grep /Host/, @FW_httpheader; + $headerHost[0] =~ s/Host: //g; + + my $aHref="{'latitude'}.",".$value->{'longitude'}."\">Get AreaID"; + $ret .= ""; + $ret .= ''; + $linecount++; + } + } + + $ret .= '
citycountrylatitudelongitude
".encode('utf-8',$value->{'name'})."$value->{'country-name'}$value->{'latitude'}$value->{'longitude'}".$aHref."
'; + + return $ret; + +} + + +##################################### +sub UWZSearchAreaID($$) { + my ($lat,$lon) = @_; + my $url = "http://feed.alertspro.meteogroup.com/AlertsPro/AlertsProPollService.php?method=lookupCoord&lat=".$lat."&lon=".$lon; + + my $agent = LWP::UserAgent->new( env_proxy => 1, keep_alive => 1, protocols_allowed => ['http'], timeout => 10 ); + my $request = HTTP::Request->new( GET => $url ); + my $response = $agent->request($request); + my $err_log = "Can't get $url -- " . $response->status_line unless( $response->is_success ); + + if ( $err_log ne "" ) { + print "Error|Error " . $response->status_line; + } + use JSON; + my @perl_scalar = @{JSON->new->utf8->decode($response->content)}; + + + my $AreaType = $perl_scalar[0]->{'AREA_TYPE'}; + my $CC = substr $perl_scalar[0]->{'AREA_ID'}, 3, 2; + my $AreaID = substr $perl_scalar[0]->{'AREA_ID'}, 5, 5; + + if ( $AreaType eq "UWZ" ) { + my $ret = 'Please use the following statement to define Unwetterzentrale for your location:

'; + $ret .= '
'; + $ret .= ''; + $ret .= ''; + $ret .= ""; + $ret .= ''; + $ret .= '
define Unwetterzentrale UWZ $CC $AreaID 3600
'; + $ret .= '
'; + + $ret .= '
'; + $ret .= 'You can also use weblinks to add weathermaps. For a list of possible Weblinks see Commandref. For example to add the Europe Map use:
'; + + $ret .= '
'; + $ret .= ''; + $ret .= ''; + $ret .= ""; + $ret .= ''; + $ret .= '
define UWZ_Map_Europe weblink htmlCode { UWZAsHtmlKarteLand('Unwetterzentrale','europa') }
'; + $ret .= '
'; + + $ret .= ''; + + return $ret; + } else { + return "Sorry, nothing found or not implemented"; + } +} + + + ##################################### 1; @@ -856,32 +1252,30 @@ sub UWZAsHtmlKarteLand($$) { Define

    - define <Name> UWZ [CountryCode] [postalcode] [INTERVAL] + define <Name> UWZ [CountryCode] [AreaID] [INTERVAL]


    Example:
    - define Unwetterzentrale UWZ UK 03931 1800
    - attr Unwetterzentrale CountryCode UK
    - attr Unwetterzentrale PLZ 03931
    - attr Unwetterzentrale URL http://feed.alertspro.meteogroup.com/AlertsPro/AlertsProPollService.php?method=getWarning&language=en&areaID=UWZUK03931
    + define Unwetterzentrale UWZ UK 08357 1800
    attr Unwetterzentrale download 1
    attr Unwetterzentrale humanreadable 1
    attr Unwetterzentrale maps eastofengland unitedkingdom

    define UnwetterDetails weblink htmlCode {UWZAsHtml("Unwetterzentrale")}
    define UnwetterMapE_UK weblink htmlCode {UWZAsHtmlKarteLand("Unwetterzentrale","eastofengland")}
    define UnwetterLite weblink htmlCode {UWZAsHtmlLite("Unwetterzentrale")} + define UnwetterMovie weblink htmlCode {UWZAsHtmlMovie("Unwetterzentrale","clouds-precipitation-uk")}

     
  • [CountryCode]
    Possible values: DE, AT, CH, UK, ...
    - (for other countries than germany or unitedkingdom see fhem-forum) + (for other countries than germany use SEARCH for CountryCode to start device in search mode)

  • -
  • [postalcode] +
  • [AreaID]
    - The postalcode for the city to get warnings for. + For Germany you can use the postalcode, other countries use SEARCH for CountryCode to start device in search mode.

  • [INTERVAL] @@ -889,6 +1283,26 @@ sub UWZAsHtmlKarteLand($$) { Defines the refresh interval. The interval is defined in seconds, so an interval of 3600 means that every hour a refresh will be triggered onetimes.

  • + +


    + Example Search-Mode: +
    + + define Unwetterzentrale UWZ SEARCH
    +
    +
    + now get the AreaID for your location (example shows london): +
    + + get Unwetterzentrale SearchAreaID London
    +
    +
    + now redefine your device with the outputted CountryCode and AreaID. +
    + +
      + +

@@ -896,47 +1310,47 @@ sub UWZAsHtmlKarteLand($$) { Get

    -
  • get <name> Bodenfrost +
  • get <name> soil-frost
    give info about current soil frost (active|inactive).

  • -
  • get <name> Extremfrost +
  • get <name> extremfrost
    give info about current frost (active|inactive).

  • -
  • get <name> Gewitter +
  • get <name> thunderstorm
    give info about current thunderstorm (active|inactive).

  • -
  • get <name> Glaette +
  • get <name> glaze
    give info about current glaze (active|inactive).

  • -
  • get <name> Glatteisregen +
  • get <name> glazed-rain
    give info about current freezing rain (active|inactive).

  • -
  • get <name> Hagel +
  • get <name> hail
    give info about current hail (active|inactive).

  • -
  • get <name> Hitze +
  • get <name> heat
    give info about current heat (active|inactive).

  • -
  • get <name> Regen +
  • get <name> rain
    give info about current rain (active|inactive).

  • -
  • get <name> Schneefall +
  • get <name> snow
    give info about current snow (active|inactive).

  • -
  • get <name> Sturm +
  • get <name> storm
    give info about current storm (active|inactive).

  • -
  • get <name> Waldbrand +
  • get <name> forest-fire
    give info about current forest fire (active|inactive).

  • @@ -945,6 +1359,20 @@ sub UWZAsHtmlKarteLand($$) {
    + Get (Search-Mode) +
      +
      +
    • get <name> SearchAreaID <city> +
      + Get AreaID coresponnding to entered location. +

    • + +
    + +
    + + + Set
      @@ -960,11 +1388,6 @@ sub UWZAsHtmlKarteLand($$) { Attributes

        -
      • CountryCode -
        - Set country code for text messages (None|UK). -
        -
      • download
        Download maps during update (0|1). @@ -982,7 +1405,7 @@ sub UWZAsHtmlKarteLand($$) {
      • humanreadable
        - Add additional Readings Warn_?_Start_Date, Warn_?_Start_Time, Warn_?_End_Date and Warn_?_End_Time containing the coresponding timetamp in a human readable manner. (0|1). + Add additional Readings Warn_?_Start_Date, Warn_?_Start_Time, Warn_?_End_Date and Warn_?_End_Time containing the coresponding timetamp in a human readable manner. Additionally Warn_?_uwzLevel_Str and Warn_?_Type_Str will be added to device readings (0|1).
      • @@ -1007,6 +1430,7 @@ sub UWZAsHtmlKarteLand($$) {
      • Warn_0_Severity - Severity of thunderstorm (0 no thunderstorm, 4, 7, 11, .. heavy thunderstorm)
      • Warn_0_Hail - warning contains hail
      • Warn_0_Type - kind of thunderstorm
      • +
      • Warn_0_Type_Str - kind of thunderstorm (text)
        • 1 - unknown
        • 2 - storm
        • @@ -1020,7 +1444,8 @@ sub UWZAsHtmlKarteLand($$) {
        • 10 - freezing rain
        • 11 - soil frost
        -
      • Warn_0_uwzLevel - Severity of thunderstorm (like Severity)
      • +
      • Warn_0_uwzLevel - Severity of thunderstorm (0-5)
      • +
      • Warn_0_uwzLevel_Str - Severity of thunderstorm (text)
      • Warn_0_levelName - Level Warn Name
      • Warn_0_ShortText - short warn text
      • Warn_0_LongText - detailed warn text
      • @@ -1033,7 +1458,7 @@ sub UWZAsHtmlKarteLand($$) {

          - With the additional implemented functions UWZAsHtml, UWZAsHtmlLite, UWZAsHtmlFP and UWZAsHtmlKarteLand HTML-Code will be created to display warnings, using weblinks. + With the additional implemented functions UWZAsHtml, UWZAsHtmlLite, UWZAsHtmlFP, UWZAsHtmlKarteLand and UWZAsHtmlMovie HTML-Code will be created to display warnings and weathermovies, using weblinks.


          Example:
          @@ -1047,24 +1472,26 @@ sub UWZAsHtmlKarteLand($$) {
          • The second parameter should be one of:
              +
            • europa
            • +
            • deutschland
            • deutschland-small
            • -
            • bayern
            • -
            • bremen
            • -
            • baden-wuerttemberg
            • -
            • brandenburg
            • -
            • berlin
            • -
            • hessen
            • niedersachsen
            • -
            • rheinland-pfalz
            • -
            • saarland
            • -
            • sachsen
            • -
            • sachsen-anhalt
            • -
            • thueringen
            • -
            • nordrhein-westfalen
            • -
            • mecklenburg-vorpommern
            • +
            • bremen
            • +
            • bayern
            • schleswig-holstein
            • hamburg
            • +
            • mecklenburg-vorpommern
            • +
            • sachsen
            • +
            • sachsen-anhalt
            • +
            • nordrhein-westfalen
            • +
            • thueringen
            • +
            • rheinland-pfalz
            • +
            • saarland
            • +
            • baden-wuerttemberg
            • +
            • hessen
            • +
            • brandenburg
            • +
            • berlin

            • oesterreich
            • burgenland
            • @@ -1076,9 +1503,101 @@ sub UWZAsHtmlKarteLand($$) {
            • tirol
            • vorarlberg
            • wien
            • +
              +
            • schweiz
            • +
            • aargau
            • +
            • appenzell_ausserrhoden
            • +
            • appenzell_innerrhoden
            • +
            • basel_landschaft
            • +
            • basel_stadt
            • +
            • bern
            • +
            • fribourg
            • +
            • geneve
            • +
            • glarus
            • +
            • graubuenden
            • +
            • jura
            • +
            • luzern
            • +
            • neuchatel
            • +
            • nidwalden
            • +
            • obwalden
            • +
            • schaffhausen
            • +
            • schwyz
            • +
            • solothurn
            • +
            • stgallen
            • +
            • ticino
            • +
            • thurgau
            • +
            • uri
            • +
            • waadt
            • +
            • wallis
            • +
            • zug
            • +
            • zuerich
            • +
              +
            • liechtenstein
            • +
              +
            • belgique
            • +
              +
            • denmark
            • +
              +
            • finnland
            • +
              +
            • france
            • +
              +
            • letzebuerg
            • +
              +
            • nederland
            • +
              +
            • norwegen
            • +
              +
            • portugal
            • +
              +
            • sverige
            • +
              +
            • espana
            • +
              +
            • unitedkingdom
            • +
            • eastofengland
            • +
            • eastmidlands
            • +
            • london
            • +
            • northeastengland
            • +
            • northernireland
            • +
            • northwestengland
            • +
            • scotland
            • +
            • southeastengland
            • +
            • southwestengland
            • +
            • wales
            • +
            • westmidlands
            • +
            • yorkshireandthehumber
            • +
              +
            • isobaren1
            • +
            • isobaren2
            • +
            • isobaren3
          +
        • define UnwetterKarteMovie weblink htmlCode {UWZAsHtmlMovie("Unwetterzentrale","currents")}
        • +
            +
          • The second parameter should be one of: +
              +
            • niederschlag-wolken
            • +
            • stroemung
            • +
            • temperatur
            • +
              +
            • niederschlag-wolken-de
            • +
            • stroemung-de
            • +
              +
            • niederschlag-wolken-ch
            • +
            • stroemung-ch
            • +
              +
            • niederschlag-wolken-at
            • +
            • stroemung-at
            • +
              +
            • niederschlag-wolken-uk
            • +
            • stroemung-uk
            • +
              +
            +
          • +
          +


        @@ -1116,12 +1635,12 @@ sub UWZAsHtmlKarteLand($$) {
      • [Ländercode]
        - Mögliche Werte: DE, AT, CH,...
        - (für ander Länder als Deutschland werfen Sie einen Blick in das fhem-forum. + Mögliche Werte: DE, AT, CH, SEARCH, ...
        + (für ander Länder als Deutschland bitte den SEARCH Parameter nutzen um die AreaID zu ermitteln.)

      • -
      • [Postleitzahl] +
      • [Postleitzahl/AreaID]
        - Die Postleitzahl des Ortes für den Unwetterinformationen abgefragt werden sollen. + Die Postleitzahl/AreaID des Ortes für den Unwetterinformationen abgefragt werden sollen.

      • [INTERVAL] @@ -1186,6 +1705,20 @@ sub UWZAsHtmlKarteLand($$) {
        + Get (Search-Mode) +
          +
          +
        • get <name> SearchAreaID <gesuchte_stadt> +
          + Gibt die AreaID zum eingegebenen Ort aus. +

        • + +
        + +
        + + + Set
          @@ -1219,7 +1752,7 @@ sub UWZAsHtmlKarteLand($$) {
        • humanreadable
          - Anzeige weiterer Readings Warn_?_Start_Date, Warn_?_Start_Time, Warn_?_End_Date und Warn_?_End_Time. Diese Readings enthalten aus dem Timestamp kalkulierte Datums/Zeit Angaben. (0|1) + Anzeige weiterer Readings Warn_?_Start_Date, Warn_?_Start_Time, Warn_?_End_Date, Warn_?_End_Time. Diese Readings enthalten aus dem Timestamp kalkulierte Datums/Zeit Angaben. Weiterhin werden folgende Readings aktivier: Warn_?_Type_Str und Warn_?_uwzLevel_Str welche den Unwettertyp als auch das Unwetter-Warn-Level als Text ausgeben. (0|1)
        • @@ -1243,6 +1776,7 @@ sub UWZAsHtmlKarteLand($$) {
        • Warn_0_Severity - Schwere des Unwetters (0 kein Unwetter, 12 massives Unwetter)
        • Warn_0_Hail - Hagelwarnung (1|0)
        • Warn_0_Type - Art des Unwetters
        • +
        • Warn_0_Type_Str - Art des Unwetters (text)
          • 1 - unbekannt
          • 2 - Sturm/Orkan
          • @@ -1256,7 +1790,8 @@ sub UWZAsHtmlKarteLand($$) {
          • 10 - Glatteisregen
          • 11 - Bodenfrost
          -
        • Warn_0_uwzLevel - Schwere des Unwetters (wie Severity)
        • +
        • Warn_0_uwzLevel - Unwetterwarnstufe (0-5)
        • +
        • Warn_0_uwzLevel_Str - Unwetterwarnstufe (text)
        • Warn_0_levelName - Level Warn Name
        • Warn_0_ShortText - Kurzbeschreibung der Warnung
        • Warn_0_LongText - Ausführliche Unwetterbeschreibung
        • @@ -1269,7 +1804,7 @@ sub UWZAsHtmlKarteLand($$) {

            - Über die Funktionen UWZAsHtml, UWZAsHtmlLite, UWZAsHtmlFP und UWZAsHtmlKarteLand wird HTML-Code zur Warnanzeige über weblinks erzeugt. + Über die Funktionen UWZAsHtml, UWZAsHtmlLite, UWZAsHtmlFP, UWZAsHtmlKarteLand, UWZAsHtmlMovie wird HTML-Code zur Warnanzeige und Wetterfilme über weblinks erzeugt.


            Beispiele:
            @@ -1281,26 +1816,28 @@ sub UWZAsHtmlKarteLand($$) {
          • define UnwetterKarteLand weblink htmlCode {UWZAsHtmlKarteLand("Unwetterzentrale","Bayern")}
            • -
            • The second parameter should be one of: +
            • Der zweite Parameter kann einer der folgenden sein:
                +
              • europa
              • +
              • deutschland
              • deutschland-small
              • -
              • bayern
              • -
              • bremen
              • -
              • baden-wuerttemberg
              • -
              • brandenburg
              • -
              • berlin
              • -
              • hessen
              • niedersachsen
              • -
              • rheinland-pfalz
              • -
              • saarland
              • -
              • sachsen
              • -
              • sachsen-anhalt
              • -
              • thueringen
              • -
              • nordrhein-westfalen
              • -
              • mecklenburg-vorpommern
              • +
              • bremen
              • +
              • bayern
              • schleswig-holstein
              • hamburg
              • +
              • mecklenburg-vorpommern
              • +
              • sachsen
              • +
              • sachsen-anhalt
              • +
              • nordrhein-westfalen
              • +
              • thueringen
              • +
              • rheinland-pfalz
              • +
              • saarland
              • +
              • baden-wuerttemberg
              • +
              • hessen
              • +
              • brandenburg
              • +
              • berlin

              • oesterreich
              • burgenland
              • @@ -1312,6 +1849,97 @@ sub UWZAsHtmlKarteLand($$) {
              • tirol
              • vorarlberg
              • wien
              • +
                +
              • schweiz
              • +
              • aargau
              • +
              • appenzell_ausserrhoden
              • +
              • appenzell_innerrhoden
              • +
              • basel_landschaft
              • +
              • basel_stadt
              • +
              • bern
              • +
              • fribourg
              • +
              • geneve
              • +
              • glarus
              • +
              • graubuenden
              • +
              • jura
              • +
              • luzern
              • +
              • neuchatel
              • +
              • nidwalden
              • +
              • obwalden
              • +
              • schaffhausen
              • +
              • schwyz
              • +
              • solothurn
              • +
              • stgallen
              • +
              • ticino
              • +
              • thurgau
              • +
              • uri
              • +
              • waadt
              • +
              • wallis
              • +
              • zug
              • +
              • zuerich
              • +
                +
              • liechtenstein
              • +
                +
              • belgique
              • +
                +
              • denmark
              • +
                +
              • finnland
              • +
                +
              • france
              • +
                +
              • letzebuerg
              • +
                +
              • nederland
              • +
                +
              • norwegen
              • +
                +
              • portugal
              • +
                +
              • sverige
              • +
                +
              • espana
              • +
                +
              • unitedkingdom
              • +
              • eastofengland
              • +
              • eastmidlands
              • +
              • london
              • +
              • northeastengland
              • +
              • northernireland
              • +
              • northwestengland
              • +
              • scotland
              • +
              • southeastengland
              • +
              • southwestengland
              • +
              • wales
              • +
              • westmidlands
              • +
              • yorkshireandthehumber
              • +
                +
              • isobaren1
              • +
              • isobaren2
              • +
              • isobaren3
              • +
              +
            • +
            +
          • define UnwetterKarteMovie weblink htmlCode {UWZAsHtmlMovie("Unwetterzentrale","niederschlag-wolken-de")}
          • +
              +
            • Der zweite Parameter kann einer der folgenden sein: +
                +
              • niederschlag-wolken
              • +
              • stroemung
              • +
              • temperatur
              • +
                +
              • niederschlag-wolken-de
              • +
              • stroemung-de
              • +
                +
              • niederschlag-wolken-ch
              • +
              • stroemung-ch
              • +
                +
              • niederschlag-wolken-at
              • +
              • stroemung-at
              • +
                +
              • clouds-precipitation-uk
              • +
              • currents-uk
              • +