Aktuelles TV-Programm in FHEM

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

Vorheriges Thema - Nächstes Thema

supernova1963

Bitte zunächst "zu Fuss" hier einfügen:

sub TVSender_Notify($$) {
    my ($own_hash, $dev_hash) = @_;
    my $ownName = $own_hash->{NAME}; # own name / hash
    my $daytime = "";
    return "" if(IsDisabled($ownName)); # Return without any further action if the module is disabled
    my $devName = $dev_hash->{NAME}; # Device that created the events
    my $events = deviceEvents($dev_hash,1);
    my $cmd = '';
    my $errors = '';
    return if( !$events );
    if($devName eq "global" && grep(m/^INITIALIZED|REREADCFG$/, @{$events}))
    {
      Log3($ownName, 5, "Abschluss aller Intitialisierungen festgestellt ...");
    }
    foreach my $event (@{$events}) {
      $event = "" if(!defined($event));
      if ($devName eq InternalVal($ownName,"TV_Program_NOW","TV_Program_NOW")) {
        $daytime = "_NOW";
        $cmd = 'setreading '.$ownName.' '.$devName.'_Time '.ReadingsVal($devName,$ownName.'_Time','na').';'
          .'setreading '.$ownName.' '.$devName.'_Title '.ReadingsVal($devName,$ownName.'_Title','na').';'
          .'setreading '.$ownName.' '.$devName.'_Description '.ReadingsVal($devName,$ownName.'_Description','na').';'
          .'setreading '.$ownName.' '.$devName.'_DetailLink <html><a href=\''.ReadingsVal($devName,$ownName.'_DetailLink','na').'</a></html>;'
### 1. Hier einfügen:
          .'setreading '.$ownName.' '.$devName.'_DetailLink_URL http://www.klack.de'.ReadingsVal($devName,$ownName.'_DetailLink','na').';'
          .'setreading '.$ownName.' '.$devName.'_Image_URL '.ReadingsVal($devName,$ownName.'_Image','na').';'
###
          .'setreading '.$ownName.' '.$devName.'_Image <html><a href=\'http://www.klack.de'.ReadingsVal($devName,$ownName.'_DetailLink','na').'\'><img src=\''.ReadingsVal($devName,$ownName.'_Image','na').'\'></a></html>;';
        $errors = '';
        $errors = AnalyzeCommandChain (undef, $cmd);
        if (!defined($errors)) {
          #Log3($ownName, 3, 'Sucsessfully new defined/changed readings to '.$ownName.'!');
        }
        else {
          Log3($ownName, 5, 'Notify '.$event.' changed readings to '.$ownName.' cause error: '.$errors.'!');
          Log3($ownName, 5, $cmd);
        }
      }
      if ($devName eq InternalVal($ownName,"TV_Program_NEXT","TV_Program_NEXT")) {
        $daytime = "_NEXT";
        $cmd = 'setreading '.$ownName.' '.$devName.'_Time '.ReadingsVal($devName,$ownName.'_Time','na').';'
          .'setreading '.$ownName.' '.$devName.'_Title '.ReadingsVal($devName,$ownName.'_Title','na').';'
          .'setreading '.$ownName.' '.$devName.'_Description '.ReadingsVal($devName,$ownName.'_Description','na').';'
          .'setreading '.$ownName.' '.$devName.'_DetailLink <html><a href=\''.ReadingsVal($devName,$ownName.'_DetailLink','na').'</a></html>;'
### 2. Hier einfügen:
          .'setreading '.$ownName.' '.$devName.'_DetailLink_URL http://www.klack.de'.ReadingsVal($devName,$ownName.'_DetailLink','na').';'
          .'setreading '.$ownName.' '.$devName.'_Image_URL '.ReadingsVal($devName,$ownName.'_Image','na').';'
###
          .'setreading '.$ownName.' '.$devName.'_Image <html><a href=\'http://www.klack.de'.ReadingsVal($devName,$ownName.'_DetailLink','na').'\'><img src=\''.ReadingsVal($devName,$ownName.'_Image','na').'\'></a></html>;';
        $errors = '';
        $errors = AnalyzeCommandChain (undef, $cmd);
        if (!defined($errors)) {
          #Log3($ownName, 3, 'Sucsessfully new defined/changed readings to '.$ownName.'!');
        }
        else {
          Log3($ownName, 5, 'Notify '.$event.' changed readings to '.$ownName.' cause error: '.$errors.'!');
          Log3($ownName, 5, $cmd);
        }
      }
      if ($devName eq InternalVal($ownName,"TV_Program_PT","TV_Program_PT")) {
        $daytime = "_PT";
        $cmd = 'setreading '.$ownName.' '.$devName.'_Time '.ReadingsVal($devName,$ownName.'_Time','na').';'
          .'setreading '.$ownName.' '.$devName.'_Title '.ReadingsVal($devName,$ownName.'_Title','na').';'
          .'setreading '.$ownName.' '.$devName.'_Description '.ReadingsVal($devName,$ownName.'_Description','na').';'
          .'setreading '.$ownName.' '.$devName.'_DetailLink <html><a href=\''.ReadingsVal($devName,$ownName.'_DetailLink','na').'</a></html>;'
### 3. Hier einfügen:
          .'setreading '.$ownName.' '.$devName.'_DetailLink_URL http://www.klack.de'.ReadingsVal($devName,$ownName.'_DetailLink','na').';'
          .'setreading '.$ownName.' '.$devName.'_Image_URL '.ReadingsVal($devName,$ownName.'_Image','na').';'
###
          .'setreading '.$ownName.' '.$devName.'_Image <html><a href=\'http://www.klack.de'.ReadingsVal($devName,$ownName.'_DetailLink','na').'\'><img src=\''.ReadingsVal($devName,$ownName.'_Image','na').'\'></a></html>;';
        $errors = '';
        $errors = AnalyzeCommandChain (undef, $cmd);
        if (!defined($errors)) {
          #Log3($ownName, 3, 'Sucsessfully new defined/changed readings to '.$ownName.'!');
        }
        else {
          Log3($ownName, 5, 'Notify '.$event.' changed readings to '.$ownName.' cause error: '.$errors.'!');
          Log3($ownName, 5, $cmd);
        }
      }
      if ($devName eq InternalVal($ownName,"TV_Program_PTNEXT","TV_Program_PTNEXT")) {
        $daytime = "_PTNEXT";
        $cmd = 'setreading '.$ownName.' '.$devName.'_Time '.ReadingsVal($devName,$ownName.'_Time','na').';'
          .'setreading '.$ownName.' '.$devName.'_Title '.ReadingsVal($devName,$ownName.'_Title','na').';'
          .'setreading '.$ownName.' '.$devName.'_Description '.ReadingsVal($devName,$ownName.'_Description','na').';'
          .'setreading '.$ownName.' '.$devName.'_DetailLink <html><a href=\''.ReadingsVal($devName,$ownName.'_DetailLink','na').'</a></html>;'

### 4. Hier einfügen:
          .'setreading '.$ownName.' '.$devName.'_DetailLink_URL http://www.klack.de'.ReadingsVal($devName,$ownName.'_DetailLink','na').';'
          .'setreading '.$ownName.' '.$devName.'_Image_URL '.ReadingsVal($devName,$ownName.'_Image','na').';'
###
          .'setreading '.$ownName.' '.$devName.'_Image <html><a href=\'http://www.klack.de'.ReadingsVal($devName,$ownName.'_DetailLink','na').'\'><img src=\''.ReadingsVal($devName,$ownName.'_Image','na').'\'></a></html>;';
        $errors = '';
        $errors = AnalyzeCommandChain (undef, $cmd);
        if (!defined($errors)) {
          #Log3($ownName, 3, 'Sucsessfully new defined/changed readings to '.$ownName.'!');
        }
        else {
          Log3($ownName, 5, 'Notify '.$event.' changed readings to '.$ownName.' cause error: '.$errors.'!');
          Log3($ownName, 5, $cmd);
        }
      }
    }
}


