Aktuelles TV-Programm in FHEM

Begonnen von Kuzl, 20 Oktober 2014, 20:41:43

Vorheriges Thema - Nächstes Thema

MartinaM

Hallo HomeAuto_User,

vielen Dank für Deine Tipps.

Mein Problem ist die Umsetzung in Perl, da ich mich damit überhaupt nicht auskenne. Ich konnte das Ganze nur soweit durchschauen, um herauszufinden, warum Sendungen angezeigt werden, die ich dort nicht erwarten würde.

MfG


mumpitzstuff

Muss ich mir ansehen. Ist mir bisher nicht aufgefallen, das die Zeiten an der Stelle unterschiedlich sind. Eigentlich hatte ich da was im Code vorgesehen, aber das hatte die Zeit bei +000 um eine Stunde verschoben, was irgendwie auch falsch war. Deshalb hatte ich den Teil erst mal auskommentiert. Ich kann's aber wieder rein nehmen und eventuell nur für +000 eine Sonderbehandlung machen.

mumpitzstuff

#1052
Ich habe mir das jetzt mal angesehen und grundsätzlich ist der Code vorhanden, der die Umrechnung zumindest in meinem Beispiel auch ordentlich durchführt. Ich hatte diesen Teil aber auskommentiert, da ich damit irgendwie Probleme hatte und die Zeiten dadurch verschoben waren. Jetzt bin ich etwas unschlüssig was ich jetzt machen soll. Das was von dem Perl Code generiert wird ist:

20200503133000 +0000
1588512600
2020-05-03 15:30:00

20200430094000 +0200
1588232400
2020-04-30 09:40:00


Man kann hier sehen, das +0200 die Zeiten nicht verändert, +0000 aber 2 Stunden dazu rechnet (13:30 -> 15:30).

