Neus Modul 98_rssFeed - Abrufen von RSS News-Feeds

Begonnen von Benni, 06 Dezember 2015, 20:34:39

Vorheriges Thema - Nächstes Thema

Benni

Hallo zusammen,

wie schon aus dem Titel ersichtlich geht es um ein neues Modul 98_rssFeed.pm
Das Modul dient dazu Daten (Titel, Beschreibung, Veröffentlichungsdatum ...) zyklisch von einer rss-Feed-URL abzurufen und u.a. als Readings bereitzustellen.
Es handelt sich um ein Hilfs-Modul und wird somit im Forum hier unter "unterstützende Dienste" von mir supportet.

Entstanden ist das ganze auf Basis des Codeschnipsels aus diesem Forenbeitrag: http://forum.fhem.de/index.php?topic=33813.0

Ich hatte das auch so in Verbindung mit InfoPanel (Ticker) im Einsatz und habe es im Laufe der Zeit mittels eines Dummy immer weiter ausgebaut, um auch bequem über das Web-IF die Feed-URL ändern kann oder auch einfach mal den Ticker deaktivieren.
Letztendlich ist daraus das genannte Modul entstanden.

Mit diesem Modul betrete ich übrigens gleich in dreierlei Hinsicht Neuland:


  • Dies ist mein erstes Umfangreicheres Coding in Perl. Ich programmiere zwar schon mehr als mein halbes Leben lang in allen möglichen Programmiersprachen doch mit Perl bin ich erst durch FHEM in Kontakt gekommen. Nicht zu vergessen, die ganzen Spezialitäten des FHEM-Frameworks, in denen ich mich bisher auch nur rudimentär zurechtfinde.
  • Dies ist mein erstes Community-Projekt an dem ich mittels SVN/Sourceforge teilnehme. Ich hatte zwar früher schon CVS im Einsatz und arbeite privat gerne mit git, aber mit SVN in einer "echten" Community bin ich erst seit dem Entschluß dieses Modul zu veröffentlichen ernsthaft in Kontakt. (Bei uns in der Firma setzen wir übrigens auf Microsoft Teamfoundation für die Codeverwaltung)
  • Dies ist das erste Mal, dass ich ein Modul öffentlich mit Support und allem drum und dran in einer OpenSource-Community zur Verfügung stelle.
Ich habe das Modul übrigens auch deshalb als "offizielles" Modul veröffentlicht wird, damit es überhaupt wahrgenommen wird. Sollte sich allerdings herausstellen, dass der Anwendungsfall doch zu speziell ist oder die Funktion des Moduls letzlich doch zu trivial ist um über den Status des Codeschnipsels hinauszureichen, bin ich natürlich auch gerne dazu bereit das ganze einfach ins Contrib zu verschieben.

Ihr seht also, ich bin an dieser Ecke noch ein echter Newbie und bitte darum, sowohl bei den Anwendern, als auch bei den anderen Entwicklern, zumindest anfänglich um etwas Nachsicht ;)
Für konstruktive Kritik und Vorshläge bin ich natürlich jederzeit offen.

Das Modul selbst habe ich sowohl mit ausführlicher deutscher und englischer Dokumentation versehen Den deutschen Auszug aus der Dokumentation findet ihr direkt im nächsten Post. Diesen werde ich allerdings zukünftig nicht mehr aktualisieren. Die aktuellste Doku zum Modul gibt es wie üblich immer über die Commandref.

Für konstruktive Kritik bin ich natürlich immer offen.

So genug geschrieben, nun bleibt mir nur zu hoffen, dass das Modul auch Nutzer findet. Viel Spaß damit  :)

Gruß Benni.

   
   
   

Benni

#1
(Sorry, aber ich habe die textlichen Formatierungen aus der Commandref hier mal nur grob umgesetzt  ;))

98_rssFeed

Mit diesem Hilfs-Device kann ein RSS-Feed per URL abgerufen werden. Das Ergebnis wird zum einen in entsprechende Readings (s.u.) eingetragen, zum Anderen können die Schlagzeilen (Headlines) noch per GET oder per bereitgestellter Funktion als Ticker-Daten abgerufen werden. Die Daten des RSS-Feeds werden dabei jeweils im angegebenen Interval aktualisiert.

Define
define <name> rssFeed <url> [interval]

url = URL zum RSS-Feed
interval = Aktualisierungsinterval in Sekunden
minimum Wert sind 600 Sekunden (10 Minuten)
maximum Wert sind 86400 Sekunden (24 Stunden)

Beispiel:
define myNews rssFeed http://www.gea.de/rss?cat=Region%20Reutlingen&main=true 3600

Damit wird stündlich der RSS-Feed des Reutlinger Generalanzeigers abgerufen.

Set
set <name> update
Abrufen der Daten vom rssFeed und aktualisieren der Readings

Get
get <name> ticker
Abrufen der zuletzt gelesenen Schlagzeilen im gewünschten Format (s. Attribute)

Attribute
disabled
Mit diesem Attribut kann das Device deaktiviert (1) werden bzw. auch wieder aktiviert (0 oder Attribut nicht vorhandn). Wenn das device deaktiviert ist, sind keine Readings mehr vorhanden, außer state. Außerdem werden die Daten nicht mehr zyklisch aktualisiert und get ticker liefert nur noch die Information zurück, dass der Ticker nicht mehr aktiv ist (s. dazu auch Attribut rfDisabledText).
rfDisabledText
Der hier eingetragenee Text wird beim Abruf der Schlagzeilen als einzige Zeile angezeigt, wenn der rssFeed disabled ist (s. Attribut disabled). Ist dieses Attribut nicht angegeben, so wird ein Standardtext angezeigt.
Beispiel: attr <name> rfDisabledText Dieser Feed wurde deaktiviert
rfTickerChars
Hiermit kann eine Zeichenfolge festgelegt werden, die bei den Schlagzeilen für den get-Abruf vor und nach jeder Schlagzeile, wie bei einem Nachrichten-Ticker angefügt wird.
  Beispiel: attr <name> rfTickerChars +++
  Ergebnis: +++ Dies ist eine Beispiel-Schlagzeile +++
rfMaxLines
Bestimmt, wieviele Schlagzeilen maximal aus dem Feed extrahiert werden sollen.
Sind weniger Nachrichten-Elemente im Feed enthalten, als über rfMaxLines angegeben, so werden eben nur so viele Schlagzeilen extrahiert, wie vorhanden sind.
Ist dieses Attribut nich angegeben, so wird dafür der Standard-Wert 10 angenommen.
Beispiel: attr <name> rfMaxLines 15
rfEncode
Hier kann eine Encoding-Methode (Bspw. utf8) angegeben werden. Die Texte die aus dem Feed extrahiert werden (title, descripton, ...) werden dann vor der Zuwesung an die Readings mittels encode (Perl core-Module Encode) enkodiert. Fehlt dieses Attribut, so findet keine umkodierung statt. Das kann u.U. notwendig sein, wenn in den zurückgelieferten Feed-Daten s.g. wide Characters enthalten sind. Dies kann evtl. dazu führen, das u.a. die Darstellung in FHEMWEB nicht mehr korrekt erfolgt. Dies betrifft auch das Ergebnis von rssFeedFunctions, bzw. get ticker.
rfReadings
Über dieses Attribut kann angegeben werden, welche Daten aus dem RSS-Feed in Readings extrahiert werden sollen. Das Attribut ist als Komma getrennte Liste anzugeben.
Zur Auswahl stehen dabei folgende möglichen Werte:
  title = Titelzeile
    Dies erzeugt ein Reading für den Feed-Titel und für jedes Nachrichten-Element aus dem Feed.
  description = Beschreibungstext Dies erzeugt ein Reading für die Feed-Beschreibung, bzw. für den Beschreibungstext jeden Nachrichten-Eelements.
  pubDate = Zeitpunkt der Veröffentlichung des Feeds, bzw. der einzelnen Nachrichten-Elemente
  link = Link zum Feed, bzw. zum einzelnen Nachrichten-Element auf der Homepage des Feeds.
  buildDate = Zeitpunkt der letzten aktualisierung der Feed-Daten vom Feed-Betreiber.
  imageURl = URL zum ggf. vorhandenen Bild eines Nachrichten-Elements, bzw. zum Nachrichten-Feed.
  imageTitle = Titel eines ggf. zum Feed oder Nachrichten-Element vorhandenen Bildes.

Ist Dieses Attribut nicht vorhanden, so werden die Werte "title,description,pubDate" als Voreinstellung angenommen. Beim ersten Anlegen des Device wird das Attribut automatisch erste einmal mit genau dieser Voreinstellung belegt.

