Fernsehprogramm DOIF (aktuell und primetime | non blocking | minimaler traffic)

Begonnen von mumpitzstuff, 12 Juni 2020, 21:47:48

Vorheriges Thema - Nächstes Thema

mumpitzstuff

Hier kann man z.B. auch sehen was es sonst noch alles gibt.

http://rytecepg.dyndns.tv/epg_data/

Im DOIF werden nur die beiden Dateien rytecDE_Basic.xz und rytecDE_Common.xz geladen und gemerged. Das bdedeutet, das man aktuell nur Sender aus diesen beiden Dateien anzeigen lassen kann. Es gibt aber die Möglichkeit weitere Dateien zu mergen und dann ebenfalls anzeigen zu lassen wie z.B. rytecDE_SportMovies.xz.

Dazu muss man einfach die Funktion "sub tvDownloadMerge()" suchen und diese ersetzen:

  sub tvDownloadMerge()
  {
    my $output = '';
   
    # other server
    # http://www.xmltvepg.nl/rytecDE_Basic.xz
    # http://91.121.106.172/~rytecepg/epg_data/rytecDE_Basic.xz
    # http://www.vuplus-community.net/rytec/rytecDE_Common.xz
    # http://www.xmltvepg.nl/rytecDE_Common.xz
    # http://91.121.106.172/~rytecepg/epg_data/rytecDE_Common.xz
    # http://www.vuplus-community.net/rytec/rytecDE_SportMovies.xz
    # http://www.xmltvepg.nl/rytecDE_SportMovies.xz
    # http://91.121.106.172/~rytecepg/epg_data/rytecDE_SportMovies.xz
    $output .= qx(wget http://www.vuplus-community.net/rytec/rytecDE_Basic.xz -O /opt/fhem/rytecDE_Basic.xz 2>&1);
    $output .= qx(xz -df /opt/fhem/rytecDE_Basic.xz 2>&1);
    $output .= qx(wget http://www.vuplus-community.net/rytec/rytecDE_Common.xz -O /opt/fhem/rytecDE_Common.xz 2>&1);
    $output .= qx(xz -df /opt/fhem/rytecDE_Common.xz 2>&1);
   
    tvMerge($_dataFile, $_path.'rytecDE_Common');

    # download and merge other files here if needed
   
    return $output;
  }


durch

  sub tvDownloadMerge()
  {
    my $output = '';
   
    # other server
    # http://www.xmltvepg.nl/rytecDE_Basic.xz
    # http://91.121.106.172/~rytecepg/epg_data/rytecDE_Basic.xz
    # http://www.vuplus-community.net/rytec/rytecDE_Common.xz
    # http://www.xmltvepg.nl/rytecDE_Common.xz
    # http://91.121.106.172/~rytecepg/epg_data/rytecDE_Common.xz
    # http://www.vuplus-community.net/rytec/rytecDE_SportMovies.xz
    # http://www.xmltvepg.nl/rytecDE_SportMovies.xz
    # http://91.121.106.172/~rytecepg/epg_data/rytecDE_SportMovies.xz
    $output .= qx(wget http://www.vuplus-community.net/rytec/rytecDE_Basic.xz -O /opt/fhem/rytecDE_Basic.xz 2>&1);
    $output .= qx(xz -df /opt/fhem/rytecDE_Basic.xz 2>&1);
    $output .= qx(wget http://www.vuplus-community.net/rytec/rytecDE_Common.xz -O /opt/fhem/rytecDE_Common.xz 2>&1);
    $output .= qx(xz -df /opt/fhem/rytecDE_Common.xz 2>&1);
    $output .= qx(wget http://www.vuplus-community.net/rytec/rytecDE_Common.xz -O /opt/fhem/rytecDE_SportMovies.xz 2>&1);
    $output .= qx(xz -df /opt/fhem/rytecDE_SportMovies.xz 2>&1);
   
    tvMerge($_dataFile, $_path.'rytecDE_Common');
    tvMerge($_dataFile, $_path.'rytecDE_SportMovies');

    # download and merge other files here if needed
   
    return $output;
  }


ersetzen. Das Spiel lässt sich beliebig fortsetzen.

robishawn

 :) :) :) :) :)   Vielen Dank für dieses tolle DOIF.    :) :) :) :) :)


Funktioniert viel besser und leichter als andere Lösungen zum EPG.

Wenn ich einen Link in Fhem anklicke erscheint das Popup mit den Detailinfotexten perfekt.

Ich habe das DOIF per

<div data-type="readingsgroup" data-device="doif_TEST"></div> 