Nach einem Neustart "shutdown restart" nach der Code Änderung sollten es alle TVSender Devices tun nach dem eine Änderung bei den HTTPMOD Devices erfolgt ist.
Ich schreibe es mir auf, dass es bei der nächsten Aktualisierung mit dabei ist. 

Ich hoffe es hilft,

Gernot

bjoernbo

Vielen Dank für die prompte Unterstützung. Läuft nun perfekt!
Anbei mein Beispielcode:

<table>
  <tr>
    <th rowspan="4"><div data-type="image" class="cell" data-url="img/tvlogos/ard.png" hight="10px" width="20px"
      onclick="setFhemStatus('set hub command 24775848 Number8; set hub command 24775848 Number6')"></div></th>
    <th colspan="3" bgcolor="#9b9b9b">A K T U E L L</th>
     <th></th><!-- leere Spalte-->
  </tr>
  <tr>
    <td><div data-type="label" data-device="Das_Erste" data-get="TV_Program_NOW_Time" ></div></td>
    <td></td>
    <td rowspan="3"><div data-type="image" data-device="Das_Erste" data-get="TV_Program_NOW_Image_URL" data-size="176" data-width="120"></div></td>
    <td>&nbsp;&nbsp;</td> <!-- leerer Eintrag in einer Zelle für die letzte Spalte-->
  </tr>
  <tr>
    <td></td>
    <td><div data-type="label" data-device="Das_Erste" data-get="TV_Program_NOW_Title" cell="bigger"></div></td>
  </tr>
  <tr>
    <td></td>
    <td><div data-type="label" data-device="Das_Erste" data-get="TV_Program_NOW_Description"></div></td>
  </tr>
   <tr>
    <th rowspan="4"></th>
    <th colspan="3" bgcolor="#9b9b9b">A N S C H L I E S S E N D</th>
  </tr>
  <tr>
    <td><div data-type="label" data-device="Das_Erste" data-get="TV_Program_NEXT_Time" ></div></td>
    <td></td>
    <td rowspan="3"><div data-type="image" data-device="Das_Erste" data-get="TV_Program_NEXT_Image_URL" data-size="176" data-width="120"></div></td>
  </tr>
  <tr>
    <td></td>
    <td><div data-type="label" data-device="Das_Erste" data-get="TV_Program_NEXT_Title" cell="bigger"></div></td>
  </tr>
  <tr>
    <td></td>
    <td><div data-type="label" data-device="Das_Erste" data-get="TV_Program_NEXT_Description"></div></td>
  </tr>
  <th rowspan="4"></th>
    <th colspan="3" bgcolor="#9b9b9b">P R I M E T I M E</th>
  </tr>
  <tr>
    <td><div data-type="label" data-device="Das_Erste" data-get="TV_Program_PT_Time" ></div></td>
    <td></td>
    <td rowspan="3"><div data-type="image" data-device="Das_Erste" data-get="TV_Program_PT_Image_URL" data-size="176" data-width="120"></div></td>
  </tr>
  <tr>
    <td></td>
    <td><div data-type="label" data-device="Das_Erste" data-get="TV_Program_PT_Title" cell="bigger"></div></td>
  </tr>
  <tr>
    <td></td>
    <td><div data-type="label" data-device="Das_Erste" data-get="TV_Program_PT_Description"></div></td>
  </tr>
  <th rowspan="4"></th>
    <th colspan="3" bgcolor="#9b9b9b">D A N A C H</th>
  </tr>
  <tr>
    <td><div data-type="label" data-device="Das_Erste" data-get="TV_Program_PTNEXT_Time" ></div></td>
    <td></td>
    <td rowspan="3"><div data-type="image" data-device="Das_Erste" data-get="TV_Program_PTNEXT_Image_URL" data-size="176" data-width="120"></div></td>
  </tr>
  <tr>
    <td></td>
    <td><div data-type="label" data-device="Das_Erste" data-get="TV_Program_PTNEXT_Title" cell="bigger"></div></td>
  </tr>
  <tr>
    <td></td>
    <td><div data-type="label" data-device="Das_Erste" data-get="TV_Program_PTNEXT_Description"></div></td>
  </tr>
