FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: stobor am 18 März 2013, 17:56:18

Titel: RSS als Text auf FRITZ!Fon MT-F
Beitrag von: stobor am 18 März 2013, 17:56:18
Hallo,
Wie kann ich denn einen textbasierenden RSS Feed erstellen, der vom FRITZ!Fon MT-F empfangbar ist und mir bspw. Schalterzustände zeigt?
Danke für Hilfe.
Titel: Aw: RSS als Text auf FRITZ!Fon MT-F
Beitrag von: housekeeper am 19 März 2013, 01:32:42
Na ja, es ist vergleichsweise einfach.

RSS feeds sind XML Dokumente, die eventbasiert aktualisiert werden. Also benötigen wir einen Webserver ( Fritz!Box ) und schreiben dort eine korrekt formatierte Seite in Abhängigkeit von Ereignissen hin.

Auf der Fritz!Box 7390 ist das Webverzeichnis "/var/html", dort schreiben wir unsere XML Seite hin, etwa "/var/html/rss.xml"

Dazu erstellen wir ein shell script, das die letzte Zeile der aktuellen Logdatei ausliest und XML formatiert ausgibt:

#!/bin/ash
while true; do
  a=$(wc -l var/log/fhem/fhem-????-??-??.log | cut -d " " -f 1)
  echo -e "<?xml version=\"1.0\" encoding=\"UTF-16\"?>\n" > /var/html/rss.xml
  echo -e "<rss version=\"2.0\">\n" >> /var/html/rss.xml
  echo -e "<channel>\n" >> /var/html/rss.xml
  echo -e "<title>FHEM Log Channel</title>\n" >> /var/html/rss.xml
  echo -e "<description>Latest events from FHEM</description>\n" >> /var/html/rss.xml
  echo -e "<description>The explanation of how the items are related goes here</description>\n" >> /var/html/rss.xml
  echo -e "<link>http://www.directoryoflinksgohere</link>\n" >> /var/html/rss.xml
  echo -e "<link>http://www.directoryoflinksgohere</link>\n" >> /var/html/rss.xml
  echo -e "<item>\n" >> /var/html/rss.xml
  echo -e "<title>Latest FHEM Log entry</title>\n" >> /var/html/rss.xml
  echo -e "<description>$(sed $a!d var/log/fhem/fhem-????-??-??.log)</description>\n" >> /var/html/rss.xml
  echo -e "<link>http://www.linkgoeshere.com</link>\n" >> /var/html/rss.xml
  echo -e "</item>\n" >> /var/html/rss.xml
  echo -e "</channel>\n" >> /var/html/rss.xml
  echo -e "</rss>\n" >> /var/html/rss.xml
sleep 10
done


Das starten wir mit Verzeichnis/Skript & und schon haben wir ein RSS feed.

In der Fritz!Box muß das unter DECT/RSS-Nachrichten als FHEM / 192.168.178.1/rss.xml eingetragen werden. (Alle IP-Adressen und Verzeichnisse bitte den persönlichen Gegebenheiten anpassen)

Bei Nutzung von dyndns kann man die Seite auch für Zugriff aus dem Internet freigeben und mit beliebigen Geräten anzeigen lassen.

Die Textdarstellung im MT-D ist etwas dürftig, keine Ahnung wie das im MT-F aussieht, da muß vermutlich noch optimiert werden.

Titel: Aw: RSS als Text auf FRITZ!Fon MT-F
Beitrag von: stobor am 19 März 2013, 19:32:41
Hmmmm,
Im Log steht ja nicht immer der Schalterzustand. Wie realisiere ich dass, wenn ich bspw. Per RSS eine Liste aller Schalterzustände ablegen möchte?
Titel: Aw: RSS als Text auf FRITZ!Fon MT-F
Beitrag von: housekeeper am 19 März 2013, 20:04:23
Dann werte doch einfach die Status-Datei "fhem.save" aus. Da werden alle aktuellen Zustände abgelegt.

Etwa cat /var/InternerSpeicher/fhem/log/fhem.save | grep schalter

Das Ergebnis stellst Du dann in Deinen rss feed.

Einfach mal ein wenig basteln...