Um das im Perl wieder zu aktivieren, kannst du einfach in der Funktion sub xmltv2epoch($) die Gartenzäune (#) entfernen, dann ist der Code für die Umrechnung wieder aktiv.
Kannst du mir dann bitte berichten, ob du damit bessere Ergebnisse erzielst? Ich hatte wie gesagt damit dann verschobene Anfangszeiten.

MartinaM

Hallo mumpitzstuff,

die Darstellung der Zeiten sieht nach dem Einkommentieren jetzt richtig aus.

Ich vermute, was Dich dazu gebracht hatte, es auszukommentieren war, dass nicht nur die reine Darstellung der Zeit nicht passt.

Eine Sendung, die in der XML mit 20200503133000 +0000 (13:30 UTC +0 ?) dargestellt wird, wird um 20200503153000 +0200 (15:30 UTC +2 = MESZ) gesendet. Wenn jetzt nur die Darstellung angepasst ist, wird der Beginn korrekt mit 15:30 dargestellt.

Für die Entscheidung, ob die Sendung als aktuelle Sendung in den Dummy geschrieben wird, wird nur die Zeit und nicht die Zeitzone berücksichtigt.

D.h. eine Sendung mit xxxxxxxx133000 +0000 (Ausstrahlung um 15:30) wird als zur gleichen Zeit beginnend wie eine Sendung dargestellt, die um xxxxxxxx133000 +0200 (Ausstrahlung um 13:30) beginnt.

Ich weiß nicht, ob es möglich/sinnvoll wäre, die Zeiten in der XML nach dem Download anzupassen oder ob das Skript, dass den Dummy befüllt das (besser) auffangen kann.

So oder so finde ich Deine Umsetzung großartig. Vielen Dank dafür. Ich habe mir mit den Readings des Dummys in FTUI einen EPG schaffen können, der genauso ist, wie es mir gefällt (Wen es interessiert: siehe Anhang. Tippen auf Icons wechselt zu den Sendern. Allerdings viel manuelle Arbeit.)



mumpitzstuff

Hmm ich glaube langsam geht mir ein Licht auf. In den Readings tauchen die richtigen Daten auf, denn hier rechne ich das alles richtig um. Deshalb passt dann auch die Anzeige zu den Readings. Aber die Erkennung wann eine Sendung beendet ist und wann nicht, ist anscheinend falsch.

Hier vergleiche ich die localtime (also mit Zeitzone einberechnet) mit der stop Zeit der Sendungen, berechne hier aber nicht die Zeitzone mit ein (wollte hier ursprünglich Laufzeit optimieren). Letztendlich bedeutet das dann aber, das ich teilweise eine Sendung rauswerfe, da hier z.b. 13:00 Uhr drin steht, die aufgrund der Zeitzone aber erst um 15 Uhr wirklich beendet ist. Dadurch verschieben sich dann die Sendungen in den Readings und die Ausgabe ist dann zwangsläufig ebenfalls verschoben. Das passiert anscheinend auch nur bei einigen Sendern und nicht bei allen.

Ich versuche das heute Abend noch zu berichtigen. Sollte nicht so schwer sein, nachdem ich jetzt ungefähr weiss, wo ich hinlangen muss.

mumpitzstuff

#1055
Könntest du bitte das angehängte Script bei dir verwenden und mir sagen, ob jetzt alles funktioniert? Falls du eine Version vor 5.8 von Perl bei dir laufen hast, kannst du zusätzlich auch noch Time::Piece installieren. Ab Perl 5.8 ist das im Core integriert und muss nicht mehr separat installiert werden. Das ist aber kein Muss, das Script ist mit dem Modul aber etwas schneller. Ansonsten wird einfach ein anderer Code verwendet, der etwas langsamer ist.

sudo apt install libtime-piece-perl

PS: Falls du etwas am Channelfilter im Script verändert hast, dann vergiss nicht die Änderung zu übertragen!

MartinaM

Vielen Dank für die schnelle Anpassung des Scripts.

Leider passiert mit dem angehängten Script gar nichts. Ich bekomme auch keine Fehlermeldung o. ä. angezeigt. Da ich bereit Perl 5.20 installiert habe, habe ich das von Dir für Perl < 5.8 empfohlene Time::Piece nicht installiert.

Die Rechte der neuen tv.pl habe ich, wie von Dir im Wiki beschrieben gesetzt. Ich habe das Update über ein execNow im at angestoßen und auch über die Kommandozeile. Einen erneuten Download konnte ich nicht anstoßen, weil das Script die Prozedur downloadMerge nicht mehr enthält. Die Prozedur tvDownload hat keine Aktion ausgeführt.

Mir ist aufgefallen, dass das angehängte Script deutlich kleiner ist, als das Script, dass ich aktuell verwende (7477 zu 11500). Wobei meine aktuelle Version deutlich mehr Sender im Channelfilter hat und ich drei Dateien herunterladen und mergen lasse.

mumpitzstuff

Ups das war irgendwas ganz altes. Ich bitte um Entschuldigung.

MartinaM

Perfekt! Vielen Dank. Jetzt werden auch bei den Sendern (z. B. ARD, ZDF, SyFy) die aktuell ausgestrahlten Sendungen angezeigt und auch mit der richtigen Uhrzeit :D

mumpitzstuff

#1059
Ich habe mich noch mal ran gesetzt und jetzt die Performance massiv optimiert. Beim Download können jetzt alle nicht verwendeten Sender einfach aus der xml Datei entfernt werden. In meinem Fall wird aus der ehemals 20MB großen Datei eine rund 4MB große Datei. Das kostet zwar etwas mehr Laufzeit beim Download (passiert nur 1x alle 3 Tage), spart aber enorm Laufzeit beim Parsen alle 15min.

Könnte das bitte noch mal jemand testen und mir sagen, ob bei ihm alles reibungslos funktioniert? Das Script muss lediglich ersetzt werden, alles andere passiert intern. Umschalten kann man das Verhalten mit der Variable:

my $filterChannels = 1;

Zu beachten ist dabei, das der Effekt erst nach einem Download zu spüren ist. Wenn man das AT aus dem Wiki verwendet, dann passiert das nur alle 3 Tage 1x. Alternativ löst man es über die Kommandozeile aus, dann steht die geänderte Datei sofort zur Verfügung:

{fhem("\"perl /opt/fhem/tv/tv.pl dmy_TV downloadMerge\"")}

PS: Ganz vergessen die Datei anzuhängen...

MartinaM

Der Download und die Verarbeitung dauert auf meinem Raspberry Pi im laufenden Betrieb etwas über 1 Minute. Für FHEM bleibt immer noch mehr als genug Kapazität übrig. Da ich Basic, Common und SportMovies herunterladen und mergen lasse ändert sich die Größe der XML von ca. 24 MB auf ca 7,5 MB.

Das Aktualisieren der Readings scheint mir deutlich schneller zu erfolgen.

Ich würde sagen, dass die Änderungen ein voller Erfolg sind. Danke!.

mumpitzstuff

#1061
Ich habe jetzt das Script noch einmal überarbeitet und die letzten Optimierungen rausgeholt, die mir noch eingefallen sind. Könnte sich das bitte jemand ansehen, ob es auch bei ihm funktioniert?

Folgende Änderungen habe ich vorgenommen:

1.) Das Filtern der XML Datei wurde noch einmal überarbeitet und sollte jetzt wesentlich schneller gehen. Die 1 Minute aus einem vorhergehenden Post sollte damit der Vergangenheit angehören, auch wenn der Vorgang selbst natürlich immer noch Zeit in Anspruch nehmen wird. Die Regular Expression für den Senderfilter wurde ebenfalls überarbeitet.

