Aktuelles Radio- und TV-Programm - RTVhelper 2.06

Begonnen von Elektrolurch, 28 April 2018, 11:53:19

Vorheriges Thema - Nächstes Thema

Elektrolurch

Eigenschaften:
- Das Modul zeigt das aktuelle, das von 20:15 und 22:00  TV Programm (von klack) an.
- Es kann um beliebige Radiosender (Tagesprogramm) erweitert werden. Dazu muss nur die uri und eine regex als Attribut hinterlegt werden
- Das Modul benötigt für das Laden der Webseiten kein HTTMOD und für die Anzeige keine readingsGroup. Damit entfällt viel Konfigurationsaufwand.
- Hinterlegt man im Attribut "receiverCMD" einen set - Befehl, so kann ein externer Receiver bei Klick auf das Sender-Logo direkt, und bei Klick auf die entsprechende Zeitangabe zur Programmzeit umgeschaltet werden, so dass man sich sein individuelles Radio- und Fernsehprogramm erstellen kann. Die programmierten Timer werden in allen Listen bei der Uhrzeit des Programms mit einem Symbol markiert. Widersprüchlicher Programmierungen werden gemeldet. Es gibt auch eine Darstellung, in der alle programmierten Timer im Überblick angezeigt werden.
- Sendungsdetails werden bei Klick auf den Sendungstitel, sofern verfügbar, in einer eigenen Dialogbox angezeigt.
- Das Modul enthält auch eine Suchfunktion, mit der man sich bestimmte Sendungen anzeigen lassen kann.
Die durch " " getrennten Stichworte werden ODER verknüpft. Die letzten 10 Suchanfragen werden in einem Dropdown - Menü angezeigt. Einzelne Eintragungen können mit dem daneben stehenden <x> - Symbol aus dem Menü gelöscht werden.

Das Modul lädt nur die Klack - Seite, wenn die Anzeigenliste angezeigt wird und der nächste Sendungszeitpunkt der hinterlegten Sender erreicht wird. Dabei sucht der Parser nur jene Kanäle, die sich zum Zeitpunkt auch geändert haben, so dass das Modul wenig Rechenzeit benötigt. Pro Kanal ca. 8 ms, der vollständige Satz aller bei mir angezeigten Sender braucht so ca. 150 ms, ohne das Laden der Webseite von Klack (erfolgt non blocking)

- Für die Anzeige von Radio- und Fernsehkanälen können beliebig viele Anzeigelisten definiert werden (z.B. öffentliche, Dritte, Private...)
   


define RTVhelper RTVhelper


Die uri und die regex für Klack sind schon vorbelegt und müssen nicht mehr gesetzt werden. Sie haben die  internen Kanalnamen TVjetzt, TV2015 und TV2200.

Setzt man noch einen room, definiert die anzuzeigende Senderliste (attr RTVhelper senderListTV...) und führt dann "set RTVhelper update" aus. Sollte das TV-Programm schon angezeigt werden.

Attribute:
disable 0,1,2,3
1 = keine Aktualisierung
3 = keine html - Ausgabe
Die Timer - Funktion zum Umschalten des ext. Receivers bleibt jedoch aktiv!

starttime
Uhrzeit im Format hh:mm ab dem das erste Lesen der Klack - Seite (für TVjetzt) durchgeführt werden soll.
Klappt man die Anzeige zu, wird das Attribut sowieso ignoriert. Öffnet man die Anzeige vor der Startzeit, werden automatisch alle internen Updates gestartet. 
Die Rundfunksender, falls hinterlegt, und TV2015 und TV2200 werden um 8:00 Uhr gelesen. Davor sind teilweise (für das Nachtprogramm) die Infos anders hinterlegt, so dass eine zeite regex verwendet werden müsste. Daher die Einschränkung auf 8:00 Uhr.


delay-time-read
Angabe in Sekunden, um die Klack-Seite verzögert zu lesen. Die Aktualisierung erfolgt dort nicht immer sekundengenau. 30 hat sich als Wert bewährt.

min-update-interval
Angabe in Minuten! Bei den Tests habe ich festgestellt, das viele TV-Sender auch "krumme" Anfangszeiten haben oder recht kurze Sendungen im Minutenbereich. Das erhöht den Traffic auf die Klack-Seite und die angezeigte Liste der Sender wird durch den Refesh recht häufig aktualisiert.  Mit dem Attribut "min-update-interval" werden alle Sender, die während des Intervals zu aktualisieren wären, erst am Ende des Intervals zusammen aktualisiert.   und

noheading 0,1
Unterdrückt die Kopfzeile mit dem Link zur Detail-Ansicht.
sihe -> readingsGroup

receiverCMD
Ein externer Receiver kann sofort oder per Timer umgeschaltet werden. Programmierung durch Anklicken der Uhrzeit der entsprechenden Sendung.

set Wohnzimmer_Receiver channel $CHANNEL

$CHANNEL $SENDER UND $INPUT sind Platzhalter für den aktuellen Kanalnamen, Sendernamen (s.u.) und für TV oder Radio.

senderList(Radio|TV)(-[A-Z,a-z]+\w)?
senderList(TV|Radio)[-<Listenname>] /<stationname>:<sender>:<channel>/....
Hiermit werden für Radio und TV Senderlisten definiert. Es erfolgt die Zuordnung zwischen
<stationnamen> = Name des Senders auf Klack
<sender> = Anzeigenname im Menu und unter den Sender-Logos
<channel> = Kanal-Name, mit dem der Receiver umgeschaltet werden soll.
Wichtig: Dieser Name wird auch für die Anzeige des Logos verwendet.

Bei Radio entfällt der erste Eintrag <stationname> natürlich.
Wird kein Listname angegeben, so heißt die Liste "Alle" (s.u.)

Beispiel:

senderListRadio /Bayern 2:Bayern_2/Deutschlandfunk:DLF/WDR 2:WDR_2/WDR 3:WDR_3/WDR 4:WDR_4/WDR 5:WDR_5
senderListTV-Vorschau1 /ZDF info:ZDF Info:ZDFinfo_HD/Das Erste:Das Erste:Das_Erste_HD/ZDF:ZDF:ZDF_HD/Bayern:Bayern FS:BR_Nord_HD/ARD ALPHA:ARD Alpha:ARD-alpha/Phoenix:Phoenix:PHOENIX_HD/ARTE:Arte:arte_HD/3sat:3Sat:3sat_HD/SWR BW:Südwest:SWR_BW_HD/N24 Doku:N24:N24/
senderListTV-Vorschau2 /WDR:WDR:WDR_HD_Dortmund/MDR:MDR:MDR_Sachsen_HD/RBB:RBB:rbb_Berlin_HD/ZDF neo:ZDF Neo:zdf_neo_HD/
senderListTV-Vorschau3 /RTL:RTL:RTL_Television/RTL 2:RTL 2:RTL2/Pro7:Pro 7:ProSieben/Kabel eins:Kabel 1:kabel_eins/VOX:VOX:VOX/Servus TV:Servus TV:ServusTV_HD_Deutschland/KiKa:Kika:KiKA_HD/Anixe HD:Annixe:ANIXE_HD/N-TV:N-TV:n-tv/DMAX:DMAX:DMAX/Sport 1:Sport 1:SPORT1/Eurosport:Eurosport:Eurosport_1_Deutschland/Pro7 MAXX:Pro 7 MAXX:ProSieben_MAXX/NITRO:RTL Nitro:RTLNITRO


Anmerkung: Mit

get RTVhelper showklacklist
[code]
wird angezeigt, welche "stationen" auf Klack mit Programminformationen vorhanden sind.

