RssFeed als Newsticker einblenden

Begonnen von accessburn, 11 April 2016, 19:15:57

Vorheriges Thema - Nächstes Thema

accessburn

Weiß jemand wie das funktioniert?

Das Modul generiert n00_title ... nXX_Title, aber ich hätte gerne so ein klassischen Ticker mit allen Titel getrennt durchlaufend. So wie n-tv halt :-)
Wezzy Rpi2b> FHEM, Elro, Intenso, FTUI, Jeelink v3, Max!Cube, Fire5, Foscam, NAS, Fritz!Box + Fon, Max!Wandthermostat, Amazon Echo
Wezzy Rp3b> OctoPi
Jessie Rp3b> UPNP, NAS, Pi-Hole

Benni

Das rssFeed-Modul kann aber mehr als nur Readings erzeugen!  ;)
Es stellt nämlich genau für so etwas auch die Title-Daten des Feeds als einfachen mehrzeiligen String zur Verfügung in dem jede Zeile einem title aus dem Feed endpricht.

Der String kann entweder über die Funktion rssFeedGetTicker oder mittels get <rssDevice> ticker abgerufen werden.

s.a. commandref

accessburn

Okay, soweit so gut ...

Wie bekomme ich das ergebnis von get <rssDevice> ticker in ein eigenes Reading?
Wezzy Rpi2b> FHEM, Elro, Intenso, FTUI, Jeelink v3, Max!Cube, Fire5, Foscam, NAS, Fritz!Box + Fon, Max!Wandthermostat, Amazon Echo
Wezzy Rp3b> OctoPi
Jessie Rp3b> UPNP, NAS, Pi-Hole

rasti

Hier mal meine Lösung mit Rotor+Label (keine Laufschrift), der bringt
3 verschiedene RSSFeeds im Wechsel auf Tablet UI, so dass man also
nacheinander 30 Nachrichten sieht. Für Laufschrift müsstest du mal nach marquee suchen....

Gruss

Ralf

<li data-row="2" data-col="2" data-sizex="5" data-sizey="1" class="large1 semitransparent" >
        <header>RSS-Feeds</header>