Wie sagt Daniel Düsentrieb so schön ? "Dem Ingeniör ist nichts zu schwör" ;-)
Titel: Aw: RSS als Text auf FRITZ!Fon MT-F
Beitrag von: housekeeper am 20 März 2013, 16:56:34
mit

a=$(echo "list * state" | socat - TCP:127.0.0.1:7072)
 echo -e "$a"


kannst Du sehr schön alle (Schalt-)zustände auflisten. Das Ergebnis sollte sich ziemlich einfach ins rss-feed einbauen lassen...

Wie gesagt, dem Ingeniör...
Titel: Aw: RSS als Text auf FRITZ!Fon MT-F
Beitrag von: housekeeper am 20 März 2013, 18:19:58
Also gut, noch ein bißchen weiter, aber dann mußt Du alleine laufen ;-)


#!/bin/ash

# Irgendwohin kopieren, wo Du Skripte aufbewahrst, vielleicht "/var/InternerSpeicher/fhem/fhem-rssfeed" oder
# "/var/InternerSpeicher/fhem/FHEM/fhem-rssfeed". Aufpassen, daß es im UNIX Format bleibt (nur LF, kein CR)
# sonst behauptet Linux beim Aufruf, die Datei gäbe es nicht. Mit chmod +x fhem-rssfeed ausführbar machen,
# und anschließend mit ./fhem-rssfeed & starten. Bei Bedarf anhalten mit "kill $(pidof fhem-rssfeed)"
                                               
while true; do

echo -e "<?xml version=\"1.0\" encoding=\"utf-8\"?>" > /var/html/rss.xml
echo -e "<rss version=\"2.0\">" >> /var/html/rss.xml
echo -e "<channel>" >> /var/html/rss.xml
echo -e "<title>FHEM Geraete Status</title>" >> /var/html/rss.xml
echo -e "<link>http://192.168.178.1:8083/fhem?cmd=list+*+state</link>" >> /var/html/rss.xml
echo -e "<description>Zeigt in Intervallen den Status angeschlossener Geraete an</description>" >> /var/html/rss.xml
echo -e "<language>de-de</language>" >> /var/html/rss.xml
echo -e "<copyright>h.keeper(h.keeper@ymail.com)</copyright>" >> /var/html/rss.xml
echo -e "<pubDate>`date +%a", "%d" "%b" "%Y" "%H:%M:%S`</pubDate>" >> /var/html/rss.xml
echo -e "<image>" >> /var/html/rss.xml
echo -e "<url>http://fhem.de/www/images/default/fhemicon.png</url>" >> /var/html/rss.xml
echo -e "<title>FHEM Hausautomatisierung</title>" >> /var/html/rss.xml
echo -e "<link>http://www.fhem.de</link>" >> /var/html/rss.xml
echo -e "</image>" >> /var/html/rss.xml
echo -e "<item>" >> /var/html/rss.xml
echo -e "<title>Statusbericht von `date +%a", "%d" "%b" "%Y" "%H:%M:%S`</title>" >> /var/html/rss.xml
echo -e "<description>`echo "list * state" | socat - TCP:127.0.0.1:7072`</description>" >> /var/html/rss.xml
echo -e "<link>http://192.168.178.1:8083/fhem?cmd=list+*+state</link>" >> /var/html/rss.xml
echo -e "<author>h. keeper (h.keeper@ymail.com)</author>" >> /var/html/rss.xml
echo -e "<guid>http://192.168.178.1:8083/fhem</guid>" >> /var/html/rss.xml
echo -e "<pubDate>`date +%a", "%d" "%b" "%Y" "%H:%M:%S`</pubDate>" >> /var/html/rss.xml
echo -e "</item>" >> /var/html/rss.xml
echo -e "</channel>" >> /var/html/rss.xml
echo -e "</rss>" >> /var/html/rss.xml

sleep 120

done


Die Seite wird alle 2 Minuten aktualisiert, rss feed reader holen meistens in Intervallen > 15 Min die Inhalte ab. Die Fritz!Box läßt zwar ein Abrufintervall von 1 Min zu, aber tatsächlich kommen auf dem MT-D die Nachrichten in nicht nachvollziehbaren Zeiträumen an. Vom Samsung Galaxy Note 10.1 mit Feed+ geht es ganz zuverlässig.