mit[code]
deleteattr TVhelper senderList</cod>
werden alle definierten Senderlisten zurückgesetzt. Hintergrund: Es kann zu Inkonsistenzen in der Namensumsetzung kommen, wenn definierte Senderlisten durch erneutes Setzen umdefiniert werden. Da hilft dann nur ein Neustart oder mit dem obigen Befehl aller Senderlisten zu löschen und neu anzulegen.

styleTimeCol(selectable)? styleTitleCol(selectable)?
style Anweisungen, die für die Zeit- und Titelspalte verwendet werden sollen. Beispiel: Wenn die Uhrzeit angeklickt werden kann, weil sie in der Zukunft liegt und das Attribut "receiverCMD" gesetzt wird, soll die Uhrzeit rot angezeigt werden. Liegen Sender-Details zum Programm vor, soll der Titel grün angezeigt werden.
[code]
styleTimeColselectable style="font-weight:bold; color:red; "
styleTitleColselectable style="font-weight:bold; color:green; "

Bei Eingabe über die Kommandozeile das maskieren von ";" durch ";;" nicht vergessen. -:)

collapse-symbol
Setzt das Symbol für das Auf- und Zuklappen der liste und seine Größe

attr RTVhelper collapse-symbol control_arrow_down control_arrow_right 16

Die obigen Werte  sind die Voreinstellungen.

regex|parser)(Radio|TV)-[A-Z,a-z]+\w*
Damit werden für Radiosender die uri und die regex gesetzt. Standardmässig wird die interne Routine "RTVhelper_Parse" verwendet. Soll eine andere Routine verwendet werden, so ist das Attribut parse... entsprechend zu setzen. Im Beispiel unten ist dies für die Webseite des Programms von Bayern2 der Fall, da hier die Reihenfolge der Felder eine andere ist (s.u.)

beispiel:

uriRadio-Bayern_2 https://www.br.de/radio/bayern2/programmkalender/programmfahne102.html
uriRadio-DLF http://www.deutschlandfunk.de/programmvorschau.281.de.html
uriRadio-WDR_2 https://www.wdr.de/programmvorschau/wdr2/uebersicht/
uriRadio-WDR_3 https://www.wdr.de/programmvorschau/wdr3/uebersicht/
uriRadio-WDR_4 https://www.wdr.de/programmvorschau/wdr4/uebersicht/
uriRadio-WDR_5 https://www.wdr.de/programmvorschau/wdr5/uebersicht/
 
regexRadio-Bayern_2 <strong>(\d+):(\d+)<\/strong>\s*([\w\W]*?)\s*<\/a>\s*<\/dt>\s*<dd>\s*([\w\W]*?)<\/dd>
regexRadio-DLF <td class="time">\s*(\d+):(\d+)[\s\w]*?<a id="\d+" name="\d+"><\/a><\/td><td class="description"><h3><a title="[\w\W]*?" href="([\w\W]*?)">([\w\W]*?)<\/a>\s*<a class="psradio" title="[\w\W]*?" href="[\w\W]*?">[\w\W]*?<\/a><\/h3>\s*([\w\W]*?)<(\/td>|div |a |p )
regexRadio-WDR_2 <span class="time">\s*(\d+)[\.:](\d+)<\/span>\s*<\/div>\s*<div class="epg_list_entry_item epg_list_entry_item_title">\s*<a class="title" href="([\w\W]*?)">\s*<strong>\s*([\w\W]*?)<\/strong>\s*([\w\W]*?)<\/div>
regexRadio-WDR_3 <span class="time">\s*(\d+)[\.:](\d+)<\/span>\s*<\/div>\s*<div class="epg_list_entry_item epg_list_entry_item_title">\s*<a class="title" href="([\w\W]*?)">\s*<strong>\s*([\w\W]*?)<\/strong>\s*([\w\W]*?)<\/div>
regexRadio-WDR_4 <span class="time">\s*(\d+)[\.:](\d+)<\/span>\s*<\/div>\s*<div class="epg_list_entry_item epg_list_entry_item_title">\s*<a class="title" href="([\w\W]*?)">\s*<strong>\s*([\w\W]*?)<\/strong>\s*([\w\W]*?)<\/div>
regexRadio-WDR_5 <span class="time">\s*(\d+)[\.:](\d+)<\/span>\s*<\/div>\s*<div class="epg_list_entry_item epg_list_entry_item_title">\s*<a class="title" href="([\w\W]*?)">\s*<strong>\s*([\w\W]*?)<\/strong>\s*([\w\W]*?)<\/div>

parserRadio-Bayern_2 RTVhelper_Parse_Bayern_2


Die regex wird beim Setzen des Attributs getestet, sollte sie fehlerhaft sein, so würde sie zur Laufzeit fhem zum Absturz bringen. Die subroutine, die mit dem parse - Attribut gesetzt wird, muss ebenfalls vorhanden sein (wird getestet).

Anmerkung (noch Baustelle): Die regex für klack setze ich schon beim define - Befehl als Vorbelegung. Sie funktioniert zur Laufzeit, aber beim Test mit eval kommt ein Syntax-Fehler. Die Ursache hierfür konnte ich noch nicht herausfinden.
Die regex sieht so aus:

regexTV-TVjetzt title="($STATION)"><img[\w\W]*?<td class="time">\s*(\d+:\d+)\s*[\w\W]*?<div class="content">\s*<a[\w\W]*?>\s*([\w\W]*?)\s*</a>\s*<br/>\s*([\w\W]*?)<br/>([\w\W]*?)<\/?(img|div)[\w\W]*?<td class="time[\w\W]*?Row">\s*(\d+:\d+)\s*<div[\w\W]*?<div class="content">\s*<a[\w\W]*?>\s*([\w\W]*?)\s*</a>\s*<br/>\s*([\w\W]*?)<br/>([\w\W]*?)<\/?(img|div)[\w\W]*?


$STATION wird natürlich zur Laufzeit durch den zu suchenden Klack-Stationsnamen ersetzt.
Hier der Auszug aus der RTVhelper_attr - Subroutine:

if($attr eq 'regex') # test it
{
my $regex = $aVal;
$regex =~s/\$STATION/station/g;
eval("{$teststring =~m/$regex/}");
if($@)
{
my $err = "attr $name: $aName $sender $@\n$regex";
Log3($name,1,$err);
return $err;
} # error
} # test regex

liefert beim Setzen des Attributs für TFjetzt (Klack):
2018.04.25 17:39:00 1: attr RTVhelper: regexTV-TVjetzt TVjetzt syntax error at (eval 1180) line 1, near "?)"

title="(station)"><img[\w\W]*?<td class="time">\s*(\d+:\d+)\s*[\w\W]*?<div class="content">\s*<a[\w\W]*?>\s*([\w\W]*?)\s*</a>\s*<br/>\s*([\w\W]*?)<br/>([\w\W]*?)<\/?(img|div)[\w\W]*?<td class="time[\w\W]*?Row">\s*(\d+:\d+)\s*<div[\w\W]*?<div class="content">\s*<a[\w\W]*?>\s*([\w\W]*?)\s*</a>\s*<br/>\s*([\w\W]*?)<br/>([\w\W]*?)<\/?(img|div)[\w\W]*?


Noch ein Schönheitsfehler, aber die regex funktioniert ja zur Laufzeit.

Hat man alle gewünschten Attribute eingegeben, so wird RTVhelper mit
set RTVhelper update

gestartet.


set RTVhelper update TVjetzt
set RTVhelper update WDR_2

aktualisiert die Programminformation für das aktuelle TV-Programm und für WDR_2.

Kopfzeile:
Mit den angezeigten Sybolen TV/Radio wird zwischen TV und Radio umgeschaltet. Mit der Uhr zwischen jetzt, 20:15 und 22:00.
Mit dem ">" am Zeilenanfang kann man die Liste deaktivieren. Es erfolgt dann kein Zugriff mehr auf die Klack-Seite, bis die Liste wieder mit dem >+ geöffnet wird. Das spart Ressourcen.

