RssFeed als Newsticker einblenden

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

Vorheriges Thema - Nächstes Thema

Benni

Da wir uns auf der Perl-Ebene befinden, muss der Name des Device hier als Zeichenkette übergeben werden. Er muss also in einfache Hochkommata oder Anführungszeichen gesetzt werden.

{getMyTicker('myNews')}

Ein Reading wird so aber nicht erzeugt, du bekommst so lediglich das angezeigt, was die sub zurückliefert.

Aber mit genau diesem Perl-Aufruf kannst du dir ein userReading, bspw. in deinem myNews-Device erzeugen (s. dazu in der Commandref unter readingFnAttributes)

rasti

Danke, hat nun funktioniert !  :)

Schöne Grüße

Ralf

rasti

Hallo Benni,

ich habe noch ein Problem, bei dem du vielleicht helfen kannst....

Mein Problem ist, dass ich mehrere Ticker auf einer Seite darstellen will und dass die Geschwindigkeit
der Marquee / css definierten Laufschrift von der Länge des Readings abhängt.

Dummerweise sind die 3 Ticker erheblich unterschiedlich lang.

Siehe: https://forum.fhem.de/index.php/topic,52898.0.html

Ein eleganter Workaround wäre, die Readings alle einfach gleichlang zu machen  8)

Dein Code hier :

#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." +++ ";
}


müsste also so geändert werden, dass wenn die Software am Ende der Schleife ankommt,
also eigentlich fertig ist wieder von vorne anfängt und das Reading weiter auffüllt.

Abgebrochen und das finale Userreading geschrieben wird erst dann, wenn eine bestimmte
Zeichenzahl (z.B. 15000 Zeichen) erreicht ist.

Ist sowas einfach zu machen ? Ich kann es leider nicht, da ich in Pearl absolut nicht programmieren kann
(hab sogar Probleme deinen wahrscheinlich relativ einfachen Code zu lesen  :-[)

Schöne Grüße

Ralf

Benni

Hallo Ralf,

natürlich geht das. :)
Man kann in Perl quasi alles umsetzen. Du wirs aber, wenn du mit FHEM längerfristig Spaß haben willst nicht drum herum kommen, dich etwas mit Perl zu beschäftigen, zumindest mit ein paar Basics und da gehört das auf jeden Fall dazu.

Alles vorkauen möchte ich aber auch nicht ;)

Aber hier noch der Hinweis: Schau dir mal die Perl-Funktion length an, damit kannst du die Länge einer Zeichenkette ermitteln. Das wirst du dafür benötigen.

Schau mal wie weit du kommst, wenn du dann nicht weiterkommst schaue ich mir auch gerne noch mal an, wo's dann klemmt.

Gruß Benni.



rasti

#19
OK, hier mal mein erster "Schuss"

sub getlongTicker($)
{
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
        #solange Zeichenkettenlaenge noch nicht erreicht

while (length($ret) < 15000 )
       { 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.'_description','notext');
$ret=$ret." +++ ";
                if (length($ret) > 15000) {$cnt=$max}
}
}
#Die erzeugte Ticker-Zeichenkette zurückgeben- Fertig!
return $ret;
}


Erster "Schuss" kann man wörtlich nehmen, FHEM wird damit abgeschossen..... es hängt.
Das Programm soll die Schleife durchlaufen, While (Zeichenlänge < 15000)

Wenn man  in der Schleife auf einen Wert über 15000 kommt, soll $cnt auf $max gesetzt werden,
damit sie eben nicht weiter durchlaufen wird.

Die Routine an sich scheint zu gehen, denn wenn ich in der Konsole
{getlongTicker(MyNews)} eingebe, dann kommt der Text so lang wie ich ihn will.

Wenn ich aber das aber als Userreading hernehme, dann hängt sich fhem auf
(nachdem ich "set mynews update" ausführe).

Was ist da falsch ?

Gruss

Ralf

Benni

Eventuell sind 15000 Zeichen ja etwas zu viel?  ???

Fang doch mal kleiner an, vllt. mit 500.

Ich weiß ja nicht was genau du mit den Tickern vor hast, aber ich kann mir nicht vorstellen, dass sich jemand  3 Ticker anschaut und wartet, bis da jeweils 15000 Zeichen an Text durckgetickert sind. Genau deswegen werden für die Aufbereitung Tickerdaten im Modul standardmäßig eben nur die Titelzeilen verwendet.


rasti

#21
Hallo Benni,

Zitat von: Benni am 03 Mai 2016, 07:14:36
Eventuell sind 15000 Zeichen ja etwas zu viel?  ???

