From 01d8c218b6fd5e2f83dacd16b20fda91be74357c Mon Sep 17 00:00:00 2001 From: LeonGaultier Date: Sun, 9 Jul 2017 15:15:13 +0000 Subject: [PATCH] 77_UWZ: 1.6.0 add new attribut intervalAtWarnLevel for flexible warn timer git-svn-id: https://svn.fhem.de/fhem/trunk@14680 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 2 + fhem/FHEM/77_UWZ.pm | 121 ++++++++++++++++++++++++++++++++++++-------- 2 files changed, 101 insertions(+), 22 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index 81801e2d6..d4339ee76 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,7 @@ # 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. + - feature: 77_UWZ: 1.6.0 add new attribut intervalAtWarnLevel for flexible + warn timer - feature: 10_FS20: add useSetExtensions attribute, default is 1 - feature: 82_LGTV_WebOS: Version 0.8.0, fix screenMsg Charset problem - bugfix: 93_DbLog: V2.18.3, cannot load V2.18.2, new internal 'model' diff --git a/fhem/FHEM/77_UWZ.pm b/fhem/FHEM/77_UWZ.pm index 70aea022d..c6d78fa8e 100644 --- a/fhem/FHEM/77_UWZ.pm +++ b/fhem/FHEM/77_UWZ.pm @@ -60,7 +60,40 @@ use vars qw($readingFnAttributes); use vars qw(%defs); my $MODUL = "UWZ"; -my $version = "1.4.7"; +my $version = "1.6.0"; + + + + +# Declare functions +sub UWZ_Log($$$); +sub UWZ_Map2Movie($$); +sub UWZ_Map2Image($$); +sub UWZ_Initialize($); +sub UWZ_Define($$); +sub UWZ_Undef($$); +sub UWZ_Set($@); +sub UWZ_Get($@); +sub UWZ_GetCurrent($@); +sub UWZ_GetCurrentHail($); +sub UWZ_JSONAcquire($$); +sub UWZ_Start($); +sub UWZ_Aborted($); +sub UWZ_Done($); +sub UWZ_Run($); +sub UWZAsHtml($;$); +sub UWZAsHtmlLite($;$); +sub UWZAsHtmlFP($;$); +sub UWZAsHtmlMovie($$); +sub UWZAsHtmlKarteLand($$); +sub UWZ_GetSeverityColor($$); +sub UWZ_GetUWZLevel($$); +sub UWZSearchLatLon($$); +sub UWZSearchAreaID($$); +sub UWZ_IntervalAtWarnLevel($); + + + my $countrycode = "DE"; my $plz = "77777"; @@ -279,6 +312,7 @@ sub UWZ_Initialize($) { "lang ". "sort_readings_by:severity,start ". "localiconbase ". + "intervalAtWarnLevel ". $readingFnAttributes; foreach my $d(sort keys %{$modules{UWZ}{defptr}}) { @@ -314,9 +348,10 @@ sub UWZ_Define($$) { $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; + $hash->{fhem}{LOCAL} = 0; + $hash->{INTERVAL} = $a[4]; + $hash->{INTERVALWARN} = 0; + $hash->{VERSION} = $version; RemoveInternalTimer($hash); @@ -378,7 +413,6 @@ sub UWZ_Set($@) { return; } - sub UWZ_Get($@) { my ( $hash, @a ) = @_; @@ -506,7 +540,6 @@ sub UWZ_JSONAcquire($$) { return $response->content; } - ##################################### sub UWZ_Start($) { @@ -520,6 +553,7 @@ sub UWZ_Start($) { RemoveInternalTimer( $hash ); InternalTimer(gettimeofday() + $hash->{INTERVAL}, "UWZ_Start", $hash, 1 ); return undef if( AttrVal($name, "disable", 0 ) == 1 ); + readingsSingleUpdate($hash,'currentIntervalMode','normal',0); } ## URL by CountryCode @@ -572,10 +606,7 @@ sub UWZ_Done($) { # delete the marker for RUNNING_PID process delete( $hash->{helper}{RUNNING_PID} ); - UWZ_Log $hash, 4, "Delete old Readings"; - #CommandDeleteReading(undef, "$hash->{NAME} Warn_?_.*"); - - + # UnWetterdaten speichern readingsBeginUpdate($hash); @@ -592,6 +623,7 @@ sub UWZ_Done($) { if (keys %values > 0) { my $newState; + UWZ_Log $hash, 4, "Delete old Readings"; for my $Counter ($values{WarnCount} .. 9) { CommandDeleteReading(undef, "$hash->{NAME} Warn_${Counter}_.*"); } @@ -620,9 +652,14 @@ sub UWZ_Done($) { } readingsEndUpdate( $hash, 1 ); + + if( AttrVal($name,'intervalAtWarnLevel','') ne '' and ReadingsVal($name,'WarnUWZLevel',0) > 1 ) { + + UWZ_IntervalAtWarnLevel($hash); + UWZ_Log $hash, 5, "run Sub IntervalAtWarnLevel"; + } } - ##################################### sub UWZ_Run($) { @@ -773,7 +810,6 @@ sub UWZ_Run($) { "12" => "violett" ); my @uwzmaxlevel; - #foreach my $single_warning (@{ $uwz_warnings->{'results'} }) { foreach my $single_warning (@sorted) { push @uwzmaxlevel, UWZ_GetUWZLevel($hash,$single_warning->{'payload'}{'levelName'}); @@ -967,7 +1003,6 @@ sub UWZ_Run($) { return "$name|$message|WarnCount|$uwz_warncount" ; } - ##################################### sub UWZAsHtml($;$) { @@ -1171,7 +1206,6 @@ sub UWZAsHtmlFP($;$) { return $ret; } - ##################################### sub UWZAsHtmlMovie($$) { @@ -1205,9 +1239,6 @@ sub UWZAsHtmlMovie($$) { return $ret; } - - - ##################################### sub UWZAsHtmlKarteLand($$) { @@ -1239,7 +1270,6 @@ sub UWZAsHtmlKarteLand($$) { return $ret; } - ##################################### sub UWZ_GetSeverityColor($$) { my ($name,$uwzlevel) = @_; @@ -1255,7 +1285,6 @@ sub UWZ_GetSeverityColor($$) { return $UWZSeverity{$uwzlevel}; } - ##################################### sub UWZ_GetUWZLevel($$) { my ($name,$warnname) = @_; @@ -1277,6 +1306,42 @@ sub UWZ_GetUWZLevel($$) { } } +##################################### +sub UWZ_IntervalAtWarnLevel($) { + + my $hash = shift; + + my $name = $hash->{NAME}; + my $warnLevel = ReadingsVal($name,'WarnUWZLevel',0); + my @valuestring = split( ',', AttrVal($name,'intervalAtWarnLevel','') ); + my %warnLevelInterval; + + + readingsSingleUpdate($hash,'currentIntervalMode','warn',0); + + foreach( @valuestring ) { + + my @values = split( '=' , $_ ); + $warnLevelInterval{$values[0]} = $values[1]; + } + + if( defined($warnLevelInterval{$warnLevel}) and $hash->{INTERVALWARN} != $warnLevelInterval{$warnLevel} ) { + + $hash->{INTERVALWARN} = $warnLevelInterval{$warnLevel}; + + RemoveInternalTimer( $hash ); + InternalTimer(gettimeofday() + $hash->{INTERVALWARN}, "UWZ_Start", $hash, 1 ); + + UWZ_Log $hash, 4, "restart internal timer with interval $hash->{INTERVALWARN}"; + + } else { + + RemoveInternalTimer( $hash ); + InternalTimer(gettimeofday() + $hash->{INTERVALWARN}, "UWZ_Start", $hash, 1 ); + + UWZ_Log $hash, 4, "restart internal timer with interval $hash->{INTERVALWARN}"; + } +} ##################################### ## @@ -1348,7 +1413,6 @@ sub UWZSearchLatLon($$) { } - ##################################### sub UWZSearchAreaID($$) { my ($lat,$lon) = @_; @@ -1409,9 +1473,10 @@ sub UWZSearchAreaID($$) { =pod + =item device -=item summary Modul extracts thunderstorm warnings from unwetterzentrale.de -=item summary_DE Modul extrahiert Unwetterwarnungen von unwetterzentrale.de. +=item summary extracts thunderstorm warnings from unwetterzentrale.de +=item summary_DE extrahiert Unwetterwarnungen von unwetterzentrale.de =begin html @@ -1616,6 +1681,11 @@ sub UWZSearchAreaID($$) { define baseurl to host your own thunderstorm warn pics (filetype is png).
+
  • intervalAtWarnLevel +
    + define the interval per warnLevel. Example: 2=1800,3=900,4=300 +
    +
  • @@ -1639,6 +1709,7 @@ sub UWZSearchAreaID($$) {
  • Warn_0_Creation - warning creation
  • Warn_0_Creation_Date - warning creation datum
  • Warn_0_Creation_Time - warning creation time
  • +
  • currentIntervalMode - default/warn, Interval is read from INTERVAL or INTERVALWARN Internal
  • Warn_0_Start - begin of warnperiod
  • Warn_0_Start_Date - start date of warnperiod
  • Warn_0_Start_Time - start time of warnperiod
  • @@ -2003,6 +2074,11 @@ sub UWZSearchAreaID($$) { BaseURL angeben um Warn Icons lokal zu hosten. (Dateityp ist png).
    +
  • intervalAtWarnLevel +
    + konfiguriert den Interval je nach WarnLevel. Beispiel: 2=1800,3=900,4=300 +
    +

  • @@ -2024,6 +2100,7 @@ sub UWZSearchAreaID($$) {
  • Warn_0_Creation - Warnungs Erzeugung
  • Warn_0_Creation_Date - Warnungs Erzeugungs Datum
  • Warn_0_Creation_Time - Warnungs Erzeugungs Zeit
  • +
  • currentIntervalMode - default/warn, aktuell Verwendeter Interval. Internal INTERVAL oder INTERVALWARN
  • Warn_0_Start - Begin der Warnung
  • Warn_0_Start_Date - Startdatum der Warnung
  • Warn_0_Start_Time - Startzeit der Warnung