Funktionen
rssFeedGetTicker
Diese Funktion gibt die ermittelten und formatierten Schlagzeilen als Zeichenkette zurück. Die einzelnen Schlagzeilen sind dabei durch Zeilenvorschub getrenn. Dieses Ergebnis kann bspw. in einem InfoPanel für einen Ticker verwendet werden. Der Funktion muss dazu der Name eines rssFeed-Devices übergeben werden. Die Ausgabe ist praktisch die selbe wie das Ergebnis, das bei get ticker geliefert wird.
Syntax: rssFeedGetTicker(<rssFeedDevice>)

Readings
Je nach Auswahl der Attribute werden verschiedene Readings bereitgestellt. Diese Readings sind teilweise mit einem Präfix versehen um sie bspw. dem Feed selbst oder einem Nachrichten-Element zuozuordnen.

Nxx_
Diese Readings beziehen sich alle auf die einzelnen Nachrichten-Elemente, wobei xx den Index des jeweiligen Nachrichten-Elements angibt.
Beispiel für die Readings eines Nachrichten-Elements:
  N00_title
  N00_descripton
  N00_pubDate

f_
Diese Readings beziehen sich alle auf den Nachrichten-Feed selbst.
Beispiel für die Readings des Nachrichten-Feeds
  f_title
  f_descripton
  f_buildDate

preparedLines
Dieses Reading gibt an, wie viele Schlagzeilen tatsächlich beim letzten update aus dem Nachrichten-Feed extrahiert wurden.
state
Dieses Reading gibt, wenn das Device nicht disabled ist, den Zeitpunkt der letzten aktualisierung mittels update an, egal ob automatisch oder manuell ausgelöst. Ist das device disabled, steht genau das im Reading. Beim Anlegegen des Device mittels define findet das erste Aktualisieren der Daten verzögert statt. Während dieser Verzögerung steht der state auf "defined".

Edit: Gerade noch gesehen, dass ich vergessen habe zu erwähnen, dass das Perl-Modul XML::Simple benötigt wird.

hillbicks

Genau das habe ich doch gesucht, damit kann man morgens schoen auf die Nachrichten Seite wechseln wenn man im Bad ist (FTUI).

Ich hab zum Testen mal den Reutlinger Generalanzeiger angelegt, kann mit get myNews ticker auch die Ueberschriften sehe, allerdings fuer ein Klick in fhem selber in eine komplett leere Seite.(Firefox, Chromium)

Logfile sagt beim Aufruf des Eintrages im FHEMWEB

2015.12.22 22:11:54 1: memGzip: Wide character in memGzip at ./FHEM/01_FHEMWEB.pm line 454.

Wenn ich noch was nachgucken soll, sag Bescheid :)

Benni

Setze mal das Attribut rfEncode auf utf8, dann sollte es eigentlich klappen.

hillbicks

#4
Das wars, ich dank Dir!

Cooles Modul  ;D

EDIT: Wer lesen kann ist klar im Vorteil.... Sorry, hatte den Part vorhin schlecht ueberlesen.

hillbicks

So, ich doch nochmal ;)

Kannst Du bei Dir bitte mal  diesen Feed hier pruefen. Auch mit rfEncode UTF8 schmiert fhem komplett ab und laesst sich auch nicht mehr starten, musste es dann aus der fhem.cfg rausnehmen.

http://www.deutschlandfunk.de/die-nachrichten.353.de.rss

letzte Fehlermeldung im Log:
not well-formed (invalid token) at line 1, column 0, byte 0 at /usr/lib/x86_64-linux-gnu/perl5/5.20/XML/Parser.pm line 187.

OS: Debian Jessie

Gruss

Benni

Hallo,

das kann ich mir leider erst nach Weihnachten anschauen, da ich im Moment im Weihnachtsurlaub bin 8) und mangels guter Internetverbindung keinen vernünftigen Zugriff auf mein Entwicklungssystem habe.

Wie gesagt, ich schaue es mir nach Weihnachten an.
Bis dahin kannst du ja vllt. mal den Feed der Tagesschau nehmen. Von dem weiß ich, dass er funktioniert. :)

hillbicks


Benni

#8
So,

nachdem ich heute Nachmittag doch noch in den Genuss eines einigermaßen brauchbaren Hotel-WLANs gekommen bin und auch etwas Zeit und Muse hatte, konnte ich noch ein wenig testen und basteln (Cool, was selbst gebasteltes zu Weihnachten ;) ) und das mit Erfolg:

Das Problem war, dass der RSS-Feed teilweise gzip komprimiert daher kam, deshalb war es natürlich bei der Weiterverarbeitung auch kein wohlgeformtes XML. Das war, was die Fehlermeldung meinte. Allerdings kommen die Feed-Daten nicht immer komprimiert daher, das wechselt anscheinend willkürlich von Abruf zu Abruf.  :-\

Wie auch immer! Das Modul stellt ab sofort selbständig fest, ob die Daten komprimiert daherkommen, oder nicht und dekomprimiert diese. Das wird auch in einem neuen Reading gzippedFeed (1=Feed-Daten waren gezippt / 0 = Feed-Daten waren ungezippt) dokumentiert.

Weiterhin wird die XML-Verarbeitung nun in einem eval durchgeführt, um ein komplettes Abschmieren von FHEM bei Fehlern dabei zu verhindern.

Das ganze habe ich entsprechend dokumentiert und eingecheckt. Sollte also ab morgen per update verfügbar sein.

hillbicks

Das ging ja fix *g*

Hinzufuegen hat auch zuerst geklappt, anschliessend ist fhem wieder abgeraucht. Eintrag aus fhem.cfg manuell geloescht, verbose auf 5 gestellt und feed wieder hinzugefuegt. Anschliessend ist fhem direkt abgeraucht. Ich hab dann anschliessend noch ein paar perl xml pakete installiert (inklusive Abhaengigkeiten), jetzt scheint es zu laufen. librpc-xml-perl und libcompress-raw-zlib-perl.

Falls jemand noch ein aehnliches Problem haben sollte. :)

Benni

#10
Ok!
Freut mich jedenfalls, dass es jetzt bei dir läuft.

Das mit den Paketen habe ich auf die Schnelle nicht ganz durchschaut.
Benötigt werden eigentlich nur XML::Simple, was ja bei dir anscheinend beim unkomprimierten XML von anderen Feeds bereits funktioniert hat.

Für das neu hinzugekommene Dekomprimieren eines gzip-komprimierten Feeds wird IO::Compress::Gunzip benötigt, was meinem Verständnis nach zu den Core-Modulen gehört und somit vorhanden sein sollte. Allerdings ist das wohl auch von Compress::Raw::Zlib abhängig, was dem von dir installierten libcompress-raw-zlib-perl entsprechen dürfte.

Am besten ist wohl, man installiert die benötigten Pakete über apt-get, dann sollten eigentlich auch alle Abhängigkeiten direkt mit installiert werden:

XML::Simple
apt-get install libxml-simple-perl

IO::Compress::Gunzip
apt-get install libio-compress-perl

Werde die Doku entsprechend anpassen.

Update: Inzwischen gibt es hier neue Erkenntnisse zur generellen Verfügbarkeit von IO::Compress::Gunzip, deshalb wird die Doku erst mal nicht aktualisiert.


hillbicks

Ne, das war es leider auch nicht. Hast Du den Feed vom Deutschlandfunk bei Dir noch drin?

FHEM ist diese Nacht wieder abgeschmiert und liess sich erst wieder starten nachdem die rss Eintraege fuers dradio geloescht hatte. :)

Benni

#12
ja, den habe ich auf meinem Entwicklungssystem noch drin und er läuft seit ich die Änderungen eingecheckt auch problemlos.
Der Feed wird alle 10 Minuten abgerufen.
Im Moment bin ich etwas ratlos.  :-\

Steht in deinem log noch was sachdienliches drin, vor dem Abschmieren?

hillbicks

Seltsam....

Steht leider nur das uebliche drin

not well-formed (invalid token) at line 1, column 0, byte 0 at /usr/lib/x86_64-linux-gnu/perl5/5.20/XML/Parser.pm line 187.

Ich kann es heute nacht gerne nochmal mit verbose 5 laufen lassen, in der Hoffnung das wir dann etwas mehr sehen.

Benni

Ich habe mir inzwischen mal eine virtuelle Maschine aufgesetzt, mit einem aktuellen debian Jessie system.

FHEM Version 5.7 installiert (via apt-get von debian.fhem.de) und per update auf den aktuellen Stand gebracht.

XML::Simple mittels
apt-get install libxml-simple-perl
installiert.

Habe mir ein rss mit dem Feed vom Deutschlandfunk angelegt und läuft!
Ich musste, wie angenommen auch keine zusätzlichen Pakete für IO::Compression.Gunzip mehr installieren. War alles schon da!