Der kleinste Ticker (Spiegel) hat 2.2 k Zeichen, der größte Ticker (Lokale Nachrichten) 12k.
4k ist eine DIN A4-Seite, sooo viel ist das nicht.

Zitat
Ich weiß ja nicht was genau du mit den Tickern vor hast, aber ich kann mir nicht vorstellen, dass sich jemand  3 Ticker anschaut und wartet, bis da jeweils 15000 Zeichen an Text durckgetickert sind. Genau deswegen werden für die Aufbereitung Tickerdaten im Modul standardmäßig eben nur die Titelzeilen verwendet.

Nunja, die FHEM-Anzeige hängt im Wozi (momentan 10" werde aber
auf 22" aufrüsten,  da ich für 10" eine Lesebrille brauche).

Natürlich stellt sich keiner 10min hin und liest alle Nachrichten. Das tickert halt
im Hintergrund durch und man schaut ab und zu mal drauf....

12k hat FHEM problemlos mit deinem originalen Skript zusammengefasst und abgelegt.
Nur mein Skript bringt FHEM zum Absturz. Da muss doch irgendwas
bei meinen paar zusätzlichen Codezeilen faul sein ???
Gruß

Ralf



Benni

Zitat von: rasti am 02 Mai 2016, 22:29:02
if (length($ret) > 15000) {$cnt=$max}

Da fehlt gefühlt ein Semikolon nach $max

Ich würde die Schleife aber an der Stelle sowieso besser mit last abbrechen:

last if (length($ret) > 15000);

rasti

Hallo,

habe nun "last if" genommen, selbes Verhalten, als Befehl in der Konsole {......} geht,
als Userreading stürzt FHEM ab.

Gruss

Ralf

Benni

Dann lass doch mal bitte dein userReading sehen, am besten ein komplettes List des entsprechenden device posten.

rasti

Zitat von: Benni am 05 Mai 2016, 07:39:52
Dann lass doch mal bitte dein userReading sehen, am besten ein komplettes List des entsprechenden device posten.
Hier ist eines der Listings



Donnerstag,

5. Mai 2016
Save config
Tablet-UI
9.03_Tech
9.99_Test
Energieverbrauch
Heizung EG
Heizung OG
icoMusic Music
Presence
Relaiskarte
Schaltbare-Steckdosen
TV-Programm
Telefon
Temperaturverläufe
Unsorted
Wettervorhersage
icoEverything Everything
Logfile
Commandref
Remote doc
Edit files
Select style
Event monitor

Internals:
   CHANGED
   DEF        http://www.eluniverso.com/rss/ecuador.xml  600
   INTERVAL   600
   NAME       ecuadorNews
   NEXTUPDATE Thu May  5 11:13:22 2016
   NR         628
   NTFY_ORDER 50-ecuadorNews
   STATE      Thu May  5 11:03:21 2016
   TYPE       rssFeed
   URL        http://www.eluniverso.com/rss/ecuador.xml
   Readings:
     2016-05-05 11:03:22   Ecuaticker      Terremoto en ecuador: efectos en los damnificados - Se fijan acuerdos para protegar los empleos +++ Se encarecen alquileres en Manabí tras el terremoto - Perder familiares, viviendas y negocios es el prólogo de jornadas de sufrimiento de manabitas tras el terremoto del 16 de abril pasado. Ahora otro malestar los aqueja: buscar un lugar donde vivir, luego de que se les informara que su casa afectada ya no da garantías, o un espacio para mantener un negocio, con precios muy elevados.
