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 (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.
(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.
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 :)
Setze mal das Attribut rfEncode auf utf8, dann sollte es eigentlich klappen.
Das wars, ich dank Dir!
Cooles Modul ;D
EDIT: Wer lesen kann ist klar im Vorteil.... Sorry, hatte den Part vorhin schlecht ueberlesen.
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
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. :)
Klar, kein Thema.
Schoenen Urlaub erstmal ;)
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.
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. :)
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 (http://forum.fhem.de/index.php/topic,45261.msg379548.html#msg379548) neue Erkenntnisse zur generellen Verfügbarkeit von IO::Compress::Gunzip, deshalb wird die Doku erst mal nicht aktualisiert.
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. :)
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?
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.
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
*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 :)
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. ;)
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 :)
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
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
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 ;)
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
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
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.
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
Funktioniert super! Danke dir !
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
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.
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
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.
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?
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. ;)
Hätte ja sein können das du sowas weißt :-)
Wenn ich jetzt dort schreibe und du antwortest :-p
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
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/ (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 (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???
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.... ;)
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 ;)
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 ?
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.
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
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.
funktioniert perfekt. Danke !
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
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.
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
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.
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.
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
Steht irgendwas dazu im Logfile?
Ist dein FHEM aktuell? (wann letztes update gemacht?)
Habe das gleiche Problem wie Radikant.
Wurde mittlerweile eine Lösung gefunden?
FHEM wird von mir fast täglich geupdatet.
Mfg
Philipp ;D
Zitat von: Benni am 27 Februar 2017, 19:50:13
Steht irgendwas dazu im Logfile?
Das ist komplett leer... 8)
Spinnt etwas...
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
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.
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 ;)
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?
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
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
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
Hallo Thomas,
Einfacher wie gedacht.
Ich danke Dir!
Wolfgang
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
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#
Hi Benni, danke für die schnelle Antwort und deine bisherige Arbeit. Dann warte ich mal ab ;)
Gruß
Stephan
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
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 +++
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
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
Arbeitet dieses Modul eigentlich nicht blockierend?
Gruß Christian
Zitat von: mrbreil am 23 April 2019, 14:34:43
Arbeitet dieses Modul eigentlich nicht blockierend?
Nein, bisher nicht!
gb#
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
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?
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
Hmm ....
Sieht für mich beides nach rss aus! ???
Muss heute Abend mal schauen, was das rssFeed-Modul bei mir daraus macht.
Gruß Benni.
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
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 (https://fhem.de/commandref_DE.html#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.
Ok, danke für's testen. Dann warte ich auf die neue Version...
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
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 (https://fhem.de/commandref_DE.html#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.