Hallo,
ich habe mir auf Basis der ct-vdr2-Distribution einen rein analogen VDR (mit PVR-350 und EPIA-M1000) zusammengebaut. Dieser läuft mittlerweile auch recht stabil und mit guter Qualität.
Da im analogen TV jedoch keine EPG-Daten ausgestrahlt werden benutze ich das plug-in tvmovie2vdr um die EPG-Daten aus dem Internet zu laden. Das funktioniert auch recht gut.
Das Problem ist allerdings, dass meine mit tvmovie2vdr geladenen EPG-Daten nach einem Neustart des VDR wieder futsch sind. Nach jedem Neustart müssen sie also neu aus dem Internet geladen werden.
Hab deshalb mit großem Interesse den Thread gelesen in dem beschrieben wird, wie man auch bei analogen TV Karten die EPG-Daten über zwei Skripte (savepg.pl und putepg.pl) speichern kann. Hab die Skripte auch gleich bei mir ausprobiert.
Das Skript savepg.pl scheint auch zu funktionieren. Zumindest existiert nach Ausführung von savepg.pl eine epg.data im Verzeichnis /video/. Die Datei scheint auch EPG-Daten zu enthalten. Sieht soweit also alles ganz gut aus.
Allerdings habe ich Probleme mit dem Skript putepg.pl. Es läuft ohne Fehlermeldung durch und auch im Logfile sieht alles OK aus.
Aber im OSD werden nach der Ausführung des Skriptes weiterhin keine EPG-Daten angezeigt. Auch ein Aufruf von svdrpsend.pl -d 127.0.0.1 LSTE liefert als Meldung nur "Can't get EPG data"
Was könnte ich noch falsch gemacht haben? Und bei wem funktioniert dieses Skript?
Anbei nochmal das Skript putepg.pl welches ich verwende:
#!/usr/bin/perl
# warten bis der VDR hochgefahren ist
sleep (20);
use IO::Socket;
use Getopt::Std;
use Date::Manip;
use HTML::Entities;
use bytes; # no unicode
push (@INC, "/etc/vdr/tvmovie2vdr");
require ("config.pl");
### require ("channels.pl");
push (@INC, "/usr/share/vdr-addon-tvmovie2vdr/inc");
require ("helperfunc.pl");
$verz = "/var/log";
$epg = "/video";
sub open_logging
{
open (LOGGING, ">>$verz/putepg.log");
}
sub close_logging
{
close LOGGING;
}
# Debuglevel -> 1=kein Debug / 6=alles
sub printlog
{
my $debuglevel = 6;
my ($text,$dbl) = @_;
my $date = localtime();
&open_logging;
printf LOGGING "$date: $text" if ($debuglevel > $dbl);
&close_logging;
}
printlog "PUTEPG: EPG-Daten in den Vdr eintragen\n",1;
our ($sim,$verbose) = 0;
$verbose = 1 if $opt_v;
$sim = 1 if $opt_s;
$Dest = $opt_d || "localhost";
$Port = $opt_p || 2001;
$Timeout = $opt_t || 300; # max. seconds to wait for response
if ($cleanupoldfiles)
{
print "cleanup old files ..\n";
cleanup();
}
$SIG{'INT'} = \&SIGhandler;
our $SVDRP = SVDRP->new($Dest,$Port,$verbose,$sim);
our $EXIT = false;
if ($clearEPG eq 1)
{
print "clearing EPG\n";
my($result) = $SVDRP->SendCMD("clre");
die "Fehler beim Löschen EPG-Daten: $result" if ($sim == 0 && !$result =~ /EPG data cleared/);
}
# epg.tmp einlesen
&Lesepg;
foreach $epgzeile (@epgdatei)
{
chomp ($epgzeile);
if ($epgzeile =~ /\AC C-\d-\d\d\d-\d\d/)
{
$sender = $';
$epgzeile = substr($epgzeile,0,12);
printlog "PUTEPG: EPG-Zeile für Sender $sender ist -> $epgzeile\n",4;
my($result) = $SVDRP->SendCMD("PUTE");
printlog "PUTEPG: PUTE gesendet Result=$result \n",1;
$SVDRP->command("$epgzeile");
printlog "PUTEPG: EPG-Zeile gesendet-> $epgzeile\n",4;
}
if ($epgzeile =~ /\AC C-\d-\d\d-\d\d/)
{
$sender = $';
$epgzeile = substr($epgzeile,0,11);
printlog "PUTEPG: EPG-Zeile für Sender $sender ist -> $epgzeile\n",4;
my($result) = $SVDRP->SendCMD("PUTE");
printlog "PUTEPG: PUTE gesendet Result=$result \n",1;
$SVDRP->command("$epgzeile");
printlog "PUTEPG: EPG-Zeile gesendet-> $epgzeile\n",4;
}
if ($epgzeile =~ /\AE /)
{
$SVDRP->command("$epgzeile");
printlog "PUTEPG: EPG-Zeile gesendet-> $epgzeile\n",4;
}
if ($epgzeile =~ /\AT /)
{
$SVDRP->command("$epgzeile");
printlog "PUTEPG: EPG-Zeile gesendet-> $epgzeile\n",4;
}
if ($epgzeile =~ /\AS /)
{
$SVDRP->command("$epgzeile");
printlog "PUTEPG: EPG-Zeile gesendet-> $epgzeile\n",4;
}
if ($epgzeile =~ /\AD /)
{
$SVDRP->command("$epgzeile");
printlog "PUTEPG: EPG-Zeile gesendet-> $epgzeile\n",4;
}
if ($epgzeile =~ /\Ac\z/)
{
$SVDRP->command("$epgzeile");
printlog "PUTEPG: EPG-Zeile gesendet-> $epgzeile\n",4;
my($result) = $SVDRP->SendCMD(".");
printlog "PUTEPG: . gesendet!! Result=$result\n",1;
printlog "PUTEPG: Kanal abgeschlossen!!!\n",1;
}
if ($epgzeile =~ /\Ae\z/)
{
$SVDRP->command("$epgzeile");
printlog "PUTEPG: EPG-Zeile gesendet-> $epgzeile\n",4;
}
}
my($result) = $SVDRP->SendCMD("QUIT");
printlog "PUTEPG: QUIT gesendet!! Result=$result\n",1;
$SVDRP->close;
printlog "PUTEPG: fertig!!!\n",1;
exit;
sub Error
{
print STDERR "Fehler: @_\n";
close(SOCK);
exit 0;
}
sub Lesepg
{
open (EINGABE, "<$epg/epg.data");
@epgdatei = <EINGABE>;
close (EINGABE);
}
Alles anzeigen
Für Hinweise wäre ich sehr dankbar!
CU
Anywhere