Ich denke also ein Verbose Log 5 könnte eventuell weiterhelfen, da wir damit die kompletten feed-Daten von jedem Abruf erhalten. Füllt allerdings das Log nicht ganz unerheblich. Ich hoffe mal, das ist kein Problem.

Hast du bei dir wirklich das aktuellste 98_rssFeed-Modul am Laufen?

ein version .*rssFeed.* in der webif-command line sollte folgendes ausgeben:
Zitat
File          Rev   Last Change

98_rssFeed.pm 10258 2015-12-24 15:51:29Z svnbenni

hillbicks

*sigh*

Ich hatte gestern das update gemacht und anschliessend einen restart. In der Zwischenzeit hatte ich aber Aenderungen an einem Modul vorgenommen und dabei hatte sich der Owner geaendert, sprich, update ist abgebrochen, was mir aber nicht aufgefallen war. Erst grade als ich die Version nochmal gecheckt habe und anschliessend die Logs durchgegangen bin.

Sorry fuer diesen dummen Fehler, ich hoffe es hat Dich nicht all zuviel Zeit gekostet mit der VM :)

Benni

Zitat von: hillbicks am 25 Dezember 2015, 19:43:09
Sorry fuer diesen dummen Fehler, ich hoffe es hat Dich nicht all zuviel Zeit gekostet mit der VM :)

Passt schon! Mir ist lieber, der Fehler liegt bei dir, als bei mir  ;D
Und die Stunde für die VM war ja deswegen nicht nicht um sonst. So ne VM kann man ja noch weiter verwenden, das dient mir doch gleich noch als Jessie Test-System. ;)


hillbicks

Dann ist ja gut, mir ist sowas nur trotzdem aeussert unangenehm, weil es mich doch selber immer aergert wenn es andersrum ist. ;)

Aber vielleicht auch gar nicht schlecht nochmal zu sehen das man selbst auch nicht davor gefeilt ist solche "dummen" Fehler zu machen. Was fuer eine Ueberraschung, eh? :P

Danke Dir nochmal und einen schoenen Urlaub noch :)

rasti

#18
Hallo,

ich habe hier folgenden rss feed  :
http://www.stimme.de/storage/rss/rss/regioticker/regioticker.xml

Bei dem ist das Feld description nicht immer befüllt, anstelle dessen steht da ein Feld
<content:encoded>

Das führt dann zu einem Reading der Art "HASH(0x3800748)" was sich unschön liest....

Siehe hier:

<item>
         <pubDate>Tue, 02 Feb 2016 18:30:02 +0100</pubDate>
         <timestamp>1454434202</timestamp>
         <title><![CDATA[Schwerpunkte bei Einbrüchen - Region ]]></title>
         <link>http://www.stimme.de/3564464</link>
         <description><![CDATA[    ]]></description>
         <content:encoded><![CDATA[ 88 Einbrüche in Neckarsulm, 38 in Öhringen, 35 in Bad Rappenau, dagegen kein einziger Einbruch in Cleebronn, Jagsthausen und Krautheim: Die Einbruchsstatistik der Polizei vom Vorjahr zeigt auffällige regionale Unterschiede. Autobahnnähe ist ein wichtiger Einflussfaktor. Jetzt stellt sich heraus, dass aber auch die Gemeinden entlang der Stadtbahn häufig betroffen sind. Die Polizei weiß von Fällen, in denen Täter mit der Stadtbahn anreisten. ]]></content:encoded>
         <guid>http://www.stimme.de/3564464</guid>
      </item>


Könntest du da ein Attribut setzen so das  z.B. bei encodedcontent=1 das andere Feld in die readings kommt ?
Oder als Notlösung das Reading dann leer lässt.

Grüße

Ralf

Augschburger

Hallo benni,

ich wollte mich für das Modul bedanken, ich nutze es inzwischen gerne. Die Darstellung erfolgt auf dem fhem tablet ui als <div data-type="label">
Das Widget kommt allerdings mit den Zeilenumbrüchen nicht zurecht oder schneidet dann ab (was ja an anderer Stelle Sinn machen kann), deshalb habe ich in Zeile 499 des 98_rssFeed.pm folgenden Code eingefügt:
$cdesc=~s/\x0A/ /;
Falls Du mal irgendwann Lust hast, das (ggf. per attr-Switch) zu implementieren...  :)

Viele Güße,
  Hans-Jörg

Benni

Zitat von: rasti am 03 Februar 2016, 00:56:26
Bei dem ist das Feld description nicht immer befüllt, anstelle dessen steht da ein Feld
<content:encoded>

Das führt dann zu einem Reading der Art "HASH(0x3800748)" was sich unschön liest....

Schaue ich mir am WE mal an.

Zitat von: Augschburger am 03 Februar 2016, 16:07:56
$cdesc=~s/\x0A/ /;
Falls Du mal irgendwann Lust hast, das (ggf. per attr-Switch) zu implementieren...  :)

Schaue ich mich auch am WE an. Mache ich evtl. sogar etwas generischer ;)

Benni

Ab morgen gibt es per update eine neue Version des Moduls.

Neu hinzugekommen ist die Möglichkeit per Attribut rfCustomTextPrepFn eine Funktion anzugeben (bspw. aus 99_myUtils.pm), mit der die Texte vor dem setzen der Readings, bzw. der Ticker-Zeilen beliebig manipuliert werden können (genaue Beschreibung in der commandref).

Zitat von: Augschburger am 03 Februar 2016, 16:07:56
$cdesc=~s/\x0A/ /;
Das kann nun mit dieser Funktion umgesetzt werden:

sub rssFeedPrep($$)
{
    my($texttype,$text) = @_;
    $text=~s/\x0A/ / if($texttype =~/description/);
    return $text;
}



Zitat von: rasti am 03 Februar 2016, 00:56:26
Das führt dann zu einem Reading der Art "HASH(0x3800748)" was sich unschön liest....

Auch das kann nun mit rfCustomTextPrepFn gelöst werden:

sub rssFeedPrep($$)
{
    my($texttype,$text) = @_;
    return ' ' if ($text=~/HASH\(.*\)/);
}


Weiterhin habe ich <content:encoded> als encodedContent in die Auswahl für die Readings mit aufgenommen.
Auswahl erfolgt wie gewohnt über das Attribut rfReadings

rasti

Hallo Benni,

ich habe ein update durchgeführt, bei dem fhem sich auch das Modul neu geholt hat.
shutdown restart auch durchgeführt.

Aber ich sehe die neuen readings nicht, was mache ich falsch ?
Siehe Screenshot, in der Liste hätte ich das neue encodedContent erwartet ?!?

Gruß

Ralf

Benni

#23
Guten Morgen Ralf!

Das kann noch nicht die aktuelle Version gewesen sein.
Die ist erst ab heute ab ca. 8:00 Uhr im Update enthalten.

Versuche es einfach später nochmal.

Update: habe eben noch mal geschaut. Inzwischen wird die aktuelle Version ausgeliefert ;)

Gruß Benni.

rasti

Zitat von: Benni am 08 Februar 2016, 06:49:44
Guten Morgen Ralf!

Das kann noch nicht die aktuelle Version gewesen sein.
Die ist erst ab heute ab ca. 8:00 Uhr im Update enthalten.

Versuche es einfach später nochmal.

Update: habe eben noch mal geschaut. Inzwischen wird die aktuelle Version ausgeliefert ;)

Gruß Benni.

Danke dir !

Werde heute oder morgen abend dazu kommen das mal zu testen

Gruß

Ralf

rasti


Raemsna

Hallo Benni,

erstmal vielen Dank für dieses tolle Modul, das ich sehr gerne nutze.

Ich gerate mit ziemlicher Sicherheit jetzt stark ins Offtopic, aber ich drehe mich im Kreis und komme leider nicht weiter (Sorry dafür!)

Folgendes Szenario:
- Ich hole mit dem Modul ein Rss-Feed ab.
- per einer Routine in der myUtils durchsuche ich alle geholten Titel nach Suchwörtern. Wenn ein Suchwort gefunden wurde, lasse ich mir eine E-Mail mit dem RSS Titel, etc. schicken (soweit funktioniert alles)

Nun das Problem:
- da ich nicht möchte, dass ich wiederholt dieselben Meldungen bekomme (Titel ist nach dem nächsten Lauf immernoch im Reading vorhanden), schreibe ich mir nach dem Versenden der E-Mail alle pubDates in eine Datei, z.B.:


Fri, 12 Feb 2016 21:53:01 +0100
Fri, 12 Feb 2016 20:57:01 +0100


- beim nächsten Durchlauf lese ich diese in eine Variable ein ($founds)
- nun möchte ich abfragen, ob ein Titel (auf dem ein Suchwort padst), bereits einmal per Mail versendet wurde. Falls ja, dann springe weiter zum nächsten Titel:


if ($founds =~ m/$val_pubDate/) {
        print out "Der Titel $val_title wurde bereits gemeldet und wird ignoriert";
next;
}


Und genau dieser letzte CodeBlock funktioniert nicht: Obwohl das pubDate des aktuellen Titels ($val_pubDate) ebenfalls in der Variable $founds vorkommt, überspringt die Abfrage dieses IF.

Wie gesagt, sorry für offtopic, aber vielleicht hat ja trotzdem jemand Muße mir zu helfen.

Grüße
Raemsna

Benni

Ja! Das ist mal mächtig OT!
Das Thema wäre wohl eher "wie verwende ich Variablen in Perl-regex?"

Hier trotzdem ein Erklärungsversuch mit möglichem Lösungsvorschlag:
Das Problem wird sein, dass in der Variablen auch Zeichen enthalten sind, die in regex spezielle Bedeutung haben (s.g. Metazeichen).
Sollen diese ignoriert werden, kann vor der Variablen \Q (quotemeta) angegeben werden:


$found =~ m/\Q$val_pubDate/


Das problemverursachende Metazeichen im genannten Beispiel dürfte übrigens das + bei der Zeitzonenangabe sein, dies könnte man auch direkt mit einem \ vorangestellt quoten.


accessburn

#28
Könnt ihr mir mal helfen?
Ich wollte in der vorbereitung für FTUI einen Newsticker einbinden.

Wenn ich aber den Feed aufrufe bekomme ich in FHEM nur eine weiße Seite :'(

Feed:
http://news.gcffm.de/rss_feed.xml

Log:
Zitat2016.04.10 22:02:14 3: myNews: ERROR can't convert feed response
2016.04.10 22:04:18 3: myNews: ERROR: no response getting rss data from url
2016.04.10 22:06:29 1: memGzip: Wide character in memGzip at /opt/fhem//FHEM/01_FHEMWEB.pm line 459
2016.04.10 22:06:31 1: memGzip: Wide character in memGzip at /opt/fhem//FHEM/01_FHEMWEB.pm line 459
2016.04.10 22:06:36 1: memGzip: Wide character in memGzip at /opt/fhem//FHEM/01_FHEMWEB.pm line 459
2016.04.10 22:07:53 1: memGzip: Wide character in memGzip at /opt/fhem//FHEM/01_FHEMWEB.pm line 459

Gzip ist aber installiert.

cfg:
Zitatdefine myNews rssFeed http://news.gcffm.de/rss_feed.xml 3600
attr myNews room BBB


EDIT:
nach "rfEncode utf8" scheint es zumindest zu laufen. Jedoch ist das reading leer:
Das bleibt jedoch übrig:
2016.04.10 22:26:34 3: myNews: ERROR can't convert feed response


Internals:
   DEF        http://news.gcffm.de/rss_feed.xml 3600
   INTERVAL   3600
   NAME       myNews
   NEXTUPDATE Sun Apr 10 23:25:53 2016
   NR         473
   NTFY_ORDER 50-myNews
   STATE      Sun Apr 10 22:26:34 2016
   TYPE       rssFeed
   URL        http://news.gcffm.de/rss_feed.xml
   Readings:
     2016-04-10 22:26:34   gzippedFeed     0
     2016-04-10 22:26:34   state           Sun Apr 10 22:26:34 2016
Attributes:
   rfEncode   utf8
   room       BBB


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

Hallo,

irgendwas ist anscheinend mit dem Feed nicht in Ordnung!
Wenn ich die URL im Browser aufrufe erhalte ich auch eine Fehlermeldung (s. Anhang)

So wie's aussieht wird kein vollständiger Feed geliefert. Der bricht irgendwo mitten im XML ab (2. Anhang).

Gruß Benni.

accessburn

Ja treffer, in der Konsole wurde er sichtbar.

Dann hänge ich gleich die nächste Frage an. Wie müsste ich es anstellen das ich eine Laufschrift (marquee) hinbekomme, in dem Fall für FTUI?
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 11 April 2016, 17:12:54
Wie müsste ich es anstellen das ich eine Laufschrift (marquee) hinbekomme, in dem Fall für FTUI?

Diese Frage gehört wohl in den FTUI-Bereich des Forums. ;)

accessburn

Hätte ja sein können das du sowas weißt :-)
Wenn ich jetzt dort schreibe und du antwortest :-p
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 11 April 2016, 19:14:02
Hätte ja sein können das du sowas weißt :-)

Leider kann ich zu FTUI nichts sagen, da ich das zumindest im Moment nicht einsetze.

Zitat von: accessburn am 11 April 2016, 19:14:02
Wenn ich jetzt dort schreibe und du antwortest :-p

habe ich, aber nur zur weiteren Funktionalität von rssFeed ;D

50watt

#34
Ich möchte, dass FHEM bei einem sichtbaren Überflug der ISS (International space station) reagieren kann (z.B: Licht blinkt).
Von https://spotthestation.nasa.gov/sightings/ gibt es dazu einen RSS-feed, für Wien z.B. https://spotthestation.nasa.gov/sightings/xml_files/Austria_None_Vienna.xml

Dazu habe ich in fhem ein rssFeed device definiert:
   
define rss_iss rssFeed https://spotthestation.nasa.gov/sightings/xml_files/Austria_None_Vienna.xml
attr rss_iss rfEncode utf8
attr rss_iss rfMaxLines 50
attr rss_iss rfReadings description


Das rss_iss device hat nun einige nXX_description readings mit in etwa folgendem Inhalt:
Date: Friday May 27, 2016 <br/> Time: 10:04 PM <br/> Duration: 6 minutes <br/> Maximum Elevation: 30° <br/> Approach: 10° above SSW <br/> Departure: 10° above E <br/>
Das ist genau die Information, die mich interessiert (Datum des sichtbaren Überflugs und Dauer), jedoch noch nicht so aufbereitet, dass fhem darauf reagieren kann.

Wie gehe ich nun weiter vor? Kann/soll man aus den nXX_description readings weitere Readings generieren (z.B. "nextVisibility") und mit diesen readings dann ein at rss_iss:nextVisibility set lamp on auslösen?

Oder ist rssFeed nicht das richtige Modul?
Oder???
RaspberryPi, EnOcean PI
Sonos Play1, Connect
Eltako FT55, FSB61, FAM12, FSR12-4x

Benni

Dafür ist das Modul zwar wirklich nicht gedacht, aber wahrscheinlich lässt es sich doch dafür "mißbrauchen". Ich werde morgen mal ein wenig basteln....  ;)

Benni

#36
Also, hat etwas länger gedauert, aber ich war in der Lage, das rssFeed-Device ohne Modifikation dazu zu mißbrauchen. Und weil mich die Idee, den Überflug der ISS per FHEM zu melden persönlich interessiert hat, habe ich das auch komplett ausgearbeitet.

Außerdem kann man das auch als Beispiel nehmen, wie rssFeed-Daten mit dem rssFeed-Device für FHEM weiter ausgewertet werden können.

Das ganze ist etwas umfangreicher geworden und die Perl- und RegEx-Cracks könnten das wahrscheinlich wesentlich eleganter lösen, aber so funktioniert es jetzt zumindest mal bei mir.

Wie funktionierts:

Als erstes brauchen wir ein entsprechendes rssFeed-Device, das den Feed mit den ISS-Sichtungen für den gewünschten Ort holt (Über https://spotthestation.nasa.gov/)

Weiterhin wird ein Dummy benötigt, der durch ein AT zum Zeitpunkt der Sichtung für die entsprechende Dauer eingeschaltet wird (alles weitere kann dann bequem in Abhängigkeit von diesem Dummy geschaltet werden)

Hier ein list meines rssFeed-Devices (ohne Readings):


Internals:
   DEF        https://spotthestation.nasa.gov/sightings/xml_files/Germany_None_Reutlingen.xml 3600
   INTERVAL   3600
   NAME       rssISS
   NEXTUPDATE Sun Jun  5 21:43:56 2016
   NR         81
   NTFY_ORDER 50-rssISS
   STATE      Sun Jun  5 20:43:55 2016
   TYPE       rssFeed
   URL        https://spotthestation.nasa.gov/sightings/xml_files/Germany_None_Reutlingen.xml
Attributes:
   rfCustomTextPrepFn myISSTimer
   rfEncode   utf8
   rfMaxLines 99
   rfReadings description
   room       02_iss
   webCmd     update


Interessant sind hier v.a. die Attibute rfMaxLines und rfCustomTextPrepFn

Hier noch ein List des Dummys, der geschaltet wird:


Internals:
   NAME       dmISS
   NR         82
   STATE      off
   TYPE       dummy
   Readings:
     2016-06-05 00:42:00   state           off
Attributes:
   room       02_iss
   setList    on off
   useSetExtensions 1


Hierbei wichtig der Name (wird so in der später beschriebenen sub in der 99_MyUtils verwendet) und das Attribut useSetExtensions (sonst funktioniert on-for-timer nicht)

Jetzt brauchen wir noch 2 subs  in der 99_myUtils
Den Code habe ich wieder sehr ausführlich kommentiert, so dass ihn hoffentlich jeder nachvollziehen kann:

Als erstes die Sub, die als Textmodifikations-Fn im rssFeed-Device im Attribut rfCustomTextPrepFn eingetragen wird (s.ol)


sub myISSTimer($$)
{
#Diese sub wird vom ISS-rssFeed als Text-Modifikations-Fn aufgerufen
#(der Name muss dazu im ISS-rssFeed im Attribut rfCustomTextPrepFn
#eingetragen werden)
#Diese Sub gibt den Text des description-Readings an die sub zur
#Erzeugung der ATs weiter
my($texttype,$text) = @_;
if($texttype eq 'description') {
CreateIssTimer($text);
}
#Da die Prozedur ja eigentlich einen Modifizierten Text zurückgibt,
#was aber in diesem Fall gar nicht gewünscht ist, da der Text
#lediglich zur Erzeugung von ATs ausgewertet soll, wird schlicht der
#ursprüngliche Text zurückgegeben.
#Sonst würde das Reading nicht erzeug!
return $text;
}


Und zu guter Letzt noch die sub, die die eigentliche Auswertung der description und das Anlegen der ATs übernimmt:


sub CreateIssTimer($)
{
#Übergeben an diese sub wird die description-Zeile aus dem ISS-rssFeed
#Diese enthält u.a. Zeitpunkt der Sichtungen, sowie die entsprechende Dauer.

#Liegt der darin enthaltene Zeitpunkt der Sichtung nach dem aktuellen Zeitpunkt,
#so wird ein AT angelegt, dass einen Dummy für die entsprechende Sichtungsdauer
#einschält (über on-for-timer)

#Der Name des Dummys ist in der folgenden Zeile angegeben
my $issDummy='dmISS';

#Es wird nur weitergearbeitet, wenn der Dummy auch existiert.
return 0 if(!$defs{$issDummy});

#Der folgende Hash wird benötigt um aus dem Monatskürzel aus der description
#eine Monats-Nummer zu machen
my %m2n=qw(jan 1 feb 2 mar 3 apr 4 may 5 jun 6 jul 7 aug 8 sep 9 oct 10 nov 11 dec 12);

#Aus der description wird nun erst mal entfernt, was stört (Tabs und Newlines)
my ($rstr)=@_;
$rstr=~s/(\n|\t)//g;

#Jetzt werden die einzelnen Teile (Datum, Zeit, Dauer ...) in einen Hash überführt
my @parts = split(/\ <br\/>/,$rstr);
my (%hash,$part);
foreach $part (@parts) {
my ($key, $val) = split /:\s*/,$part,2;
next unless $key;
$hash{$key} = $val;
}

#Als erstes wird die Uhrzeit entsprechend aufbereitet (Umwandlung AM/PM in 24h)
my $tm=$hash{'Time'};
#Log3 undef,3,"iss: Time=$tm";
$tm=~s/:/ /g;
my ($hr,$mn,$pm)=split / /,$tm;
$hr+=12 if($pm eq 'PM');

#Jetzt wird das Datum zur Weiterverarbeitung aufbereitet
my $dt=$hash{'Date'};
$dt=~s/,//g;
my ($wd,$month,$day,$year)=split(/ /,$dt);
#hier wird über den ganz oben definierten Hash der Monatsname in Monatsnummer gewandelt
$month=$m2n{lc $month};

#Jetzt holen wir uns noch die Dauer
my $dr=$hash{'Duration'};
my ($drm,$dun)=split / /,$dr;
#Die Dauer kommt in Minuten, die rechnen wir hier für das at in Sekunden um
my $drs=60*$drm;
#bei "less than 1 minute" enthält die Dauer zunächst 0, dann werden 59 Sekunden angenommen
$drs=59 if($drs<=0);

#Aus den ermittelten Zeitangaben bauen wir uns erst mal einen Namen für
#das zu erzeugende AT. Unter anderem um das AT bei bedarf auch nur einmal
#anzulegen#
my $atname=sprintf("atISS_%d%02d%02d_%02d%02d",$year,$month,$day,$hr,$mn);

#Die Zeitdaten werden für die weiteren Verwendung in epoch umgewandelt
my $rtime=timelocal(0,$mn,$hr,$day,$month-1,$year);

#Wenn der Zeitpunkt der Sichtung nach JETZT ist, wird ein AT angelegt,
#sonst eben nicht
if ($rtime > time()) {
#Das AT wird außerdem nur angelegt, wenn es noch nicht existiert.
if(!$defs{$atname}) {
fhem("define $atname at $rtime set $issDummy on-for-timer $drs");
#Das AT wird im hidden-Room versteckt.
#Anzeigen lassen kann man sich die ISS-ATs im WEB-Frontent von
#FHEM bspw. mit "list atISS.*"
fhem("attr $atname room hidden");
}
}

}


Noch ein paar Hinweise zu den erzeugten ATs:


  • Die ATs werden beim Update des Feeds angelegt, soweit erforderlich. Da die Daten des Feeds nicht so oft aktualisiert werden (> 1d) reicht auch eine Aktualisierung des Feeds 1 mal am Tag (Interval 86400).
    Bei Bedarf auch gerne Manuell über set update
  • Die angelegten ATs sind natürlich nicht Periodisch und werden somit auch nicht in der fhem.cfg  abgelegt, sondern im Statefile.
  • Die ATs werden außerdem im hidden-Room angelegt und können bei Bedarf mittels list atISS.* im FHEMWEB angezeigt werden.


Ich hoffe, ich habe jetzt nichts wesentliches Vergessen.

Viel Spaß damit!

PS: Großartigen Support werde ich dafür aber wohl nicht leisten wollen ;)

kumue

Habe zwei FHEM Instanzen mit FHEM2FHEM verbunden.
Im cloneDummy kommt vom rssFeed nur das state Reading an.
Aktiviere ich zusätzlich das Attribut rfDisplayTickerReadings, bekomme ich noch die Readings tickerMarquee und tickerToast.
Die nXX-Readings werden aber nicht mit übertragen  :(

Läßt sich das einrichten ?

Benni

Für die anderen Readings wird derzeit beim Setzen einfach kein Event generiert.
Schätzungsweise liegt das daran.

Das kann man aber sicherlich ändern ;)
Werde es bei Gelegenheit (per Attribut konfigurierbar) einbauen.

Ansonsten, falls deine 2. FHEM-Installation auch internet hat, würde ich den rssFeed dort einfach regulär redundant einrichten.

kumue

Zitat von: Benni am 18 Juli 2016, 16:20:43

Das kann man aber sicherlich ändern ;)
Werde es bei Gelegenheit (per Attribut konfigurierbar) einbauen.


Das wäre super !  :)
Danke schomal im voraus

Benni

Ich habe die Änderung eingebaut (ab morgen 8:00 Uhr per update verfügbar)

Es gibt ein neues Attribut, mit dem das Feature entsprechend aktiviert werden kann:

Zitat
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.

kumue


Shadow3561

Moin,
Erst einmal danke für das tolle Modul.
Ich benutze es um im Info_Panel die aktuellen News anzeigen zu lassen.
Für die Optik wäre es noch super wenn das passende Bild zum aktuellen NewsFeed angezeigt werden könnte.
Dazu müsste man aus dem Reading encodedContent die Url auslesen.
Ist es evtl möglich dies als Reading ins Modul einzubauen?

Ich würde es ja auch selbst versuchen, aber leider habe ich von Perl null Ahnung.


Mit freundlichen Grüßen

Benni

Zitat von: Shadow3561 am 01 Januar 2017, 17:56:51
Ist es evtl möglich dies als Reading ins Modul einzubauen?

Ich schau's mir die Tage mal an.

Shadow3561

#44
Moin,

Das mit dem Reading für die Url vom Bildinhalt habe ich jetzt als Userreading gelöst.