Verschiedene Browser / Clients zeigen den feed unterschiedlich an. Mozilla Aurora kann Feeds mit Outlook als Client verknüpfen, da bekomme ich die Nachrichten alle soviel Zeiteinheiten in einen Ordner gelegt.

Danke für Deine "Anfängerfrage", die mich auf die Idee gebracht hat die Technik selbst zu nutzen.
Titel: Aw: RSS als Text auf FRITZ!Fon MT-F
Beitrag von: eddtima am 10 April 2013, 22:54:09
Hallo Housekeeper,

habe es auf meiner Fritzbox 7390 so gemacht, wie Du beschreibst, bekomme aber vielfach folgende Fehlermeldung:
./fhem-rssfeed:line 37: can't create /var/html/rss.xml: Read-only file system

Mein /var/html verweist auf /usr/www/avm und dieser Ordner avm hat folgende Rechte:
drwxrwxr-x       root root        avm

Die Rechte lasses sich nicht ändern, da Read only Filesystem.

Kannst Du helfen?

Viele Grüße
eddtima
Titel: Aw: RSS als Text auf FRITZ!Fon MT-F
Beitrag von: housekeeper am 11 April 2013, 04:30:25
Zitat von: eddtima schrieb am Mi, 10 April 2013 22:54...bekomme aber vielfach folgende Fehlermeldung:
./fhem-rssfeed:line 37: can't create /var/html/rss.xml: Read-only file system

"Vielfach" bedeutet vermutlich "nicht immer", bei mir ist /var/html auch ein link auf /usr/www/avm

# ls -l /var/html
lrwxrwxrwx    1 root     root            12 Jan  1  1970 /var/html -> /usr/www/avm


Bei mir läuft FHEM mit root-Rechten, vielleicht liegt es daran ?


Titel: Aw: RSS als Text auf FRITZ!Fon MT-F
Beitrag von: eddtima am 11 April 2013, 22:33:11
Hallo housekeeper,

gute Idee, war mir gar nicht so bewusst, aber meine Installation lief unter user boxusr99. Bin nach diesem Thread http://www.fhemwiki.de/wiki/FritzBox:_fhem_unter_root_starten (//www.fhemwiki.de/wiki/FritzBox:_fhem_unter_root_starten) vorgegeangen und nun läuft auch bei mir der fhem-Prozess und fhem-rssfeed unter User root:

1504 root     15068 S     perl fhem.pl fhem.cfg
2590 root      1256 S     {fhem-rssfeed} /bin/ash ./fhem-rssfeed


Blöderweise kann fhem-rssfeed aber immer noch nicht unter /var/html schreiben, ich erhalte also für jeden versuchten Schreibvorgang Deines Skriptes:

./fhem-rssfeed:line 37: can't create /var/html/rss.xml: Read-only file system

Wenn ich als User root, zumindest behauptet id: uid = 0(root) gid=0(root), versuche in /var/html mittels cat 'test' > test eine Datei anzulegen, bekomme ich die gleiche Fehlermeldung.

ls -al /var/html liefert lrwxrwxrwx     1   root   root     12 Jan 1 1970 html -> /usr/www/avm also die gleichen Rechte wie bei Dir.

Wieso kann ich denn als User root nicht in dieses Verzeichnis schreiben? Gibt es da irgendeinen Schreibschutz auf der Fritzbox? Ich verstehe es nicht, muss aber auch gestehen, das meine Unix/Linux Kenntnisse ziemlich angestaubt sind ...

Unter /tmp habe ich übrigens Schreibrechte ... Aber da kann ich ja die rss.xml nicht per Newsfeed auslesen, oder? Ein symbolischer Link von /var/html/rss.xml auf /tmp/rss.xml lässt sich natürlich auch nicht anlegen.

Fällt Dir noch was ein?

Viele Grüße
Till
Titel: Aw: RSS als Text auf FRITZ!Fon MT-F
Beitrag von: housekeeper am 12 April 2013, 09:16:55
Zitat von: eddtima schrieb am Do, 11 April 2013 22:33Fällt Dir noch was ein?


Zum Vergleich: Meine Fritz!Box ist 7390 AVM branded, Fritz!OS ist FRITZ!OS 05.51-24828 BETA

# cat jason_boxinfo.xml