in FTUI eingebaut, hier funktioniert der Link nicht und im Toastmessage wird ausgegeben: ReferenceError:FW_okDialog is not defined.

Vielen Dank für einen Tipp im Voraus!

robishawn

Ich habe da noch eine Anregung zur Erweiterung des DOIFS!!!

In Ftui habe ich eine Liste mit Senderlogos zusammengebastelt, die ich zum Umschalten meines SAT-Receivers per IR-Blaster nutze.

Das möchte ich gerne mit dem DOIF zusammenfassen, da die Liste der Senderlogos ja schon vorhanden ist.


Dazu nutze ich:   

<div data-type="push" data-cmd="set" data-device="irblaster" data-set="send" data-set-on="IR_SAT_DasErste"       data-background-icon="" data-icon="" class="inline senderliste" style="background-image: url('img/sender/daserste.png');"></div>

Alternativ wäre ich auch schon glücklich, wenn in der Senderliste ein Command alla "set irblaster IR_SAT-DasErste" als Link beim Anklicken des Senderlogos aufgerufen würde.

z.B.:

TPL_TV($SELF,next,ARD,ard,set irblaster IR_SAT-DasErste)\


Vielleicht habt Ihr einen Tipp für mich, da meine Programmierkünste dafür nicht reichen. :) 
         

mumpitzstuff

Den Dialog stellt FHEMWEB zur Verfügung, deshalb kann das unter FTUI nicht funktionieren. Gibt es denn Popup Dialoge in FTUI, die ich per onClick über JavaScript aufrufen kann?

Das andere mit dem Umschalten deines Fernsehers sollte gehen. Die entsprechende Erweiterung baue ich die Tage ein.

mumpitzstuff

Was passiert wenn du im Attribut uiTable das hier:

return "<a href=\"#!\" onclick=\"FW_okDialog('".$desc."')\">".$title."</a>";

durch das hier ersetzt?

return "<div data-type=\"popup\"><div>".$title."</div><div class=\"dialog\"><header>Details</header><div>".$desc."</div></div></div>";

Ist ungeprüft, kann also Fehler enthalten. Eventuell muss ich für diese Variante auch bestimmte Zeichen filtern, das müsste ich mir im Detail ansehen. Aber erst mal muss ich wissen ob das überhaupt ansatzweise geht.

moonsorrox

ich bin auch noch ein wenig am testen, aber meine Frage dazu ich habe das zweimal untereinander ist das normal?
Aber der untere Teil füllt sich nicht.!
siehe Screenshot
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Frank_Huber

Zitat von: moonsorrox am 19 Juni 2020, 13:06:09
ich bin auch noch ein wenig am testen, aber meine Frage dazu ich habe das zweimal untereinander ist das normal?
Aber der untere Teil füllt sich nicht.!
siehe Screenshot
füllt sich um 00:30 ca.
das ist die "Prime Time Liste"

moonsorrox

ichhabe das ca. 5 Tage schon am laufen, aber es ist immer noch leer  ;)

Ich habe mal die Zeit geändert um zu schauen, ich muss dazu sagen ich habe das auf meinem Test System in der VM laufen, die geht nachts aber aus...! aber eigentlich nie vor 01:00 Uhr
Alles klar es funktioniert...!  ;)
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

mumpitzstuff

Dann musst du wohl die Zeiten etwas anpassen und das z.b. auf früh um 8 ändern. Du must aber darauf achten, das der Download vor dem aktualisieren der prime Sendungen stattfindet.

moonsorrox

Ja, Danke schon kapiert, war wohl die VM schon jedesmal runter gefahren  :) ;)
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

robishawn

Hallo mumpitzstuff,

vielen Dank für die schnelle Reaktion.

Deine geänderte Zeile führt dazu, daß in FHEM die $desc. in der Übersicht sofort mitangezeigt werden. Hier müßte später wenn es funktioniert noch eine Fallunterscheidung FHEM oder FTUI getroffen werden damit das DOIF universell verwendbar bleibt.

Das FTUI popup Widget sollte gut geeignet sein um das Problem zu lösen!

In FTUI passiert leider beim Anklicken eines $title bei mir nichts, ich habe das auch mit

return "<div data-type=\"popup\"> <data-height=\"500px\"> <data-width=\"500px\"<div>".$title."</div><div class=\"dialog\"><header>Details</header><div>".$desc."</div></div></div>";

getestet, da ich vermutet habe daß das POPUP zu klein für längere Texte ist.

Ein Mustertext funktioniert aber mit