Aber,
mein FHEM hängt etwa alle 3-7 min für etwa 30sec fest seit ich dein Modul nutze.
Alle gesendeten Schaltbefehle dauern dann etwa 20-30 Sekunden und das Aufbauen einer neuen Seite des Webfrontends dauert ewig.
Habe das Verbose von global mal auf 5 gedreht und musste feststellen, dass das Modul ständig Notifys von all meinen definierten Devices empfängt.
Bei Devices mit wenig Readings ist in FHEM nichts zu merken, wenn jedoch ein Notify von meiner FritzBox oder vom SysMon kommt, dann hängt FHEM für mehrere Sekunden fest.
Ich habe allerdings keine derartigen Notifys definiert.
Habe jetzt mal das rssFeed Device gelöscht, und schon läuft FHEM wieder Flüssig.
Evtl findest du ja etwas Zeit mal drüber zu schauen oder jemand anderes kann mal in seinem Log schauen ob es dort auch so ist.


5: MyNewsNTV: MyNewsNTV hat ein notify von KNX_0407 erhalten

5: MyNewsNTV: MyNewsNTV hat ein notify von FritzBox erhalten



Mfg

Benni

Zitat von: Shadow3561 am 11 Januar 2017, 19:04:20
Moin,

Das mit dem Reading für die Url vom Bildinhalt habe ich jetzt als Userreading gelöst.

Aber,
mein FHEM hängt etwa alle 3-7 min für etwa 30sec fest seit ich dein Modul nutze.
Alle gesendeten Schaltbefehle dauern dann etwa 20-30 Sekunden und das Aufbauen einer neuen Seite des Webfrontends dauert ewig.
Habe das Verbose von global mal auf 5 gedreht und musste feststellen, dass das Modul ständig Notifys von all meinen definierten Devices empfängt.
Bei Devices mit wenig Readings ist in FHEM nichts zu merken, wenn jedoch ein Notify von meiner FritzBox oder vom SysMon kommt, dann hängt FHEM für mehrere Sekunden fest.
Ich habe allerdings keine derartigen Notifys definiert.
Habe jetzt mal das rssFeed Device gelöscht, und schon läuft FHEM wieder Flüssig.
Evtl findest du ja etwas Zeit mal drüber zu schauen oder jemand anderes kann mal in seinem Log schauen ob es dort auch so ist.


5: MyNewsNTV: MyNewsNTV hat ein notify von KNX_0407 erhalten

5: MyNewsNTV: MyNewsNTV hat ein notify von FritzBox erhalten



Mfg

Ja, das mit den notify ist mir bekannt. Das Filtern  der notify, bzw. Korrekte Registrieren  für die Benachrichtigungen steht noch auf meiner todo Liste.

Benni

Zitat von: Benni am 11 Januar 2017, 23:11:30
Das Filtern  der notify, bzw. Korrekte Registrieren  für die Benachrichtigungen steht noch auf meiner todo Liste.

Das ist inzwischen umgesetzt:
rssFeed setzt nun auch NOTIFYDEV korrekt, so dass nur relevante events ankommen.

Eben ins SVN eingecheckt -> ab morgen ca. 8:00 Uhr per update verfügbar.

Radikant

Hi,

wollte gerade den RSS-Feed vom Spiegel einbiden:
define SpiegelOnline rssFeed http://www.spiegel.de/schlagzeilen/tops/index.rss 3600

Leider klappt das nicht, FHEM gibt mit folgende Ausgabe:
Cannot load module rssFeed

Was mache ich flasch ?

LG
Rudolf
Aller Anfang ist schwer...

Benni

Steht irgendwas dazu im Logfile?
Ist dein FHEM aktuell? (wann letztes update gemacht?)

EnderPhilipp

Habe das gleiche Problem wie Radikant.
Wurde mittlerweile eine Lösung gefunden?

FHEM wird von mir fast täglich geupdatet.

Mfg
Philipp ;D
¡¡¡ANFÄNGERALARM!!!
Raspberry Pi 3 (Hauptsystem)
Raspberry Pi B+ (Kellersonde)
Homematic,Philips Hue, LD382, nanoCul 433/868mhz, MPD, Intertechno, FIRMATA, EspEasy, SSCAM, STV, HDMI-CEC, EchoDot

Benni


EnderPhilipp

¡¡¡ANFÄNGERALARM!!!
Raspberry Pi 3 (Hauptsystem)
Raspberry Pi B+ (Kellersonde)
Homematic,Philips Hue, LD382, nanoCul 433/868mhz, MPD, Intertechno, FIRMATA, EspEasy, SSCAM, STV, HDMI-CEC, EchoDot

Benni

Zitat von: EnderPhilipp am 27 Februar 2017, 20:05:14
Das ist komplett leer...  8)

Spinnt etwas...

Tja, da du scheinst wohl mehrere Probleme zu haben. Das macht es nicht leichter. Könnte beides aber mit Berechtigungsproblemen auf Dateisystemebene zu tun haben.

Ansonsten schaut mal in diesen Teil des Threads rein, und prüft ob alle benötigten Perl-Libs vorhanden sind: https://forum.fhem.de/index.php/topic,45261.msg379377.html#msg379377


EnderPhilipp

Zitat von: Benni am 27 Februar 2017, 20:29:14
Tja, da du scheinst wohl mehrere Probleme zu haben. Das macht es nicht leichter. Könnte beides aber mit Berechtigungsproblemen auf Dateisystemebene zu tun haben.

Ansonsten schaut mal in diesen Teil des Threads rein, und prüft ob alle benötigten Perl-Libs vorhanden sind: https://forum.fhem.de/index.php/topic,45261.msg379377.html#msg379377

Danke das war es 😎

libio-compress-perl hatte gefehlt, jetzt lässt sich das Device erstellen.

¡¡¡ANFÄNGERALARM!!!
Raspberry Pi 3 (Hauptsystem)
Raspberry Pi B+ (Kellersonde)
Homematic,Philips Hue, LD382, nanoCul 433/868mhz, MPD, Intertechno, FIRMATA, EspEasy, SSCAM, STV, HDMI-CEC, EchoDot

Benni

Zitat von: EnderPhilipp am 27 Februar 2017, 20:39:55
Danke das war es 😎

Freut mich!

Muss bei Gelegenheit doch mal noch einen entsprechenden Hinweis in die Doku einbauen  ;)

Benni

#55
Nein! Das ist nicht möglich!
Das Modul ruft weder Bilder ab, noch zeigt es welche an.

Die Anzeige von, evtl. Im Feed enthaltenen Bildern (sind ja nur URLs), muss jeder im Frontend  seiner Wahl selbst vornehmen.

Update: Was ist das eigentlich in letzter Zeit  für eine Unart, dass die Leute  ihre Fragen nach Beantwortung einfach wieder raus löschen?

mrbreil

#56
Hallo Benni,

wäre es vielleicht möglich das dein hilfreiches Modul auch die Datei-URL in ein Reading schreibt?
Ich würde es gerne für einen Podcast nutzen. Speziell geht es um den Tagesschau Podcast.
Sehe gerade es gibt auch ein Angabe der Länge, könnte man die auch als Reading auswerten?

Gruß Christian

TecCheck

Hey Benni,

ich habe dein Modul schon einige Zeit in Gebrauch und einige Feeds erstellt.
Alles funktioniert zu meiner vollsten Zufriedenheit.  DANKESCHÖN!  :)

Habe jetzt mal meine vorhandenen Feeds durchforsted und festgestellt das einige
Feeds vom Herausgeber nur einmal am Tag oder seltener geändert werden,
ich aber bei der Definition einen Aktualisierungsinterval von 3600 eingegeben habe.

Jetzt meine Frage: Wie kann ich den Aktualisierungsinterval ändern, ohne die Feeds neu zu definieren?

Schöne Grüße

Wolfgang
Intel NUC mit Ubuntu als FHEM-Server,
CUL  868, RFXTRX 433, Jeelink-PCA,ZWDongle, HMLan
Aktivlautsprecher über LineIn und Display per HDMI am NUC,
diverse FS20 und Intertechno - Komponenten, Oregon Temp-Hum-Sensoren, HomeMatic, PCA301, KS300,Sonos, ZWave, Alexa,Echo's

ThomasMagnum

Zitat von: TecCheck am 06 März 2018, 12:44:17
Hey Benni,

ich habe dein Modul schon einige Zeit in Gebrauch und einige Feeds erstellt.
Alles funktioniert zu meiner vollsten Zufriedenheit.  DANKESCHÖN!  :)

Habe jetzt mal meine vorhandenen Feeds durchforsted und festgestellt das einige
Feeds vom Herausgeber nur einmal am Tag oder seltener geändert werden,
ich aber bei der Definition einen Aktualisierungsinterval von 3600 eingegeben habe.

Jetzt meine Frage: Wie kann ich den Aktualisierungsinterval ändern, ohne die Feeds neu zu definieren?

Schöne Grüße

Wolfgang

Hallo Wolfgang,

einfach im FHEMWEB im entsprechenden Device auf "DEF" klicken und den Wert anpassen.
Sofern noch kein Wert angegeben ist einfach hinter die URL schreiben.

Anbei ein Bild zum besseren Verständnis.