Eigene Senderseiten hinzufügen:

Dazu setzt man zuerst die uri für die Seite des Senders.
Danach:

set RTVhelper update <neuer_sender>
set RTVhelper showdata

Die geladene Seite des Senders (html - code) wird angezeigt.
Nun muss man die regex dafür entwickeln.
Dabei ist folgendes zu beachten:
Die Standard-Routine RTVhelper_Parse setzt folgende Reihenfolge der Werte voraus:

my ($hour,$minute,$ref,$title,$desc) = ($1,$2,$3,$4,$5);

ref ist etwas anklickbares, wird derzeit aber nicht weiter verwendet.
desc = Detailangaben zur Sendung.
hour und minute sind getrennt, da manche Webseiten die Uhrzeit nicht in hh:mm, sondern in hh.mm darstellen (z.B. WDR).
Man muss sich also aus dem angezeigten html-Quelltext einen typischen Sendungseingtrag herausholen und in eine regex umwandeln. Die zu suchenden Werte stehen dabei immer in "()".
Dabei ist aber auch für die regex zu beachten, dass manche Sendungen Zusatzinformationen haben, wie z.B. Knöpfe für podcast oder streaming und andere Eintragungen nicht.

Wer also nochz uri's und regex's für weitere Radio-Sender entwickelt, bitte hier veröffenlichen.

Optische Gestaltung:
Es werden folgende css-Klassen gesetzt:
Uhrzeitenspalte: timecol
   Titelspalte: titlecol
   
   Für die Tabelle mit den Bedienungssymbolen und für die Liste:
   
   my $headerheader = "<table  id=".$type . "-header ".
"' groupId=\"atEnd\" class=\"block wide $type header\">\n";

my $listheader = "<table  id=\"$type" . "-list\" " .
"' groupId=\"atEnd\" class=\"block wide $type list\">\n";

Für die Zeilen der Sendungen eines Senders wird odd und even eingefügt.
Die icons werde mit den Klassen: IconwithLabel LabelText
und die Senderlogos zusätzlich mit Logo gestaltet.
Hier ein Beispiel für eine css - Datei:


.Logo.icon {width:72px;}
.Logo svg {width:72px; height:72px; horizontal-align:center; vertical-align:middle;}
.IconwithLabel {
width:64px;
vertical-align:middle;
horizontal-align:center;
text-align: center;
margin:4px;
}

.LabelText {
font-size:12px;
text-align: center;
color:#ffffff;
}

/* Radiohelper  */
.RTVhelper.list td {
vertical-align:top; horizontal-align:center;
text-align: center;
padding:6px;
margin:2px;
}

.RTVhelper.list td.titlecol {
horizontal-align:left;
text-align: left;
word-break: break-all;
word-wrap:break-word;
}
/* Test */



Eine zusätzliche css - Datei wird für die fhemWEB z.B. mit:

attr WEB CssFiles pgm2/darkiphone.css

gesetzt. Die Datei muss nach www.pgm2 kopiert werden.

Da ich auf einen ScreenReader angewiesen bin, kann ich leider nicht beurteilen, wie das optische Ergebnis dann wirklich aussieht. Hier sind Vorschläge willkommen.
Außerdem bin ich nicht gerade der Experte für style und css. :-)
Ich füge mal meine Logos als zips hinzu. Die meisten sind SVG's. Weiß aber nicht, ob tatsächlich auch alle korrekt angezeigt werden....

Hinweis:
Die Logos stammen von wikipedia und sind SVGs. Laut fhem - Wiki werden die Größen der Logos wie oben beschrieben über eine CSS-Anweisung gesetzt.

Zusätzliche Ordner mit  Logos werden mit:

attr WEB.* iconPath $styleSheetPrefix:default:fhemSVG:openautomation:TVSVG:RadiosSVG:logos
und danach
set WEB.* rereadicons

eingebunden.

Der TVhelper ist jetzt schon seit einiger Zeit bei mir in Benutzung und läuft mit den oben gesetzten Attributen stabil. Trotzdem sind Fehler nicht ausgeschlossen.
Mit verbose 2 sieht man, ob der parser korrekt funktioniert.

updates hier immer im ersten BeEitrag.

Viel Spaß

Elektrolurch

Änderungen:
2.2: fix crash, wenn keine senderListTV definiert wurde.
- Das Symbol für die Programmierung einer Umschaltung wird nun über DoTrigger aktualisiert
- einCollapse - Symbol auch am Ende der Liste
- Die errmsg wird beim Zuklappen zurückgesetzt.
# 21: Umlaut korigiert
#21: Ausgabe von showKlacklist geändert
2.06: Sicherheitsabragen, wenn keine Stationen auf der Klackseite gefunden wurden
configDB und Windows befreite Zone!

MadMax-FHEM

Hiho!

Habe es auf dem "anderen Kanal" schon mitbekommen... :)

Häng mich mal hier dran und wenn demnächst mal Zeit ist, werde ich es auch mak testen...

Vielen Dank schon mal!

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

mumpitzstuff

#2
Ich habs versucht und es passiert nichts. Ich dachte gestern Abend das es an der Zeit liegt, aber auch jetzt passiert bei Update nichts. Ich muss es mir heute Abend noch mal genauer ansehen.
Was mir bisher aufgefallen ist:

- bitte Code Tags in eckigen Klammern verwenden
- in deinem regex musst du vielleicht einige / mit einem \ davor versehen
- eine schritt für schritt Anleitung am Anfang wäre sinnvoll und danach erst die ganzen Details
- einige Befehle wie Update sind nicht über set erreichbar, sondern nur als Kommando in der Befehlszeile
- get abc klacklist gibt es nicht, das Kommando heißt anders
- man kann das Device nicht mehr anklicken, um in die Details rein zu kommen
- in der Beschreibung steht das vor 8 nichts geladen werden kann, im Modul ist von 9 Uhr die Rede
- warum hast du nicht gleich ein richtiges Modul aufgesetzt, anstatt ein Pseudomodul über die myUtils?
- der Code des Moduls ist nicht lesbar, da sämtliche Einrückungen fehlen. Sowas würde auch dir die Pflege sehr erleichtern

Elektrolurch

Zitat:
Ich habs versucht und es passiert nichts. Ich dachte gestern Abend das es an der Zeit liegt, aber auch jetzt passiert bei Update nichts. Ich muss es mir heute Abend noch mal genauer ansehen.

Ich habe gesehen, dass das attribut
uriTV-TVjetzt http://www.klack.de/fernsehprogramm/was-laeuft-gerade/0/0/all.html
bei den Voreinstellungen im define wegkommentiert war. Ist mir nach einem Neustart aufgefallen.
Habe das mit den Voreinstellungen gefixed. Wenn man die Attribute von Hand setzt oder nach dem define einen Neustart gemacht hätte, wäre es auch gegangen. Habe die Datei aktualisiert.

Zitat:
Was mir bisher aufgefallen ist:

- bitte Code Tags in eckigen Klammern verwenden
Ok. Über den ScreenReader kann ichnicht das Symbol dafür anklicken, da ich dann wieder aus dem Textfeld bin.


- in deinem regex musst du vielleicht einige / mit einem \ davor versehen

Das glaube ich jetzt nicht, das das Modul ja läuft. Oder ändert die Eingabe über das fhem-Frontend des Attributes etwas an  den "/"? Wäre mir nicht bekannt.
Zitat:
- eine schritt für schritt Anleitung am Anfang wäre sinnvoll und danach erst die ganzen Details

Außer dem define und das Setzen des Attribute für die senderList ist ja nichts zu tun, um erst einmal eine Anzeige zu erhalten. :-)