El aumento de alquileres, dijeron varios consultados, es de más del 100%. +++ Calle Alajuela dará espacio a comerciantes informales - Más de 600 espacios habían sido pintados ayer en la calle Alajuela –cercana a la Catedral– para ubicar a igual cantidad de comerciantes, que debían empezar a llevar sus productos.
Aurora Véliz, presidenta de la Asociación de Comerciantes 6 de Septiembre (que se establecían hasta antes del terremoto en las calles Chile y 9 de Octubre), dijo que algunos de sus compañeros ya estaban desesperados por la falta de trabajo y las deudas contraídas. +++ Daños en unas 3.000 bóvedas en Portoviejo por terremoto - Entre 2.500 y 3.000 bóvedas del Cementerio General de Portoviejo resultaron afectadas por el terremoto del pasado 16 de abril, y más de 40 féretros salieron de sus nichos, sostuvo el administrador de los cementerios, Audys Meza.
En el lugar hay construidas cerca de 27.800 bóvedas y está dividido en cinco sectores, de los cuales el tres fue el más afectado. Allí, de acuerdo con Meza, unas 2.000 de las cerca de 3.500 bóvedas tienen daños. +++ Estados Unidos da 'alivios' migratorios, tras sismo - Los ecuatorianos que viven en Estados Unidos pueden acceder a ciertos "alivios migratorios" por la afectación que causó, en su país natal, el terremoto del pasado 16 de abril. +++ Hay quejas por alza de precios en Ambato - En un recorrido por el mercado mayorista de Ambato se pudo evidenciar que hay productos que han ido incrementando su precio desde hace alrededor de un mes. Es el caso de la mora que pasó de $ 15 el canasto a 30 dólares, valor en el que se comercializó el lunes último.
"Primero fue la ceniza del volcán Tungurahua (en noviembre último) que quemó, ahora son las heladas que terminan con las plantaciones", dijo María N., productora de Santa Rosa. +++ La Conversación cumple una semana proponiendo 'desde la academia' - Cinco universidades participan en la iniciativa digital La Conversación, que ha cumplido una semana de apertura, tratando temas de coyuntura nacional en temáticas de política, ecología, educación, entre otros. +++ CES dará facilidades a estudiantes universitarios afectados por terremoto - El Consejo de Educación Superior (CES) estableció un plan de apoyo para los alumnos de las instituciones académicas de las provincias de Manabí y Esmeraldas, que fueron afectadas por el terremoto del 16 de abril.
Según informó esa entidad, algunas de las medidas tomadas son: flexibilidad para planificar los períodos académicos, dictar las asignaturas en sistema modular y en red con otras instituciones, impartir clases presenciales en modalidad semipresencial o a distancia. +++ Se retiró avión que se accidentó en aeropuerto de Cuenca - (Actualizado a las 20:40)
La administración del aeopuerto Mariscal La Mar de Cuenca informó este miércoles que se retiró del ala sur de la pista el avión de Tame que el pasado 28 de abril se accidentó, sin causar heridas de gravedad a sus 93 ocupantes.
"Se procedió a la remoción de la aeronave Embraer 190 de la compañía Tame del umbral 05, la cual fue trasladada a la plataforma de la terminal aérea", indicó la administración de la terminal en su cuenta de Twitter. +++ Terremoto en Ecuador: Efectos en los damnificados - Evaluación en zonas afectadas por sismo +++
     2016-05-05 11:03:22   f_description   Noticias de Ecuador y del mundo
     2016-05-05 11:03:22   f_title         ELUNIVERSO.COM - Ecuador
     2016-05-05 11:03:21   gzippedFeed     0
     2016-05-05 11:03:22   n00_description Se fijan acuerdos para protegar los empleos
     2016-05-05 11:03:22   n00_pubDate     Thu, 05 May 2016 00:00:20 -0500
     2016-05-05 11:03:22   n00_title       Terremoto en ecuador: efectos en los damnificados
     2016-05-05 11:03:22   n01_description Perder familiares, viviendas y negocios es el prólogo de jornadas de sufrimiento de manabitas tras el terremoto del 16 de abril pasado. Ahora otro malestar los aqueja: buscar un lugar donde vivir, luego de que se les informara que su casa afectada ya no da garantías, o un espacio para mantener un negocio, con precios muy elevados.
El aumento de alquileres, dijeron varios consultados, es de más del 100%.
     2016-05-05 11:03:22   n01_pubDate     Thu, 05 May 2016 00:00:20 -0500
     2016-05-05 11:03:22   n01_title       Se encarecen alquileres en Manabí tras el terremoto
     2016-05-05 11:03:22   n02_description Más de 600 espacios habían sido pintados ayer en la calle Alajuela –cercana a la Catedral– para ubicar a igual cantidad de comerciantes, que debían empezar a llevar sus productos.
Aurora Véliz, presidenta de la Asociación de Comerciantes 6 de Septiembre (que se establecían hasta antes del terremoto en las calles Chile y 9 de Octubre), dijo que algunos de sus compañeros ya estaban desesperados por la falta de trabajo y las deudas contraídas.
     2016-05-05 11:03:22   n02_pubDate     Thu, 05 May 2016 00:00:20 -0500
     2016-05-05 11:03:22   n02_title       Calle Alajuela dará espacio a comerciantes informales
     2016-05-05 11:03:22   n03_description Entre 2.500 y 3.000 bóvedas del Cementerio General de Portoviejo resultaron afectadas por el terremoto del pasado 16 de abril, y más de 40 féretros salieron de sus nichos, sostuvo el administrador de los cementerios, Audys Meza.