Gruß, Thomas

TecCheck

Hallo Thomas,

Einfacher wie gedacht.

Ich danke Dir!

Wolfgang
Intel NUC mit Ubuntu als FHEM-Server,
CUL  868, RFXTRX 433, Jeelink-PCA,ZWDongle, HMLan
Aktivlautsprecher über LineIn und Display per HDMI am NUC,
diverse FS20 und Intertechno - Komponenten, Oregon Temp-Hum-Sensoren, HomeMatic, PCA301, KS300,Sonos, ZWave, Alexa,Echo's

stewen

Hallo,
ich würde gerne das Modul mit dem Ticker von "Domain Factory" nutzen. Leider klappt es nicht, die Inhalte abzurufen. Die Nachrichten werden einfach nirgends dargestellt. Könnte das bitte mal jemand testen ob das an mir (bzw. meinem FHEM und den lokalen Einstellungen) oder an df liegt? Die URL des Feeds lautet: http://status.df.eu/rdf.xml

Vielen Dank im Voraus!
Stephan
FHEM auf Proxmox Cluster - viele Sender/Adapter an Raspberry Pi 3 mit LAN angebunden (ser2net) - schon ewig dabei.

Benni

Zitat von: stewen am 02 Juli 2018, 14:41:28
Hallo,
ich würde gerne das Modul mit dem Ticker von "Domain Factory" nutzen. Leider klappt es nicht, die Inhalte abzurufen. Die Nachrichten werden einfach nirgends dargestellt. Könnte das bitte mal jemand testen ob das an mir (bzw. meinem FHEM und den lokalen Einstellungen) oder an df liegt? Die URL des Feeds lautet: http://status.df.eu/rdf.xml

Hallo Stephan,

sorry, aber das liegt (leider) am Modul!

Bei RSS im rdf-Format scheinen die einzelnen Artikel (<item>) nicht innerhalb der <channel><items>-Struktur definiert zu sein. Dort gibt es lediglich einen (leeren) Ressource-Verweis und die Artikel selbst sind dann als solche außerhalb von <channel> aufgeführt.
Das ist so im Modul nicht behandelt.

Mal sehen, ob und wann ich dazu komme, da was zu machen. Vielleicht stelle ich das Modul besser gleich auf Verwendung eines bestehenden rss-Parser-Moduls um. Muss mal schauen, was es da so gibt.

gb#

stewen

Hi Benni, danke für die schnelle Antwort und deine bisherige Arbeit. Dann warte ich mal ab ;)

Gruß
Stephan
FHEM auf Proxmox Cluster - viele Sender/Adapter an Raspberry Pi 3 mit LAN angebunden (ser2net) - schon ewig dabei.

fremitus

#63
Hallo zusammen,

leider gelingt es mir nicht, den WDR rss Feed zu aktivieren. Habe diverse Einstellungen ausprobiert und komme leider nicht weiter. Hier meine Daten:
define wdrTicker rssFeed https://www1.wdr.de/nachrichten/westfalen-lippe/uebersicht-westfalen-lippe-100.feed
attr wdrTicker rfAllReadingsEvents 1
attr wdrTicker rfDisplayTickerReadings 0
attr wdrTicker rfEncode UTF-8
attr wdrTicker rfMaxLines 20
attr wdrTicker rfReadings title,description,pubDate
attr wdrTicker verbose 4


Hier ein paar Logfile Infos:


wdrTicker: Trying to convert xml to array...
2018.08.28 23:18:27 4: wdrTicker: ERROR: no valid feed data available after conversion


Das Logfile zeigt auch an:
wdrTicker: https://www1.wdr.de/nachrichten/westfalen-lippe/uebersicht-westfalen-lippe-100.feed
2018.08.28 23:18:24 5: wdrTicker: <?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://www.wdr.de/rss/1.0/modules/app/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <title>Westfalen-Lippe - WDR.de</title>
  <link rel="alternate" type="text/html" href="https://www1.wdr.de/nachrichten/westfalen-lippe/uebersicht-westfalen-lippe-100~_type-feed.html" />
  <link rel="self" href="https://www1.wdr.de/nachrichten/westfalen-lippe/uebersicht-westfalen-lippe-100~_type-feed.feed" />
  <updated>2018-08-28T20:46:00Z</updated>
  <dc:date>2018-08-28T20:46:00Z</dc:date>
  <entry>
    <title>Studie: Gute Kita-Betreuung hängt vom Wohnort ab</title>
    <link rel="alternate" href="https://www1.wdr.de/nachrichten/westfalen-lippe/bertelsmann-studie-zu-fruehkindlicher-bildung-in-kitas-100.html" />.......


Mein Problem ist, es werden keine Schlagzeilen angezeigt ...
Ich sehe nur:

READINGS:
     2018-08-28 23:59:42   gzippedFeed     0
     2018-08-28 23:59:42   state           Tue Aug 28 23:59:42 2018


Würde mich über eine Antwort freuen,

Gruss

Peer

Benni

#64
Hallo Peer,

sorry, aber ich fürchte auch für dich heißt es erst mal abwarten.
Feeds im Atom-Format werden derzeit ebenfalls nicht vollständig unterstützt.

Ich hoffe, dass ich demnächst genügend Luft habe das endlich mal in Angriff zu nehmen.


gb#

Nachtrag: Eventuell kannst du dir ja so lange mit einem Online-Feed-Converter weiterhelfen. Auf die Schnelle habe ich folgenden gefunden:

https://feedmix.novaclic.com/atom2rss.php

Wenn du dort den WDR-RSS-Link angibst erhältst du folgende URL, die den Feed dann in RSS2.0 Konvertiert zurück liefert und eigentlich auch mit dem Modul funktionieren müsste (ungetestet) funktioniert (getestet!  ;D):

https://feedmix.novaclic.com/atom2rss.php?source=https%3A%2F%2Fwww1.wdr.de%2Fnachrichten%2Fwestfalen-lippe%2Fuebersicht-westfalen-lippe-100.feed

Hier noch das list meines Test-Devices:

Internals:
   CFGFN     
   DEF        https://feedmix.novaclic.com/atom2rss.php?source=https%3A%2F%2Fwww1.wdr.de%2Fnachrichten%2Fwestfalen-lippe%2Fuebersicht-westfalen-lippe-100.feed 3600
   INTERVAL   3600
   NAME       newsWdrTest
   NEXTUPDATE Wed Aug 29 06:35:55 2018
   NOTIFYDEV  global
   NR         933983
   NTFY_ORDER 50-newsWdrTest
   STATE      Wed Aug 29 05:35:55 2018
   TYPE       rssFeed
   URL        https://feedmix.novaclic.com/atom2rss.php?source=https%3A%2F%2Fwww1.wdr.de%2Fnachrichten%2Fwestfalen-lippe%2Fuebersicht-westfalen-lippe-100.feed
   .attraggr:
   .attrminint:
   Helper:
     DBLOG:
       state:
         logdb:
           TIME       1535513726.61003
           VALUE      defined
   OLDREADINGS:
   READINGS:
     2018-08-29 05:35:55   .headlines      +++ Auslosung: AEK Athen, Young Boys Bern und Ajax erreichen die Champions League +++
