From bdb936e4f3521a63ae9ae48cfaa7ac9f42e437ef Mon Sep 17 00:00:00 2001 From: svnbenni <> Date: Sun, 24 Apr 2016 15:46:57 +0000 Subject: [PATCH] 98_rssFeed: new attribute to generate readings containing ticker data git-svn-id: https://svn.fhem.de/fhem/trunk@11302 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 2 ++ fhem/FHEM/98_rssFeed.pm | 72 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 73 insertions(+), 1 deletion(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index dd09d8ddb..3c115a5d6 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: 98_rssFeed: creating some readings containing ticker data. + This can be enabled via new attribute rfDisplayTickerReadings. - change: FB_CALLLIST: delete also corresponding readings if a call gets deleted - feature: 49_SSCam: Attribute "disable" to deactivate the module added diff --git a/fhem/FHEM/98_rssFeed.pm b/fhem/FHEM/98_rssFeed.pm index f04d2cad8..6f4c41895 100644 --- a/fhem/FHEM/98_rssFeed.pm +++ b/fhem/FHEM/98_rssFeed.pm @@ -40,6 +40,10 @@ my $nb_indexlength=length($maximum_max_lines); my $rdHeadlines='.headlines'; +my $tickerReadingsPrefix='ticker'; +my $rdToastTicker=$tickerReadingsPrefix.'Toast'; +my $rdMarqueeTicker=$tickerReadingsPrefix.'Marquee'; + my $defaultReadings="title,description,pubDate"; my $allReadings=$defaultReadings.",link,buildDate,imageTitle,imageURL,encodedContent"; @@ -93,6 +97,14 @@ sub rssFeed_NotifyFn($$) readingsSingleUpdate($hash,'state','defined',1); } + } elsif($event =~/ATTR $name rfDisplayTickerReadings/) { + rssFeed_Log3 $name,4,"$name rfDisplayTickerReadings changed"; + if(!AttrVal($name,'rfDisplayTickerReadings',undef)) { + fhem("deletereading $name $tickerReadingsPrefix.*",1); + } else { + readingsSingleUpdate($hash,$rdToastTicker,'waiting for next update...',1); + readingsSingleUpdate($hash,$rdMarqueeTicker,'waiting for next update...',1); + } } elsif($event eq 'INITIALIZED') { if(IsDisabled($name)) { rssFeed_update($hash); @@ -171,6 +183,7 @@ rssFeed_Initialize($) . "rfCustomTextPrepFn " #optional preparation of Text readings before they_re set (funtion) . "rfReadings:multiple-strict,".$allReadings." " #readings to fill (comma separated list) . "rfDisabledText " + . "rfDisplayTickerReadings:1,0 " #. "rfLatin1ToUtf8:1,0" #optional encoding using latin1ToUtf8 for readings (TEST ONLY) . $readingFnAttributes; #default FHEM FnAttributes -> see commandref. } @@ -429,7 +442,7 @@ rssFeed_update(@) } } - my ($i,$nachrichten,$response,@ticker,$ua,$url,$xml); + my ($i,$nachrichten,$response,@ticker,@mticker,$ua,$url,$xml); $i = 0; @@ -550,6 +563,7 @@ rssFeed_update(@) my $h = $tt_start.$cline.$tt_end; last unless $h; push (@ticker,$h); + push (@mticker,$cline); #Index for numbering each news-block my $ndx=sprintf('%0'.$nb_indexlength.'s',$i); @@ -598,6 +612,18 @@ rssFeed_update(@) my $tickerHeadlines=join("\n", @ticker); readingsSingleUpdate($dhash,$rdHeadlines, $tickerHeadlines,0); + if(AttrVal($name,"rfDisplayTickerReadings",undef)) { + readingsSingleUpdate($dhash,$rdToastTicker,$tickerHeadlines,1); + my $mTickerLine=join(" $ttt ", @mticker); + readingsSingleUpdate($dhash,$rdMarqueeTicker,$mTickerLine,1); + } else { + fhem("deletereading $name $tickerReadingsPrefix.*",1); + + } + + + + return; } @@ -689,6 +715,8 @@ return;
Result: +++ This is a sample headline +++
+ These characters are also used for "marquee"-ticker data. +
  • rfMaxLines
    Defines the maximum number of news items that will be extracted from the @@ -698,6 +726,11 @@ return; Example: attr <name> rfMaxLines 15
  • +
  • rfDisplayTickerReadings
    + If this attribute is set then there will be two additional readings + containing the ticker data for "toast"-Tickers (same as rssFeedGetTicker()) + and one containing the ticker data for "marquee"-tickers on a single line. +
  • rfEncode
    Defines an encoding which will be used for any text extracted from the feed that will be applied before setting the readings. Therefore the @@ -847,6 +880,20 @@ sub rssFeedPrep($$) This readings contains the number of new items that were extracted in the last update of the feed data.
  • +
  • + tickerToast
    + This reading contains the same data that is returned by the rssFeedGetTicker() + funciton (if attribute rfDisplayTickerReadings is set) +
    + Example: +++ Headline 1 +++ \n +++ Headline 2 +++ \n +++ Headline 3 +++ +
  • +
  • + tickerMarquee
    + This reading contains the ticker data on a single line for "marquee" style + tickers (if attribute rfDisplayTickerReadings is set) +
    + Example: Headline 1 +++ Hadline 2 +++ Headline 3 +++ +
  • gzippedFeed
    Sometimes RSS-Feed data is delivered gzipped. This is automatically recognized by the module. So if the received data was originally @@ -947,6 +994,8 @@ sub rssFeedPrep($$)
    Ergebnis: +++ Dies ist eine Beispiel-Schlagzeile +++
    + Diese Zeichenkette wird auch als Trenner für die Marquee-Ticker-Daten verwendet. +
  • rfMaxLines
    Bestimmt, wieviele Schlagzeilen maximal aus dem Feed extrahiert werden sollen.
    @@ -956,6 +1005,13 @@ sub rssFeedPrep($$) Beispiel: attr <name> rfMaxLines 15
  • +
  • rfDisplayTickerReadings
    + Wenn dieses Attribut gesetzt ist werden 2 zusätzliche Readings erzeugt, die + die Tickerdaten einmal für s.g. "Toast"-Ticker (der Inhalt ist der selbe, + wie die Ausgabe von rssFeedGetTicker()) und einmal für s.g. "Marquee"-Ticker, also + in einer einzigen Zeile. +
    +
  • rfEncode
    Hier kann eine Encoding-Methode (Bspw. utf8) angegeben werden. Die Texte die aus dem Feed extrahiert werden (title, descripton, ...) @@ -1106,6 +1162,20 @@ sub rssFeedPrep($$) Dieses Reading gibt an, wie viele Schlagzeilen tatsächlich beim letzten update aus dem Nachrichten-Feed extrahiert wurden.
  • +
  • + tickerToast
    + Dieses Reading entä die selben Daten, wie sie von der rssFeedGetTicker() + Funktion zurückgeliefert werden (if attribute rfDisplayTickerReadings is set) +
    + Beispiel: +++ Headline 1 +++ \n +++ Headline 2 +++ \n +++ Headline 3 +++ +
  • +
  • + tickerMarquee
    + Dieses Reading enthält die Tickerdaten für "marquee"-artige Ticker, + also auf einer Zeile (if attribute rfDisplayTickerReadings is set) +
    + Beispiel: Headline 1 +++ Hadline 2 +++ Headline 3 +++ +
  • gzippedFeed
    Manche Feeds werden in gezippter (gzip) Form ausgeliefert. Das wird vom Modul automatisch erkannt und die Daten im Bedarfsfall dekomprimiert.