<li data-row="8" data-col="8" data-sizex="3" data-sizey="5">
      <header>Popup</header>
               <div class="sheet">
                  <div class="cell">
                     <div data-type="popup"
                         data-height="500px"
                          data-width="500px"
                        <div>Hier klicken um Popup zu öffnen</div>
                              <div class="dialog">
                                 <header>Popup</header>
                                 <div>Inhalt des Popups<br>
                                  Gefragt - Gejagt<br>
                                    Details<br>
                                    (2020)<br>
                                    Moderator Alexander Bommes begrüsst in jeder Ausgabe vier
                                    Kandidaten. In der ersten Runde werden den Kandidaten einzeln
                                    Fragen gestellt. Für jede richtige Antwort erhält man 500 Euro.
                                    Das erspielte Geld muss jeder Kandidat zunächst einzeln gegen
                                    einen Quizprofi verteidigen. Wer das schafft kommt mit der
                                    erspielten Summe ins Finale. Die Finalteilnehmer spielen dann
                                    zusammen gegen den Profi.</div>
                              </div>
                     </div>
                  </div>   
               </div>                  
         </li>         

Vielen Dank im Voraus  :)

mumpitzstuff

Ich kenne mich mit FTUI leider so gar nicht aus, aber kann es sein, das man sich hier eine komplett eigene Ansicht basteln müsste, die sich nur aus den Readings des DOIFs bedient? So eine Seite sollte auch nicht so schwer sein. Letztendlich ist es eine einfache Tabelle, in der jeweils einige Readings aus dem DOIF angezeigt werden. Ansonsten verstehe ich nicht weshalb dein Beispiel klappt und meine Zeile in FTUI nichts machen soll. Für mich sieht es erst mal gleich aus.

Vielleicht könntest du mir auch einfach mal eine Beispielseite erstellen, wo das DOIF eingebettet ist, dann kann ich mir das selbst in FTUI ansehen. Die Example Seite habe ich schon lange in FHEM drin, war nur immer zu faul mich damit eingehender zu beschäftigen.

robishawn

Hallo mumpitzstuff,

ich habe mal eine Seite für Dich gebaut, damit Du das Popup testen kannst:

<!DOCTYPE html>
<html>
<head></head>
<body>
<div class="page" id="1_test-content">
    <div class="gridster">
        <ul>
         
            <li data-row="1" data-col="1" data-sizex="3" data-sizey="2"> <!-- Senderliste Logos -->
                <header>Senderliste</header>
                <div class="sheet">
                    <div class="cell">
    <div data-type="push" data-cmd="set" data-device="irblaster" data-set="send" data-set-on="IR_SAT_DasErste" data-background-icon="" data-icon="" class="inline senderliste" style="background-image: url('img/sender/ard.png') ;"></div>
<div data-type="push" data-cmd="set" data-device="irblaster" data-set="send" data-set-on="IR_SAT_ZDF" data-background-icon="" data-icon="" class="inline senderliste" style="background-image: url('img/sender/zdf.png') ;"></div>
<div data-type="push" data-cmd="set" data-device="irblaster" data-set="send" data-set-on="IR_SAT_RTL" data-background-icon="" data-icon="" class="inline senderliste" style="background-image: url('img/sender/rtl.png') ;"></div>
<div data-type="push" data-cmd="set" data-device="irblaster" data-set="send" data-set-on="IR_SAT_ARTE" data-background-icon="" data-icon="" class="inline senderliste" style="background-image: url('img/sender/arte.png') ;"></div>
</div>
    </div>
</li>
                   

<li data-row="1" data-col="4" data-sizex="3" data-sizey="2">
<header>Popup</header>

<div class="sheet">
<div class="cell">
<div data-type="popup"
data-height="500px"
data-width="500px"
>

<div>Hier klicken um Popup zu öffnen</div>
<div class="dialog">
<header>Popup</header>
<div>Inhalt des Popups<br>
Gefragt - Gejagt<br>
Details<br>
(2020)<br>

Moderator Alexander Bommes begrüsst in jeder Ausgabe vier
Kandidaten. In der ersten Runde werden den Kandidaten einzeln
Fragen gestellt. Für jede richtige Antwort erhält man 500 Euro.
Das erspielte Geld muss jeder Kandidat zunächst einzeln gegen
einen Quizprofi verteidigen. Wer das schafft kommt mit der
erspielten Summe ins Finale. Die Finalteilnehmer spielen dann
zusammen gegen den Profi.</div>
</div>
</div>
</div>
</div>
</li>



<li data-row="3" data-col="1" data-sizex="10" data-sizey="16">
<header>EPG Programm</header>
<div class="sheet">
<div class="row">
<div class="cell">
<div data-type="readingsgroup" data-device="doif_TEST"></div>
</div>
</div>
</div>
</li>

</ul>