<j:BoxInfo xmlns:j="http://jason.avm.de/updatecheck/">
<j:Name>FRITZ!Box Fon WLAN 7390</j:Name>
<j:HW>156</j:HW>
<j:Version>84.05.51-24828</j:Version>
<j:Revision>24828</j:Revision>
<j:Serial>MeineSeriennummer</j:Serial>
<j:OEM>avm</j:OEM>
<j:Lang>de</j:Lang>
<j:Annex>B</j:Annex>
<j:Lab>BETA</j:Lab>
<j:Country>049</j:Country></j:BoxInfo>


Ich habe aber noch ein zweites Teil von 1&1:

# cat jason_boxinfo.xml

<j:BoxInfo xmlns:j="http://jason.avm.de/updatecheck/">
<j:Name>FRITZ!Box Fon WLAN 7390 (UI)</j:Name>
<j:HW>156</j:HW>
<j:Version>84.05.51-24828</j:Version>
<j:Revision>24828</j:Revision>
<j:Serial>MeineSeriennummer</j:Serial>
<j:OEM>1und1</j:OEM>
<j:Lang>de</j:Lang>
<j:Annex>B</j:Annex>
<j:Lab>BETA</j:Lab>
<j:Country>049</j:Country>
<j:Flag>crashreport</j:Flag></j:BoxInfo>#



Das verhält sich so, wie von Dir beschrieben.

Dazu fallen mir drei Lösungsansätze ein:

Entweder mit Hilfe von Freetz das "Branding" entfernen (und möglicherweise noch andere Sachen)

Von www.freetz.org mit

svn co http://svn.freetz.org/trunk freetz-trunk

Freetz Compiler auf einem Linux Rechner installieren, dann

cd freetz-trunk
make menuconfig


Oder die RSS Datei woanders ablegen, die muß ja nur von Deinem Client aus erreichbar sein. Da RSS Clients nur in Abständen die Information abholen, reicht eine statische HTML Datei die bei Änderungen neu angelegt wird.

Alternativ die Spezialisten auf http://www.ip-phone-forum.de/ fragen, ob es eine Möglichkeit gibt, diese Sperre zu umgehen, ohne die Fritz!Box komplett umzukrempeln.


Titel: Aw: RSS als Text auf FRITZ!Fon MT-F
Beitrag von: Carsten am 12 April 2013, 10:01:21
Unqualifizierte Zwischenfrage von mir:

Bevor man die ganze Fritzbox umkrempelt um Zugriff auf den internen Webserver zu erhalten, kann man das XML nicht einfach über den FHEM-Server verteilen? Darauf sollte man ja Zugriff haben.

Es gibt sogar ein fertiges RSS-Modul. Das habe ich aber noch nie benutzt und weiß nicht, ob es unter der FB und für das Fritz!Fon überhaupt funktioniert.
Titel: Aw: RSS als Text auf FRITZ!Fon MT-F
Beitrag von: housekeeper am 12 April 2013, 10:46:06
Zitat von: Carsten schrieb am Fr, 12 April 2013 10:01Bevor man die ganze Fritzbox umkrempelt um Zugriff auf den internen Webserver zu erhalten, kann man das XML nicht einfach über den FHEM-Server verteilen? Darauf sollte man ja Zugriff haben.

Versuch mal

http://192.168.178.1:8083/fhem/docs/rss-feed.xml

das sollte auch gehen.


Titel: RSS als Text auf FRITZ!Fon MT-F
Beitrag von: eddtima am 12 April 2013, 20:39:12
Hallo Housekeeper, Carsten,

ich bin begeistert und sehe Licht am Ende des Tunnels! Wie von Euch vorgeschlagen, schreibe ich die rss.xml jetzt in /var/InternerSpeicher/fhem/docs/rss.xml und die Datei wird auch tatsächlich ohne Murren angelegt. Zur Kontrolle: Ein Aufruf im Browser von http://192.168.1.1:8083/fhem/docs/rss.xml (//192.168.1.1:8083/fhem/docs/rss.xml) liefert einen fehlerlosen FHEM-RSS-Feed mit allen Aktorzuständen etc!

In der Fritzbox 7390 unter DECT > RSS-Nachrichten habe ich den RSS Feed angelegt und verweise auf die Internetadresse: http://192.168.1.1:8083/fhem/docs/rss.xmlWeitere RSS-Feeds, wie zB. http://www.wetter.com/wetter_rss/wetter.xml (//www.wetter.com/wetter_rss/wetter.xml) werden korrekt ausgegeben.