Zitat:
- einige Befehle wie Update sind nicht über set erreichbar, sondern nur als Kommando in der Befehlszeile
Stimmt nicht. Die Liste wird dynamisch erzeugt und enthält die Liste der definierten Seiten für Radiosender, TVjetz, TV2000 und TV2015.

Zitat:
- get abc klacklist gibt es nicht, das Kommando heißt anders
Wird beim get angezeigt und heißt: "showKlacklist".
Zitat:
- in der Beschreibung steht das vor 8 nichts geladen werden kann, im Modul ist von 9 Uhr die Rede
Wenn das Attribut starttime nicht gesetzt wird, dann ist der default für das Laden der klack-Seite 9:00 Uhr. Die Radiosender werden fix um 8:00 Uhr geladen.

Zitat:
- warum hast du nicht gleich ein richtiges Modul aufgesetzt, anstatt ein Pseudomodul über die myUtils?
Es ist ein richtiges Modul, nur kann ich es dann nicht mehr im Webbrowser editieren, wenn es nicht 99_myUtiils... heißt. Man kann es ohne Anpassungen jederzeit umbenennen... :-)

Zitat:
- der Code des Moduls ist nicht lesbar, da sämtliche Einrückungen fehlen. Sowas würde auch dir die Pflege sehr erleichtern
Sorry, wenn Du auf einen ScreeReader  angewiesen bist, nutzen Dir die Einrückungen rein gar nichts. Die stören nämlich nur. Hier gibt es auch andere im Forum, die einen ScreenReader verwenden und auf die Einrückungen verzichten. Und "lesbar" ist er für mich auf alle Fälle, jeder wie er es braucht... :-O

Und dafür steht aber hinter jeder "}" Klammer auch, welcher Block da geschlossen wird. Das halte ich nämlich für guten Programmierstil, und da fehlt es in so manchen Modulen, was mir das Leben schwer macht....
 
Elektrolurch
configDB und Windows befreite Zone!

mumpitzstuff

#4
Das Attribut war bei mir bereits gesetzt. Es geht trotzdem nicht. Mein Device sieht so aus:

defmod RTVhelper RTVhelper
attr RTVhelper collapse 0
attr RTVhelper min-update-interval 15
attr RTVhelper parserTV-TV2015 RTVhelper_ParseTV
attr RTVhelper parserTV-TV2200 RTVhelper_ParseTV
attr RTVhelper parserTV-TVjetzt RTVhelper_ParseTV
attr RTVhelper room TV
attr RTVhelper senderListTV-Vorschau1 /ZDF info:ZDF Info:ZDFinfo_HD/Das Erste:Das Erste:Das_Erste_HD/ZDF:ZDF:ZDF_HD/Bayern:Bayern FS:BR_Nord_HD/ARD ALPHA:ARD Alpha:ARD-alpha/Phoenix:Phoenix:PHOENIX_HD/ARTE:Arte:arte_HD/3sat:3Sat:3sat_HD/SWR BW:Südwest:SWR_BW_HD/N24 Doku:N24:N24/
attr RTVhelper senderListTV-Vorschau2 /WDR:WDR:WDR_HD_Dortmund/MDR:MDR:MDR_Sachsen_HD/RBB:RBB:rbb_Berlin_HD/ZDF neo:ZDF Neo:zdf_neo_HD/
attr RTVhelper senderListTV-Vorschau3 /RTL:RTL:RTL_Television/RTL 2:RTL 2:RTL2/Pro7:Pro 7:ProSieben/Kabel eins:Kabel 1:kabel_eins/VOX:VOX:VOX/Servus TV:Servus TV:ServusTV_HD_Deutschland/KiKa:Kika:KiKA_HD/Anixe HD:Annixe:ANIXE_HD/N-TV:N-TV:n-tv/DMAX:DMAX:DMAX/Sport 1:Sport 1:SPORT1/Eurosport:Eurosport:Eurosport_1_Deutschland/Pro7 MAXX:Pro 7 MAXX:ProSieben_MAXX/NITRO:RTL Nitro:RTLNITRO
attr RTVhelper uriTV-TV2015 http://www.klack.de/fernsehprogramm/2015-im-tv/0/-1/free.html
attr RTVhelper uriTV-TV2200 http://www.klack.de/fernsehprogramm/2200-im-tv/0/-1/free.html
attr RTVhelper uriTV-TVjetzt http://www.klack.de/fernsehprogramm/was-laeuft-gerade/0/0/all.html

setstate RTVhelper initialized
setstate RTVhelper 2018-04-29 11:29:18 TVdisplay Vorschau3
setstate RTVhelper 2018-04-29 00:10:00 TVsender DMAX
setstate RTVhelper 2018-04-29 11:29:01 showtime Jetzt



Ist das soweit in Ordnung? Was sollte ich jetzt als nächstes aufrufen? Update?

Im log steht folgendes wenn ich ein Update versuche:

2018.04.29 21:17:31 4: RTVhelper_set RTVhelper update TVjetzt .. begin set
2018.04.29 21:17:31 1: RTVhelper_IOWrite: for TVjetzt no attributes stored (uri,regex)


Ich glaube die Regex Attribute wurden beim define nicht gesetzt ist. Schau ich mir nachher noch mal am PC an.

mumpitzstuff

Das mit dem Regex habe ich deshalb geschrieben, da du oben was von Problemen erwähnt hattest. Je nachdem was du nachher mit dem Regex machst, ist es eventuell wichtig ein backslash vor einem slash zu haben (konnte leider deinen Code nicht lesen um das zu prüfen :)).

Wenn du z.b.

if ($test =~ /$dein_regex/)

dann kann es hier Probleme geben. War aber nur so eine Idee, insbesondere weil du manche slashes explizit bereits mit einem backslash versiehst und andere nicht.

Elektrolurch

Hallo,

lösch das device und lege es mal neu an. Wie ich schrieb, habe ich die automatische Vorbelegung der Attribute für TVjetz... im define zum Teil deaktiviert. Habe es aber nun mit der V2 .01 korrigiert. Wenn ich ein neues RTVhelper - Device anlege und mit dem Attribut  die senderList definiere, geht alles automatisch. Habe es jetzt mehrmals ohne Neustart ausprobiert.
Wenn man von Hand die Attribute, wie in Beitrag #1 beschrieben, am Anfang von Hand setzt, geht es sowieso korrekt.

Elekttrolurch
configDB und Windows befreite Zone!

mumpitzstuff


mumpitzstuff

#8
Bei manchen Sendern sind 2 Sendungen von jetzt an zu sehen, bei einigen aber eine Sendung von jetzt (läuft dann grad) und dann erst wieder von 20:15 Uhr. Ist das normal?

Wenn man ein bisschen wartet ist es wieder normal. Vermutlich ist das Update noch nicht komplett durch beim ersten Aufruf der Seite.

Elektrolurch

Ist mir auch schon aufgefallen. Ich vermute, dass die Klackseite nicht immer exakt zum Sendungsanfang des jeweiligen Sender alles aktualisiert... Bei ZDFinfo habe ich das schon öfters beobachtet.
Dafür gibt es eigentlich das Attribut "delay-time-read", wenn es nicht gesetzt ist, so ist der delay 30 s.

Elektrolurch
configDB und Windows befreite Zone!

mumpitzstuff

Ich finde die Idee die Seite nur neu zu laden, wenn eine Sendung abgelaufen ist, sehr gut. Auch die Gruppierung der Sender ist super. Mich stört allerdings ein wenig, das nur 2 Sendungen zu sehen sind, das liegt allerdings in der Anzeige von Klack begründet, da dort immer nur die nächsten 2 Sendungen angezeigt werden. Außerdem ist die Sendungsbeschreibung meist ziemlich dünn.

Ideen:
Wäre es nicht vielleicht günstiger sich eine Senderliste einzulesen z.B. über (die Mobilseiten sind kleiner als die Desktop Seiten, das spart Traffic):