En el lugar hay construidas cerca de 27.800 bóvedas y está dividido en cinco sectores, de los cuales el tres fue el más afectado. Allí, de acuerdo con Meza, unas 2.000 de las cerca de 3.500 bóvedas tienen daños.
     2016-05-05 11:03:22   n03_pubDate     Thu, 05 May 2016 00:00:20 -0500
     2016-05-05 11:03:22   n03_title       Daños en unas 3.000 bóvedas en Portoviejo por terremoto
     2016-05-05 11:03:22   n04_description Los ecuatorianos que viven en Estados Unidos pueden acceder a ciertos "alivios migratorios" por la afectación que causó, en su país natal, el terremoto del pasado 16 de abril.
     2016-05-05 11:03:22   n04_pubDate     Thu, 05 May 2016 00:00:20 -0500
     2016-05-05 11:03:22   n04_title       Estados Unidos da 'alivios' migratorios, tras sismo
     2016-05-05 11:03:22   n05_description En un recorrido por el mercado mayorista de Ambato se pudo evidenciar que hay productos que han ido incrementando su precio desde hace alrededor de un mes. Es el caso de la mora que pasó de $ 15 el canasto a 30 dólares, valor en el que se comercializó el lunes último.
"Primero fue la ceniza del volcán Tungurahua (en noviembre último) que quemó, ahora son las heladas que terminan con las plantaciones", dijo María N., productora de Santa Rosa.
     2016-05-05 11:03:22   n05_pubDate     Thu, 05 May 2016 00:00:20 -0500
     2016-05-05 11:03:22   n05_title       Hay quejas por alza de precios en Ambato
     2016-05-05 11:03:22   n06_description Cinco universidades participan en la iniciativa digital La Conversación, que ha cumplido una semana de apertura, tratando temas de coyuntura nacional en temáticas de política, ecología, educación, entre otros.
     2016-05-05 11:03:22   n06_pubDate     Wed, 04 May 2016 19:39:05 -0500
     2016-05-05 11:03:22   n06_title       La Conversación cumple una semana proponiendo 'desde la academia'
     2016-05-05 11:03:22   n07_description El Consejo de Educación Superior (CES) estableció un plan de apoyo para los alumnos de las instituciones académicas de las provincias de Manabí y Esmeraldas, que fueron afectadas por el terremoto del 16 de abril.
Según informó esa entidad, algunas de las medidas tomadas son: flexibilidad para planificar los períodos académicos, dictar las asignaturas en sistema modular y en red con otras instituciones, impartir clases presenciales en modalidad semipresencial o a distancia.
     2016-05-05 11:03:22   n07_pubDate     Wed, 04 May 2016 19:02:56 -0500
     2016-05-05 11:03:22   n07_title       CES dará facilidades a estudiantes universitarios afectados por terremoto
     2016-05-05 11:03:22   n08_description (Actualizado a las 20:40)
La administración del aeopuerto Mariscal La Mar de Cuenca informó este miércoles que se retiró del ala sur de la pista el avión de Tame que el pasado 28 de abril se accidentó, sin causar heridas de gravedad a sus 93 ocupantes.
"Se procedió a la remoción de la aeronave Embraer 190 de la compañía Tame del umbral 05, la cual fue trasladada a la plataforma de la terminal aérea", indicó la administración de la terminal en su cuenta de Twitter.
     2016-05-05 11:03:22   n08_pubDate     Wed, 04 May 2016 15:36:06 -0500
     2016-05-05 11:03:22   n08_title       Se retiró avión que se accidentó en aeropuerto de Cuenca
     2016-05-05 11:03:22   n09_description Evaluación en zonas afectadas por sismo
     2016-05-05 11:03:22   n09_pubDate     Wed, 04 May 2016 00:11:05 -0500
     2016-05-05 11:03:22   n09_title       Terremoto en Ecuador: Efectos en los damnificados
     2016-05-05 11:03:22   preparedLines   10
     2016-05-05 11:03:21   state           Thu May  5 11:03:21 2016
     2016-05-05 11:03:22   tickerMarquee   Terremoto en ecuador: efectos en los damnificados +++ Se encarecen alquileres en Manabí tras el terremoto +++ Calle Alajuela dará espacio a comerciantes informales +++ Daños en unas 3.000 bóvedas en Portoviejo por terremoto +++ Estados Unidos da 'alivios' migratorios, tras sismo +++ Hay quejas por alza de precios en Ambato +++ La Conversación cumple una semana proponiendo 'desde la academia' +++ CES dará facilidades a estudiantes universitarios afectados por terremoto +++ Se retiró avión que se accidentó en aeropuerto de Cuenca +++ Terremoto en Ecuador: Efectos en los damnificados
     2016-05-05 11:03:22   tickerToast     +++ Terremoto en ecuador: efectos en los damnificados +++
