From 2bd99bbdad35fd881f74fa41c095ef1cedeeda0d Mon Sep 17 00:00:00 2001 From: betateilchen <> Date: Thu, 31 Dec 2015 16:59:43 +0000 Subject: [PATCH] 55_GDS.pm: better conditions handling on startup; added condition item RR30; minor bugfixes git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@10318 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- FHEM/55_GDS.pm | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/FHEM/55_GDS.pm b/FHEM/55_GDS.pm index 2316c4e90..f7b3286ab 100644 --- a/FHEM/55_GDS.pm +++ b/FHEM/55_GDS.pm @@ -42,7 +42,7 @@ use Archive::Extract; use Net::FTP; use XML::Simple; -use Data::Dumper; +#use Data::Dumper; eval "use GDSweblink"; @@ -301,7 +301,9 @@ sub GDS_Define($$$) { Log3($name, 4, "GDS $name: tempDir=".$tempDir); _GDS_addExtension("GDS_CGI","gds","GDS Files"); + $hash->{firstrun} = 1; retrieveData($hash,'conditions'); + delete $hash->{firstrun}; readingsSingleUpdate($hash, 'state', 'active',1); return undef; @@ -388,7 +390,8 @@ sub GDS_Set($@) { } when("conditions"){ - $attr{$name}{gdsSetCond} = $parameter; #ReadingsVal($name,'c_stationName',undef); + CommandAttr(undef, "$name gdsSetCond $parameter"); +# $attr{$name}{gdsSetCond} = $parameter; #ReadingsVal($name,'c_stationName',undef); GDS_GetUpdate($hash,'set conditions'); break; } @@ -616,13 +619,24 @@ sub GDS_Attr(@){ my @a = @_; my $hash = $defs{$a[1]}; my ($cmd, $name, $attrName, $attrValue) = @a; + $attrValue //= ''; my $useUpdate = 0; given($attrName){ when("gdsSetCond"){ unless ($attrValue eq '' || $cmd eq 'del') { $attr{$name}{$attrName} = $attrValue; - retrieveData($hash,'conditions'); + my $diff = time - InternalVal($name,'GDS_CONDITIONS_READ',0); + if ( $diff < 300) { + my @b; + push @b, undef; + push @b, undef; + push @b, $attrValue; + getConditions($hash, "c", @b); + DoTrigger($name,"REREADCONDITIONS",1); + } else { + retrieveData($hash,'conditions'); + } $useUpdate = 1; } } @@ -901,7 +915,6 @@ sub getConditions($$@){ return unless $searchLen; my ($line, $item, %pos, %alignment, %wx, %cread, $k, $v); - foreach my $l (@allConditionsData) { $line = $l; # save line for further use if ($l =~ /Station/) { # Header line... find out data positions @@ -915,7 +928,8 @@ sub getConditions($$@){ %alignment = ("Station" => "l", "H\xF6he" => "r", "Luftd." => "r", "TT" => "r", "Tn12" => "r", "Tx12" => "r", "Tmin" => "r", "Tmax" => "r", "Tg24" => "r", "Tn24" => "r", "Tm24" => "r", "Tx24" => "r", "SSS24" => "r", "SGLB24" => "r", - "RR1" => "r", "RR12" => "r", "RR24" => "r", "SSS" => "r", "DD" => "r", "FF" => "r", "FX" => "r", "Wetter/Wolken" => "l", "B\xF6en" => "l"); + "RR1" => "r", "RR12" => "r", "RR24" => "r", "RR30" => "r", "SSS" => "r", "DD" => "r", + "FF" => "r", "FX" => "r", "Wetter/Wolken" => "l", "B\xF6en" => "l"); foreach $item (@a) { Log3($hash, 4, "conditions item: $item"); @@ -1319,7 +1333,6 @@ sub _finishedCONDITIONS { $hash->{GDS_CONDITIONS_READ} = int(time()); my $cf = AttrVal($name,'gdsSetCond',0); return unless $cf; -# GDS_GetUpdate($hash,1) if $cf; my @b; push @b, undef; push @b, undef; @@ -1342,7 +1355,6 @@ sub _abortedCONDITIONS { $hash->{GDS_CONDITIONS_ABORTED} = localtime(time()); } - # CapData sub _retrieveCAPDATA { my ($hash) = shift; @@ -1927,6 +1939,8 @@ sub getListForecastStations($) { # ################################################################################################### # +# 2015-12-31 fixed conditions retrieval on startup +# # 2015-11-26 fixed wrong region handling # added gdsAlertsHeadlines() #