</table>
Raspberry Pi 3 - FB6490C - Synology NAS DS916+ - NETATMO - HUE - SIEMENS G-Tag'S - FTUI - EchoDOT -

ofno

Hallo
ich habe auch mal das tolle modul ausprobiert.

Ich hatte dann bei einem Sender den Channel versucht zu ändern, auf dem HTTPMOD wurde weiter hin der alte angezeigt.

Darauf hin habe ich den Sender als Device gelöscht und neu angelegt. Im HTTPMOD steht er jetzt als letztes, obwohl ich ihn eigentlich FavoritNr  1 angelegt habe.

Konkret

ich habe define Das_Erste TVSender 161 Das%20Erste 1 angelegt und habe das 161 auf 1 geändert, leider wurde dies nicht übernommen. Gibt es einen Befehl, der das HTTPMOD komplett neu erzeugt. Um die Sortierung zu berichtigen.

Mir ist außerdem aufgefallen, dass "anschliessend" falsche Infos anzeigt und zwar die vom Vorgänger.

Danke für die Hilfe.

gruß ofno

supernova1963

#798
Hallo ofno,

vorab: Vielen Dank für den Erfahrungsbericht.
Heute habe ich eine aktuelle Version ins git gestellt. Leider ist auch dort die automatische Sortierung der Sender im stateFormat der HTTPMOD Devices nicht enthalten. Als Umgehung empfehle ich z.Zt. bei den TVSender Device in der gewünschten Reihenfolge ein

