diff --git a/fhem/FHEM/55_GDS.pm b/fhem/FHEM/55_GDS.pm
index fff4fedd4..38b6c79a4 100644
--- a/fhem/FHEM/55_GDS.pm
+++ b/fhem/FHEM/55_GDS.pm
@@ -1,5 +1,5 @@
# $Id$
-##############################################################################
+####################################################################################################
#
# 55_GDS.pm
#
@@ -23,7 +23,7 @@
# You should have received a copy of the GNU General Public License
# along with fhem. If not, see .
#
-##############################################################################
+####################################################################################################
# Changelog:
#
# 2013-08-07 initial release
@@ -40,17 +40,19 @@
# update commandref
#
# 2013-08-10 added some more tolerance on text inputs
-# changed switched from GetLogList to Log3
+# modi switched from GetLogList to Log3
#
# 2013-08-11 added retrieval for condition maps
# added retrieval for forecast maps
# added retrieval for warning maps
# added retrieval for radar maps
#
-# changed use LWP::ua for some file transfers instead of ftp
+# modi use LWP::ua for some file transfers instead of ftp
# due to transfer errors on image files
# use parameter #5 = 1 in RetrieveFile for ftp
#
+####################################################################################################
+
package main;
@@ -71,170 +73,17 @@ sub GDS_Set($@);
sub GDS_Get($@);
sub GDS_Attr(@);
-sub getListStationsDropdown();
-sub buildCAPList();
-
-my $bulaList = "Baden-Württemberg,Bayern,Berlin,Brandenburg,Bremen,".
- "Hamburg,Hessen,Mecklenburg-Vorpommern,Niedersachsen,".
- "Nordrhein-Westfalen,Rheinland-Pfalz,Saarland,Sachsen,".
- "Sachsen-Anhalt,Schleswig-Holstein,Thüringen";
-
-my $cmapList = "Deutschland,Mitte,Nordost,Nordwest,Ost,Suedost,Suedwest,West";
-
-my %rmapList = (
- Deutschland => "",
- Mitte => "central/",
- Nordost => "northeast/",
- Nordwest => "northwest/",
- Ost => "east/",
- Suedost => "southeast/",
- Suedwest => "southwest/",
- West => "west/");
-
-my $fmapList = "Deutschland_heute_frueh,Deutschland_heute_mittag,Deutschland_heute_spaet,Deutschland_heute_nacht,".
- "Deutschland_morgen_frueh,Deutschland_morgen_spaet,".
- "Deutschland_ueberm_frueh,Deutschland_ueberm_spaet,".
- "Deutschland_tag4_frueh,Deutschland_tag4_spaet".
- "Mitte_heute_frueh,Mitte_heute_mittag,Mitte_heute_spaet,Mitte_heute_nacht,".
- "Mitte_morgen_frueh,Mitte_morgen_spaet,".
- "Mitte_ueberm_frueh,Mitte_ueberm_spaet,".
- "Mitte_tag4_frueh,Mitte_tag4_spaet".
- "Nordost_heute_frueh,Nordost_heute_mittag,Nordost_heute_spaet,Nordost_heute_nacht,".
- "Nordost_morgen_frueh,Nordost_morgen_spaet,".
- "Nordost_ueberm_frueh,Nordost_ueberm_spaet,".
- "Nordost_tag4_frueh,Nordost_tag4_spaet".
- "Nordwest_heute_frueh,Nordwest_heute_mittag,Nordwest_heute_spaet,Nordwest_heute_nacht,".
- "Nordwest_morgen_frueh,Nordwest_morgen_spaet,".
- "Nordwest_ueberm_frueh,Nordwest_ueberm_spaet,".
- "Nordwest_tag4_frueh,Nordwest_tag4_spaet".
- "Ost_heute_frueh,Ost_heute_mittag,Ost_heute_spaet,Ost_heute_nacht,".
- "Ost_morgen_frueh,Ost_morgen_spaet,".
- "Ost_ueberm_frueh,Ost_ueberm_spaet,".
- "Ost_tag4_frueh,Ost_tag4_spaet".
- "Suedost_heute_frueh,Suedost_heute_mittag,Suedost_heute_spaet,Suedost_heute_nacht,".
- "Suedost_morgen_frueh,Suedost_morgen_spaet,".
- "Suedost_ueberm_frueh,Suedost_ueberm_spaet,".
- "Suedost_tag4_frueh,Suedost_tag4_spaet".
- "Suedwest_heute_frueh,Suedwest_heute_mittag,Suedwest_heute_spaet,Suedwest_heute_nacht,".
- "Suedwest_morgen_frueh,Suedwest_morgen_spaet,".
- "Suedwest_ueberm_frueh,Suedwest_ueberm_spaet,".
- "Suedwest_tag4_frueh,Suedwest_tag4_spaet".
- "West_heute_frueh,West_heute_mittag,West_heute_spaet,West_heute_nacht,".
- "West_morgen_frueh,West_morgen_spaet,".
- "West_ueberm_frueh,West_ueberm_spaet,".
- "West_tag4_frueh,West_tag4_spaet";
-
-#
-# Bundesländer den entsprechenden Dienststellen zuordnen
-#
-my %bula2bulaShort = (
- "baden-württemberg" => "bw",
- "bayern" => "by",
- "berlin" => "be",
- "brandenburg" => "bb",
- "bremen" => "hb",
- "hamburg" => "hh",
- "hessen" => "he",
- "mecklenburg-vorpommern" => "mv",
- "niedersachsen" => "ni",
- "nordrhein-westfalen" => "nw",
- "rheinland-pfalz" => "rp",
- "saarland" => "sl",
- "sachsen" => "sn",
- "sachsen-anhalt" => "st",
- "schleswig-holstein" => "sh",
- "thüringen" => "th",
- "deutschland" => "xde",
- "bodensee" => "xbo" );
-
-my %bulaShort2dwd = (
- bw => "DWSG",
- by => "DWMG",
- be => "DWPG",
- bb => "DWPG",
- hb => "DWHG",
- hh => "DWHH",
- he => "DWOH",
- mv => "DWPH",
- ni => "DWHG",
- nw => "DWEH",
- rp => "DWOI",
- sl => "DWOI",
- sn => "DWLG",
- st => "DWLH",
- sh => "DWHH",
- th => "DWLI",
- xde => "xde",
- xbo => "xbo" );
-
-#
-# Dienststellen den entsprechenden Serververzeichnissen zuordnen
-#
-my %dwd2Dir = (
- DWSG => "SU", # Stuttgart
- DWMG => "MS", # München
- DWPG => "PD", # Potsdam
- DWHG => "HA", # Hamburg
- DWHH => "HA", # Hamburg
- DWOH => "OF", # Offenbach
- DWPH => "PD", # Potsdam
- DWHG => "HA", # Hamburg
- DWEH => "EM", # Essen
- DWOI => "OF", # Offenbach
- DWLG => "LZ", # Leipzig
- DWLH => "LZ", # Leipzig
- DWLI => "LZ", # Leipzig
- DWHC => "HA", # Hamburg
- DWHB => "HA", # Hamburg
- DWPD => "PD", # Potsdam
- DWRW => "PD", # Potsdam
- DWEM => "EM", # Essen
- LSAX => "LZ", # Leipzig
- LSNX => "LZ", # Leipzig
- THLX => "LZ", # Leipzig
- DWOF => "OF", # Offenbach
- DWTR => "OF", # Offenbach
- DWSU => "SU", # Stuttgart
- DWMS => "MS",
- xde => "D",
- xbo => "Bodensee" # München
-# ???? => "FG" # Freiburg
-);
-
-my %dwd2Name = (
- EM => "Essen",
- FG => "Freiburg",
- HA => "Hamburg",
- LZ => "Leipzig",
- MS => "München",
- OF => "Offenbach",
- PD => "Potsdam",
- SU => "Stuttgart"
-);
-
-my ($alertsXml, %capCityHash, %capCellHash);
-
-my $sList;
-if (-e "/tmp/conditions"){
- $sList = getListStationsDropdown();
-} else {
- $sList = "please_use_rereadcfg_first";
-}
-
-my ($aList, $numCAPCount);
-if (-e "/tmp/alerts"){
- ($aList, $numCAPCount) = buildCAPList();
-} else {
- $aList = "please_use_rereadcfg_first";
- $numCAPCount = 0;
-}
+my ($bulaList, $cmapList, %rmapList, $fmapList, %bula2bulaShort, %bulaShort2dwd, %dwd2Dir, %dwd2Name,
+ $alertsXml, %capCityHash, %capCellHash, $sList, $aList);
####################################################################################################
#
# Main routines
#
+####################################################################################################
+
sub GDS_Initialize($) {
my ($hash) = @_;
@@ -251,6 +100,9 @@ sub GDS_Initialize($) {
CommandDefine(undef, "gds_web HTTPSRV gds /tmp/ GDS Files");
createIndexFile();
+ fillMappingTables();
+ initDropdownLists
+
}
sub GDS_Define($$$) {
@@ -290,36 +142,61 @@ sub GDS_Undef($$) {
return undef;
}
-sub GDS_Attr(@){
- my @a = @_;
- my $hash = $defs{$a[1]};
- my (undef, $name, $attrName, $attrValue) = @a;
- given($attrName){
- when("gdsDebug"){
- CommandDeleteReading(undef, "$name _dF.*") if($attrValue != 1);
+sub GDS_Set($@) {
+ my ($hash, @a) = @_;
+ my $name = $hash->{NAME};
+ my $usage = "Unknown argument, choose one of clear:noArg help:noArg rereadcfg:noArg update:noArg ".
+ "conditions:".$sList." ";
+
+ my $command = lc($a[1]);
+ my $parameter = $a[2] if(defined($a[2]));
+
+ my ($result, $next);
+
+ $hash->{LOCAL} = 1;
+ $hash->{STATE} = "active";
+
+ given($command) {
+ when("clear"){
+ CommandDeleteReading(undef, "$name a_.*");
+ CommandDeleteReading(undef, "$name c_.*");
+ CommandDeleteReading(undef, "$name g_.*");
+ }
+ when("help"){
+ $result = setHelp();
break;
}
- default {$attr{$name}{$attrName} = $attrValue;}
+ when("rereadcfg"){
+ eval {
+ retrieveFile($hash,"conditions");
+ $sList = getListStationsDropdown();
+ };
+ eval {
+ retrieveFile($hash,"alerts");
+ ($aList, undef) = buildCAPList();
+ };
+ break;
+ }
+
+ when("update"){
+ RemoveInternalTimer($hash);
+ GDS_GetUpdate($hash);
+ break;
+ }
+
+ when("conditions"){
+ retrieveConditions($hash, "c", @a);
+ $next = gettimeofday()+$hash->{helper}{INTERVAL};
+ readingsSingleUpdate($hash, "c_nextUpdate", localtime($next), 1);
+ RemoveInternalTimer($hash);
+ InternalTimer($next, "GDS_GetUpdate", $hash, 1);
+ break;
+ }
+
+ default { return $usage; };
}
- return "";
-}
-
-sub GDS_GetUpdate($) {
- my ($hash) = @_;
- my $name = $hash->{NAME};
- my (@a, $next);
-
- push @a, undef;
- push @a, undef;
- push @a, ReadingsVal($name, "c_stationName", "");
- retrieveConditions($hash, "c", @a);
-
- $next = gettimeofday()+$hash->{helper}{INTERVAL};
- readingsSingleUpdate($hash, "c_nextUpdate", localtime($next), 1);
- InternalTimer($next, "GDS_GetUpdate", $hash, 1);
-
- return 1;
+ return $result;
}
sub GDS_Get($@) {
@@ -340,31 +217,30 @@ sub GDS_Get($@) {
"warningsmap:"."Deutschland,Bodensee,".$bulaList." ".
"warnings:".$bulaList;
-
my ($result, $datensatz, $found);
given($command) {
when("conditionsmap"){
-# retrieve map: current conditions
+ # retrieve map: current conditions
retrieveFile($hash,$command,$parameter);
break;
}
when("forecastsmap"){
-# retrieve map: forecasts
+ # retrieve map: forecasts
retrieveFile($hash,$command,$parameter);
break;
}
when("warningsmap"){
-# retrieve map: warnings
+ # retrieve map: warnings
retrieveFile($hash,$command,$parameter);
break;
}
when("radarmap"){
-# retrieve map: radar
+ # retrieve map: radar
$parameter = ucfirst($parameter);
retrieveFile($hash,$command,$parameter,$rmapList{$parameter});
break;
@@ -437,67 +313,45 @@ sub GDS_Get($@) {
return $result;
}
-sub GDS_Set($@) {
- my ($hash, @a) = @_;
- my $name = $hash->{NAME};
- my $usage = "Unknown argument, choose one of clear:noArg help:noArg rereadcfg:noArg update:noArg ".
- "conditions:".$sList." ";
-
- my $command = lc($a[1]);
- my $parameter = $a[2] if(defined($a[2]));
-
- my ($result, $next);
-
- $hash->{LOCAL} = 1;
- $hash->{STATE} = "active";
-
- given($command) {
- when("clear"){
- CommandDeleteReading(undef, "$name a_.*");
- CommandDeleteReading(undef, "$name c_.*");
- CommandDeleteReading(undef, "$name g_.*");
- }
- when("help"){
- $result = setHelp();
+sub GDS_Attr(@){
+ my @a = @_;
+ my $hash = $defs{$a[1]};
+ my (undef, $name, $attrName, $attrValue) = @a;
+ given($attrName){
+ when("gdsDebug"){
+ CommandDeleteReading(undef, "$name _dF.*") if($attrValue != 1);
break;
}
- when("rereadcfg"){
- eval {
- retrieveFile($hash,"conditions");
- $sList = getListStationsDropdown();
- };
- eval {
- retrieveFile($hash,"alerts");
- ($aList, undef) = buildCAPList();
- };
- break;
- }
-
- when("update"){
- RemoveInternalTimer($hash);
- GDS_GetUpdate($hash);
- break;
- }
-
- when("conditions"){
- retrieveConditions($hash, "c", @a);
- $next = gettimeofday()+$hash->{helper}{INTERVAL};
- readingsSingleUpdate($hash, "c_nextUpdate", localtime($next), 1);
- RemoveInternalTimer($hash);
- InternalTimer($next, "GDS_GetUpdate", $hash, 1);
- break;
- }
-
- default { return $usage; };
+ default {$attr{$name}{$attrName} = $attrValue;}
}
- return $result;
+ return "";
}
+sub GDS_GetUpdate($) {
+ my ($hash) = @_;
+ my $name = $hash->{NAME};
+ my (@a, $next);
+
+ push @a, undef;
+ push @a, undef;
+ push @a, ReadingsVal($name, "c_stationName", "");
+ retrieveConditions($hash, "c", @a);
+
+ $next = gettimeofday()+$hash->{helper}{INTERVAL};
+ readingsSingleUpdate($hash, "c_nextUpdate", localtime($next), 1);
+ InternalTimer($next, "GDS_GetUpdate", $hash, 1);
+
+ return 1;
+}
+
+
####################################################################################################
#
-# Routines used by "get"
+# Tools
#
+####################################################################################################
+
sub getHelp(){
return "Use one of the following commands:\n".
@@ -540,11 +394,6 @@ sub getListStationsText($@){
return join("\n", @a);
}
-####################################################################################################
-#
-# Routines used by "set"
-#
-
sub setHelp(){
return "Use one of the following commands:\n".
sepLine(35)."\n".
@@ -555,12 +404,6 @@ sub setHelp(){
"set help\n";
}
-####################################################################################################
-#
-# some tools
-# called by various routines
-#
-
sub buildCAPList(){
my $xml = new XML::Simple;
$alertsXml = undef;
@@ -963,6 +806,163 @@ sub createIndexFile(){
return;
}
+sub fillMappingTables(){
+
+ $bulaList = "Baden-Württemberg,Bayern,Berlin,Brandenburg,Bremen,".
+ "Hamburg,Hessen,Mecklenburg-Vorpommern,Niedersachsen,".
+ "Nordrhein-Westfalen,Rheinland-Pfalz,Saarland,Sachsen,".
+ "Sachsen-Anhalt,Schleswig-Holstein,Thüringen";
+
+ $cmapList = "Deutschland,Mitte,Nordost,Nordwest,Ost,Suedost,Suedwest,West";
+
+ %rmapList = (
+ Deutschland => "",
+ Mitte => "central/",
+ Nordost => "northeast/",
+ Nordwest => "northwest/",
+ Ost => "east/",
+ Suedost => "southeast/",
+ Suedwest => "southwest/",
+ West => "west/");
+
+ $fmapList = "Deutschland_heute_frueh,Deutschland_heute_mittag,Deutschland_heute_spaet,Deutschland_heute_nacht,".
+ "Deutschland_morgen_frueh,Deutschland_morgen_spaet,".
+ "Deutschland_ueberm_frueh,Deutschland_ueberm_spaet,".
+ "Deutschland_tag4_frueh,Deutschland_tag4_spaet".
+ "Mitte_heute_frueh,Mitte_heute_mittag,Mitte_heute_spaet,Mitte_heute_nacht,".
+ "Mitte_morgen_frueh,Mitte_morgen_spaet,".
+ "Mitte_ueberm_frueh,Mitte_ueberm_spaet,".
+ "Mitte_tag4_frueh,Mitte_tag4_spaet".
+ "Nordost_heute_frueh,Nordost_heute_mittag,Nordost_heute_spaet,Nordost_heute_nacht,".
+ "Nordost_morgen_frueh,Nordost_morgen_spaet,".
+ "Nordost_ueberm_frueh,Nordost_ueberm_spaet,".
+ "Nordost_tag4_frueh,Nordost_tag4_spaet".
+ "Nordwest_heute_frueh,Nordwest_heute_mittag,Nordwest_heute_spaet,Nordwest_heute_nacht,".
+ "Nordwest_morgen_frueh,Nordwest_morgen_spaet,".
+ "Nordwest_ueberm_frueh,Nordwest_ueberm_spaet,".
+ "Nordwest_tag4_frueh,Nordwest_tag4_spaet".
+ "Ost_heute_frueh,Ost_heute_mittag,Ost_heute_spaet,Ost_heute_nacht,".
+ "Ost_morgen_frueh,Ost_morgen_spaet,".
+ "Ost_ueberm_frueh,Ost_ueberm_spaet,".
+ "Ost_tag4_frueh,Ost_tag4_spaet".
+ "Suedost_heute_frueh,Suedost_heute_mittag,Suedost_heute_spaet,Suedost_heute_nacht,".
+ "Suedost_morgen_frueh,Suedost_morgen_spaet,".
+ "Suedost_ueberm_frueh,Suedost_ueberm_spaet,".
+ "Suedost_tag4_frueh,Suedost_tag4_spaet".
+ "Suedwest_heute_frueh,Suedwest_heute_mittag,Suedwest_heute_spaet,Suedwest_heute_nacht,".
+ "Suedwest_morgen_frueh,Suedwest_morgen_spaet,".
+ "Suedwest_ueberm_frueh,Suedwest_ueberm_spaet,".
+ "Suedwest_tag4_frueh,Suedwest_tag4_spaet".
+ "West_heute_frueh,West_heute_mittag,West_heute_spaet,West_heute_nacht,".
+ "West_morgen_frueh,West_morgen_spaet,".
+ "West_ueberm_frueh,West_ueberm_spaet,".
+ "West_tag4_frueh,West_tag4_spaet";
+
+#
+# Bundesländer den entsprechenden Dienststellen zuordnen
+#
+ %bula2bulaShort = (
+ "baden-württemberg" => "bw",
+ "bayern" => "by",
+ "berlin" => "be",
+ "brandenburg" => "bb",
+ "bremen" => "hb",
+ "hamburg" => "hh",
+ "hessen" => "he",
+ "mecklenburg-vorpommern" => "mv",
+ "niedersachsen" => "ni",
+ "nordrhein-westfalen" => "nw",
+ "rheinland-pfalz" => "rp",
+ "saarland" => "sl",
+ "sachsen" => "sn",
+ "sachsen-anhalt" => "st",
+ "schleswig-holstein" => "sh",
+ "thüringen" => "th",
+ "deutschland" => "xde",
+ "bodensee" => "xbo" );
+
+ %bulaShort2dwd = (
+ bw => "DWSG",
+ by => "DWMG",
+ be => "DWPG",
+ bb => "DWPG",
+ hb => "DWHG",
+ hh => "DWHH",
+ he => "DWOH",
+ mv => "DWPH",
+ ni => "DWHG",
+ nw => "DWEH",
+ rp => "DWOI",
+ sl => "DWOI",
+ sn => "DWLG",
+ st => "DWLH",
+ sh => "DWHH",
+ th => "DWLI",
+ xde => "xde",
+ xbo => "xbo" );
+
+#
+# Dienststellen den entsprechenden Serververzeichnissen zuordnen
+#
+ %dwd2Dir = (
+ DWSG => "SU", # Stuttgart
+ DWMG => "MS", # München
+ DWPG => "PD", # Potsdam
+ DWHG => "HA", # Hamburg
+ DWHH => "HA", # Hamburg
+ DWOH => "OF", # Offenbach
+ DWPH => "PD", # Potsdam
+ DWHG => "HA", # Hamburg
+ DWEH => "EM", # Essen
+ DWOI => "OF", # Offenbach
+ DWLG => "LZ", # Leipzig
+ DWLH => "LZ", # Leipzig
+ DWLI => "LZ", # Leipzig
+ DWHC => "HA", # Hamburg
+ DWHB => "HA", # Hamburg
+ DWPD => "PD", # Potsdam
+ DWRW => "PD", # Potsdam
+ DWEM => "EM", # Essen
+ LSAX => "LZ", # Leipzig
+ LSNX => "LZ", # Leipzig
+ THLX => "LZ", # Leipzig
+ DWOF => "OF", # Offenbach
+ DWTR => "OF", # Offenbach
+ DWSU => "SU", # Stuttgart
+ DWMS => "MS", # München
+ xde => "D",
+ xbo => "Bodensee");
+# ???? => "FG" # Freiburg);
+
+ %dwd2Name = (
+ EM => "Essen",
+ FG => "Freiburg",
+ HA => "Hamburg",
+ LZ => "Leipzig",
+ MS => "München",
+ OF => "Offenbach",
+ PD => "Potsdam",
+ SU => "Stuttgart");
+
+return;
+}
+
+sub initDropdownLists(){
+ if (-e "/tmp/conditions"){
+ $sList = getListStationsDropdown();
+ } else {
+ $sList = "please_use_rereadcfg_first";
+ }
+
+ if (-e "/tmp/alerts"){
+ ($aList, undef) = buildCAPList();
+ } else {
+ $aList = "please_use_rereadcfg_first";
+ }
+ return;
+}
+
+
1;
@@ -970,13 +970,12 @@ sub createIndexFile(){
#
# Further informations
#
-
# DWD's data format is unpleasant to read,
# since the data columns change depending on the available data
# (e.g. the SSS column for snow disappears when there is no snow).
# It's also in ISO8859-1, i.e. it contains non-ASCII characters. To
# avoid problems, we need some conversion subs in this program.
-
+#
# Höhe : m über NN
# Luftd.: reduzierter Luftdruck auf Meereshöhe in hPa
# TT : Lufttemperatur in Grad Celsius
@@ -989,12 +988,16 @@ sub createIndexFile(){
# FF : Windgeschwindigkeit letztes 10-Minutenmittel in km/h
# FX : höchste Windspitze im Bezugszeitraum in km/h
# --- : Wert nicht vorhanden
+#
+####################################################################################################
####################################################################################################
#
# Documentation
#
+####################################################################################################
+
=pod
=begin html