<div data-type="rotor" class="fade" data-delay=10000 >
<ul>
<li>  <div data-type="label" data-device="myNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n00_title" ></div>
<div data-type="label" data-device="myNews" style="font-size: 100%"  data-get="n00_encodedContent" ></div>
<div data-type="label" data-device="myNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="spiegelNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n00_title" ></div>
<div data-type="label" data-device="spiegelNews" style="font-size: 100%"  data-get="n00_description" ></div>
<div data-type="label" data-device="spiegelNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="ecuadorNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n00_title" ></div>
<div data-type="label" data-device="ecuadorNews" style="font-size: 100%"  data-get="n00_description" ></div>
<div data-type="label" data-device="ecuadorNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="myNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n01_title" ></div>
<div data-type="label" data-device="myNews" style="font-size: 100%"  data-get="n01_encodedContent" ></div><div data-type="label" data-device="myNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="spiegelNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n01_title" ></div>
<div data-type="label" data-device="spiegelNews" style="font-size: 100%"  data-get="n01_description" ></div><div data-type="label" data-device="spiegelNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="ecuadorNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n01_title" ></div>
<div data-type="label" data-device="ecuadorNews" style="font-size: 100%"  data-get="n01_description" ></div><div data-type="label" data-device="ecuadorNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label"data-device="myNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n02_title" ></div>
<div data-type="label" data-device="myNews" style="font-size: 100%"  data-get="n02_encodedContent" ></div><div data-type="label" data-device="myNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label"data-device="spiegelNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n02_title" ></div>
<div data-type="label" data-device="spiegelNews" style="font-size: 100%"  data-get="n02_description" ></div><div data-type="label" data-device="spiegelNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label"data-device="ecuadorNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n02_title" ></div>
<div data-type="label" data-device="ecuadorNews" style="font-size: 100%"  data-get="n02_description" ></div><div data-type="label" data-device="ecuadorNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="myNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n03_title" ></div>
<div data-type="label" data-device="myNews" style="font-size: 100%"  data-get="n03_encodedContent" ></div><div data-type="label" data-device="myNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="spiegelNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n03_title" ></div>
<div data-type="label" data-device="spiegelNews" style="font-size: 100%"  data-get="n03_description" ></div><div data-type="label" data-device="spiegelNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="ecuadorNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n03_title" ></div>
<div data-type="label" data-device="ecuadorNews" style="font-size: 100%"  data-get="n03_description" ></div><div data-type="label" data-device="ecuadorNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="myNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n04_title" ></div>
<div data-type="label" data-device="myNews" style="font-size: 100%"  data-get="n04_encodedContent" ></div><div data-type="label" data-device="myNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="spiegelNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n04_title" ></div>
<div data-type="label" data-device="spiegelNews" style="font-size: 100%"  data-get="n04_description" ></div><div data-type="label" data-device="spiegelNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="ecuadorNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n04_title" ></div>
<div data-type="label" data-device="ecuadorNews" style="font-size: 100%"  data-get="n04_description" ></div><div data-type="label" data-device="ecuadorNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="myNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n05_title" ></div>
<div data-type="label" data-device="myNews" style="font-size: 100%"  data-get="n05_encodedContent" ></div><div data-type="label" data-device="myNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="spiegelNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n05_title" ></div>
<div data-type="label" data-device="spiegelNews" style="font-size: 100%"  data-get="n05_description" ></div><div data-type="label" data-device="spiegelNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="ecuadorNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n05_title" ></div>
<div data-type="label" data-device="ecuadorNews" style="font-size: 100%"  data-get="n05_description" ></div><div data-type="label" data-device="ecuadorNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="myNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n06_title" ></div>
<div data-type="label" data-device="myNews" style="font-size: 100%"  data-get="n06_encodedContent" ></div><div data-type="label" data-device="myNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="spiegelNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n06_title" ></div>
<div data-type="label" data-device="spiegelNews" style="font-size: 100%"  data-get="n06_description" ></div><div data-type="label" data-device="spiegelNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="ecuadorNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n06_title" ></div>
<div data-type="label" data-device="ecuadorNews" style="font-size: 100%"  data-get="n06_description" ></div><div data-type="label" data-device="ecuadorNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="myNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n07_title" ></div>
<div data-type="label" data-device="myNews" style="font-size: 100%"  data-get="n07_encodedContent" ></div><div data-type="label" data-device="myNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="spiegelNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n07_title" ></div>
<div data-type="label" data-device="spiegelNews" style="font-size: 100%"  data-get="n07_description" ></div><div data-type="label" data-device="spiegelNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="ecuadorNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n07_title" ></div>
<div data-type="label" data-device="ecuadorNews" style="font-size: 100%"  data-get="n07_description" ></div><div data-type="label" data-device="ecuadorNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="myNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n08_title" ></div>
<div data-type="label" data-device="myNews" style="font-size: 100%"  data-get="n08_encodedContent" ></div><div data-type="label" data-device="myNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="spiegelNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n08_title" ></div>
<div data-type="label" data-device="spiegelNews" style="font-size: 100%"  data-get="n08_description" ></div><div data-type="label" data-device="spiegelNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="ecuadorNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n08_title" ></div>
<div data-type="label" data-device="ecuadorNews" style="font-size: 100%"  data-get="n08_description" ></div><div data-type="label" data-device="ecuadorNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="myNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n09_title" ></div>
<div data-type="label" data-device="myNews" style="font-size: 100%"  data-get="n09_encodedContent" ></div><div data-type="label" data-device="myNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="spiegelNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n09_title" ></div>
<div data-type="label" data-device="spiegelNews" style="font-size: 100%"  data-get="n09_description" ></div><div data-type="label" data-device="spiegelNews" style=" color:#33CC33"  data-get="f_title" > </li>

