FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: Mark am 05 Januar 2013, 09:46:33

Titel: RSS Feed Beispiel
Beitrag von: Mark am 05 Januar 2013, 09:46:33
Hallo zusammen,

wie folgt erzeuge ich einen einfachen RSS Feed.

Gruß Mark

########################################
# RSS Feed erzeugen Mark: 04.01.2013
# Passendes notify Beispiel
# define rss.at at +*00:05:10 { rss() }
# Datei 99_rss.pm
#
########################################
package main;

use strict;
use warnings;

########################################
sub
rss_Initialize($$)
{
  my ($hash) = @_;
}
sub rss()
{
my ($tfa,$hzg,$tk,$ts,$tankinhalt);
$tfa = fhem "list TF_Aussen STATE";
$hzg = ReadingsVal("Heizung","state","0");
$tk = ReadingsVal("Tk","state","0");
$ts = ReadingsVal("Ts","state","0");
$tankinhalt = ReadingsVal("Tankinhalt","state","0");
my $outfile = 'c:\\xampp\\meinrss.xml';
open (FILE, "> $outfile") || die "problem opening $outfile\n";
print FILE "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n";
print FILE "<rss version=\"2.0\">\n\n";
print FILE "  <channel>\n";
print FILE "    <title>FHEM RSS</title>\n\n";
print FILE "    <item>\n";
print FILE "      <title>$tfa</title>\n";
print FILE "<guid>Link guid</guid>\n";
print FILE "    </item>\n\n";
print FILE "    <item>\n";
print FILE "      <title>Heizung: $hzg TK: $tk TS: $ts</title>\n";
print FILE "    </item>\n\n";
print FILE "    <item>\n";
print FILE "      <title>Tankinhalt: $tankinhalt Liter</title>\n";
print FILE "    </item>\n\n";
print FILE "  </channel>\n\n";
print FILE "</rss>\n";
close(FILE);
}

1;
Titel: Aw: RSS Feed Beispiel
Beitrag von: stobor am 08 Januar 2013, 09:42:46
Hallo Mark,

ich nutze FHEM mit der FritzBox 7390. Wie kann ich denn da bspw. Aktoren-Zustände und Temperaturwerte als Text per RSS bereitstellen, so dass sie sich ggf. auf einem "normalen" RSS-Reader oder dem M-TF anzeigen lassen.

Danke für Hilfe.
Titel: Aw: RSS Feed Beispiel
Beitrag von: Tobias am 08 Januar 2013, 19:45:36
IMHO gibts aber ein RSS-Modul
Titel: Aw: RSS Feed Beispiel
Beitrag von: Mark am 08 Januar 2013, 20:42:23
Hi,

mit dem obigen Code wird die Datei c:\\xampp\\meinrss.xml erstellt.
c:\\xampp\\ ist mein Apache www Verzeichnis.
Mein Internetradio holt sich den Feed über http://meine_domaine.de/meinrss.xml (//meine_domaine.de/meinrss.xml)
Der Inhalt der erstellten meinrss.xml sieht wie folgt aus.

Gruß Mark

<?xml version="1.0" encoding="utf-8"?>

<rss version="2.0">

  <channel>
    <title>FHEM RSS</title>

    <item>
      <title>TF_Aussen T: 5.1  H: 92.3  Bat: ok D: 4.0
</title>
<guid>Link guid</guid>
    </item>

    <item>
      <title>Heizung: off TK: 61 TS: 10</title>
    </item>

    <item>
      <title>Tankinhalt: 1170 Liter</title>
    </item>

  </channel>

</rss>
Titel: Aw: RSS Feed Beispiel
Beitrag von: Mark am 08 Januar 2013, 20:48:56
Ja gibt es. RSS erzeugt allerdings ein Statusbild im jpg Format und keinen Text.
Funktioniert auf meinem Windows System leider nicht.
define Testrss RSS liefert Unknown module rss

Gruß Mark
Titel: Aw: RSS Feed Beispiel
Beitrag von: Mark am 08 Januar 2013, 21:58:42
Zitat von: Mark schrieb am Di, 08 Januar 2013 20:48Funktioniert auf meinem Windows System leider nicht.
Korrektur, funktioniert einwandfrei :-)
Titel: Aw: RSS Feed Beispiel
Beitrag von: oboa am 11 Januar 2013, 11:24:31
Hallo Mark,

die Variante mit dem Text RSS finde ich super. Werde ich gleich mal umsetzen.
Der nächste Schritt wird dann sein, das xml-file mit ftpput auf meinen Webspace zu senden. Sollte doch machbar sein, oder?
Titel: Aw: RSS Feed Beispiel
Beitrag von: stobor am 11 Januar 2013, 20:19:27
Hallo Mark,

ich bin bzgl. der Programmierung noch etwas unwissend, aber fhem.cfg klappt ganz gut.
Heißt das, dass ich

1. Auf der FritzBox im Verzeichnis fhem/FHEM eine Datei 99_rss.pm anlege,
2. Diese entsprechend meiner FS20-Geräte definiere
3. In der fhem.cfg einen passenden Aufruf definiere, so dass regelmäßig die xml geschrieben wird
?