+++ Borussia Dortmund verpflichtet Wunschstürmer Pablo Alcacer +++
+++ Staatsanwaltschaft erhebt Anklage nach Spielhallenbrand in Gronau +++
+++ Kampfmittelräumer graben Metall aus, Bauarbeiten stocken +++
+++ Bauarbeiten für den Lückenschluss der B67n gestartet +++
+++ Jahresbilanz Bethel: So viele Spenden wie noch nie +++
+++ Deutschland-Achter auf Goldkurs +++
+++ Deutscher Nachbarschaftspreis geht nach Castrop-Rauxel - den Landessieg holt Duisburg-Marxloh +++
+++ Borussia Mönchengladbach bestreitet Testspiel gegen den VfL Bochum +++
+++ Aus Fenster gefallen: Tödlicher Unfall auf Mallorca +++
+++ Falsche Tierliebe bei wilden Junghasen: Siegerländer Wildtierhilfe gibt Tipps +++
+++ Suche nach Problemlösung für Münsters Bahnhofsviertel +++
+++ Small Planet: Flieger nach 52 Stunden in Paderborn erwartet +++
+++ Auf Strafbefehl folgt Kündigung gegen Schulleiter vom Hildegardis-Gymnasium wegen Besitzes von Jugendpornografie +++
+++ Bombe im Norden Münsters entschärft +++
     2018-08-29 05:35:55   f_title         Westfalen-Lippe - WDR.de
     2018-08-29 05:35:55   gzippedFeed     0
     2018-08-29 05:35:55   n00_title       Auslosung: AEK Athen, Young Boys Bern und Ajax erreichen die Champions League
     2018-08-29 05:35:55   n01_title       Borussia Dortmund verpflichtet Wunschstürmer Pablo Alcacer
     2018-08-29 05:35:55   n02_title       Staatsanwaltschaft erhebt Anklage nach Spielhallenbrand in Gronau
     2018-08-29 05:35:55   n03_title       Kampfmittelräumer graben Metall aus, Bauarbeiten stocken
     2018-08-29 05:35:55   n04_title       Bauarbeiten für den Lückenschluss der B67n gestartet
     2018-08-29 05:35:55   n05_title       Jahresbilanz Bethel: So viele Spenden wie noch nie
     2018-08-29 05:35:55   n06_title       Deutschland-Achter auf Goldkurs
     2018-08-29 05:35:55   n07_title       Deutscher Nachbarschaftspreis geht nach Castrop-Rauxel - den Landessieg holt Duisburg-Marxloh
     2018-08-29 05:35:55   n08_title       Borussia Mönchengladbach bestreitet Testspiel gegen den VfL Bochum
     2018-08-29 05:35:55   n09_title       Aus Fenster gefallen: Tödlicher Unfall auf Mallorca
     2018-08-29 05:35:55   n10_title       Falsche Tierliebe bei wilden Junghasen: Siegerländer Wildtierhilfe gibt Tipps
     2018-08-29 05:35:55   n11_title       Suche nach Problemlösung für Münsters Bahnhofsviertel
     2018-08-29 05:35:55   n12_title       Small Planet: Flieger nach 52 Stunden in Paderborn erwartet
     2018-08-29 05:35:55   n13_title       Auf Strafbefehl folgt Kündigung gegen Schulleiter vom Hildegardis-Gymnasium wegen Besitzes von Jugendpornografie
     2018-08-29 05:35:55   n14_title       Bombe im Norden Münsters entschärft
     2018-08-29 05:35:55   preparedLines   15
     2018-08-29 05:35:55   state           Wed Aug 29 05:35:55 2018
Attributes:
   DbLogExclude .*
   rfDisabledText Dieser Nachrichten-Feed ist derzeit leider deaktiviert
   rfEncode   utf8
   rfMaxLines 15
   rfReadings title,imageURL,encodedContent
   rfTickerChars +++





fremitus

Hallo Benni,

danke! Die Antwortuhrzeit kommentiere ich mal nicht ... es sei denn du verweilst gerade irgendwo Richtung Westen mit einem Ozean dazwischen....

Ich probiere das aus und berichte.

Gruss

Peer

fremitus

Hallo Benni,

klappt prima mit dem "Workaround"....danke nochmals...nun kann ich auch in der Küche Schlagzeilen lesen ...

Als nächster sind dann Twitter Nachrichten geplant, mal sehen, wie ich das integriere..

Gruss

Peer

mrbreil

Arbeitet dieses Modul eigentlich nicht blockierend?

Gruß Christian

Benni


Pete37

Hallo Benni,

vielen Dank schon mal für das Modul - es hat mir bisher sehr gute Dienste erwiesen. Bis ich feststellen musste, dass es nicht mehr funktioniert. Offenbar hat die NASA ihren SpotTheStation-Feed auch auf Atom umgestellt. Ich habe jetzt mal den online-Konvertierer ausprobiert, aber da kommt nix raus. Als Headlines werden nur Hash-Werte angezeigt.  :'(

Gibt es noch was, dass ich selber probieren kann? Oder gilt es mich in die Reihe der Geduldigen zu stellen?

Vielen Dank,
Pete37
Fhem auf Raspberry Pi3 mit Fritzbox inkl. Steckdosen, Philips Hue inkl. Orsam Lightify-Lampen, eq-3 Max!, SONOS, Rollotron Rolläden, Asus ZenPad, Samsung Galaxy xCover 3

Benni

Zitat von: Pete37 am 30 Juli 2019, 22:28:16
Offenbar hat die NASA ihren SpotTheStation-Feed auch auf Atom umgestellt.

Hast du mal den Link zum Feed?

Pete37

das wäre der originale:
https://spotthestation.nasa.gov/sightings/xml_files/Germany_None_Erlangen.xml

und der konvertierte:
https://feedmix.novaclic.com/atom2rss.php?source=https%3A%2F%2Fspotthestation.nasa.gov%2Fsightings%2Fxml_files%2FGermany_None_Erlangen.xml
Fhem auf Raspberry Pi3 mit Fritzbox inkl. Steckdosen, Philips Hue inkl. Orsam Lightify-Lampen, eq-3 Max!, SONOS, Rollotron Rolläden, Asus ZenPad, Samsung Galaxy xCover 3

Benni

Hmm ....

Sieht für mich beides nach rss aus!  ???

Muss heute Abend mal schauen, was das rssFeed-Modul bei mir daraus macht.

Gruß Benni.

Pete37

ZitatSieht für mich beides nach rss aus!
Schon, ja. wobei im Header das hier steht:
xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"

Und bei mir kommt halt kein Ergebnis mehr raus raus. Am 2019-05-25 hat es das letzte Mal funktioniert, seit dem nicht mehr. Leider habe ich keine Rohdaten von Damals zum Vergleich. Aber ich habe letzlich Deine Beispiel-Implementierung verwendet. Damit hatte es super funktioniert!

Gruß,
Pete37
Fhem auf Raspberry Pi3 mit Fritzbox inkl. Steckdosen, Philips Hue inkl. Orsam Lightify-Lampen, eq-3 Max!, SONOS, Rollotron Rolläden, Asus ZenPad, Samsung Galaxy xCover 3

Benni

Habe mir das gestern mal noch angeschaut...

Die Konvertierung mittels atom2rss scheint ja zu funktionieren, allerdings führen die in der description enthaltenen <br/> anscheinend dazu, dass die Beschreibung dadurch ein Hash wird.
Ich dachte, das könnte man durch eine eigene rfCustomTextPrepFn abfangen, die greift aber leider erst zu spät für eine einfache Ersetzung. Man müsste dort schätzungsweise den Hash wieder in einen String wandeln.... dazu hatte ich aber auf die Schnelle keine Zeit mehr.

Allerdings habe ich mittlerweile schon damit begonnen, den Code des Moduls umzustellen.
Sobald ich was funktionierendes habe, werde ich hier eine Testversion veröffentlichen. Ich weiß im Moment nicht so genau, wie ich das mit der Ablösung handeln werden, da das neue Modul schätzungsweise nicht 100%-ig abwärtskompatibel sein wird. Aber bis dahin ist es auch noch ein bisschen.

Gruß Benni.


Pete37

Ok, danke für's testen. Dann warte ich auf die neue Version...
Fhem auf Raspberry Pi3 mit Fritzbox inkl. Steckdosen, Philips Hue inkl. Orsam Lightify-Lampen, eq-3 Max!, SONOS, Rollotron Rolläden, Asus ZenPad, Samsung Galaxy xCover 3

Mohrengemuse

Guten Morgen,

ich habe schon länger nicht mehr rein geschaut und habe auch nur eine kleine Frage. Funktioniert inzwischen ein aktiviertes event-on-change-reading .*? Bei meinem letzten Versuch mit dem Modul kam noch bei jedem Poll ein Event, egal bei welchen Einstellungen.

Gruß Mohrengemuse

Pete37

Hallo Benni,

hast Du schon was Neues?

Dank und Gruß,
Pete

Zitat von: Benni am 02 August 2019, 08:38:01
Habe mir das gestern mal noch angeschaut...

Die Konvertierung mittels atom2rss scheint ja zu funktionieren, allerdings führen die in der description enthaltenen <br/> anscheinend dazu, dass die Beschreibung dadurch ein Hash wird.
Ich dachte, das könnte man durch eine eigene rfCustomTextPrepFn abfangen, die greift aber leider erst zu spät für eine einfache Ersetzung. Man müsste dort schätzungsweise den Hash wieder in einen String wandeln.... dazu hatte ich aber auf die Schnelle keine Zeit mehr.

Allerdings habe ich mittlerweile schon damit begonnen, den Code des Moduls umzustellen.
Sobald ich was funktionierendes habe, werde ich hier eine Testversion veröffentlichen. Ich weiß im Moment nicht so genau, wie ich das mit der Ablösung handeln werden, da das neue Modul schätzungsweise nicht 100%-ig abwärtskompatibel sein wird. Aber bis dahin ist es auch noch ein bisschen.

Gruß Benni.
Fhem auf Raspberry Pi3 mit Fritzbox inkl. Steckdosen, Philips Hue inkl. Orsam Lightify-Lampen, eq-3 Max!, SONOS, Rollotron Rolläden, Asus ZenPad, Samsung Galaxy xCover 3