</div>


</div>

</body>
</html>



In der Zelle "Popup" habe ich mal einen Mustertext für ein Popup gebaut, der funktioniert.
In der Zelle "EPG-Programm" habe ich Deine geänderte Zeile im Attribut uiTable die noch nicht funktioniert eingebaut. 

Die Zelle "Senderliste" enthält funktionierende "push" Buttons, die meinen Sat-Receiver per IR-Blaser umschalten.
Hier sind die Senderlogos schön als Button mit Hintergrund und passender Größe formatiert. Diese Liste möchte ich gerne in die erste Spalte Deines Fernsehprogramm DOIF einbauen.
Ich finde nur kein Muster für ein "push" mit uiTable. (siehe Post #77)
Falls ich noch was beisteuern kann bitte melden.   
 

mumpitzstuff

Ich fange erst einmal damit an, das Umschalten deines Receivers zu implementieren. Kannst du bitte versuchen, den Inhalt der uiTable im doif_TEST durch das Folgende zu ersetzen? Wenn du dort schon Änderungen vorgenommen hast, dann sichere dir vorher unbedingt den Inhalt!!!

{
  package ui_Table;

  $SHOWNOSTATE = 1;
  $ATTRIBUTESFIRST = 1;
 
  $TR{0,31} = "style='color:yellow;text-align:center;font-weight:bold;font-size:18px'";
  $TD{0..29,31..60}{2,4} = "style='font-size:16px;border-right-style:solid;border-color:#CCCCCC;border-right-width:1px;'";
  $TD{0..29,31..60}{0} = "align='center' style='border-right-style:solid;border-color:#CCCCCC;border-right-width:1px;'";
  $TD{0..60}{1,3,5,6} = "style='font-size:16px;'";
  $TD{30}{0..6} = "style='border-top-style:solid;border-bottom-style:solid;border-color:#CCCCCC;border-top-width:1px;border-bottom-width:1px;'";

  sub showIcon
  {
    my ($icon, $device, $state) = @_;
   
    if (defined($device) && defined($state) && ('' ne $device) && ('' ne $state))
    {
      return "<a href=\"$::FW_ME?cmd=set $device $state$::FW_CSRF\">".ICON("tv/$icon")."</a>";
    }
    else
    {
      return ICON("tv/$icon");
    }
  }
 
  sub unfold
  {
    my ($title, $desc) = @_;
   
    $title = 'na' if (!defined($title));
    $desc = 'na'."\n\n".'na' if (!defined($desc));
   
    $title =~ s/(.{1,45}|\S{46,})(?:\s[^\S\r\n]*|\Z)/$1<br>/g;
    $desc =~ s/<br>/\n/g;
    $desc =~ s/(.{1,65}|\S{66,})(?:\s[^\S\r\n]*|\Z)/$1<br>/g;
    $desc =~ s/[\r\'\"]/ /g;
    $desc =~ s/[\n]|\\n/<br>/g;

    return "<a href=\"#!\" onclick=\"FW_okDialog('".$desc."')\">".$title."</a>";
  }
}

# parameter: device name, mode (next or prime), channel name (see xml data file), icon name (filename of channel logo)
DEF TPL_TV(showIcon("$4","$5","$6")|substr([$1:$2_$3_000_btime],0,5)|unfold([$1:$2_$3_000_title],[$1:$2_$3_000_stitle]."\n\n".[$1:$2_$3_000_desc])|substr([$1:$2_$3_001_btime],0,5)|unfold([$1:$2_$3_001_title],[$1:$2_$3_001_stitle]."\n\n".[$1:$2_$3_001_desc])|substr([$1:$2_$3_002_btime],0,5)|unfold([$1:$2_$3_002_title],[$1:$2_$3_002_stitle]."\n\n".[$1:$2_$3_002_desc]))

"Sender"|"ab"|"Aktuelle Sendung"|"ab"|"Nächste Sendung"|"ab"|"Sendung"
TPL_TV($SELF,next,ARD,ard,TEST,IR_SAT-DasErste)
TPL_TV($SELF,next,ZDF,zdf,TEST,IR_SAT-DasZweite)
TPL_TV($SELF,next,Sat1,sat1)
TPL_TV($SELF,next,RTL,rtl)
TPL_TV($SELF,next,RTL2,rtl2)
TPL_TV($SELF,next,Pro7,pro7)
TPL_TV($SELF,next,DMax,dmax)
TPL_TV($SELF,next,Vox,vox)
TPL_TV($SELF,next,Kabel,kabel1)
TPL_TV($SELF,next,KabelEinsClassic,kabel1classic)
TPL_TV($SELF,next,13thStreet,13thstreet)
TPL_TV($SELF,next,Silverline,silverline)
TPL_TV($SELF,next,TNTFilm,tntfilm)
TPL_TV($SELF,next,AXN,axn)
TPL_TV($SELF,next,SonyEntertainmentTV,sonytv)
TPL_TV($SELF,next,Kinowelt,kinowelt)
TPL_TV($SELF,next,ProSiebenMaxx,pro7maxx)
TPL_TV($SELF,next,Sixx,sixx)
TPL_TV($SELF,next,TNTSerie,tntserie)
TPL_TV($SELF,next,SciFi,syfy)
TPL_TV($SELF,next,ntv,ntv)
TPL_TV($SELF,next,N24Doku,n24)
TPL_TV($SELF,next,History,history)
TPL_TV($SELF,next,PLANET,planet)
TPL_TV($SELF,next,KabelEinsDoku,kabel1doku)
TPL_TV($SELF,next,AnimalPlanet,animalplanet)
TPL_TV($SELF,next,NatGeoHD,natgeo)
TPL_TV($SELF,next,TLC,tlc)
TPL_TV($SELF,next,AandE,ae)
"&nbsp;"|"&nbsp;"|"&nbsp;"|"&nbsp;"|"&nbsp;"|"&nbsp;"|"&nbsp;"
"Sender"|"ab"|"Sendung"|"ab"|"Sendung"|"ab"|"Sendung"
TPL_TV($SELF,prime,ARD,ard)
TPL_TV($SELF,prime,ZDF,zdf)
TPL_TV($SELF,prime,Sat1,sat1)
TPL_TV($SELF,prime,RTL,rtl)
TPL_TV($SELF,prime,RTL2,rtl2)
TPL_TV($SELF,prime,Pro7,pro7)
TPL_TV($SELF,prime,DMax,dmax)
TPL_TV($SELF,prime,Vox,vox)
TPL_TV($SELF,prime,Kabel,kabel1)
TPL_TV($SELF,prime,KabelEinsClassic,kabel1classic)
TPL_TV($SELF,prime,13thStreet,13thstreet)
TPL_TV($SELF,prime,Silverline,silverline)
TPL_TV($SELF,prime,TNTFilm,tntfilm)
TPL_TV($SELF,prime,AXN,axn)
TPL_TV($SELF,prime,SonyEntertainmentTV,sonytv)
TPL_TV($SELF,prime,Kinowelt,kinowelt)
TPL_TV($SELF,prime,ProSiebenMaxx,pro7maxx)
TPL_TV($SELF,prime,Sixx,sixx)
TPL_TV($SELF,prime,TNTSerie,tntserie)
TPL_TV($SELF,prime,SciFi,syfy)
TPL_TV($SELF,prime,ntv,ntv)
TPL_TV($SELF,prime,N24Doku,n24)
TPL_TV($SELF,prime,History,history)
TPL_TV($SELF,prime,PLANET,planet)
TPL_TV($SELF,prime,KabelEinsDoku,kabel1doku)
TPL_TV($SELF,prime,AnimalPlanet,animalplanet)
TPL_TV($SELF,prime,NatGeoHD,natgeo)
TPL_TV($SELF,prime,TLC,tlc)
TPL_TV($SELF,prime,AandE,ae)


TPL_TV($SELF,next,ARD,ard,TEST,IR_SAT-DasErste)
TPL_TV($SELF,next,ZDF,zdf,TEST,IR_SAT-DasZweite)


In den zwei Zeilen siehst du das Beispiel das ich verwendet habe. TEST ist bei mir ein dummy Device, das musst du durch dein ir blaster Device ersetzen und dahinter das entsprechende Kommando auf das state gesetzt werden soll. Bei mir kann ich jedenfalls damit auf das ARD und ZDF Icon klicken und in meinem Dummy wird der State entsprechend gesetzt.

robishawn

Hallo mumpitzstuff,

vielen Dank,

habe kurz getestet, das geht aber erst morgen weiter!

ich habe "send" in den neuen Parameter mit aufgenommen, dann klappt es aus FHEM perfekt.
Damit kann ich gut leben! 


"Sender"|"ab"|"Aktuelle Sendung"|"ab"|"Nächste Sendung"|"ab"|"Sendung"
TPL_TV($SELF,next,ARD,ard,irblaster,send IR_SAT_DasErste)
TPL_TV($SELF,next,RTL,rtl,irblaster,send IR_SAT_RTL)
($SELF,prime,AandE,ae)


In FTUI springt der Browser auf die FHEM Seite:
http://xxx.yyy.zz.xy:8083/fhem?fw_id=