Welchen Pfad muss ich denn bei meiner Konfiguration (FHEM auf FritzBox 7390 (FW 84.05.50 mit Fhem vom FHEMwiki) für $outfile angeben?
Unter welcher url wäre das rss denn dann auf der FritzBox erreichbar?

Danke für Hilfe.
Titel: Aw: RSS Feed Beispiel
Beitrag von: WiKa am 11 Januar 2013, 23:25:09
Hallo stobor,

wie immer ohne Gewähr:

ZitatUnter welcher url wäre das rss denn dann auf der FritzBox erreichbar?
Die Frage kann ich für deine FW-Version der FB nicht genau beantworten.

Sollte die FW bereits einen "ftpuser" haben, teste folgenden Aufruf im Browser:

ftp://ftpuser:ftpuser-password@IP-Adresse-Fritzbox/fhem/log/fhem-2013.log


-> funktioniert bei mir.

ZitatWelchen Pfad muss ich denn bei meiner Konfiguration... für $outfile angeben?
Schreibe testweise die Datei in das Logverzeichnis deiner FB.
Die Pfadangabe solltest Du aus "attr global logfile" deiner fhem.cfg übernemen können.

-> hier nicht getestet, da zur Zeit kein Bedarf an RSS-Feed.

VG,
WiKa

Titel: Aw: RSS Feed Beispiel
Beitrag von: stobor am 12 Januar 2013, 19:43:36
Das haut bei mir alles nicht hin.

auf der FritzBox gibt es natürlich kein C:-Laufwerk. Wie kann ich dass denn FritzBox-konform eintragen?
Ich habe bspw. mal
my $outfile = './log/meinrss.xml';
probiert. Im log-Verzeichnis kommt aber nix an.
Titel: Aw: RSS Feed Beispiel
Beitrag von: stobor am 12 Januar 2013, 19:46:04
Das haut bei mir alles nicht hin.
 
auf der FritzBox gibt es natürlich kein C:-Laufwerk. Wie kann ich dass denn FritzBox-konform eintragen?
Ich habe bspw. mal
my $outfile = './log/meinrss.xml';probiert. Im log-Verzeichnis kommt aber nix an.

Außerdem kommen im Log immer Fehler:
Use of uninitialized value $tfa in concatenation (.) or string at ./FHEM/99_rss.pm line 34.
99_rss.pm sieht derzeit so aus:

package main;
 
use strict;
 use warnings;
 
########################################
 sub
 rss_Initialize($$)
 {
 my ($hash) = @_;
 }
 sub rss()
 {
 my ($tfa,$tk);
 $tfa = fhem "list KlimaGarten STATE";
 #$hzg = ReadingsVal("Heizung","state","0");
 $tk = ReadingsVal("Flurlicht","state","0");
 #$ts = ReadingsVal("Ts","state","0");
 #$tankinhalt = ReadingsVal("Tankinhalt","state","0");
 my $outfile = './log/meinrss.xml';
 open (FILE, "> $outfile") || die "problem opening $outfile\n";
 print FILE "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n";
 print FILE "<rss version=\"2.0\">\n\n";
 print FILE " <channel>\n";
 print FILE " <title>FHEM RSS</title>\n\n";
 print FILE " <item>\n";
 print FILE " <title>$tfa</title>\n";
 print FILE "<guid>Link guid</guid>\n";
 print FILE " </item>\n\n";
 print FILE " <item>\n";
 print FILE " <title>Heizung: hzg TK: $tk TS: ts</title>\n";
 print FILE " </item>\n\n";
 print FILE " <item>\n";
 print FILE " <title>Tankinhalt: tankinhalt Liter</title>\n";
 print FILE " </item>\n\n";
 print FILE " </channel>\n\n";
 print FILE "</rss>\n";
 close(FILE);
 }
 
1;
Titel: Aw: RSS Feed Beispiel
Beitrag von: stobor am 14 Januar 2013, 16:25:06
Also ich bekomme jetzt immerhin ein XML angelegt. Allerdings kann ich das per URL im Browser nicht aufrufen. Ich komme immer wieder auf die FHEM-Startseite, egal, in welches Verzeichnis ich das xml mal testweise hinkopiere. Wo kann ich dass denn am besten hinlegen, damit es aufrufbar ist (FHEM 5.3 auf FritzBox7390)?
Titel: Aw: RSS Feed Beispiel
Beitrag von: hypnorex am 21 April 2013, 12:08:37
Ich bekomme im Log folgende Fehlermeldung:


2013.04.21 11:59:36 3: Undefined subroutine &main::rss called at (eval 5623) line 1.


In der fhem.cfg habe ich folgenden Eintrag:


define rss.at at +*00:05:10 { rss() }


Im Verzeichnis /usr/share/fhem/FHEM habe ich eine Datei 99_rss.pm angelegt:


package main;

use strict;
use warnings;

########################################
sub
rss_Initialize($$)
{
my ($hash) = @_;
}
sub rss()
{
my ($tfa,$tk);
#$hzg = ReadingsVal("Heizung","state","0");
$tfa = ReadingsVal("ku_Fenster","state","0");
$tk = ReadingsVal("wz_Licht","state","0");
my $outfile = '/var/log/fhem/meinrss.xml';
open (FILE, "> $outfile") || die "problem opening $outfile\n";
print FILE "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n";
print FILE "<rss version=\"2.0\">\n\n";
print FILE " <channel>\n";
print FILE " <title>FHEM RSS</title>\n\n";
print FILE " <item>\n";
print FILE " <title>$tfa</title>\n";
print FILE "<guid>Link guid</guid>\n";
print FILE " </item>\n\n";
print FILE " <item>\n";
print FILE " <title>Heizung: hzg TK: $tk TS: ts</title>\n";
print FILE " </item>\n\n";
print FILE " <item>\n";
print FILE " <title>Tankinhalt: tankinhalt Liter</title>\n";
print FILE " </item>\n\n";
print FILE " </channel>\n\n";
print FILE "</rss>\n";
close(FILE);
}

1;



Was fehlt hier?

EDIT:
So, ein Neustart hat geholfen. Das XML-File wird nun erzeugt.

Aber wie kann ich das XML-File im Browser öffnen? Welche Adresse? Es erscheint immer die Startseite von FHEM.