set <Sendername> UpdateAll

zumachen. Danach sollte die Reihenfolge auch in den HTTPMOD Devices stimmen. Zur Zeit wird ausschließlich innerhalb der Gruppe TV-Sender nach der Favoriten-Nr. sortiert.

Zitat von: ofno am 26 November 2017, 11:38:11
Mir ist außerdem aufgefallen, dass "anschliessend" falsche Infos anzeigt und zwar die vom Vorgänger.
Ich verstehe nicht, was du meinst. Wenn du die falschen Sendungsbilder meinst, dann ist das ein bekannter Fehler, wenn kl**k.de kein Sendungsbild zur Verfügung stellt. Ein Vorschlag für eine geeignete Regex, die dann nicht solange weitersucht, bis Sie das nächste gültige Sendungsbild findet würde mir echt weiterhelfen.
Wenn die Uhrzeit, Titel falsch sind, dann schlage ich vor:

  • Hol' dir die aktuelle Vorab-Version 0.1.1 aus dem git (wenn du den update add ... Befehl eingegeben hast, sollte es auch mit einem FHEM Update und anschliessendem Neustart funktionieren
  • Führe den "set <Sendername> UpdateAll" in der gewünschten Reihenfolge für die HTTPMOD Tabellen aus
  • Sollten immer noch falsche Infos angezeigt werden, kannst du auch die 4 HTTPMOD Devices löschen, FHEM neustarten, und erneut Schritt 2 ausführen
  • Sind die falschen Infos immer noch nicht weg, dann stelle mir bitte das "list <Sendername>" und ein "list <HTTPMOD-Device>" zur Verfügung

Ich hoffe, es hilft,

Gernot

P.S.: Würdet ihr bitte eure Berichte, Fragen, Anregungen und Lösungen hier: Thema: [geändert]TV Programm automatisieren - Vorschlag mit der Bitte um Unterstützung posten.

bjoernbo

Wie füge ich den N-TV zu?

Zitatdefine N-TV TVSender 173 N-TV 1

ZitatInvalid characters in name (not A-Za-z0-9._): N-TV


mit welchem Sonderzeichen / Platzhalter muss ich hier arbeiten?
Raspberry Pi 3 - FB6490C - Synology NAS DS916+ - NETATMO - HUE - SIEMENS G-Tag'S - FTUI - EchoDOT -

CoolTux

Ups das hätte ich erwähnen sollen. Es gibt Zeichen die nicht mehr bei Devicenamen erwünscht sind Gernot. Beim Define wird auf korrekte Zeichen geprüft. Ich glaube das Kollidiert mit Deiner Logik, oder? Wenn nicht gibt es FHEM Funktionen die automatisch einen passenden Namen aus dem machen was die User angeben.

makeDeviceName($name);




Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

supernova1963

Hallo zusammen,

Der devicename wird nur für die Suche verwendet, wenn der Parameter ChannelName nicht eingeben wurde.
Auch aus diesem Grund habe ich das set <Devicename> ChannelName mit DropDown in denen sich die derzeit gültigen Suchbegriffe für  kl**k.de befinden mit deiner Hilfe, CoolTux, angelegt.

Der DeviceName wird ausschließlich für die Benennung der Readings verwendet und sollte sogar keine Sonderzeichen enthalten.

Konkret: Devicename «ntv» ChannelName aus DropDown Box auswählen!


Gernot

bjoernbo

ah.... ok ..... verstanden. Danke
Raspberry Pi 3 - FB6490C - Synology NAS DS916+ - NETATMO - HUE - SIEMENS G-Tag'S - FTUI - EchoDOT -