Aber die Darstellung auf dem MT-F gelingt nicht: Der Aufruf im MT-F von Menue > Internetdienste > RSS-Nachrichten > FHEM führt zur Ausgabe: "Keine RSS-Nachrichten vorhanden"

Was kann das sein?
Titel: Aw: RSS als Text auf FRITZ!Fon MT-F
Beitrag von: housekeeper am 13 April 2013, 10:09:32
Zitat von: eddtima schrieb am Fr, 12 April 2013 20:39Was kann das sein?

Das liegt vermutlich daran, daß der Fritz! Box RSS-Client relativ simpel ist, einfach mal die RSS-Feeds im Quelltext anschauen und die Gestaltung von denen übernehmen, die korrekt angezeigt werden. Es gibt übrigens jede Menge Webseiten, die sich mit Aufbau und Gestaltung von RSS-Feeds beschäftigen. GOOGLE ist Dein Freund!
Titel: Aw: RSS als Text auf FRITZ!Fon MT-F
Beitrag von: housekeeper am 14 April 2013, 12:46:46
Möglicherweise liegt es auch daran, daß der Fritz!Box RSS-Client die Portangabe ( 8083 anstelle von 80 ) nicht mag. Auf dem Telefon wird zwar der Feed angezeigt, aber wenn man den aufruft, sagt das Telefon: "Keine RSS-Nachrichten vorhanden."

Ich habe zum Testen einfach mit wget eine reale RSS-Seite kopiert, wenn die im Internet funktioniert, muß sie auch von der Fritz!Box korrekt gelesen werden.

Auf der 1und1 Fritz!Box habe ich jetzt mal folgendes probiert:

Das komplette Verzeichnis /usr/www/1und1 nach /var/InternerSpeicher kopiert.

cp -R /usr/www/1und1 /var/InternerSpeicher/

Zur Sicherheit nochmals schreibbar gesetzt

chmod -R 777 /var/InternerSpeicher/1und1

Das Link /var/html gelöscht

rm /var/html

Das Link mit neuem Ziel wieder erstellt

ln -s /var/InternerSpeicher/1und1/ /var/html

In das Verzeichnis gewechselt

cd /var/html

Mit wget eine live RSS-Datei hineinkopiert

wget http://www.wetter24.de/rss_full.xml

In der Fritz!Box 1 den FEED angelegt, Fritz!Box 2 hat IP 192.168.178.65

http://192.168.178.65/rss_full.xml

Und schon piept mein Fritz!Fon und zeigt mir den Feed an.

Das ist zwar ein wenig "von hinten durch die Brust ins Auge" funktioniert aber und kann verwendet werden bis "DIE" Lösung gefunden ist. Kaputt machen kann man auch nichts, die Änderungen sind nach dem Neustart wieder weg. Trotzdem: Ich übernehme keine Verantwortung oder Haftung für Schäden die Ihr Eurer Fritz!Box zufügt. Bitte _vor_ dem Experimentieren sicherstellen, daß Ihr Eure Daten gesichert habt, und wißt, wie man eine Fritz!Box in den Fabrik-Zustand zurücksetzt.






Titel: Aw: RSS als Text auf FRITZ!Fon MT-F
Beitrag von: mathyou am 16 April 2013, 03:33:48
Hallo,
ich habe mich auch mal in Eueren Tread eingearbeitet, aber so fit scheine ich noch nicht zu sein... wo muß ich die obere Befehlsliste einkopieren und wie starte ich dann die RSS Funktion.

Ich habe jetzt die Befehlsliste umgearbeitet und alle Befehle in /var/InternerSpeicher/fhem/docs/rss.xml ergänzt. Dann habe ich die Befehlsliste in die fhem Browser-Seite einkopiert und unter fhem.rss-feed gespeichert, so ist sie nun unter \\192.168.178.1\fritz.nas\fhem\FHEM zu finden...

