FHEM Tutorial-Reihe - Part 36: RSS-Feed Infos abrufen und Push-Benachrichtigung bei neuen Beiträgen
FHEM kann auch wunderbar RSS-Feeds parsen und macht es einem somit sehr leicht, auf dem Laufenden zu bleiben. In diesem Tutorial wird der RSS-Feed von haus-automatisierung.com eingebunden und wir lassen uns eine Push-Notifications mit Link aufs Smartphone senden, sobald ein neuer Beitrag online verfügbar ist.
Was wird benötigt?
- Eine FHEM-Installation
- Die App Pushover + entsprechende Konfiguration in FHEM
Video
Befehle
define WEB_myRSS rssFeed https://haus-automatisierung.com/feed.xml 18000
attr WEB_myRSS rfAllReadingsEvents 1
Hier die neue Funktion in der myUtils, welche das Datum ein weniger schöner aufbereitet.
use DateTime::Format::Strptime;
sub RSSFeedTimeToDDMMYY($) {
# Sat, 18 Mar 2017 00:00:00 +0100
# Mon, 14 Aug 2017 05:00:33 +0000
# http://search.cpan.org/~drolsky/DateTime-Format-Strptime-1.74/lib/DateTime/Format/Strptime.pm
my ($rssTime) = @_;
my $pattern = "%a, %d %b %Y %H:%M:%S %z";
my $strp = DateTime::Format::Strptime->new(pattern => $pattern);
my $dt = $strp->parse_datetime($rssTime);
return $dt->dmy('.');
}
Zum Test können diese Aufrufe dann genutzt werden
{RSSFeedTimeToDDMMYY("Mon, 14 Aug 2017 05:00:33 +0000")}
{RSSFeedTimeToDDMMYY(ReadingsVal("WEB_myRSS", "n00_pubDate", "Thu, 01 Jan 1970 00:00:00 +0000"))}
Um den Titel zusammen mit dem Datum des Beitrags im Status zu sehen, wird der folgende Code als stateFormat genutzt
{sprintf("%s - %s", RSSFeedTimeToDDMMYY(ReadingsVal("WEB_myRSS", "n00_pubDate", "Thu, 01 Jan 1970 00:00:00 +0000")), ReadingsVal("WEB_myRSS", "n00_title", ""))}
Das erste DOIF (im Video mit Screenshot wurde wie folgt definiert)
define doif_RSSPushover DOIF ([WEB_myRSS:n00_title] and [?WEB_myRSS:n00_title] ne [$SELF:T_n00_title]) (setreading $SELF T_n00_title [WEB_myRSS:n00_title], set WEB_Pushover msg title=[WEB_myRSS:n00_title] url_title="Jetzt lesen" action="[WEB_myRSS:n00_link]" expire=18000)
attr doif_RSSPushover checkReadingEvent 1
attr doif_RSSPushover do always
Meine favorisierte Variante sieht allerdings so aus. Eigentlich wurde nur title durch message ersetzt und es wird der Device-State in der Pushover-Notification verwendet anstelle des Titels. Immerhin haben wir uns sehr viel Arbeit damit gemacht, alles schön zu formatieren. Da sollte man das auch nutzen.
define doif_RSSPushover DOIF ([WEB_myRSS:n00_title]) (set WEB_Pushover msg message="[WEB_myRSS]" url_title="Jetzt lesen" action="[WEB_myRSS:n00_link]" expire=18000)
attr doif_RSSPushover checkReadingEvent 1
attr doif_RSSPushover do always