bjoernbo

#803
Mir ist aufgefallen, dass seitdem ich das Modul im Einsatz habe ich eine sehr hohe Last auf dem Pi habe und das laden von FHEM sehr lange dauert. Da ich jedoch in der letzen Zeit keine weiteren Module konfiguriert habe, ich aber auch nicht wirklich ausschließen kann ob es nun wirklich am TVSender-Modul liegt mal die Frage in die Runde wie es bei den anderen Usern aussieht.

Kann man ggf. über Attribute steuern, dass die Fotos nicht geladen werden sollen? Denn, wer FTUI im Einsatz hat, kann sich die Bilder ja in FHEM sparen und fügt im FTUI Code lediglich den Image Detail Link ein. Somit müssten die Bilder nicht alle vorher geladen werden.

Bei 14 Sendern X 4 kommt da schon was zusammen: 56
Raspberry Pi 3 - FB6490C - Synology NAS DS916+ - NETATMO - HUE - SIEMENS G-Tag'S - FTUI - EchoDOT -

rasti

Zitat von: bjoernbo am 02 Dezember 2017, 07:26:03
Mir ist aufgefallen, dass seitdem ich das Modul im Einsatz habe ich eine sehr hohe Last auf dem Pi habe und das laden von FHEM sehr lange dauert. Da ich jedoch in der letzen Zeit keine weiteren Module konfiguriert habe, ich aber auch nicht wirklich ausschließen kann ob es nun wirklich am TVSender-Modul liegt mal die Frage in die Runde wie es bei den anderen Usern aussieht.

Kann man ggf. über Attribute steuern, dass die Fotos nicht geladen werden sollen? Denn, wer FTUI im Einsatz hat, kann sich die Bilder ja in FHEM sparen und fügt im FTUI Code lediglich den Image Detail Link ein. Somit müssten die Bilder nicht alle vorher geladen werden.

Bei 14 Sendern X 4 kommt da schon was zusammen: 56

habe FHEM noch auf einem Pi 1 laufen und das Modul -so schön es auch sei- wegen der Last schon vor langer Zeit rausgeschmissen. Ich lade in Tablet UI einfach ein iframe mit einer in Klack konfigurierten individuellen Senderliste.


supernova1963

Hallo Bjoernbo,
hallo rasti,