Und hier werde ich wohl was falsch verstanden haben... könntet Ihr mir eine kleine step bei step Hilfe geben wie ich die Befehlsliste korrekt ein kopiere, dann einbinde und starte ?
Das wäre supper :-) , vielen Dank, Gruß mathyou.
Titel: Aw: RSS als Text auf FRITZ!Fon MT-F
Beitrag von: housekeeper am 21 April 2013, 13:26:08
Also nach neuesten Erkenntnissen über meine Fritz!Boxen liegt es nicht am "Branding", daß der integrierte Webserver nicht zu nutzen ist, sondern daran, daß die Dateien tatsächlich im Nur-Lese-Speicher angelegt sind.

Auf einer Fritz!Box habe ich das Telefonsparbuch (Harald Becker / www.Telefon-Sparbuch.de (//www.telefonsparbuch.de)) installiert, das nutzt den integrierten Webserver mit einem ähnlichen Trick wie von mir beschrieben.

Also habe ich das Shell Skript jetzt noch mal ergänzt, so sollte es für alle (mindesten 7390) funktionieren.


#!/bin/ash

# Irgendwohin kopieren, wo Du Skripte aufbewahrst, vielleicht "/var/InternerSpeicher/fhem/fhem-rssfeed" oder
# "/var/InternerSpeicher/fhem/FHEM/fhem-rssfeed". Aufpassen, daß es im UNIX Format bleibt (nur LF, kein CR)
# sonst behauptet Linux beim Aufruf, die Datei gäbe es nicht. Mit chmod +x fhem-rssfeed ausführbar machen,
# und anschließend mit ./fhem-rssfeed & starten. Bei Bedarf anhalten mit "kill $(pidof fhem-rssfeed)"

webdir=/usr/www/$(ls -l /var/html | cut -d / -f 6)

if [ ! $(echo 2>/dev/null "" > $webdir/rss.xml) ];

then
tar cf /var/www.tar $webdir
mount -t tmpfs tmpfs $webdir
tar xf /var/www.tar -C /
rm /var/www.tar
echo -n > /var/html/rss.xml
fi
                                               
while true; do

echo -e "<?xml version=\"1.0\" encoding=\"utf-8\"?>" > /var/html/rss.xml
echo -e "<rss version=\"2.0\">" >> /var/html/rss.xml
echo -e "<channel>" >> /var/html/rss.xml
echo -e "<title>FHEM Geraete Status</title>" >> /var/html/rss.xml
echo -e "<link>http://192.168.178.1:8083/fhem?cmd=list+*+state</link>" >> /var/html/rss.xml
echo -e "<description>Zeigt in Intervallen den Status angeschlossener Geraete an</description>" >> /var/html/rss.xml
echo -e "<language>de-de</language>" >> /var/html/rss.xml
echo -e "<copyright>h.keeper(h.keeper@ymail.com)</copyright>" >> /var/html/rss.xml
echo -e "<pubDate>`date +%a", "%d" "%b" "%Y" "%H:%M:%S`</pubDate>" >> /var/html/rss.xml
echo -e "<image>" >> /var/html/rss.xml
echo -e "<url>http://fhem.de/www/images/default/fhemicon.png</url>" >> /var/html/rss.xml
echo -e "<title>FHEM Hausautomatisierung</title>" >> /var/html/rss.xml
echo -e "<link>http://www.fhem.de</link>" >> /var/html/rss.xml
echo -e "</image>" >> /var/html/rss.xml
echo -e "<item>" >> /var/html/rss.xml
echo -e "<title>Statusbericht von `date +%a", "%d" "%b" "%Y" "%H:%M:%S`</title>" >> /var/html/rss.xml
echo -e "<description>`echo "list .* state" | socat - TCP:127.0.0.1:7072`</description>" >> /var/html/rss.xml
echo -e "<link>http://192.168.178.1:8083/fhem?cmd=list+*+state</link>" >> /var/html/rss.xml
echo -e "<author>h. keeper (h.keeper@ymail.com)</author>" >> /var/html/rss.xml
echo -e "<guid>http://192.168.178.1:8083/fhem</guid>" >> /var/html/rss.xml
echo -e "<pubDate>`date +%a", "%d" "%b" "%Y" "%H:%M:%S`</pubDate>" >> /var/html/rss.xml
echo -e "</item>" >> /var/html/rss.xml
echo -e "</channel>" >> /var/html/rss.xml
echo -e "</rss>" >> /var/html/rss.xml

sleep 120

done