http://m.klack.de/sender.html

Diese kann man dann irgendwo anzeigen und der Anwender kann sich daraus verschiedene Senderlisten zusammen stellen (sie wie auch jetzt schon).

Und wenn man dann einmal am Tag z.B. 5:00 Uhr früh das gesamte Programm des Tages in einem Rutsch einliesst (für alle Sender der aktuell eingestellten Gruppe)? Also z.B. für Pro7 die folgende Seite einliesst?

http://m.klack.de/sender/pro7-79.html

Vermutlich ist der Download von 20 Seiten a 100kb besser als 50x am Tag eine 400kb Datei zu downloaden.

Um entsprechend Traffic zu sparen, könnte man sich nur den Link der Detailsseite als Reading ablegen und diese beim Klick auf eine Sendung in einem iframe laden. Dann hat man immer eine sehr detaillierte Beschreibung, die nur Traffic verursacht, wenn man sie wirklich anklickt.

Die Mobilseiten lassen sich auch vermutlich super parsen, was ich so auf den ersten Blick sehen konnte.

Elektrolurch

Zitat:
Mich stört allerdings ein wenig, das nur 2 Sendungen zu sehen sind, das liegt allerdings in der Anzeige von Klack begründet, da dort immer nur die nächsten 2 Sendungen angezeigt werden.

Na ja, mir reicht das fürs Erste. Außerdem gibt es ja auch das "Sender" - Menu, mit dem alle ab jetzt geladenen Sendungen für einen Sender angezeigt werden kann. Für Radio-Programme sind das immer alle vom ganzen Tag, für TV ist es jetz, 20:15 und 22:00 Uhr.

Zitat:
Ideen:
Wäre es nicht vielleicht günstiger sich eine Senderliste einzulesen z.B. über (die Mobilseiten sind kleiner als die Desktop Seiten, das spart Traffic):

http://m.klack.de/sender.html

Ja, das geht ja jetzt schon. Lege gem. Beitrag #1 einen Sender mit uri und regex an, der wird dann automatisch um 8:00 Uhr morgens in den Speicher geladen. Der Name für den Eintrag muss natürlich dem <channelnamen> in der senderList entsprechen.
Zitat:
Vermutlich ist der Download von 20 Seiten a 100kb besser als 50x am Tag eine 400kb Datei zu downloaden.
Stimmt.

Zitat:
Um entsprechend Traffic zu sparen, könnte man sich nur den Link der Detailsseite als Reading ablegen und diese beim Klick auf eine Sendung in einem iframe laden.

Ich hatte schon vorgesehen, dass in den Datenstrukturen beim Parsen ein Feld "ref" mit einem Link gefüllt wird. Der ist aber je nach Seite manchmal relati oder absolut, und dann müsste man sich erst die komplette URL zusammenbasteln. Außerdem habe ich mich noch nicht damit befasst, wie man von fhem aus einen iFrame öffnet. Die Detailseiten enthalten soviel zusätzlichen "Müll", den man eigentlich ja nicht sehen will, so dass man dort erst einmal wieder die eigentliche Sendungsbeschreibung "herausfischen" müsste.

Zitat:
Die Mobilseiten lassen sich auch vermutlich super parsen, was ich so auf den ersten Blick sehen konnte.

Na, dann mal los: Im Beitrag #1 steht ja, was man für eine regex beachten muss.

Elektrolurch
configDB und Windows befreite Zone!

Invers

Hi, ich wollte auch einmal probieren. Leider gelingt es mir nicht, den TVHelper zu installieren.
Ich bekomme, obwohl ich ausser der Definition noch gar nichts gemacht habe, folgende Meldungen im Log und die FHEM-Oberfläche ist dann nicht mehr erreichbar, wodurch ich dann auch nichts mehr probieren kann:


2018.05.01 09:28:12 3: RTVhelper_UpdateReadings: first run today!
2018.05.01 09:28:12 3: RTVhelper_UpdateReadings: work: TV2200 start read (IOWrite)
2018.05.01 09:28:12 3: RTVhelper_UpdateReadings: work: TVjetzt start read (IOWrite)
2018.05.01 09:28:12 1: RTVhelper_IOWrite: TV2200 just in progress
Can't use an undefined value as a HASH reference at ./FHEM/99_myUtilsRTVhelper.pm line 633.


Hast du eine Idee, was ich da vielleicht falsch mache? Die Dateien habe ich natürlich kopiert (Logos)
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Elektrolurch

Hallo invers,

gefixed. Du hast keine senderList für TV definiert, daher der crash nach 2 Minuten beim ersten Lesen der Seite. Update im Beitrag #1.
Ohne senderList wird Dir auch nichts angezeigt werden.
configDB und Windows befreite Zone!

Invers

Danke für die Hilfe, aber der Crash bleibt leider. Ich komme gar nicht dazu, irgend etwas zu definieren. Kannst du bitte noch einmal nachsehen? Falls man da nichts machen kann, mus ich mich mit dem Attribut wohl etwas beeilen. LOL.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Invers

So, hab mich jetzt beeilt und es geht. Danke.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Elektrolurch

Die Zeile, in der es schepperte, habe ich gefixed. Möglich, dass es da noch eine weitere Stelle gibt. Bitte im log nachsehen.
configDB und Windows befreite Zone!

Invers

Sorry, hab ich glatt vergessen. Läuft zwar nun, aber hier mal noch der Nachtrag für zukünftige Generationen. :-)

2018.05.01 15:51:24 3: RTVhelper: set TVdisplay Sender
2018.05.01 15:51:57 3: RTVhelper_UpdateReadings: first run today!
2018.05.01 15:51:57 3: RTVhelper_UpdateReadings: work: TV2015 start read (IOWrite)
2018.05.01 15:51:57 3: RTVhelper_UpdateReadings: work: TV2200 start read (IOWrite)
2018.05.01 15:51:57 1: RTVhelper_IOWrite: TV2015 just in progress
Can't use an undefined value as a HASH reference at ./FHEM/99_myUtilsRTVhelper.pm line 642.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

dj

Hallo Elektrolurch,
Woher kann ich den RTVhelper erhalten. Wenn ich versuche das Device anzulegen erhalte ich die Meldung:
Modul unkown. FHEM ist auf den neuesten Stand upgedatet.

Elektrolurch

configDB und Windows befreite Zone!

dj


Wzut

#21
Zitat von: Elektrolurch am 28 April 2018, 11:53:19
Da ich auf einen ScreenReader angewiesen bin, kann ich leider nicht beurteilen, wie das optische Ergebnis dann wirklich aussieht. Hier sind Vorschläge willkommen.
Ich hätte da drei Vorschläge :
a. wird bei mir ein ü nicht richtig dargestellt :
Vor 9:00 sind keine aktuellen Informationen verfügbar.
Hier einfach das ü im String durch &uuml; ersetzen

b. Die Ausgabe von showKlacklist erzeugt ein sehr breites PopUp , hier würde ich
return join(' ',@{$hash->{klacklist}}) if(exists($hash->{klacklist}));
durch
return join('<br/> ',@{$hash->{klacklist}}) if(exists($hash->{klacklist}));
ersetzen um die Sendernamen untereinander darzustellen.

c. Die abwechselnde Darstellung von hellen und dunklen Zeilen ( odd / even)
An der ersten Stelle verwendest du
my $oddeven = ($line % 2) ? 'even':'odd';
$ret .= "<tr class=\"$oddeven\">\n";

aber ein Stück weiter unten zwar wieder
my $oddeven = ($line % 2) ? 'even':'odd';
aber dann nur
$ret .= "<tr>";
Wenn du an der zweiten Stelle auch class=\"$oddeven\" benutzt sieht die Tabelle am Anfang einfach schöner aus :)