ich bin mir nicht sicher, ob es wirklich an den Bilder der Sendungen liegt, da rasti ja bereits die HTTPMOD vor langer Zeit herausgeschmissen hat.
Du kannst die Anzeige der Bilder eleminieren in dem du im Modul die Zeilen zum übertragen der readings herausnimmst (oder den Code dieser sub's ersetzt).


sub TVSender_Notify($$) {
    my ($own_hash, $dev_hash) = @_;
    my $ownName = $own_hash->{NAME}; # own name / hash
    my $daytime = "";
    return "" if(IsDisabled($ownName)); # Return without any further action if the module is disabled
    my $devName = $dev_hash->{NAME}; # Device that created the events
    my $events = deviceEvents($dev_hash,1);
    my $cmd = '';
    my $errors = '';
    return if( !$events );
    if($devName eq "global" && grep(m/^INITIALIZED|REREADCFG$/, @{$events}))
    {
      Log3($ownName, 5, "Abschluss aller Intitialisierungen festgestellt ...");
    }
    foreach my $event (@{$events}) {
      $event = "" if(!defined($event));
      if ($devName eq InternalVal($ownName,"TV_Program_NOW","TV_Program_NOW")) {
        $daytime = "_NOW";
        $cmd = 'setreading '.$ownName.' '.$devName.'_Time '.ReadingsVal($devName,$ownName.'_Time','na').';'
          .'setreading '.$ownName.' '.$devName.'_Title '.ReadingsVal($devName,$ownName.'_Title','na').';'
          .'setreading '.$ownName.' '.$devName.'_Description '.ReadingsVal($devName,$ownName.'_Description','na').';'
          .'setreading '.$ownName.' '.$devName.'_DetailLink <html><a href=\''.ReadingsVal($devName,$ownName.'_DetailLink','na').'</a></html>;'
          .'setreading '.$ownName.' '.$devName.'_DetailLink_URL http://www.klack.de'.ReadingsVal($devName,$ownName.'_DetailLink','na').';'
          .'setreading '.$ownName.' '.$devName.'_Image_URL '.ReadingsVal($devName,$ownName.'_Image','na').';';
# 1. Folgende Zeile herausnehmen ACHTUNG: ";" am Ende der vorhergehenden Zeile ergänzen!
#          .'setreading '.$ownName.' '.$devName.'_Image <html><a href=\'http://www.klack.de'.ReadingsVal($devName,$ownName.'_DetailLink','na').'\'><img src=\''.ReadingsVal($devName,$ownName.'_Image','na').'\'></a></html>;';
        $errors = '';
        $errors = AnalyzeCommandChain (undef, $cmd);
        if (!defined($errors)) {
          #Log3($ownName, 3, 'Sucsessfully new defined/changed readings to '.$ownName.'!');
        }
        else {
          Log3($ownName, 5, 'Notify '.$event.' changed readings to '.$ownName.' cause error: '.$errors.'!');
          Log3($ownName, 5, $cmd);
        }
      }
      if ($devName eq InternalVal($ownName,"TV_Program_NEXT","TV_Program_NEXT")) {
        $daytime = "_NEXT";
        $cmd = 'setreading '.$ownName.' '.$devName.'_Time '.ReadingsVal($devName,$ownName.'_Time','na').';'
          .'setreading '.$ownName.' '.$devName.'_Title '.ReadingsVal($devName,$ownName.'_Title','na').';'
          .'setreading '.$ownName.' '.$devName.'_Description '.ReadingsVal($devName,$ownName.'_Description','na').';'
          .'setreading '.$ownName.' '.$devName.'_DetailLink <html><a href=\''.ReadingsVal($devName,$ownName.'_DetailLink','na').'</a></html>;'
          .'setreading '.$ownName.' '.$devName.'_DetailLink_URL http://www.klack.de'.ReadingsVal($devName,$ownName.'_DetailLink','na').';'
          .'setreading '.$ownName.' '.$devName.'_Image_URL '.ReadingsVal($devName,$ownName.'_Image','na').';';
# 1. Folgende Zeile herausnehmen ACHTUNG: ";" am Ende der vorhergehenden Zeile ergänzen!
#          .'setreading '.$ownName.' '.$devName.'_Image <html><a href=\'http://www.klack.de'.ReadingsVal($devName,$ownName.'_DetailLink','na').'\'><img src=\''.ReadingsVal($devName,$ownName.'_Image','na').'\'></a></html>;';
        $errors = '';
        $errors = AnalyzeCommandChain (undef, $cmd);
        if (!defined($errors)) {
          #Log3($ownName, 3, 'Sucsessfully new defined/changed readings to '.$ownName.'!');
        }
        else {
          Log3($ownName, 5, 'Notify '.$event.' changed readings to '.$ownName.' cause error: '.$errors.'!');
          Log3($ownName, 5, $cmd);
        }
      }
      if ($devName eq InternalVal($ownName,"TV_Program_PT","TV_Program_PT")) {
        $daytime = "_PT";
        $cmd = 'setreading '.$ownName.' '.$devName.'_Time '.ReadingsVal($devName,$ownName.'_Time','na').';'
          .'setreading '.$ownName.' '.$devName.'_Title '.ReadingsVal($devName,$ownName.'_Title','na').';'
          .'setreading '.$ownName.' '.$devName.'_Description '.ReadingsVal($devName,$ownName.'_Description','na').';'
          .'setreading '.$ownName.' '.$devName.'_DetailLink <html><a href=\''.ReadingsVal($devName,$ownName.'_DetailLink','na').'</a></html>;'
          .'setreading '.$ownName.' '.$devName.'_DetailLink_URL http://www.klack.de'.ReadingsVal($devName,$ownName.'_DetailLink','na').';'
          .'setreading '.$ownName.' '.$devName.'_Image_URL '.ReadingsVal($devName,$ownName.'_Image','na').';';
# 3. Folgende Zeile herausnehmen ACHTUNG: ";" am Ende der vorhergehenden Zeile ergänzen!
#          .'setreading '.$ownName.' '.$devName.'_Image <html><a href=\'http://www.klack.de'.ReadingsVal($devName,$ownName.'_DetailLink','na').'\'><img src=\''.ReadingsVal($devName,$ownName.'_Image','na').'\'></a></html>;';
        $errors = '';
        $errors = AnalyzeCommandChain (undef, $cmd);
        if (!defined($errors)) {
          #Log3($ownName, 3, 'Sucsessfully new defined/changed readings to '.$ownName.'!');
        }
        else {
          Log3($ownName, 5, 'Notify '.$event.' changed readings to '.$ownName.' cause error: '.$errors.'!');
          Log3($ownName, 5, $cmd);
        }
      }
      if ($devName eq InternalVal($ownName,"TV_Program_PTNEXT","TV_Program_PTNEXT")) {
        $daytime = "_PTNEXT";
        $cmd = 'setreading '.$ownName.' '.$devName.'_Time '.ReadingsVal($devName,$ownName.'_Time','na').';'
          .'setreading '.$ownName.' '.$devName.'_Title '.ReadingsVal($devName,$ownName.'_Title','na').';'
          .'setreading '.$ownName.' '.$devName.'_Description '.ReadingsVal($devName,$ownName.'_Description','na').';'
          .'setreading '.$ownName.' '.$devName.'_DetailLink <html><a href=\''.ReadingsVal($devName,$ownName.'_DetailLink','na').'</a></html>;'
          .'setreading '.$ownName.' '.$devName.'_DetailLink_URL http://www.klack.de'.ReadingsVal($devName,$ownName.'_DetailLink','na').';'
          .'setreading '.$ownName.' '.$devName.'_Image_URL '.ReadingsVal($devName,$ownName.'_Image','na').';';
# 3. Folgende Zeile herausnehmen ACHTUNG: ";" am Ende der vorhergehenden Zeile ergänzen!
#          .'setreading '.$ownName.' '.$devName.'_Image <html><a href=\'http://www.klack.de'.ReadingsVal($devName,$ownName.'_DetailLink','na').'\'><img src=\''.ReadingsVal($devName,$ownName.'_Image','na').'\'></a></html>;';
        $errors = '';
        $errors = AnalyzeCommandChain (undef, $cmd);
        if (!defined($errors)) {
          #Log3($ownName, 3, 'Sucsessfully new defined/changed readings to '.$ownName.'!');
        }
        else {
          Log3($ownName, 5, 'Notify '.$event.' changed readings to '.$ownName.' cause error: '.$errors.'!');
          Log3($ownName, 5, $cmd);
        }
      }
    }
    #TVSender_stateFormat($own_hash);
}


und im StateFormat des jeweiligen Senders:

sub TVSender_stateFormat($) {
  my ($hash) = @_;
  my $name = $hash->{"NAME"};
  my $cmd = '';
  my $errors = '';
  my $nameNOW = InternalVal($name,"TV_Program_NOW","TV_Program_NOW");
  my $nameNEXT = InternalVal($name,"TV_Program_NEXT","TV_Program_NEXT");
  my $namePT = InternalVal($name,"TV_Program_PT","TV_Program_PT");
  my $namePTNEXT = InternalVal($name,"TV_Program_PTNEXT","TV_Program_PTNEXT");
  my $stateformat = '<table width=100% >'
    .'<tr><td style="text-align: center;;background-color: #e0e0e0;;color: black" colspan=3 >A  K  T  U  E  L  L</td></tr>'
    .'<tr><td style="vertical-align: top;;text-align: right;;font-size: larger;;width: 50px" >'.$nameNOW.'_Time</td>'
    .'<td style="vertical-align: top;;text-align: left;;font-weight: bold;;font-size: larger" ><a href="/fhem?cmd=set%20'.$name.'%20Switch2Channel%201" >'.$nameNOW.'_Title</a><br /><div style="vertical-align: top;;text-align: left;;font-weight: initial;;font-size: smaller">'.$nameNOW.'_Description</div></td>'
# 4. Folgende Zeile herausnehmen
#    .'<td style="vertical-align: top;;width: 200px" >'.$nameNOW.'_Image</td></tr>'
    .'<tr><td style="text-align: center;;background-color: #e0e0e0;;color: black" colspan=3 >A  N  S  C  H  L  I  E  S  S  E  N  D</td></tr>'
    .'<tr><td style="vertical-align: top;;text-align: right;;font-size: larger;;width: 50px" >'.$nameNEXT.'_Time</td>'
    .'<td style="vertical-align: top;;text-align: left;;font-weight: bold;;font-size: larger">'.$nameNEXT.'_Title<br /><div style="vertical-align: top;;text-align: left;;font-weight: initial;;font-size: smaller">'.$nameNEXT.'_Description</div></td>'
# 5. Folgende Zeile herausnehmen
#    .'<td style="vertical-align: top;;width: 200px" >'.$nameNEXT.'_Image</td></tr>'
    .'<tr><td style="text-align: center;;background-color: #e0e0e0;;color: black" colspan=3 >P  R  I  M  E    T  I  M  E</td></tr>'
    .'<tr><td style="vertical-align: top;;text-align: right;;font-size: larger;;width: 50px" >'.$namePT.'_Time</td>'
    .'<td style="vertical-align: top;;text-align: left;;font-weight: bold;;font-size: larger" >'.$namePT.'_Title<br /><div style="vertical-align: top;;text-align: left;;font-weight: initial;;font-size: smaller">'.$namePT.'_Description</div></td>'
# 6. Folgende Zeile herausnehmen
#    .'<td style="vertical-align: top;;width: 200px" >'.$namePT.'_Image</td></tr>'
    .'<tr><td style="text-align: center;;background-color: #e0e0e0;;color: black" colspan=3 >D  A  N  A  C  H</td></tr>'
    .'<tr><td style="vertical-align: top;;text-align: right;;font-size: larger;;width: 50px" >'.$namePTNEXT.'_Time</td>'
    .'<td style="vertical-align: top;;text-align: left;;font-weight: bold;;font-size: larger" >'.$namePTNEXT.'_Title<br /><div style="vertical-align: top;;text-align: left;;font-weight: initial;;font-size: smaller">'.$namePTNEXT.'_Description</div></td>'
# 7. Folgende Zeile herausnehmen ACHTUNG .'</tr></table>'; muss stehen bleiben!
#    .'<td style="vertical-align: top;;width: 200px" >'.$namePTNEXT.'_Image</td>
    .'</tr></table>';
  $cmd = 'attr '.$name.' stateFormat '.$stateformat;
  $errors = '';
  $errors = AnalyzeCommandChain (undef, $cmd);
  if (!defined($errors)) {
    #Log3($name, 3, 'Sucsessfully new defined/changed stateFormat to '.$name.'!');
    }
  else {
    Log3($name, 5, 'Definition new attributs/changed stateFormat to '.$name.' cause error: '.$errors.'!');
    Log3($name, 5, $cmd);
  }
}

Dann sollten keine Bilder (außer dem Senderlogo mehr geladen werden).  Aber, wie gesagt, ich glaube nicht, dass das als zu viel Perfomance bringt.

LG

Gernot

CoolTux

Ich gehe davon aus das die Performance einbußen dadurch kommen das jedes HTTPMODE Modul alle 120s Daten abruft. Je nachdem wann das HTTPMODE Device angelegt wurde können auch mal 4-8 auf einmal Daten ziehen, dann parsen und und und.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

supernova1963

Hallo CoolTux,

dem kann ich folgen. Um den Vorschlag von Ronny umzusetzen, dass eine Aktualisierung nur dan erfolgt, wenn diese sein muss, also ca. 1 Minute nach der ersten folgenden Sendung benötige ich eine Tip, wie man es am besten realisiert.

Danke,

Gernot

CoolTux

Das würde nur bedingt Luft rausnehmen. Es werden immer noch 2-3 zeitgleich sein bei wenig angelegten Sendern. Du kannst nicht wissen wie viel Sender die User anlegen. Vielleicht kommt Mal einer mit 20.

Du hast doch nur 2 URLs bei den Senderabruf. Einmal das Current und einmal das 2015

Speichere die Daten wie besprochen zwischen und lass die Devices nur aus dem Datenstore lesen. Ich weiß ist viel Aufwand, aber mir persönlich fällt nichts besseres ein.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

supernova1963

Hallo zusammen,

nur zur Klarstellung z.Zt. wird 4 x alle 120 Sekunden die Seiten von kl**k.de von den HTTPMOD Devices abgerufen, egal wieviele Sender definiert sind.
Die Readings der Sender werden nur bei Änderung der HTTMOD Devices aktualisiert.

@CoolTux: Mit deinem Master Device Vorschlag könnte man das laden auf 2 Mal reduzieren.

Gernot