Neues Modul - 66_EPG.pm | TV Programm,Tabelle, FTUI (Anregung,Erweiterung,Tests)

Begonnen von HomeAuto_User, 03 November 2019, 12:45:08

Vorheriges Thema - Nächstes Thema

the ratman

Zitat von: Prof. Dr. Peter Henning am 27 November 2019, 19:49:52
Äh - Readings mit präfix? Sehe ich bei mir nicht in der per Update aktualisierten Version.

Es macht auch wenig Sinn, so etwas alles in Readings zu pressen. Sinnvoll wäre vielmehr, mit einem XSLT-Stylesheet die originale Datei sehr schnell und effizient nach einem Teildatum abzusuchen.

LG

pah
die readings mußt extra aktivieren als attribut und die mögen gern erst mal nach nem reload sichtbar werden - zumindest bei meinem desktop-ff.

warscheinlich blöde frage:
und mit deinem xslt-ding baust du dann readings anhand der suchkriterien? und wenn man wieder was sucht, sind die alten readings weg?
oder krieg ich dann mehrere readings mit allen suchkriterien und weiß dan anhand von was, welches ergebnis welche suche ist?
→do↑p!dnʇs↓shit←

HomeAuto_User

Hallo,

Zitat von: Prof. Dr. Peter Henning am 27 November 2019, 19:49:52
Äh - Readings mit präfix? Sehe ich bei mir nicht in der per Update aktualisierten Version.

Das Atttibute Ch_Info_to_Reading muss dafür gesetzt werden.
Es greift nur bei der Now & Prime Abfrage.

Zitat von: Prof. Dr. Peter Henning am 27 November 2019, 19:49:52
Es macht auch wenig Sinn, so etwas alles in Readings zu pressen. Sinnvoll wäre vielmehr, mit einem XSLT-Stylesheet die originale Datei sehr schnell und effizient nach einem Teildatum abzusuchen.

Mit dem XSLT kenne ich mich absolut nich aus. Das jetzige Einlesen geschiet auch nicht via XML-Parser weil bei großen Dateimengen dieser LANGSAMER war als die Datei zeilenweise einzulesen. Da ich das alles auf einem kleinen Pi teste, so war mir die Rücksicht auf Performence "gesetzt".

Ein Präfix würde ich schon als gut ansehen, nur bin ich mir im unklaren was günstig wäre.
Derzeit ist ja
x_ .... vertreten.
Dies wird immer angepass oder wenn der Sender nicht verfügbar ist, gelöscht.

Wir könnten nun überlegen ob man
1) xn_.... für Now nutzt und xp_.... für Prime.
2) ob die jeweiligen Readings nur drin bleiben wenn sie dem ausgeführten Commando Now oder Prime entsprechen um die Lsite der Readings nicht zu sehr aufblähen zu lassen
3) beim Aufruf today, ob man dann nur Now & Prime in die Readings schreibt und maximal in der Tabellenansicht das komplette Tagesprogramm zur Ansicht bringt

... ein wenig Überlegung und Meinungen sind vermutlich dazu gut um das einzuschätzen und auch vielleicht noch eine bessere Lösung zu finden.

Mir schwebt vorerst der Punkt vor, das ich ein Attribut setze, wo dann daraus gesucht wird, wann der eingetragene Titel kommt und somit man sieht, meine Sendung kommt jetzt, morgen , übermorgen ...

LG
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

Prof. Dr. Peter Henning

#122
Bei großen XML-Dateien muss man sich entscheiden, ob man seriell parst oder den Baum einliest - das wirkt sich dabei auf die Gechwindigkeit massiv aus. Allerdings würde ich gar nicht die ganze Datei einlesen, sondern das dem XSLT-Prozessor überlassen.

Siehe z.B. https://www.oreilly.com/library/view/xslt-cookbook/0596003722/ch12s16.html