Edit : der Punkt c. ist doch etwas komplexer als ich zuerst dachte. Du gibst unterschiedliche Tabellen aus ja nachdem ob man einen einzelen Sender gewählt hat oder eine Liste. Die vorgeschlagene Änderung galt nur bei einem einzelen Sender. Ich habe mir jetzt auch mal deine SVG Logos eingebunden, das gibt noch ne Baustelle. Aber da berichte ich später von wenn ich etwas mehr Zeit zum testen hatte.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Kurt77

Hallo,
habe die Datei 99_myutilsrtvhelpel.pm ins Verzeichnis /opt/fhem/FHEM kopiert und erhalte nach dem define ein "unknown module RTVhelper.
Wie muss ich korrekt vorgehen?
Danke und Gruß,
Kurt

MadMax-FHEM

reload oder shutdown restart gemacht!?

Kurz da nur Handy...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

ChHerrm

Hallo zusammen,
ich bekomme den RTVhelper nicht zum Laufen, stattdessen aber zuverlässig FHEM zum Absturz :o Ich mache wohl irgendeinen gröberen Fehler, wobei ich mich versucht habe möglichst genau an den Beitrag#1 zu halten, was sich (hoffentlich) in folgendem Code wiederspiegelt:

define RTVhelper RTVhelper
attr RTVhelper collapse 0
attr RTVhelper min-update-interval 15
attr RTVhelper parserTV-TV2015 RTVhelper_ParseTV
attr RTVhelper parserTV-TV2200 RTVhelper_ParseTV
attr RTVhelper parserTV-TVjetzt RTVhelper_ParseTV
attr RTVhelper room TV
attr RTVhelper senderListTV-Vorschau1 /Das Erste:Das Erste:Das_Erste_HD/ZDF:ZDF:ZDF_HD/N24 Doku:N24:N24/ZDF neo:ZDF Neo:zdf_neo_HD/
attr RTVhelper senderListTV-Vorschau2 /RTL:RTL:RTL_Television/RTL 2:RTL 2:RTL2/Pro7:Pro 7:ProSieben/Kabel eins:Kabel 1:kabel_eins/VOX:VOX:VOX/N-TV:N-TV:n-tv/DMAX:DMAX:DMAX/Sport 1:Sport 1:SPORT1/Eurosport:Eurosport:Eurosport_1_Deutschland/Pro7 MAXX:Pro 7 MAXX:ProSieben_MAXX/NITRO:RTL Nitro:RTLNITRO/
attr RTVhelper uriTV-TV2015 http://www.klack.de/fernsehprogramm/2015-im-tv/0/-1/free.html
attr RTVhelper uriTV-TV2200 http://www.klack.de/fernsehprogramm/2200-im-tv/0/-1/free.html
attr RTVhelper uriTV-TVjetzt http://www.klack.de/fernsehprogramm/was-laeuft-gerade/0/0/all.html


Sobald ich dann aber "update" anstoßen will, hängt sich FHEM auf und schreibt Folgendes ins Log:

2018.05.31 20:51:40 3: RTVhelper_UpdateReadings: first run today!
2018.05.31 20:51:40 3: RTVhelper_UpdateReadings: work: TV2015 start read (IOWrite)
2018.05.31 20:51:40 3: RTVhelper_UpdateReadings: work: TVjetzt start read (IOWrite)
2018.05.31 20:51:40 1: RTVhelper_IOWrite: TV2015 just in progress
Can't use an undefined value as an ARRAY reference at ./FHEM/99_myUtilsRTVhelper.pm line 608.


Muss ich noch irgendwas anderes einstellen? Habe ich irgendwas in der 99_myUtilsRTVhelper.pm nicht bedacht?
Ich hoffe, ihr könnt weiterhelfen :-\ Danke!

Elektrolurch

Hallo ChHerrn,

die Zeile 608 stimmt nicht mit der aktuellen Version überein, es gab noch einige Änderungen, die ich in einer Aktualisierung der Datei in Beitrag 1 habe einfliessen lassen. Bitte den Test also noch einmal mit der aktuellen Version durchführen.
Für die TFjetzt, TV2015 und TV200 brauchst Du eigentlich keine uri und keinen Parser eingeben (Atribute), die werden nämlich schon einmal per define vorbelegt.

Elektrolurch
configDB und Windows befreite Zone!

ChHerrm

Danke für deine Antwort! :)
Ich habe mir daraufhin nochmal den aktuellen Stand von Beitrag 1 gezogen und folgende Schritte ausgeführt:
1. In der Kommandozeile "define RTVhelper RTVhelper" eingegeben
2. In der Oberfläche den vorhandenen Raum TV ausgewählt
3. In der .cfg folgenden Code dazu eingefügt:

attr RTVhelper senderListTV-Vorschau1 /Das Erste:Das Erste:Das_Erste_HD/ZDF:ZDF:ZDF_HD/N24 Doku:N24:N24/ZDF neo:ZDF Neo:zdf_neo_HD/
attr RTVhelper senderListTV-Vorschau2 /RTL:RTL:RTL_Television/RTL 2:RTL 2:RTL2/Pro7:Pro 7:ProSieben/Kabel eins:Kabel 1:kabel_eins/VOX:VOX:VOX/N-TV:N-TV:n-tv/DMAX:DMAX:DMAX/Sport 1:Sport 1:SPORT1/Eurosport:Eurosport:Eurosport_1_Deutschland/Pro7 MAXX:Pro 7 MAXX:ProSieben_MAXX/NITRO:RTL Nitro:RTLNITRO/

--> keine Fehlermeldungen o.Ä.

Wenn ich dann auf der Oberfläche "set RTVhelper update" klicke, stürzt es ab.
Dieses Mal jedoch an einer anderen Stelle:

2018.06.01 12:21:43 3: RTVhelper_UpdateReadings: first run today!
2018.06.01 12:21:43 3: RTVhelper_UpdateReadings: work: TVjetzt start read (IOWrite)
2018.06.01 12:21:43 3: RTVhelper_UpdateReadings: work: TVjetzt start read (IOWrite)
2018.06.01 12:21:43 1: RTVhelper_IOWrite: TV TVjetzt TVjetzt just in progress
Can't use an undefined value as an ARRAY reference at ./FHEM/99_myUtilsRTVhelper.pm line 620.


Also gleiches Verhalten, nur 12 Zeilen weiter. Was kann noch falsch sein? :-\

Elektrolurch

Hallo ChHerrn,

ok. Anscheinend wird bei Dir die Seite von Klack nicht geladen oder ist irgendwie verstümmelt? Er findet jedenfalls nicht die Sendernamen, die aber zum Parsen benötigt werden. Den Absturz kann ich verhindern, in dem ich da eine Abfrage einbaue, aber warum die Seite nicht korrekt ist....?
Zitat:
3. In der .cfg folgenden Code dazu eingefügt:
Code: [Auswählen]
attr RTVhelper senderListTV-Vorschau1 /Das Erste:Das Erste:Das_Erste_HD/ZDF:ZDF:ZDF_HD/N24 Doku:N24:N24/ZDF neo:ZDF Neo:zdf_neo_HD/
attr RTVhelper senderListTV-Vorschau2 /RTL:RTL:RTL_Television/RTL 2:RTL 2:RTL2/Pro7:Pro 7:ProSieben/Kabel eins:Kabel 1:kabel_eins/VOX:VOX:VOX/N-TV:N-TV:n-tv/DMAX:DMAX:DMAX/Sport 1:Sport 1:SPORT1/Eurosport:Eurosport:Eurosport_1_Deutschland/Pro7 MAXX:Pro 7 MAXX:ProSieben_MAXX/NITRO:RTL Nitro:RTLNITRO/
--> keine Fehlermeldungen o.Ä.