<li>  <div data-type="label" data-device="ecuadorNews" style=" color:#FF0000"   style=" color:#FF0000" data-get="n09_title" ></div>
<div data-type="label" data-device="ecuadorNews" style="font-size: 100%"  data-get="n09_description" ></div><div data-type="label" data-device="ecuadorNews" style=" color:#33CC33"  data-get="f_title" > </li>

</ul>
</div>

accessburn

Daran hatte ich auch schon gedacht. Funktioniert, ist aber leider nicht so wie gewünscht.
Trotzdem danke rasti.
Wezzy Rpi2b> FHEM, Elro, Intenso, FTUI, Jeelink v3, Max!Cube, Fire5, Foscam, NAS, Fritz!Box + Fon, Max!Wandthermostat, Amazon Echo
Wezzy Rp3b> OctoPi
Jessie Rp3b> UPNP, NAS, Pi-Hole

rasti

man müsste ein Modul schreiben, dass alle Readings zu einem einzigen zusammenfasst.
Das könnte man dann per Labelwidget einlesen und als Marquee anzeigen lassen

Gruss

Ralf

Benni

Zitat von: rasti am 13 April 2016, 21:52:33
man müsste ein Modul schreiben, dass alle Readings zu einem einzigen zusammenfasst.

Ich könnte im rssFeed-Modul auch noch ein Reading bereitstellen, dass die ganzen Titel, bzw. das was auch von get ... ticker zurückgeliefert wird als ganzes enthält.

De facto gibt es das sogar schon ist aber derzeit noch nicht sichtbar.

Irgendwelche speziellen wünsche oder Anforderungen?

accessburn

Schwer, vielleicht das man editieren kann wie man es gerne hätte?


  • Anzahl
  • sortierreihenfolge
  • länge der Überschrift ("...")
Wezzy Rpi2b> FHEM, Elro, Intenso, FTUI, Jeelink v3, Max!Cube, Fire5, Foscam, NAS, Fritz!Box + Fon, Max!Wandthermostat, Amazon Echo
Wezzy Rp3b> OctoPi
Jessie Rp3b> UPNP, NAS, Pi-Hole

Benni

Zitat von: accessburn am 14 April 2016, 07:52:18
Schwer, vielleicht das man editieren kann wie man es gerne hätte?


  • Anzahl
  • sortierreihenfolge
  • länge der Überschrift ("...")

Anzahl und maximale Länge der Überschriften ist im Prinzip jetzt schon möglich. Sortierreihenfolge eher nicht, da hier ja, wenn überhaupt, nur eine Sortierung nach Zeitstempel (pubDate) sinnvoll erscheint und die Feeds i.d.R. sowieso schon so sortiert kommen.

Ich denke am WE habe ich etwas Zeit zum basteln übrig, dann kümmer ich mich mal darum.

rasti

Zitat von: Benni am 14 April 2016, 08:37:02
Anzahl und maximale Länge der Überschriften ist im Prinzip jetzt schon möglich. Sortierreihenfolge eher nicht, da hier ja, wenn überhaupt, nur eine Sortierung nach Zeitstempel (pubDate) sinnvoll erscheint und die Feeds i.d.R. sowieso schon so sortiert kommen.

Ich denke am WE habe ich etwas Zeit zum basteln übrig, dann kümmer ich mich mal darum.

Hallo Benni,

gibt's da was neues ?

Gruss

Ralf

Benni

Sorry,

bin leider noch nicht dazu gekommen.

Eventuell habe ich aber morgen mal etwas Zeit übrig.
Die Wetteraussichten sind für morgen ja glücklicherweise auch nicht gerade berauschend ;)

Benni

Auch wenn das Wetter heute gar nicht mal so schlecht war  8), habe ich da mal was eingebaut:

