From 0c36a75409871465af3f8cdb0ccca3a17c2bb877 Mon Sep 17 00:00:00 2001 From: svnbenni <> Date: Mon, 25 Jul 2016 09:23:11 +0000 Subject: [PATCH] 98_rssFeed: optionally create events for all readings git-svn-id: https://svn.fhem.de/fhem/trunk@11849 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/FHEM/98_rssFeed.pm | 35 ++++++++++++++++++++++++++++------- fhem/docs/fhemicon_old.odg | Bin 12919 -> 13249 bytes 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index b2af2ad52..66343fe8a 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # 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: 98_rssFeed: optionally create events for all readings - bugfix: 77_UWZ: fix Issues 472183 and 473982 - updated: 77_UWZ: New Minor Release 1.4 multi languarge support, more Maps, Routine for search AreaID diff --git a/fhem/FHEM/98_rssFeed.pm b/fhem/FHEM/98_rssFeed.pm index 8ff4b5226..1f2bac915 100644 --- a/fhem/FHEM/98_rssFeed.pm +++ b/fhem/FHEM/98_rssFeed.pm @@ -184,6 +184,7 @@ rssFeed_Initialize($) . "rfReadings:multiple-strict,".$allReadings." " #readings to fill (comma separated list) . "rfDisabledText " . "rfDisplayTickerReadings:1,0 " + . "rfAllReadingsEvents:1,0 " #. "rfLatin1ToUtf8:1,0" #optional encoding using latin1ToUtf8 for readings (TEST ONLY) . $readingFnAttributes; #default FHEM FnAttributes -> see commandref. } @@ -397,6 +398,11 @@ rssFeed_update(@) my $rfReadings=AttrVal($name,'rfReadings',$defaultReadings); my @setReadings = split /,/, $rfReadings; my %params = map { $_ => 1 } @setReadings; + + #create event for all readings that are created or updated if appropriate attribute + #is set + my $allEvents=int(AttrVal($name,'rfAllReadingsEvents','0')); + rssFeed_Log3 $name,4,"rfAllReadingsEvents: $allEvents"; #setting state to the same value as it is more meaningful than #just 'defined' @@ -409,7 +415,7 @@ rssFeed_update(@) # attribute is set. Shoud be called at least once, when attribute dsable is set. if(AttrVal($name,'disable',undef)) { my $disabledText=AttrVal($name,"rfDisabledText",$defaultDisabledText); - readingsSingleUpdate($dhash,$rdHeadlines,$tt_start.$disabledText.$tt_end,0); + readingsSingleUpdate($dhash,$rdHeadlines,$tt_start.$disabledText.$tt_end,$allEvents); return ; } @@ -479,12 +485,12 @@ rssFeed_update(@) #If the response was not zipped, the unzip-result is the original response data my $zipped=0; $zipped=1 if($runzipped ne $response); - readingsSingleUpdate($dhash,"gzippedFeed",$zipped,0); + readingsSingleUpdate($dhash,"gzippedFeed",$zipped,$allEvents); #If rfDebug attribute is set then store complete response in reading if ($rfDebug) { - readingsSingleUpdate($dhash,$debug_prefix."LastResponse",$response,0); - readingsSingleUpdate($dhash,$debug_prefix."UnzippedResponse",$runzipped,0) if ($zipped); + readingsSingleUpdate($dhash,$debug_prefix."LastResponse",$response,$allEvents); + readingsSingleUpdate($dhash,$debug_prefix."UnzippedResponse",$runzipped,$allEvents) if ($zipped); } #using unzipped responsedata if it was originally zipped @@ -605,12 +611,12 @@ rssFeed_update(@) #mass updating/generation of readings is complete so #tell FHEM to update them now! - readingsEndUpdate($dhash,0); + readingsEndUpdate($dhash,$allEvents); #joining all headlines separated by newlin in a single string and #store it in the readings my $tickerHeadlines=join("\n", @ticker); - readingsSingleUpdate($dhash,$rdHeadlines, $tickerHeadlines,0); + readingsSingleUpdate($dhash,$rdHeadlines, $tickerHeadlines,$allEvents); if(AttrVal($name,"rfDisplayTickerReadings",undef)) { readingsSingleUpdate($dhash,$rdToastTicker,$tickerHeadlines,1); @@ -828,7 +834,14 @@ sub rssFeedPrep($$) - + +
  • + rfAllReadingsEvents
    + If this attribute is set to 1 all Readings that are created or updated + will generate appropriate events (depending on event-on-... attributes). + By default no events are created for most Readings, especially not for + the feed data Readings +
  • readingFnAttributes

  • @@ -1112,6 +1125,14 @@ sub rssFeedPrep($$) attr <rssFeedDevice> rfCustomTextPrepFn rssFeedPrep
    +
  • + rfAllReadingsEvents
    + Wenn dieses Attribut auf 1 gesetzt wird, so werden für ALLE Readings, + die während des Feed-Updates erzeugt werden auch entsprechende Events + generiert (abh. von den event-on-... Attributen). + Von Haus aus werden, v.a. für die Readings mit den Feed-Daten keine + Events generiert. +
  • readingFnAttributes

  • diff --git a/fhem/docs/fhemicon_old.odg b/fhem/docs/fhemicon_old.odg index 4d6871013eca4443e2bfe69e59590e9b86e63ed5..dd2e5a1ea47d80c06a5f424ce43be2253c7186e3 100644 GIT binary patch literal 13249 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 literal 12919 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 aF#XF-T;Ulq%C#5{@R9+33y4{+&;B1`KPY_w