Ich versuche mal ein Beispiel zu konstruieren: Mit dem Stylesheet
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="1.0">
    <xsl:variable name="time">201911282000</xsl:variable>
    <xsl:variable name="channel">phoenix.de</xsl:variable>
    <xsl:template match="/">
        <xsl:apply-templates select="//programme[@channel=$channel][contains(@start,$time)]"/>
    </xsl:template>
    <xsl:template match="programme">
    <found>
        <xsl:value-of select="title"/>
    </found>
    </xsl:template>
</xsl:stylesheet>

sucht man alles auf Phoenix, in dem innnerhalb der Startzeitangabe der string 201911282000 auftaucht. In der Transformation erhält man in extrem kurzer Zeit die Antwort
<?xml version="1.0" encoding="utf-8"?><found>Die Macht der Saudis - Der gefährliche Verbündete</found>


LG

pah

the ratman

ne dumme zwischenfrage, weils mir grad beim test-sortieren der sender aufgefallen ist:

ich fahr grad die basic von http://www.xmltvepg.nl/
das dumme für mich: da fehlen die at-sender.

wie würdets ihr das in zukunft lösen wollen?
o) 2. epg-modul aufmachen (weiß da wer die passende xml?)
o) gibts eine seite mit at und de in einer xml
o) einfach abwarten und hoffen, dass die epg mal 2 xml auf einmal macht
→do↑p!dnʇs↓shit←

HomeAuto_User

#124
Zitat von: the ratman am 28 November 2019, 19:44:37

ich fahr grad die basic von http://www.xmltvepg.nl/
das dumme für mich: da fehlen die at-sender.

wie würdets ihr das in zukunft lösen wollen?
o) 2. epg-modul aufmachen (weiß da wer die passende xml?)
o) gibts eine seite mit at und de in einer xml
o) einfach abwarten und hoffen, dass die epg mal 2 xml auf einmal macht

Teste mal http://rytecepg.epgspot.com/epg_data/rytecAT_Basic.xz ob deine Sender mit drin sind. Dafür wäre derzeit ein 2.Device notwendig.

2 xml zusammenführen steht derzeit gaaaanz weit hinten......

Edit:
@Pah
Bei deiner Variante / Vorschlag, bin da gezwungen vorher alles mit XML zu parsen oder kann ich den Stylesheet von dir auch so auf die Datei loslassen?

Sorry, ;) das ist mehr als Neuland sowas mit Stylsheet weiter zu verarbeiten.

Gesendet von iPhone mit Tapatalk Pro
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

Prof. Dr. Peter Henning

Das geht ohne manuelles Parsen.

Einfaches Programm:
use XML::LibXSLT;
use XML::LibXML;
   
my $parser = XML::LibXML->new(  );
my $xslt = XML::LibXSLT->new(  );
my $stylesheet = $xslt->parse_stylesheet_file( "found.xsl" );
my $source_doc = $parser->parse_file( "rytecDE_Basic" );
my $result = $stylesheet->transform( $source_doc );
print $stylesheet->output_string( $result );

Liefert das Ergebnis
<?xml version="1.0"?>
<found>Die Macht der Saudis - Der gefährliche Verbündete</found>

auf einem Raspberry Pi 3 innerhalb von 2,8 Sekunden. Ersetzt man den String im Stylesheet durch ein 20191128 - Ziel ist dabei die Abfrage aller Sendungen von Phoenix mit Startzeit am 28.11.2019 - dauert das genau so lang. Das Einlesen und Parsen des XML File (immerhin 10 MB) verschlingt also auch hier die meiste Zeit. Allerdings braucht man sich um keines der Details zu kümmern, sondern verarbeitet im eigenen Programm nur das wesentlich kleinere Ergebnis.

LG

pah

the ratman

ZitatTeste mal http://rytecepg.epgspot.com/epg_data/rytecAT_Basic.xz ob deine Sender mit drin sind. Dafür wäre derzeit ein 2.Device notwendig.