Warum fügst Du das in der .cfg ein? Das ist heikel:
a) Wird nur funktionieren, wenn fhem heruntergefahren wurde.
b) Ist fhem oben, hat es keine Wirkung und beim Herunterfahren wird die fhem.cfg überschrieben
c) Durch das Setzen der Attribute werden intern im RTVhelper lookup - tables generiert, die werden benötigt.
Also bitte über die Kommandozeile alles eingeben.

Ich hänge die Version mit den Sicherheitsabragen in einer Stunde an Beitrag 1 an.

Elektrolurch
configDB und Windows befreite Zone!

ChHerrm

Perfekt, danke dir! :) Ich hab's auch über die Kommandozeile versucht, dort führt es aber direkt zum Absturz. Aber dann warte ich mal die nächste Version ab und teste das nachher mal. Danke schon mal!

ChHerrm

Also, Abstürze gibt es zumindest keine mehr. Aber tun kann ich mit diesem Modul aktuell auch nichts. Update wird nicht mehr angeboten, weil wahrscheinlich keine Elemente gefunden werden. ShowKlacklist liefert so etwas:


2018.06.01 14:21:17 3: RTVhelper_UpdateReadings: first run today!
2018.06.01 14:21:17 3: RTVhelper_UpdateReadings: work: TV2015 start read (IOWrite)
2018.06.01 14:21:17 3: RTVhelper_UpdateReadings: work: TVjetzt start read (IOWrite)
2018.06.01 14:21:17 1: RTVhelper_IOWrite: TV TVjetzt TV2015 just in progress
2018.06.01 14:21:18 1: RTVhelper_Getklacklist: no elements fouhnd in klacklist - page:
����rI�6��3�“e�$�B�o*�ilE���M0�����4��
�#�Y;g���7+�f���9�������ܣCG$�U%Dx��]�/_͏?6


Also auch nicht so wirklich gelungen. Muss ich noch irgendwas anderes installieren bzw. fehlt auf meinem System noch etwas? Habe testweise nur ARD und ZDF drin. Kommt aber nix an ???

Elektrolurch

Da sollte eigentlich in der Ausgabe eine vernünftige Webseite  stehen.... aber das sieht nicht nach einem html - Code aus.
Ich benutze die httpUtlis von fhem. Vielleicht hast Du eine ältere Version. Mach mal ein fhem update.
Und starte danach neu.
Kannst Du die Seite von Klack-TV in Deinem Browser überhaupt aufrufen?

Mach mal ein "displayattr RTVhelper" und poste das hier. Vielleicht hast Du die eingebaute UrL für die Klackseite mit einem flaschen Wert überschrieben und daher kann das Modul die Seite nicht laden.

Elektrolurch
configDB und Windows befreite Zone!

ChHerrm

Klasse, irgendwie geht's jetzt bei mir 8) Ich mache jeden Sonntag ein Update von FHEM, aber da gab's wohl die Tage nochmal ne Änderung.
Danke für deine Hilfe, super Arbeit! :D Vor allem die Umschaltmöglichkeit zwischen den Zeiten gefällt mir richtig gut.
2 letzte Probleme habe ich jetzt damit: Das erste Problem ist wahrscheinlich recht klein. Ich wollte die Farben umstellen, was mir jedoch nicht gelang. Im Anhang habe ich mal einen Screenshot hinterlegt, egal ob ich kein Semikolon, eins oder zwei setze - nichts tut sich ???

Mein zweites Problem ist das mangelnde Verständnis des Codes bzgl. der Icon-Einbindung - kannst du mir diesbezüglich bitte nochmal einen Hinweis mit einem konkreten Beispiel geben? Was muss ich tun um den ZDF-Text durch ein Icon zu ersetzen. Das wäre top :) :) :)

Wzut

Zitat von: ChHerrm am 01 Juni 2018, 20:03:01
Was muss ich tun um den ZDF-Text durch ein Icon zu ersetzen.
Elektrolurch hat im ersten Post auch eine .zip angehängt mit Icons. Leider sind die nicht zu gebrauchen, aber dafür kann er nichts !
Es müsste sich jemand die Arbeit machen und die einzeln bei Klack runterladen und ggf. etwas nachbearbeiten und auf eine einheitliche Größe bringen.
Im Anhang mal ein Beispiel für ARD und ZDF. Mal schauen wenn ich die nächsten drei Wochen in meinem Urlaub Langeweile habe kann ich mal damit anfangen.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

ChHerrm

Danke, aber mein erstes Problem ist eher dass ich nicht weiß wie ich das Logo eingebunden bekomme :-[
Wie genau kriege ich nun ein Logo anstatt des Textes hin? Kannst du mir vlt ein konkretes Beispiel schicken? Die Festlegungen sind in der 99_myUtilsRTVhelper.pm zu tätigen oder wo?

Elektrolurch

Zitat @ChHerrn:
Mein zweites Problem ist das mangelnde Verständnis des Codes bzgl. der Icon-Einbindung - kannst du mir diesbezüglich bitte nochmal einen Hinweis mit einem konkreten Beispiel geben? Was muss ich tun um den ZDF-Text durch ein Icon zu ersetzen. Das wäre top :) :) :)

<channel> = Kanal-Name, mit dem der Receiver umgeschaltet werden soll.
Wichtig: Dieser Name wird auch für die Anzeige des Logos verwendet.

Du kannst die Logos aus Beitrag #1 extrahieren und in einen eigenen Unterordner in fhem/www/images kopieren, z.B. TVLogos.
Dann musst Du für die fhem-Webg Instanz das Attribut iconpath um den neuen Ornder ergänzen.
Nicht vergessen:

setWEB.* rereadicons

eingeben, damit fhem die neuen Icons auch verwendet.

Leider kann ich Dir bei dem Farbproblem nicht weiterhelfen, da Farben für mich leider bedeutungslos sind (Screenreader).

Wenn Du Deinen Receiver dann noch richtig eingebunden hast und die Kanalnamen dort mit den  <channel> vom RTVhelper übereinstimmen, bekommst Du erst richtig Spaß, dann kannst Du Dir nämlich Dein (Abend)programm per Zeitsteuerung zusammenklicken. Das ist eigentlich die wichtigste Funktion, die ich ständig nutze....

@Wzut:
Zitat:
Leider sind die nicht zu gebrauchen, aber dafür kann er nichts !

zu den Logos: (Auszug aus Beitrag #1)
und die Senderlogos zusätzlich mit Logo gestaltet.
Hier ein Beispiel für eine css - Datei:


.Logo.icon {width:72px;}
.Logo svg {width:72px; height:72px; horizontal-align:center; vertical-align:middle;}
.IconwithLabel {
width:64px;
vertical-align:middle;
horizontal-align:center;
text-align: center;
margin:4px;
}

Hinweis:
Die Logos stammen von wikipedia und sind SVGs. Laut fhem - Wiki werden die Größen der Logos wie oben beschrieben über eine CSS-Anweisung gesetzt.
Soweit WAF, sind die meisten dann ok von der Größe.

Ich habe die auch noch als .png. Aber da haben einige einen festen weißen Hintergrund, was auf small darkscreen nicht so gut aussieht. Und manche skalieren auch nicht so vernünftig.

Eelektrolurch

configDB und Windows befreite Zone!

ChHerrm

Hm danke für den Hinweis und vor allem für eure hohe Geduld :) Aber so richtig kriege ich mein Problem bisher wohl nicht ausgedrückt befürchte ich :-\
Also Logos habe ich, die findet FHEM auch, kein Problem. Aber ist der Zusammenhang nun, dass das Logo-File so heißen muss wie <channel>? Und der css-Code wird genauso wie er bei dir steht in eine ganz neue .css-Datei geworfen und die dann zusätzlich integriert? Hab ich das so weit richtig verstanden?