2.) Das Parsen nach geänderten Sendungen wurde beschleunigt, falls die Senderliste bereits gefiltert ist. Hier war eine aufwendige Regular Expression überflüssig.

3.) Wenn die Option $updateBasedOnStarttimes eingeschaltet ist, dann merkt sich das Script einige Zeiten in einer separaten Datei und führt das Update der Daten in FHEM nur noch für Sender durch, bei denen das Update wirklich notwendig ist. Dadurch wird das Update enorm schnell bzw. ist kaum messbar, falls gar kein Update notwendig ist. Die separate Datei führt allerdings dazu, das in meinem Fall 631 Byte bei allen Updates geschrieben werden, bei denen wenigstens ein Sender geupdatet werden musste.

3. wirkt sich nur aus, wenn man als Mode in den AT Befehlen "next" und "prime" verwendet, nicht jedoch, wenn man das Script mit "parse" verwendet.

MartinaM

Bin leider jetzt erst dazu gekommen, das neue Skript zu testen.

Download und Merge ist jetzt auch bei mir deutlichst schneller. Unter 10 Sekunden.

Ob das Update der Sendungen durch das at schneller ist, kann ich nicht prüfen. Gefühlt geht es schneller. Ich konnte zumindest nachvollziehen, dass Sender ausgelassen wurden. Ob das konsequent geschah habe ich mir nicht angeschaut. Das neue Skript läuft auf jeden Fall noch besser.


mumpitzstuff

Ich habe das gesamte Script + at + readingsgroup + myutils in ein einziges DOIF gegossen. Wenn der Telnet Port 7072 ohne Passwort eingerichtet ist und XML::Bare installiert ist, dann läuft alles in wenigen Sekunden.

https://forum.fhem.de/index.php/topic,112081.0.html

en-trust

Ich habe Variante 2 aus dem wiki genommen und die tv.pl erstellt bzw. die letzte hier genommen. Aber mit  perl /opt/fhem/tv/tv.pl dmy_TV downloadMerge erhalte ich

Can't open file No such file or directory at /opt/fhem/tv/tv.pl line 282.

woran liegt das ?