2 xml zusammenführen steht derzeit gaaaanz weit hinten......
jo, der geht - aber ehrlich gsagt: solange du das auf n plan hast - wann auch immer - passts schon.
bis dahin kann ich mich auch mit 2 epg's anfreunden *g* - thx für den link!
→do↑p!dnʇs↓shit←

Prof. Dr. Peter Henning

OK, noch ein paar Anmerkungen.

FHEM-Standard für ein Boolesches Attribut ist nicht yes|no, sondern 1|0

In der normalen Übersichtstabelle wäre eine Datums- und Zeitangabe sehr schön, also z.B. "Sendung vom xx.xx.2019" statt einfach nur "Sendung".

Das gesamte Modul schreit ferner nach "Internationalisierung" - ich habe das in den Modulen Alarm, Babble, Astro und YAAHM implementiert, ist ganz einfach.

LG

pah


HomeAuto_User

Servus,
ich habe mal wieder ein stück weitergemacht und an der Umsetzung gearbeitet.

Ab sofort wird in der Detailübersicht hinter dem Namen Sendung noch das Datum angezeigt.
Desweiteren habe ich die Option loadEPG_today ebenso mit der Option versehen, das die Sendungen nun in den Readings auftauchen.

Mal schauen was nun als nächstes folgt.
Bei Anmerkungen, einfach zu Wort melden :-)
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

Prof. Dr. Peter Henning

OK, sieht brauchbar aus, danke für die Mühe. Allerdings meinte ich mit "Internationalisierung" nicht, dass deutsche Überschriften mit englischen Datumsangaben gemischt werden sollen  ;)

Ich schlage vor, bei einer der nächsten Überarbeitungen statt "Sendung (vom 2019-12-02)"  ein "Sendung (Montag, 2. Dezember 2019)" zu erzeugen.

LG

pah

HomeAuto_User

Hallo,

Zitat von: Prof. Dr. Peter Henning am 02 Dezember 2019, 18:24:49
OK, sieht brauchbar aus, danke für die Mühe. Allerdings meinte ich mit "Internationalisierung" nicht, dass deutsche Überschriften mit englischen Datumsangaben gemischt werden sollen  ;)

Ich schlage vor, bei einer der nächsten Überarbeitungen statt "Sendung (vom 2019-12-02)"  ein "Sendung (Montag, 2. Dezember 2019)" zu erzeugen.

LG

pah

;) :D ja ich weiß was du meinst. Ich habe mir es angesehen wie du es machtest.
Den Part korrekte "Internalisierung" würde ich vornehmen wenn die Funktion steht. Da wäre es hilfreich wenn da jemand dann mal mit drüber schaut wo verbesserungen sind :-)
Ich schaute soeben in einem Testscript mal wegen deinem Vorschlag ...

use XML::LibXSLT;
use XML::LibXML
...


Ich müsste da die komplette Variante zum einlesen nochmal überarbeiten.

Frage: Ist es möglich, die "search.xsl" als "string zusammenzubauen? Bisher war e mir dies nicht gelungen wenn ich es als String zusammenbaue. Gedanke dahinter ist, das man nicht noch weiter eine Datei generieren muss.
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet


the ratman

ich müsste nochmal wegen orf nerven ...

bin eben erst dazu gekommen, die mir empfohlene liste abzufragen. leider kein orf, sondern nur deutsche sender anders geordnet.
hat vielleicht wer ne liste für orf?
→do↑p!dnʇs↓shit←

mahowi

Ich wollte auch gerade mal das Modul testen, allerdings schlägt die Installation via update fehl:
2019.12.03 09:33:58.413 1: EPG
2019.12.03 09:33:58.899 1: UPD FHEM/66_EPG.pm
2019.12.03 09:33:59.115 1: Got 74333 bytes for FHEM/66_EPG.pm, expected 73645
2019.12.03 09:33:59.116 1: aborting.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

the ratman

→do↑p!dnʇs↓shit←