Und dann habe ich es noch nicht geschafft, SAT.1 einzubinden. Bei Klack trägt der Sender den title "SAT.1". Der Aufruf /SAT.1:SAT.1:SAT_1/ war jedoch nicht von erfolgt gekrönt. Hat das schon jemand eingebunden bekommen?

Elektrolurch

Zitat:
Logo-File so heißen muss wie <channel>? Und der css-Code wird genauso wie er bei dir steht in eine ganz neue .css-Datei geworfen und die dann zusätzlich integriert? Hab ich das so weit richtig verstanden?

ja, das dritte Feld <channel> ist der Name, mit dem der Receiver (bei mir Enigma) umgeschaltet wird und auch so muss die Datei für das Logo heißen. Das von mir veröffentlichte Muster passt also für Klack -> Enitma Receiver -> und die Logoanzeige.


get RTVhelper showKlacklist


Gibt es da ein SAT1?

Elektrolurch

configDB und Windows befreite Zone!

ChHerrm

Da hast du Recht, SAT.1 ist gar nicht dabei. Ich könnte mir vorstellen, dass es dabei Probleme mit dem Punkt im Namen gibt. Aber das ist für mich nicht so tragisch.
Ich habe jetzt den <channel>-Eintrag so benannt wie meine Logos ohne Endung. Weil ich keinen Receiver dahinter habe, sollte das für mich passen. Die Icons sind eingebunden, da ich sie mir auch an jeder anderen Stelle als Icons auswählen kann.

Und dann habe ich eine neue .css-Datei angelegt, die nur folgenden Inhalt hat:

.Logo.icon {width:72px;}
.Logo svg {width:72px; height:72px; horizontal-align:center; vertical-align:middle;}
.IconwithLabel {
width:64px;
vertical-align:middle;
horizontal-align:center;
text-align: center;
margin:4px;
}

.LabelText {
font-size:12px;
text-align: center;
color:#ffffff;
}


Anschließend ein

attr WEB CssFiles pgm2/TVIcons.css

und nichts passiert. Die Datei liegt an der richtigen Stelle. Ist das mit der css-Datei so richtig? Einfach den Code reinwerfen und nichts weiter dazuschreiben?
FHEM hab ich zur Sicherheit nochmal neu gestartet, aber keine Änderungen.

Elektrolurch

Ja, so sollte es richtig sein.
Ist es auch wirklich die WEB - Instanze und nicht WEBphone oder ss?

Und was heißt: nichts passiert?
Das css setzt nur die korrekte Größe der Logos und das Label unter dem Logo in zentriert.
Werden die Logos überhaupt angezeigt? Bitte also etwas präziser, wenn man Dir helfen soll.
configDB und Windows befreite Zone!

ChHerrm

Ich habe es für alle FHEM-Instanzen gemacht, aber in nirgendwo ist ein Logo aufgetaucht. Überall steht der Name der Bilddatei.
Beispiel

Das Erste:Das Erste:MeinLogo --> somit steht dann "MeinLogo" an der Stelle wo eigentlich das Icon auftauchen sollte. Das Format ist .png von meinen Icons. Ich habe aber auch testweise eines als .svg geändert. Es wird so oder so nur der eigentliche Name der Datei und kein Icon angezeigt

Wzut

Zitat von: ChHerrm am 02 Juni 2018, 12:22:39

attr WEB CssFiles pgm2/TVIcons.css

IMHO ohne pgm2 -> attr WEB CssFiles TVIcons.css , wenn die TVIcons..css da liegt wo auch ihre anderen .css Brüder sind.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Elektrolurch

Zitat:
Ich habe es für alle FHEM-Instanzen gemacht, aber in nirgendwo ist ein Logo aufgetaucht. Überall steht der Name der Bilddatei.
Beispiel

Das Erste:Das Erste:MeinLogo --> somit steht dann "MeinLogo" an der Stelle wo eigentlich das Icon auftauchen sollte. Das Format ist .png von meinen Icons. Ich habe aber auch testweise eines als .svg geändert. Es wird so oder so nur der eigentliche Name der Datei und kein Icon angezeigt


Noch Mal ganz langsam zum Mitdenken:
Das dritte Feld <channel> ist der Name des Senders, mit dem der Receiver umgeschaltet wird und gleichzeitig auch der Name des Logos, z.B. Das_Erste_Hd. Wobei intern die FW_MakeImage aufgerufen wird, die sucht in allen Verzeichnissen, die mit dem iconpath - Attribut fhem bekannt gemacht wurde, nach .svg und .png - Dateien.

Das zweite Feld <sender> ist der Name, der unter dem Logo angezeigt wird, denn Das_Erste_HD sieht ja als Name für einen Sender etwas blöd aus. :-) (WAF)
Wenn also da als Text Dat_Erste_HD angezeigt wird, so findet fhem die Ikonen nicht, denn, die FW_MakeImage liefert den Namen des gesuchten Logos als Text zurück, wenn der nicht in den angegebenen Verzeichnissen gefunden wird.
 
Die css - Datei hat keinen Einfluß auf die Namen, noch auf den Ort der Logos. Sie dient ausschließlich dazu, die Größe des Logos (falls es denn endlich mal angezeigt wird) einheitlich festzulegen und Farbe und Größe des angezeigten Sendernamens unter dem Logo frei zu bestimmen.

Also erst einmal komm mit Deinen Logos klar.
   
configDB und Windows befreite Zone!

ChHerrm

Perfekt, ich hab's 8) Ich hatte einen Unterordner in /opt/fhem/www/images/default/TVLogos. Diesen Ordner habe ich nun auf die gleiche Ebene wie default hochgezogen und dann lief es auch. Warum mir die Icons aber angezeigt wurden wenn ich zB irgendwo "select icon" wähle, hat mir nicht eingeleuchtet. Aber scheinbar ist das eine andere Herangehensweise. Wie auch immer, das war auf jeden Fall die Lösung.
Danke für eure Hilfe! :)

my-engel

Hallo,
ich wollte auch einmal probieren und es scheint auch zu funktionieren.
Habe nun aber das Problem, wenn ich auf die Uhr oder auf "aufklappen/zuklappen" bzw. auf die Vorschauliste klicke,
sich der Browser nicht selbst aktualisiert um den geänderten Zustand anzuzeigen.
Wenn ich dann den Browser von Hand die Seite neu laden lasse ( F5 ), zeigt es die gewünschte Seite dann aber an.
Ich habe nun schon an den Attributen longpoll in FHEMWEB gespielt aber leider ohne Erfolg.
Hat jemand eine Idee???

MfG

Elektrolurch

Hallo,

intern wird folgende Funktion aufgerufen:


sub  RTVhelper_RefreshScreen($)
{
my ($name) = @_;
return undef if(AttrVal($name,'disable',0) == 3);

my $room = AttrVal($name,'room','');
foreach my $rr (split(',',$room)) # multiroom
{
map { FW_directNotify("FILTER=room=$rr", "#FHEMWEB:$_", "location.reload('true')", "") } devspec2array("WEB.*");
} # foreach multiroom
return undef;
} # end sub RTVhelper_RefreshScreen

Also, es wird das Attribut "room" ausgewertet und die Webinstanz, auf der der "Refresh" durchgeführt werden soll heißt irgendwas mit "WEB....".
Man könnte allerdings, falls jemand seine Web-Instanzen anders benannt hat (?) auch die devspec2array mit "TYPE=WEB" aufrufen.

Elektrolurch
configDB und Windows befreite Zone!

my-engel

Hallo Elektrolurch,

jetzt kommt Licht ins Dunkle , es funktioniert nun auch bei mir.
Danke für deine Hilfe und dein Modul...

MfG
Uwe

Elektrolurch

ok.
Ich sammle derzeit noch bugs, dann gibt es ein Update....
configDB und Windows befreite Zone!