+++ Se encarecen alquileres en Manabí tras el terremoto +++
+++ Calle Alajuela dará espacio a comerciantes informales +++
+++ Daños en unas 3.000 bóvedas en Portoviejo por terremoto +++
+++ Estados Unidos da 'alivios' migratorios, tras sismo +++
+++ Hay quejas por alza de precios en Ambato +++
+++ La Conversación cumple una semana proponiendo 'desde la academia' +++
+++ CES dará facilidades a estudiantes universitarios afectados por terremoto +++
+++ Se retiró avión que se accidentó en aeropuerto de Cuenca +++
+++ Terremoto en Ecuador: Efectos en los damnificados +++
Attributes:
   event-on-change-reading 1
   rfDisplayTickerReadings 1
   rfEncode   utf8
   rfReadings title,description,pubDate
   rfTickerChars +++
   userReadings Ecuaticker {getMyTicker('ecuadorNews')}



Das geht so. Wenn ich die letzte Zeile aber ändere in
userReadings Ecuaticker {getlongTicker('ecuadorNews')}
dann stürzt FHEM ab. Das letzte Mal so, dass ich mir irgendwas
kaputtgemacht habe, siehe https://forum.fhem.de/index.php/topic,53032.0.html

Gebe ich {getlongTicker('ecuadorNews')} in der Konsole ein, gibt mir
die Routine dass was ich will auch auf dem Bildschirm aus. Komisch....

Gruß

Ralf

Benni

Also, ich konnte das inzwischen nachstellen.

Anscheinend läuft er mit deiner userReadings-Definition in eine Endlosschleife, da es keinen Trigger angegeben hat. Es wird also durch die Erzeugung des Reading selbst jdesmal wieder neu getriggert.

definiere mal dein userReading so:


attr ecuadorNews Ecuaticker:preparedLines.* {getlongTicker('ecuadorNews')}


und setze das Attriibut für event-on-update-reading auf das preparedLines-Reading:


attr ecuadorNews event-on-update-reading preparedLines


Nur nebenbei bemerkt, das event-on-change-reading ist, wenn es mit 1 gesetzt ist, quasi unnütz.
Das kannst du entweder auf .* setzen oder auch auf preparedLines oder du löschst es einfach mit deleteattr.

Übrigens ist es extrem unwahrscheinlich, dass dein anderes Problem durch dieses hier erzeugt wurde, es sei denn save und das set ecuadorNews update wären quasi gleichzeitig aufgetreten. Dann hätte es eventuell passieren können, dass die fhem.cfg nicht vollständig geschrieben werden konnte. Das muss (!)  sich aber definitiv durch ein simples Wiedereinspielen der fhem.cfg aus einem Backup wieder beheben lassen.

Ich hoffe, du kommst damit endlich weiter  8)

Gruß Benni.

rasti

Hallo Benni,

danke dir für deine Mühe !

bei attr ecuadorNews Ecuaticker:preparedLines.* {getlongTicker('ecuadorNews')}
kommt nun die Meldung
ecuadorNews: unknown attribute Ecuaticker:preparedLines.*. Type 'attr ecuadorNews ?' for a detailed list.

Die andere Zeile nimmt er klaglos an...

Gruss

Ralf

Benni

Selber denken ist übrigens erlaubt  ;)


attr ecuadorNews userReadings Ecuaticker:preparedLines.* {getlongTicker('ecuadorNews')}


(hab's vorhin halt nur schnell hier eingetippt und nicht aus FHEM übernommen)


rasti

Zitat von: Benni am 05 Mai 2016, 15:25:01
Selber denken ist übrigens erlaubt  ;)


attr ecuadorNews userReadings Ecuaticker:preparedLines.* {getlongTicker('ecuadorNews')}


(hab's vorhin halt nur schnell hier eingetippt und nicht aus FHEM übernommen)

Naja, da ich die Zeile nicht verstanden habe habe ich sie einfach übernommen.
Denn was "preparedLines.* {tralala" macht verstehe ich immer noch nicht.
Ein kleines bischen hab ich schon selbst gedacht....denn dass da irgendwo das Wörtchen
userReadings stehen sollte, war mir nach der Fehlerausgabe schon fast klar. Aber wo und wie  ::) ?
Bin halt nur Codepfuscher, kein Programmierer .... 8)

Aber es geht nun, deswegen ein dickes
DANKE !!