Es gibt nun ein neues Attribut rfDisplayTickerReadings.
Wenn dieses Attribut gesetzt ist, werden 2 neue Readings erzeugt, die einmal die Ticker-Daten so enthält, wie sie bisher auch von rssFeedGetReading zurückgegeben wurden, also je Schlagzeile eine Zeile, ggf. mit rfTickerChars "eingerahmt". Dieses Reading heißt dann tickerToast
Zum Anderen wird ein Reading namens tickerMarquee erzeugt, das die Ticker-Daten in einer Zeile enthält, also die Schlagzeilen jeweils durch rfTickerChars voneinander getrennt.

Ab morgen im update.

Gruß Benni.

rasti

Hallo Benni,

danke sieht schon mal sehr gut aus.

Momentan ist das neue Reading ja aufgebaut in der Form
n00_title +++ n01_title +++ n02_title usw usw.

Könntest du auch ein Reading
n00_title - n00_encodedContent +++ n01_title - n01_encodedContent +++ n02_title - n02_encodedContent +++
bzw.
n00_title - n00_descriptiont +++ n01_title - n01_description +++ n02_title - n02_description +++
bereitstellen ?

Oder wird das zu lang ?

Schöne Grüße und nochmals  tausend Dank !

gruß

Ralf



Benni

Ich denke, das wird zu lang für einen Ticker, daher möchte ich das auch nicht gerne als Standard ins Modul aufnehmen.
Ist meiner Meinung nach etwas zu speziell.

Du kannst dir aber so was relativ einfach selbst basteln und nach belieben anpassen.
Dazu als Beispiel folgende Funktion in die 99_MyUtils aufnehmen und im rss-Device ein userReading damit erzeugen.


sub getMyTicker($)
{
my ($rssfeed) = @_;

#Prüfen, ob das übergebene RSS-Device überhaupt existiert
#(eigentlich sollte man hier auch noch eine Prüfung auf TYPE durchführen)
return 'device "'.$rssfeed.'" does not exist' if (!$defs{$rssfeed});

#Die Anzahl der tatsächlich umgesetzten Reading ist im Reading
#preparedLines enthalten
my $max=ReadingsVal($rssfeed,'preparedLines',0);

my $ret='';

#Alle erzeugten Readings durchlaufen
for(my $cnt=0;$cnt<$max;$cnt++)
{
#2-stelligen Index erzeugen, so wie er auch im jeweiligen Reading-Namen
#enthalten ist
my $ndx=sprintf("%02d",$cnt);

#und dann aus den einzelnen Readings zu einer Meldung, den Ticker
#wie gewünscht zusammensetzen
$ret=$ret.ReadingsVal($rssfeed,'n'.$ndx.'_title','notitle');
$ret=$ret.' - ';
$ret=$ret.ReadingsVal($rssfeed,'n'.$ndx.'_encodedContent','notext');
$ret=$ret." +++ ";
}

#Die erzeugte Ticker-Zeichenkette zurückgeben- Fertig!
return $ret;
}


die Erzeugung von title und encodedContent muss dazu natürlich im Attribut rfReadings festgelegt sein.

Kann man sicher eleganter coden, so sollte es aber relativ leicht verständlich sein.

rasti

Zitat von: Benni am 26 April 2016, 21:35:01


Du kannst dir aber so was relativ einfach selbst basteln und nach belieben anpassen.
Dazu als Beispiel folgende Funktion in die 99_MyUtils aufnehmen und im rss-Device ein userReading damit erzeugen.


Hallo Benni,

wie ist das zu verstehen ?

Ich habe den Code in 99_MyUtils abgelegt und dann in der FHEM-Konsole {getMyTicker(myNews)} eingegeben,
um diese Routine aufzurufen, die dann ein neues Reading im Device myNews erzeugt ???

Bei mir kommt dann eine Meldung
Bareword "myNews" not allowed while "strict subs" in use at (eval 15903) line 1.

Sorry für die vielleicht blöde Anfängerfrage....

Gruss

Ralf