Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. TV Programm Mini Anzeige - HTML Tabelle

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.0k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.0k

TV Programm Mini Anzeige - HTML Tabelle

TV Programm Mini Anzeige - HTML Tabelle

Scheduled Pinned Locked Moved JavaScript
javascript
327 Posts 20 Posters 50.0k Views 29 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • sigi234S sigi234

    @liv-in-sky

    TV-läuftjetzt-script:

    20:43:16.441	info	javascript.0 (10316) Stop script script.js.Listen.TV_Programm_jetzt
    20:43:16.446	info	javascript.0 (10316) Start javascript script.js.Listen.TV_Programm_jetzt
    20:43:16.449	info	javascript.0 (10316) script.js.Listen.TV_Programm_jetzt: registered 0 subscriptions and 1 schedule
    20:43:16.449	info	javascript.0 (10316) script.js.Listen.TV_Programm_jetzt: bin raus getTV
    20:43:16.512	info	javascript.0 (10316) script.js.Listen.TV_Programm_jetzt: bin in holeTV
    20:43:16.514	info	javascript.0 (10316) script.js.Listen.TV_Programm_jetzt: bin raus getTV
    20:43:16.514	info	javascript.0 (10316) script.js.Listen.TV_Programm_jetzt: bin hier
    20:43:16.514	info	javascript.0 (10316) script.js.Listen.TV_Programm_jetzt: bin hier
    20:43:16.515	info	javascript.0 (10316) script.js.Listen.TV_Programm_jetzt: bin raus aus tabelleBind
    

    Es kommt Nix.

    liv-in-skyL Offline
    liv-in-skyL Offline
    liv-in-sky
    wrote on last edited by liv-in-sky
    #3

    
    // @liv-in-sky 28.2.2020-14:19
    
    
    //HIER WIRD PFAD UND FILENAME DEFINIERT
    const path = "/htmltvjetzt.html";                   //FIlenamen definieren
    const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
    let   braucheEinFile=false;                          // bei true wird ein file geschrieben
    let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
    let dpVIS="controll-own.0.TABELLEN.TVjetzt"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget Type: String
    let dpVISReminder="controll-own.0.TABELLEN.TVReminder"          //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget Type : String
    let mySchedule="  */20 9-23,0 * * * ";                        
    let symbolLink="📌";                                                                    //  👎  💀 ❌  ⚪  ⚫ ⭕  🔴 🔵 🌎 🚩 🗺 🕸️ 📌
    let symbolLinkhoerzu="📺"
    let farbeSchalterON="blue";
    let erinnerung=true;
    let symbolLinkReminder="⏰";
     let farbeErinnerung="white";          // farbe des reminders in tabelle
     let symbolSavedReminder="🔔";                     //  das symbol am ende der tabelle für gesicherte reminder
    //---------------------------------------
    
    //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
    var htmlFeld1='SENDER';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
    var htmlFeld2='SEIT';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
    var htmlFeld3='SENDUNG';         var Feld3lAlign="left";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
    //-----------------------------------
    
    
    //hier werden die styles für die tabelle definiert
    //ÜBERSCHRIFT ÜBER TABELLE
    let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
    let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
    const htmlFeldUeber='Jetzt im TV Programm';              // Überschrift und Signature
    const htmlFarbUber="white";                         // Farbe der Überschrift
    const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
    const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
    //MEHRERE TABELLEN NEBENEINANDER
    let   mehrfachTabelle=1;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
    const trennungsLinie="2";                             //extra trennungslinie bei mehrfachtabellen - evtl auf 0 stellen, wnn htmlRahmenLinien auf none sind
    const farbetrennungsLinie="white";
    const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
    const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
    //ÜBERSCHRIFT SPALTEN
    const UeberSchriftHöhe="35";                          //Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
    const LinieUnterUeberschrift="3";                   // Linie nur unter Spaltenüberschrift - 
    const farbeLinieUnterUeberschrift="white";
    const groesseUeberschrift=16;
    const UeberschriftStyle="normal"                     // möglich "bold"
    //GANZE TABELLE
    let abstandZelle="1";
    let farbeUngeradeZeilen="#000000";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
    let farbeGeradeZeilen="#151515";                        //Farbe für gerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
    let weite="auto";                                     //Weite der Tabelle
    let zentriert=true;                                   //ganze tabelle zentriert
    const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
    const htmlSchriftart="Helvetica";
    const htmlSchriftgroesse="14px";
    //FELDER UND RAHMEN
    let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
    const htmlFarbFelderschrift="#BDBDBD";                  // SchriftFarbe der Felder
    const htmlFarbFelderschrift2="#D8D8D8";                 // SchriftFarbe der Felder für jede 2te Tabelle
    const htmlFarbTableColorGradient1="#424242";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
    const htmlFarbTableColorGradient2="#424242";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
    const htmlFarbTableBorderColor="grey";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
    let htmlRahmenLinien="none";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
    const htmlSpalte1Weite="auto";                   //  Weite der ersten beiden  Spalten oder z.b. 115px
    
    // HIER NICHTS  ÄNDERN
    
    let borderHelpBottum;
    let borderHelpRight;
    let htmlcenterHelp;
    let htmlcenterHelp2;
    
    if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
    if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
    if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
    if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
    zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
    zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";
    
    
    const htmlZentriert='<center>'
    const htmlStart=    "<!DOCTYPE html><html lang=\"de\"><head><title>Vorlage</title><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"+
                       "<style> * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                       " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                      // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                      "a:link { text-decoration:none;}"+
                       " td { padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                       " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                       "td:nth-child(1) {width: "+htmlSpalte1Weite+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite+"}"+
                       " </style></head><body> <div>";
    //const htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"</p>";                    
    const htmlTabStyle= "<table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                          "; font-family:"+htmlSchriftart+";background-image: linear-gradient(42deg,"+htmlFarbTableColorGradient2+","+htmlFarbTableColorGradient1+");\">";
    const htmlTabUeber1="<tr height=\""+UeberSchriftHöhe+"\" style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \">";
    const htmlTabUeber3="</tr>";
    
    
    //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3
    
       	var htmlTabUeber2="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;&ensp;&ensp;<a href=\"https:\/\/"+ "www.hoerzu.de\/tv-programm\/" + "\" target=\"_blank\" onclick=\"window.open(this.href,this.target,\'width=960,height=640\'); return false;\">"+symbolLinkhoerzu+"</a></td>";
    var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                       "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
    const buttonScript = '<script> function setOnClickCustom( myvalue ) {	var Self = this; var objID = myvalue;	 var2 = \"' + dpVISReminder + '\"; Self.servConn.setState(var2, myvalue);  console.log("reminder"); } ' +
                        ' function schliesseWindowA(valButtonSingle, namely, auswahl) { console.log(namely); valButtonSingle=valButtonSingle+\"?dummyParameter=\"+new Date().getTime(); console.log(valButtonSingle); window[namely]=window.open(valButtonSingle ,\'_blank\',\' width=680, height=640 , top=170,  left=200\'); console.log(auswahl);setOnDblClickCustom(auswahl); setTimeout (function() \{ window[namely].close(); console.log(\"close\"); \}, 20000);} </script>'              
    //------------------------------------------------------
    
    var url='https://www.hoerzu.de/tv-programm/jetzt/';
    const request = require('request-promise-native');
    let auswahlHelp=1;
    var htmlTabUeber="";
    var htmlOut="";
    var mix;
    var counter;
    //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
    var val1; var val0; var val2;
    
    async function writeHTML(){
    
    
    
    
    htmlOut="";
    
    counter=-1;
    htmlTabUeber="";
    switch (mehrfachTabelle) { 
       case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
       case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
       case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
       case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
    };   
    if (!UeberschriftSpalten) {htmlTabUeber=""}
    
    
    //--------------------------------------------------------------------------------------------------------------------------------------------------
    //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
    //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
    //--------------------------------------------------------------------------------------------------------------------------------------------------
    
    
    getTV().then(function() {
      
    
    var myOjects= myObjFilterHelp;
    
    
    //var myOjects=holeTV();
    for (var index in myOjects) {   
              counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
               
          val1=myOjects[index][0]; val1=val1.replace( /,/g , "");/*log(val1);*/ let val1help=val1; val1="um "+val1; //zeit
          val0=myOjects[index][1]; val0=val0.replace( /,/g , ""); //log(val0); 
         
          val2=myOjects[index][2]; val2=val2.replace( /,/g , ""); val2=val2.replace(/-$/,"");    // val2=val2.substring(0,37)+" ..."; //log(val2);
           let valButton2;
          
          if (val2.length>=33)   val2=val2.substring(0,32)+" ..."  //log(val2);
          if (erinnerung) {valButton2=val1help+","+ val0 + "," + val2; val0="<button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\" value=\"toggle\" onclick=\"setOnClickCustom\(\'"+valButton2+"\')\">"+symbolLinkReminder + "</button>"+val0;}
          let valButton=myOjects[index][3]; valButton='https://www.hoerzu.de/tv-programm'+valButton; //log(valButton);                                                                                                   //, \'_blank\'
          let namlyMain= "mywin"+index;  
          val2="<button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\"  onclick=\"schliesseWindowA\(\'"+valButton+"\', \'"+namlyMain+"\', \'"+auswahlHelp+"\')\">"+symbolLink+" </button>" +val2;
       
         tabelleBind(); 
        
    
       }; 
         if (erinnerung && existsState(dpVISReminder)){
                  if (getState(dpVISReminder).val!=""){
                       var valHelpi=getState(dpVISReminder).val.split(",")
                       val0="&ensp;"+symbolSavedReminder+"<i> <font color=\""+farbeErinnerung+"\">"+valHelpi[1]+"</i>";  
                       if (valHelpi[0]!=undefined){
                           let  istGueltig=formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm")
         
                           if ( ((parseFloat((valHelpi[0].slice(0, (valHelpi[0].indexOf(':') + 1) - 1))) *60) + parseFloat((valHelpi[0].slice(((valHelpi[0].indexOf(':') + 1 + 1) - 1), valHelpi[0].length)))) >=  ((parseFloat((istGueltig.slice(0, (istGueltig.indexOf(':') + 1) - 1))))*60)  + parseFloat((istGueltig.slice(((istGueltig.indexOf(':') + 1 + 1) - 1), istGueltig.length))) )  {
                                counter++;   //log("ist true")            
                                val1="<i><font color=\""+farbeErinnerung+"\">um "+valHelpi[0]+"</i>";
                                val2="<i><font color=\""+farbeErinnerung+"\">&ensp;&ensp;&ensp;"+valHelpi[2]+"<i>";
                                tabelleBind();} 
                           else {setState(dpVISReminder,"");}
       
                                                   } } }
    
    }).then(tabelleFinish)
    
    //-------------------------------------------------------------------------------------------------------------------------------------------------
    //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
    //-------------------------------------------------------------------------------------------------------------------------------------------------
    
     
         
    } // function ende
    
    //MAIN:
     
    schedule(mySchedule,  function () { 
     writeHTML();
     //if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
    }); 
    writeHTML();
    //writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });
    
    async function tabelleBind(){
       //  counter=counter+mehrfachTabelle;
           switch (mehrfachTabelle) { 
    
             case 1: if(counter%2==0)         {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;}else    
                                              {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;}
             case 2: if(counter%4==0){
                        if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                            ";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                   else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;
                          }else{
                                    if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                            ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                   else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;}
                                        
             case 3:if(counter%2==0)   {
                        if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                            ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } //Teil1 c=0
                                   else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                            "; \"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} //Teil 2 c=1
                                                    else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";} //Teil 3 c=3
                                              } break;}else{
                        if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                            ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                   else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                            ";\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                    else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                              } break;}                                          
    
    
             case 4:  // counter=counter+8;
                       if(counter%8==0)   {
                       if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+ farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } // teil1
                                       else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} //teil 2
                                                    else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} //teil 4
                                                                      else    {htmlOut  = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"  align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                              } break;}else{
                       if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } //teil 1
                                       else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} // teil 2
                                                    else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} // teil 4
                                                                      else    {htmlOut  = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                              } break;}                                    
            } //switch ende
    
    }
    
    async  function tabelleFinish() {
    
    switch (mehrfachTabelle) {  
           case 1:    break;
    
           case 2:    
                      if(counter%2==0)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                    
                      break;
    
           case 3:   if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                     if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");        
                     if(counter%3==0)      htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                   
                      break;
           case 4:   if(counter%4==3)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                     if(counter%4==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                     if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");    
                     if(counter%4==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");      
                     break; }
         
             var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
           var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>";
            
            if (!htmlSignature) htmlUnter="";
              //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
               var htmlOutVIS="";
             //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                if (htmlUberschrift) 
                    { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+buttonScript  : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter +buttonScript ;
    
                  } else {
                   zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+buttonScript  :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+buttonScript ;
    
                     }
                     
    
      // log("bin raus aus tabelleBind");
               if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
    
     var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>"
    
     if (!htmlSignature) htmlUnter="";
      var htmlEnd="</table>"+htmlUnter+"</div></body>";
     //mit oder ohne überschrift - zentriert oder links
    htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
     //log(htmlOut);
    
    
    }
    
    
    var gesucht="";
    var gefunden="";
    var gefunden_2="";
    var gefunden2="";
    var gefunden2_2=""; 
    
    var myArr2=[];   var myArr22=[];  var myArr222=[];
    var myArr2_2=[]; var myArr22_2=[];
    var myArr3=[];
    var myArr3_2=[];
    var myArr4=[];
    var myObj=[];
    var myObjFilter=[];
    var counterlein=0;
    var allesDa=true;
       var vorher=""; 
      var jetzt; 
      var myObjFilterHelp=[] ; 
    
    
    async function getTV(){
       return new Promise(async (resolve, reject) => {
    //try {
      await request(url, async function (error, response, result) {
      //console.log("result: "+result);
      gesucht="";
      gesucht=result;  //log(" gesucht - direct_____________JETZT: "+ gesucht);
       // setState("controll-own.0.AAATEST.TVTVTVTV",result);
        holeTV(gesucht);
        //log("bin raus getTV");
        if (gesucht!="") {resolve()} else {reject()}
    ;  }).on("error", function (e) {console.error(e);});
    
      //log("bin raus getTV");
     });
    
    }
    
    async function holeTV(gesuchtVal){
    //log("bin in holeTV");
     gesucht="";
    gefunden="";
    gefunden_2="";
    gefunden2="";
    gefunden2_2=""; 
    
    myArr2=[];    myArr22=[];   myArr222=[]; 
    myArr2_2=[];  myArr22_2=[];
    myArr3=[];
    myArr3_2=[];
    myArr4=[];
    myObj=[];
    myObjFilter=[];
         vorher=""; 
    
      myObjFilterHelp=[] ; 
    
    counterlein=0;
    var re =/\s<a title=".+?" name="bid_/g;
    
    gesucht = gesuchtVal;
    
    gefunden= "fff"+gesucht.match(re);
    
    
             let helper2=[];
              let helper=gefunden.match(/\".+?" name="bid_/g);
              // log("--------"+helper.length.toString());
             for (var i=0;i<helper.length;i++){
                 let hhh= helper[i].replace(/,/g, " --");// 
                 hhh= hhh.replace(/\'/g, " ");//          
              // if(i<1) log(hhh)
                 hhh=hhh.replace(/ (\d\d):(\d\d) /g, " $1\-\-\-$2");
              // if(i<1)  log(hhh)
                 hhh=hhh.replace(/\:/g, ";");
              // if(i<1)   log(hhh)
                 hhh=hhh.replace(/(\d\d)---(\d\d)/g, " $1:$2 ");
              // if(i>20 && i<25)   log(hhh)
                 hhh=hhh.replace(/www\..+\/tv-pro/g, "tv-pro");   // vernichtet punkte am ende
                 hhh=hhh.replace(/(\d\d\.\d\d\..+)\.(.+)\" data/g, "$1x_y_x$2 data"); //ersetzt punkt in sendernamen (sat.1)
              // if(i>20 && i<25)  log("++++++++++++++++++++"+hhh)
                 hhh=hhh.replace(/(^.+?)\.+(.+?\d\d\.\d\d\.)/g, "$1x_x_x$2"); //ersetzt punkte im datum
              // if(i>20 && i<25)  log("++++++++++++++++++++"+hhh)
                 hhh=hhh.replace(/\*/g, "_");
                 hhh=hhh.replace(/ data.+programm(.+)/g,"bbb$1");
              //  if(i>20 && i<25)    log("++++++++++++++++++++"+hhh)
             
                 helper2.push(hhh)
             }
    
    var myArr    =helper2.toString().split(",");
    
    //log(myArr.length.toString()+"---"+myArr[3].toString());
    
    for(var i=0;i<myArr.length;i++){   var haken=myArr[i].replace( /,>/g , "");       myArr22.push(haken);}  // /,>/g , ""
    for(var i=0;i<myArr22.length;i++){  var    haken=myArr22[i].replace("xxx","");     myArr222.push(haken);}  // /,>/g , ""
    for(var i=0;i<myArr222.length;i++){  var    haken=myArr222[i].replace(/\"/g,"");     myArr2.push(haken);if (i<0) log(myArr2[i])}  // /,>/g , ""
    
    
    
               
    
     for(var i=0;i<myArr2.length;i++) {
       let val4help= myArr2[i].slice(((myArr2[i].indexOf('bbb') + 1 + 3) - 1), myArr2[i].length); val4help=val4help.replace(/ name=bid_/g,""); if(i<0) log(val4help)
       let val3= myArr2[i].slice(0, (myArr2[i].indexOf(':') + 1) - 5).trim(); val3=val3.replace(/x_x_x/g,"."); val3=val3.replace(/x_y_x/g,".") // val3=val3.slice(0, (val3.lastIndexOf('-') + 1) - 1);   // sendung
       let val2=myArr2[i].slice(((myArr2[i].lastIndexOf('.') + 1 + 1) - 1), myArr2[i].length).trim();val2=val2.replace(/bbb.+/g,"") ;;if(i<0) log(val2); val2=val2.replace(/x_x_x/g,".");  val2=val2.replace(/x_y_x/g,".")// sender
       let val1=myArr2[i].slice((((myArr2[i].lastIndexOf(':') + 1) - 2) - 1), myArr2[i].indexOf(':') + 1 + 2).trim();                // uhrzeit
          
        myObj.push([val1,val2,val3,val4help]);
      
     }
    
    
    
    var mySort = ["Tele 5","Fix&Foxi","Nicktoons","VH1 Classic","MTV Brand New","Gute Laune TV","Nautical Channel",
    "Silverline","Penthouse Passion HD","Playboy TV","Lust Pur","Blue Hustler","RTL Living","Disney XD","RCK TV","MTV",
    "Animal Planet","Planet","Geo Television","auto motor und sport channel","Extreme Sports Channel","SPORT1+","RTL Passion",
    "RTL Crime","ProSieben Fun", "1 emotions","kabel eins classics","Sony Channel","Sony AXN","Jukebox","MTV Live HD","MTV HD",
    "Stingray Classica","Boomerang","Cartoon Network","Disney Junior","Junior","TV","Heimatkanal","E! Entertainment","TNT Comedy",
    "Romance TV","Kinowelt TV","TNT Film","TNT Serie","Universal TV","FOX","Syfy","13TH STREET","Spiegel TV Wissen","Spiegel Geschichte",
    "Crime + Investigation","History","Der Buckingham-Palast - Geheimnisse -- Affären","National Geographic Wild",
    "National Geographic","Discovery Channel","Motorvision TV","Sportdigital Fußball","Eurosport 2","Sky Sport Austria 1",
    "Sky Sport News HD","Sky Sport 2 HD","Sky Sport 1 HD","Sky Sport Bundesliga 1","Sky Krimi","Sky 1","Sky Atlantic HD",
    "Sky Cinema Special HD","Sky Cinema Family HD","Sky Cinema Nostalgie","Sky Cinema Emotion","Sky Cinema Comedy",
    "Sky Cinema Action","Sky Cinema Hits","Sky Cinema +24","Sky Cinema +1","Sky Cinema","TRT Türk","TV 2","DR 1",
    "Rouge TV","France 24","TV5MONDE","CNBC Paneurope","CNN","BBC World News","BBC Entertainment","Die Neue Zeit",
    "Bibel TV","Star TV","Schweiz 5","5plus","3plus","SRF info","SRF 2","SRF 1","sixx Austria","Puls 4","ATV2","ATV",
    "Spreekanal","rheinmainTV","Rhein-Neckar-Fernsehen","München TV","Hamburg 1","ORF Sport +","ORF 3","ORF 2","ORF 1",
    "Franken Fernsehen","Berlin","DW English","Deutsches Anleger Fernsehen","tv","Channel 21","HSE24","QVC",
    "Deutsches Musik Fernsehen","Deluxe Music","RiC","Anixe Plus","Anixe HD Serie","TLC","Health TV","Home & Garden TV",
    "RTL Plus","VOXup","1 Gold","DMAX","ProSieben Maxx","N24 Doku","Kabel 1 Doku","eSports1","SPORT1","Eurosport 1",
    "Zee One","Comedy Central","Nick","KiKA","Tele 5","Disney Channel","Euronews","Welt der Wunder","01. NDR","02. NDR",
    "WELT","Beate-Uhse.TV","sonnenklar.tv","TV.Berlin","Stingray Classica","Sat.1 emotions","Sat.1 Gold","tagesschau24","NICK Jr.","BonGusto"];
    var fehlendeFilter=["One","ZDFinfo","ZDFneo","tagesschau24","ARD alpha","Phoenix","RBB","HR","SWR","BR","MDR","WDR","n-tv",
                       "NDR","3sat","Arte","VOX","RTL Zwei","kabel eins","ProSieben","1","RTL","ZDF","Das Erste","NITRO","Servus TV","Sixx","Super RTL"];
    
    
       for (var b =0; b<myObj.length; b++){
       
      
          if(!mySort.includes(myObj[b][1].trim()) && myObj[b][1].trim()!="" ) 
          { 
          myObjFilter.push(myObj[b]);
       
          } else{
              //myObjFilter.push(myObj[ind2]);
            // log("filtered"+myObj[b][1])
             }
       
     }
     //log("gefiltert"+myObjFilter.toString());
                
    for (var b =0; b<myObjFilter.length; b++){
       //log("vorher: "+ vorher+ " object: "+myObjFilter[b][1]);
      if (myObjFilter[b][1]!=vorher){myObjFilterHelp.push(myObjFilter[b]); vorher =myObjFilter[b][1] } else{}
    
    }
    
    
    
    for(var index in myObjFilter) {counterlein++; /*log(counterlein.toString())*/}
    
    
    return myObjFilterHelp;
    
    
    }
    
           on({id: dpVISReminder, ack: false, change: "any"}, function (obj) { 
           //log(getState(dpANLEGEN).val+"----refresh");
           var timeout2 = setTimeout(function () {
           
                 if (existsState(dpVISReminder)){
                  if (getState(dpVISReminder).val!=""){
                       var valHelpi=getState(dpVISReminder).val.split(",")
                       val0="&ensp;"+symbolSavedReminder+"<i> <font color=\""+farbeErinnerung+"\">"+valHelpi[1]+"</i>";  
                       if (valHelpi[0]!=undefined){
                           let  istGueltig=formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm")
         
                           if ( ((parseFloat((valHelpi[0].slice(0, (valHelpi[0].indexOf(':') + 1) - 1))) *60) + parseFloat((valHelpi[0].slice(((valHelpi[0].indexOf(':') + 1 + 1) - 1), valHelpi[0].length)))) >=  ((parseFloat((istGueltig.slice(0, (istGueltig.indexOf(':') + 1) - 1))))*60)  + parseFloat((istGueltig.slice(((istGueltig.indexOf(':') + 1 + 1) - 1), istGueltig.length))) )  {
                            writeHTML();
                           
                           }        } } }
    
       }, 1500);
       });
    
    
    
    
    
    

    // @liv-in-sky 28.2.2020-14:19
    
    
    //HIER WIRD PFAD UND FILENAME DEFINIERT
    const path = "/htmltv2200.html";                   //FIlenamen definieren
    const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
    let   braucheEinFile=false;                          // bei true wird ein file geschrieben
    let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
    let dpVIS="controll-own.0.TABELLEN.TV2200"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget Type: String
    let dpVISReminder="controll-own.0.TABELLEN.TVReminder"          //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget Type : String 
    let mySchedule="  */20 9-23,0 * * * ";                        
     var symbolLink="📌";                                                                    //  👎  💀 ❌  ⚪  ⚫ ⭕  🔴 🔵 🌎 🚩 🗺 🕸️ 📌
     let symbolLinkhoerzu="📺"
    let farbeSchalterON="blue";
     let erinnerung=true;
    let symbolLinkReminder="⏰";
     let farbeErinnerung="white";          // farbe des reminders in tabelle
     let symbolSavedReminder="🔔";                     //  das symbol am ende der tabelle für gesicherte reminder
    //---------------------------------------
    
    //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
    var htmlFeld1='SENDER';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
    var htmlFeld2='22:00';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
    var htmlFeld3='SENDUNG';         var Feld3lAlign="left";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
    //-----------------------------------
    
    
    //hier werden die styles für die tabelle definiert
    //ÜBERSCHRIFT ÜBER TABELLE
    let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
    let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
    const htmlFeldUeber='TV Programm um 22:00';              // Überschrift und Signature
    const htmlFarbUber="white";                         // Farbe der Überschrift
    const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
    const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
    //MEHRERE TABELLEN NEBENEINANDER
    let   mehrfachTabelle=1;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
    const trennungsLinie="2";                             //extra trennungslinie bei mehrfachtabellen - evtl auf 0 stellen, wnn htmlRahmenLinien auf none sind
    const farbetrennungsLinie="white";
    const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
    const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
    //ÜBERSCHRIFT SPALTEN
    const UeberSchriftHöhe="35";                          //Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
    const LinieUnterUeberschrift="3";                   // Linie nur unter Spaltenüberschrift - 
    const farbeLinieUnterUeberschrift="white";
    const groesseUeberschrift=16;
    const UeberschriftStyle="normal"                     // möglich "bold"
    //GANZE TABELLE
    let abstandZelle="1";
    let farbeUngeradeZeilen="#000000";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
    let farbeGeradeZeilen="#151515";                        //Farbe für gerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
    let weite="auto";                                     //Weite der Tabelle
    let zentriert=true;                                   //ganze tabelle zentriert
    const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
    const htmlSchriftart="Helvetica";
    const htmlSchriftgroesse="14px";
    //FELDER UND RAHMEN
    let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
    const htmlFarbFelderschrift="#BDBDBD";                  // SchriftFarbe der Felder
    const htmlFarbFelderschrift2="#D8D8D8";                 // SchriftFarbe der Felder für jede 2te Tabelle
    const htmlFarbTableColorGradient1="#424242";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
    const htmlFarbTableColorGradient2="#424242";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
    const htmlFarbTableBorderColor="grey";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
    let htmlRahmenLinien="none";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
    const htmlSpalte1Weite="auto";                   //  Weite der ersten beiden  Spalten oder z.b. 115px
    
    // HIER NICHTS  ÄNDERN
    
    let borderHelpBottum;
    let borderHelpRight;
    let htmlcenterHelp;
    let htmlcenterHelp2;
    
    if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
    if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
    if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
    if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
    zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
    zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";
    
    
    const htmlZentriert='<center>'
    const htmlStart=    "<!DOCTYPE html><html lang=\"de\"><head><title>Vorlage</title><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"+
                       "<style> * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                       " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                      // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                      "a:link { text-decoration:none;}"+
                       " td { padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                       " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                       "td:nth-child(1) {width: "+htmlSpalte1Weite+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite+"}"+
                       " </style></head><body> <div>";
    //const htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"</p>";                    
    const htmlTabStyle= "<table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                          "; font-family:"+htmlSchriftart+";background-image: linear-gradient(42deg,"+htmlFarbTableColorGradient2+","+htmlFarbTableColorGradient1+");\">";
    const htmlTabUeber1="<tr height=\""+UeberSchriftHöhe+"\" style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \">";
    const htmlTabUeber3="</tr>";
    
    
    //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3
    
    var htmlTabUeber2="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;&ensp;&ensp;<a href=\"https:\/\/"+ "www.hoerzu.de\/tv-programm\/" + "\" target=\"_blank\" onclick=\"window.open(this.href,this.target,\'width=960,height=640\'); return false;\">"+symbolLinkhoerzu+"</a></td>";
    var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                       "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
    const buttonScript = '<script> function setOnClickCustom( myvalue ) {	var Self = this; var objID = myvalue;	 var2 = \"' + dpVISReminder + '\"; Self.servConn.setState(var2, myvalue);  console.log("reminder"); } ' +
                        ' function schliesseWindowA(valButtonSingle, namely, auswahl) { console.log(namely); valButtonSingle=valButtonSingle+\"?dummyParameter=\"+new Date().getTime(); console.log(valButtonSingle); window[namely]=window.open(valButtonSingle ,\'_blank\',\' width=680, height=640 , top=170,  left=200\'); console.log(auswahl);setOnDblClickCustom(auswahl); setTimeout (function() \{ window[namely].close(); console.log(\"close\"); \}, 20000);} </script>'                  
    
    //------------------------------------------------------
    
    var url='https://www.hoerzu.de/tv-programm/heute/22:30/';
    const request = require('request-promise-native');
    let auswahlHelp=1;
    var htmlTabUeber="";
    var htmlOut="";
    var mix;
    var counter;
    //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
    var val1; var val0; var val2;
    
    async function writeHTML(){
    
    
    
    
    htmlOut="";
    
    counter=-1;
    htmlTabUeber="";
    switch (mehrfachTabelle) { 
       case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
       case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
       case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
       case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
    };   
    if (!UeberschriftSpalten) {htmlTabUeber=""}
    
    
    //--------------------------------------------------------------------------------------------------------------------------------------------------
    //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
    //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
    //--------------------------------------------------------------------------------------------------------------------------------------------------
    
    
    getTV().then(function() {
      
    
    var myOjects= myObjFilterHelp;
    
    
    //var myOjects=holeTV();
    for (var index in myOjects) {   
              counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
               
          val1=myOjects[index][0]; val1=val1.replace( /,/g , "");/*log(val1);*/ let val1help=val1; val1="um "+val1; //zeit
          val0=myOjects[index][1]; val0=val0.replace( /,/g , ""); //log(val0); 
         
          val2=myOjects[index][2]; val2=val2.replace( /,/g , ""); val2=val2.replace(/-$/,"");    // val2=val2.substring(0,37)+" ..."; //log(val2);
           let valButton2;
          
          if (val2.length>=33)   val2=val2.substring(0,32)+" ..."  //log(val2);
          if (erinnerung) {valButton2=val1help+","+ val0 + "," + val2; val0="<button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\" value=\"toggle\" onclick=\"setOnClickCustom\(\'"+valButton2+"\')\">"+symbolLinkReminder + "</button>"+val0;}
          let valButton=myOjects[index][3]; valButton='https://www.hoerzu.de/tv-programm'+valButton; //log(valButton);                                                                                                   //, \'_blank\'
         let namlyMain= "mywin"+index;  
         val2="<button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\"  onclick=\"schliesseWindowA\(\'"+valButton+"\', \'"+namlyMain+"\', \'"+auswahlHelp+"\')\">"+symbolLink+" </button>" +val2;
       
         tabelleBind(); 
        
    
       }; 
         if (erinnerung && existsState(dpVISReminder)){
                  if (getState(dpVISReminder).val!=""){
                       var valHelpi=getState(dpVISReminder).val.split(",")
                       val0="&ensp;"+symbolSavedReminder+"<i> <font color=\""+farbeErinnerung+"\">"+valHelpi[1]+"</i>";  
                       if (valHelpi[0]!=undefined){
                           let  istGueltig=formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm")
         
                           if ( ((parseFloat((valHelpi[0].slice(0, (valHelpi[0].indexOf(':') + 1) - 1))) *60) + parseFloat((valHelpi[0].slice(((valHelpi[0].indexOf(':') + 1 + 1) - 1), valHelpi[0].length)))) >=  ((parseFloat((istGueltig.slice(0, (istGueltig.indexOf(':') + 1) - 1))))*60)  + parseFloat((istGueltig.slice(((istGueltig.indexOf(':') + 1 + 1) - 1), istGueltig.length))) )  {
                                counter++;   //log("ist true")            
                                val1="<i><font color=\""+farbeErinnerung+"\">um "+valHelpi[0]+"</i>";
                                val2="<i><font color=\""+farbeErinnerung+"\">&ensp;&ensp;&ensp;"+valHelpi[2]+"<i>";
                                tabelleBind();} 
                           else {setState(dpVISReminder,"");}
       
                                                   } } }
    
    }).then(tabelleFinish)
    
    //-------------------------------------------------------------------------------------------------------------------------------------------------
    //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
    //-------------------------------------------------------------------------------------------------------------------------------------------------
    
     
         
    } // function ende
    
    //MAIN:
     
    schedule(mySchedule,  function () { 
     writeHTML();
     //if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
    }); 
    writeHTML();
    //writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });
    
    async function tabelleBind(){
       //  counter=counter+mehrfachTabelle;
           switch (mehrfachTabelle) { 
    
             case 1: if(counter%2==0)         {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;}else    
                                              {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;}
             case 2: if(counter%4==0){
                        if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                            ";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                   else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;
                          }else{
                                    if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                            ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                   else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;}
                                        
             case 3:if(counter%2==0)   {
                        if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                            ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } //Teil1 c=0
                                   else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                            "; \"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} //Teil 2 c=1
                                                    else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";} //Teil 3 c=3
                                              } break;}else{
                        if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                            ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                   else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                            ";\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                    else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                              } break;}                                          
    
    
             case 4:  // counter=counter+8;
                       if(counter%8==0)   {
                       if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+ farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } // teil1
                                       else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} //teil 2
                                                    else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} //teil 4
                                                                      else    {htmlOut  = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"  align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                              } break;}else{
                       if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } //teil 1
                                       else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} // teil 2
                                                    else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} // teil 4
                                                                      else    {htmlOut  = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                              } break;}                                    
            } //switch ende
    
    }
    
    async  function tabelleFinish() {
    
    switch (mehrfachTabelle) {  
           case 1:    break;
    
           case 2:    
                      if(counter%2==0)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                    
                      break;
    
           case 3:   if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                     if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");        
                     if(counter%3==0)      htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                   
                      break;
           case 4:   if(counter%4==3)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                     if(counter%4==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                     if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");    
                     if(counter%4==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");      
                     break; }
         
             var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
           var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>";
            
            if (!htmlSignature) htmlUnter="";
              //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
               var htmlOutVIS="";
             //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                if (htmlUberschrift) 
                    { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter +buttonScript: htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+buttonScript ;
    
                  } else {
                   zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+buttonScript :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+buttonScript;
    
                     }
                     
    
      // log("bin raus aus tabelleBind");
               if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
    
     var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>"
    
     if (!htmlSignature) htmlUnter="";
      var htmlEnd="</table>"+htmlUnter+"</div></body>";
     //mit oder ohne überschrift - zentriert oder links
    htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
     //log(htmlOut);
    
    
    }
    
    
    var gesucht="";
    var gefunden="";
    var gefunden_2="";
    var gefunden2="";
    var gefunden2_2=""; 
    
    var myArr2=[];   var myArr22=[];  var myArr222=[];
    var myArr2_2=[]; var myArr22_2=[];
    var myArr3=[];
    var myArr3_2=[];
    var myArr4=[];
    var myObj=[];
    var myObjFilter=[];
    var counterlein=0;
    var allesDa=true;
       var vorher=""; 
      var jetzt; 
      var myObjFilterHelp=[] ; 
    
    
    async function getTV(){
       return new Promise(async (resolve, reject) => {
    //try {
      await request(url, async function (error, response, result) {
      //console.log("result: "+result);
      gesucht="";
      gesucht=result;  //log(" gesucht - direct_____________JETZT: "+ gesucht);
       // setState("controll-own.0.AAATEST.TVTVTVTV",result);
        holeTV(gesucht);
        //log("bin raus getTV");
        if (gesucht!="") {resolve()} else {reject()}
    ;  }).on("error", function (e) {console.error(e);});
    
      //log("bin raus getTV");
     });
    
    }
    
    async function holeTV(gesuchtVal){
    //log("bin in holeTV");
     gesucht="";
    gefunden="";
    gefunden_2="";
    gefunden2="";
    gefunden2_2=""; 
    
    myArr2=[];    myArr22=[];   myArr222=[]; 
    myArr2_2=[];  myArr22_2=[];
    myArr3=[];
    myArr3_2=[];
    myArr4=[];
    myObj=[];
    myObjFilter=[];
         vorher=""; 
    
      myObjFilterHelp=[] ; 
    
    counterlein=0;
    var re =/\s<a title=".+?" name="bid_/g;
    
    gesucht = gesuchtVal;
    
    gefunden= "fff"+gesucht.match(re);
    
    
             let helper2=[];
              let helper=gefunden.match(/\".+?" name="bid_/g);
              // log("--------"+helper.length.toString());
             for (var i=0;i<helper.length;i++){
                 let hhh= helper[i].replace(/,/g, " --");//       
                 hhh= hhh.replace(/\'/g, " ");//    
              // if(i<1) log(hhh)
                 hhh=hhh.replace(/ (\d\d):(\d\d) /g, " $1\-\-\-$2");
              // if(i<1)  log(hhh)
                 hhh=hhh.replace(/\:/g, ";");
              // if(i<1)   log(hhh)
                 hhh=hhh.replace(/(\d\d)---(\d\d)/g, " $1:$2 ");
              // if(i>20 && i<25)   log(hhh)
                 hhh=hhh.replace(/www\..+\/tv-pro/g, "tv-pro");   // vernichtet punkte am ende
                 hhh=hhh.replace(/(\d\d\.\d\d\..+)\.(.+)\" data/g, "$1x_y_x$2 data"); //ersetzt punkt in sendernamen (sat.1)
              // if(i>20 && i<25)  log("++++++++++++++++++++"+hhh)
                 hhh=hhh.replace(/(^.+?)\.+(.+?\d\d\.\d\d\.)/g, "$1x_x_x$2"); //ersetzt punkte im datum
              // if(i>20 && i<25)  log("++++++++++++++++++++"+hhh)
                 hhh=hhh.replace(/\*/g, "_");
                 hhh=hhh.replace(/ data.+programm(.+)/g,"bbb$1");
              //  if(i>20 && i<25)    log("++++++++++++++++++++"+hhh)
             
                 helper2.push(hhh)
             }
    
    var myArr    =helper2.toString().split(",");
    
    //log(myArr.length.toString()+"---"+myArr[3].toString());
    
    for(var i=0;i<myArr.length;i++){   var haken=myArr[i].replace( /,>/g , "");       myArr22.push(haken);}  // /,>/g , ""
    for(var i=0;i<myArr22.length;i++){  var    haken=myArr22[i].replace("xxx","");     myArr222.push(haken);}  // /,>/g , ""
    for(var i=0;i<myArr222.length;i++){  var    haken=myArr222[i].replace(/\"/g,"");     myArr2.push(haken);if (i<0) log(myArr2[i])}  // /,>/g , ""
    
    
    
               
    
     for(var i=0;i<myArr2.length;i++) {
       let val4help= myArr2[i].slice(((myArr2[i].indexOf('bbb') + 1 + 3) - 1), myArr2[i].length); val4help=val4help.replace(/ name=bid_/g,""); if(i<0) log(val4help)
       let val3= myArr2[i].slice(0, (myArr2[i].indexOf(':') + 1) - 5).trim(); val3=val3.replace(/x_x_x/g,"."); val3=val3.replace(/x_y_x/g,".") // val3=val3.slice(0, (val3.lastIndexOf('-') + 1) - 1);   // sendung
       let val2=myArr2[i].slice(((myArr2[i].lastIndexOf('.') + 1 + 1) - 1), myArr2[i].length).trim();val2=val2.replace(/bbb.+/g,"") ;;if(i<0) log(val2); val2=val2.replace(/x_x_x/g,".");  val2=val2.replace(/x_y_x/g,".")// sender
       let val1=myArr2[i].slice((((myArr2[i].lastIndexOf(':') + 1) - 2) - 1), myArr2[i].indexOf(':') + 1 + 2).trim();                // uhrzeit
          
        myObj.push([val1,val2,val3,val4help]);
      
     }
    
    
    
    var mySort = ["Tele 5","Fix&Foxi","Nicktoons","VH1 Classic","MTV Brand New","Gute Laune TV","Nautical Channel",
    "Silverline","Penthouse Passion HD","Playboy TV","Lust Pur","Blue Hustler","RTL Living","Disney XD","RCK TV","MTV",
    "Animal Planet","Planet","Geo Television","auto motor und sport channel","Extreme Sports Channel","SPORT1+","RTL Passion",
    "RTL Crime","ProSieben Fun", "1 emotions","kabel eins classics","Sony Channel","Sony AXN","Jukebox","MTV Live HD","MTV HD",
    "Stingray Classica","Boomerang","Cartoon Network","Disney Junior","Junior","TV","Heimatkanal","E! Entertainment","TNT Comedy",
    "Romance TV","Kinowelt TV","TNT Film","TNT Serie","Universal TV","FOX","Syfy","13TH STREET","Spiegel TV Wissen","Spiegel Geschichte",
    "Crime + Investigation","History","Der Buckingham-Palast - Geheimnisse -- Affären","National Geographic Wild",
    "National Geographic","Discovery Channel","Motorvision TV","Sportdigital Fußball","Eurosport 2","Sky Sport Austria 1",
    "Sky Sport News HD","Sky Sport 2 HD","Sky Sport 1 HD","Sky Sport Bundesliga 1","Sky Krimi","Sky 1","Sky Atlantic HD",
    "Sky Cinema Special HD","Sky Cinema Family HD","Sky Cinema Nostalgie","Sky Cinema Emotion","Sky Cinema Comedy",
    "Sky Cinema Action","Sky Cinema Hits","Sky Cinema +24","Sky Cinema +1","Sky Cinema","TRT Türk","TV 2","DR 1",
    "Rouge TV","France 24","TV5MONDE","CNBC Paneurope","CNN","BBC World News","BBC Entertainment","Die Neue Zeit",
    "Bibel TV","Star TV","Schweiz 5","5plus","3plus","SRF info","SRF 2","SRF 1","sixx Austria","Puls 4","ATV2","ATV",
    "Spreekanal","rheinmainTV","Rhein-Neckar-Fernsehen","München TV","Hamburg 1","ORF Sport +","ORF 3","ORF 2","ORF 1",
    "Franken Fernsehen","Berlin","DW English","Deutsches Anleger Fernsehen","tv","Channel 21","HSE24","QVC",
    "Deutsches Musik Fernsehen","Deluxe Music","RiC","Anixe Plus","Anixe HD Serie","TLC","Health TV","Home & Garden TV",
    "RTL Plus","VOXup","1 Gold","DMAX","ProSieben Maxx","N24 Doku","Kabel 1 Doku","eSports1","SPORT1","Eurosport 1",
    "Zee One","Comedy Central","Nick","KiKA","Tele 5","Disney Channel","Euronews","Welt der Wunder","01. NDR","02. NDR",
    "WELT","Beate-Uhse.TV","sonnenklar.tv","TV.Berlin","Stingray Classica","Sat.1 emotions","Sat.1 Gold","tagesschau24","NICK Jr.","BonGusto"];
    var fehlendeFilter=["One","ZDFinfo","ZDFneo","tagesschau24","ARD alpha","Phoenix","RBB","HR","SWR","BR","MDR","WDR","n-tv",
                       "NDR","3sat","Arte","VOX","RTL Zwei","kabel eins","ProSieben","1","RTL","ZDF","Das Erste","NITRO","Servus TV","Sixx","Super RTL"];
    
    
       for (var b =0; b<myObj.length; b++){
       
      
          if(!mySort.includes(myObj[b][1].trim()) && myObj[b][1].trim()!="" ) 
          { 
          myObjFilter.push(myObj[b]);
       
          } else{
              //myObjFilter.push(myObj[ind2]);
            // log("filtered"+myObj[b][1])
             }
       
     }
     //log("gefiltert"+myObjFilter.toString());
                
    for (var b =0; b<myObjFilter.length; b++){
       //log("vorher: "+ vorher+ " object: "+myObjFilter[b][1]);
      if (myObjFilter[b][1]!=vorher){myObjFilterHelp.push(myObjFilter[b]); vorher =myObjFilter[b][1] } else{}
    
    }
    
    
    
    for(var index in myObjFilter) {counterlein++; /*log(counterlein.toString())*/}
    
    
    return myObjFilterHelp;
    
    
    }
    
           on({id: dpVISReminder, ack: false, change: "any"}, function (obj) { 
           //log(getState(dpANLEGEN).val+"----refresh");
           var timeout2 = setTimeout(function () {
           
                 if (existsState(dpVISReminder)){
                  if (getState(dpVISReminder).val!=""){
                       var valHelpi=getState(dpVISReminder).val.split(",")
                       val0="&ensp;"+symbolSavedReminder+"<i> <font color=\""+farbeErinnerung+"\">"+valHelpi[1]+"</i>";  
                       if (valHelpi[0]!=undefined){
                           let  istGueltig=formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm")
         
                           if ( ((parseFloat((valHelpi[0].slice(0, (valHelpi[0].indexOf(':') + 1) - 1))) *60) + parseFloat((valHelpi[0].slice(((valHelpi[0].indexOf(':') + 1 + 1) - 1), valHelpi[0].length)))) >=  ((parseFloat((istGueltig.slice(0, (istGueltig.indexOf(':') + 1) - 1))))*60)  + parseFloat((istGueltig.slice(((istGueltig.indexOf(':') + 1 + 1) - 1), istGueltig.length))) )  {
                            writeHTML();
                           
                           }        } } }
    
       }, 1500);
       });
    
    
    
    
    
    


    @sigi234 lass einfach mal laufen - aber dann scheint es auch bei dir da sproblem zu geben, dass die webseitee wieder müll anzeigt - hast du mal die webseite aufgemacht - was steht dort

    https://www.hoerzu.de/text/tv-programm/jetzt.php oder https://www.hoerzu.de/text/tv-programm/gleich.php

    nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

    sigi234S 1 Reply Last reply
    0
    • liv-in-skyL liv-in-sky

      
      // @liv-in-sky 28.2.2020-14:19
      
      
      //HIER WIRD PFAD UND FILENAME DEFINIERT
      const path = "/htmltvjetzt.html";                   //FIlenamen definieren
      const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
      let   braucheEinFile=false;                          // bei true wird ein file geschrieben
      let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
      let dpVIS="controll-own.0.TABELLEN.TVjetzt"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget Type: String
      let dpVISReminder="controll-own.0.TABELLEN.TVReminder"          //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget Type : String
      let mySchedule="  */20 9-23,0 * * * ";                        
      let symbolLink="📌";                                                                    //  👎  💀 ❌  ⚪  ⚫ ⭕  🔴 🔵 🌎 🚩 🗺 🕸️ 📌
      let symbolLinkhoerzu="📺"
      let farbeSchalterON="blue";
      let erinnerung=true;
      let symbolLinkReminder="⏰";
       let farbeErinnerung="white";          // farbe des reminders in tabelle
       let symbolSavedReminder="🔔";                     //  das symbol am ende der tabelle für gesicherte reminder
      //---------------------------------------
      
      //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
      var htmlFeld1='SENDER';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
      var htmlFeld2='SEIT';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
      var htmlFeld3='SENDUNG';         var Feld3lAlign="left";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
      //-----------------------------------
      
      
      //hier werden die styles für die tabelle definiert
      //ÜBERSCHRIFT ÜBER TABELLE
      let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
      let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
      const htmlFeldUeber='Jetzt im TV Programm';              // Überschrift und Signature
      const htmlFarbUber="white";                         // Farbe der Überschrift
      const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
      const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
      //MEHRERE TABELLEN NEBENEINANDER
      let   mehrfachTabelle=1;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
      const trennungsLinie="2";                             //extra trennungslinie bei mehrfachtabellen - evtl auf 0 stellen, wnn htmlRahmenLinien auf none sind
      const farbetrennungsLinie="white";
      const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
      const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
      //ÜBERSCHRIFT SPALTEN
      const UeberSchriftHöhe="35";                          //Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
      const LinieUnterUeberschrift="3";                   // Linie nur unter Spaltenüberschrift - 
      const farbeLinieUnterUeberschrift="white";
      const groesseUeberschrift=16;
      const UeberschriftStyle="normal"                     // möglich "bold"
      //GANZE TABELLE
      let abstandZelle="1";
      let farbeUngeradeZeilen="#000000";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
      let farbeGeradeZeilen="#151515";                        //Farbe für gerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
      let weite="auto";                                     //Weite der Tabelle
      let zentriert=true;                                   //ganze tabelle zentriert
      const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
      const htmlSchriftart="Helvetica";
      const htmlSchriftgroesse="14px";
      //FELDER UND RAHMEN
      let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
      const htmlFarbFelderschrift="#BDBDBD";                  // SchriftFarbe der Felder
      const htmlFarbFelderschrift2="#D8D8D8";                 // SchriftFarbe der Felder für jede 2te Tabelle
      const htmlFarbTableColorGradient1="#424242";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
      const htmlFarbTableColorGradient2="#424242";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
      const htmlFarbTableBorderColor="grey";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
      let htmlRahmenLinien="none";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
      const htmlSpalte1Weite="auto";                   //  Weite der ersten beiden  Spalten oder z.b. 115px
      
      // HIER NICHTS  ÄNDERN
      
      let borderHelpBottum;
      let borderHelpRight;
      let htmlcenterHelp;
      let htmlcenterHelp2;
      
      if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
      if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
      if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
      if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
      zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
      zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";
      
      
      const htmlZentriert='<center>'
      const htmlStart=    "<!DOCTYPE html><html lang=\"de\"><head><title>Vorlage</title><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"+
                         "<style> * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                         " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                        // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                        "a:link { text-decoration:none;}"+
                         " td { padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                         " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                         "td:nth-child(1) {width: "+htmlSpalte1Weite+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite+"}"+
                         " </style></head><body> <div>";
      //const htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"</p>";                    
      const htmlTabStyle= "<table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                            "; font-family:"+htmlSchriftart+";background-image: linear-gradient(42deg,"+htmlFarbTableColorGradient2+","+htmlFarbTableColorGradient1+");\">";
      const htmlTabUeber1="<tr height=\""+UeberSchriftHöhe+"\" style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \">";
      const htmlTabUeber3="</tr>";
      
      
      //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3
      
         	var htmlTabUeber2="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;&ensp;&ensp;<a href=\"https:\/\/"+ "www.hoerzu.de\/tv-programm\/" + "\" target=\"_blank\" onclick=\"window.open(this.href,this.target,\'width=960,height=640\'); return false;\">"+symbolLinkhoerzu+"</a></td>";
      var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                         "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
      const buttonScript = '<script> function setOnClickCustom( myvalue ) {	var Self = this; var objID = myvalue;	 var2 = \"' + dpVISReminder + '\"; Self.servConn.setState(var2, myvalue);  console.log("reminder"); } ' +
                          ' function schliesseWindowA(valButtonSingle, namely, auswahl) { console.log(namely); valButtonSingle=valButtonSingle+\"?dummyParameter=\"+new Date().getTime(); console.log(valButtonSingle); window[namely]=window.open(valButtonSingle ,\'_blank\',\' width=680, height=640 , top=170,  left=200\'); console.log(auswahl);setOnDblClickCustom(auswahl); setTimeout (function() \{ window[namely].close(); console.log(\"close\"); \}, 20000);} </script>'              
      //------------------------------------------------------
      
      var url='https://www.hoerzu.de/tv-programm/jetzt/';
      const request = require('request-promise-native');
      let auswahlHelp=1;
      var htmlTabUeber="";
      var htmlOut="";
      var mix;
      var counter;
      //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
      var val1; var val0; var val2;
      
      async function writeHTML(){
      
      
      
      
      htmlOut="";
      
      counter=-1;
      htmlTabUeber="";
      switch (mehrfachTabelle) { 
         case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
         case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
         case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
         case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
      };   
      if (!UeberschriftSpalten) {htmlTabUeber=""}
      
      
      //--------------------------------------------------------------------------------------------------------------------------------------------------
      //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
      //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
      //--------------------------------------------------------------------------------------------------------------------------------------------------
      
      
      getTV().then(function() {
        
      
      var myOjects= myObjFilterHelp;
      
      
      //var myOjects=holeTV();
      for (var index in myOjects) {   
                counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                 
            val1=myOjects[index][0]; val1=val1.replace( /,/g , "");/*log(val1);*/ let val1help=val1; val1="um "+val1; //zeit
            val0=myOjects[index][1]; val0=val0.replace( /,/g , ""); //log(val0); 
           
            val2=myOjects[index][2]; val2=val2.replace( /,/g , ""); val2=val2.replace(/-$/,"");    // val2=val2.substring(0,37)+" ..."; //log(val2);
             let valButton2;
            
            if (val2.length>=33)   val2=val2.substring(0,32)+" ..."  //log(val2);
            if (erinnerung) {valButton2=val1help+","+ val0 + "," + val2; val0="<button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\" value=\"toggle\" onclick=\"setOnClickCustom\(\'"+valButton2+"\')\">"+symbolLinkReminder + "</button>"+val0;}
            let valButton=myOjects[index][3]; valButton='https://www.hoerzu.de/tv-programm'+valButton; //log(valButton);                                                                                                   //, \'_blank\'
            let namlyMain= "mywin"+index;  
            val2="<button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\"  onclick=\"schliesseWindowA\(\'"+valButton+"\', \'"+namlyMain+"\', \'"+auswahlHelp+"\')\">"+symbolLink+" </button>" +val2;
         
           tabelleBind(); 
          
      
         }; 
           if (erinnerung && existsState(dpVISReminder)){
                    if (getState(dpVISReminder).val!=""){
                         var valHelpi=getState(dpVISReminder).val.split(",")
                         val0="&ensp;"+symbolSavedReminder+"<i> <font color=\""+farbeErinnerung+"\">"+valHelpi[1]+"</i>";  
                         if (valHelpi[0]!=undefined){
                             let  istGueltig=formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm")
           
                             if ( ((parseFloat((valHelpi[0].slice(0, (valHelpi[0].indexOf(':') + 1) - 1))) *60) + parseFloat((valHelpi[0].slice(((valHelpi[0].indexOf(':') + 1 + 1) - 1), valHelpi[0].length)))) >=  ((parseFloat((istGueltig.slice(0, (istGueltig.indexOf(':') + 1) - 1))))*60)  + parseFloat((istGueltig.slice(((istGueltig.indexOf(':') + 1 + 1) - 1), istGueltig.length))) )  {
                                  counter++;   //log("ist true")            
                                  val1="<i><font color=\""+farbeErinnerung+"\">um "+valHelpi[0]+"</i>";
                                  val2="<i><font color=\""+farbeErinnerung+"\">&ensp;&ensp;&ensp;"+valHelpi[2]+"<i>";
                                  tabelleBind();} 
                             else {setState(dpVISReminder,"");}
         
                                                     } } }
      
      }).then(tabelleFinish)
      
      //-------------------------------------------------------------------------------------------------------------------------------------------------
      //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
      //-------------------------------------------------------------------------------------------------------------------------------------------------
      
       
           
      } // function ende
      
      //MAIN:
       
      schedule(mySchedule,  function () { 
       writeHTML();
       //if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
      }); 
      writeHTML();
      //writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });
      
      async function tabelleBind(){
         //  counter=counter+mehrfachTabelle;
             switch (mehrfachTabelle) { 
      
               case 1: if(counter%2==0)         {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;}else    
                                                {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;}
               case 2: if(counter%4==0){
                          if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                              ";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                     else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;
                            }else{
                                      if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                              ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                     else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;}
                                          
               case 3:if(counter%2==0)   {
                          if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                              ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } //Teil1 c=0
                                     else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                              "; \"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} //Teil 2 c=1
                                                      else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";} //Teil 3 c=3
                                                } break;}else{
                          if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                              ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                     else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                              ";\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                      else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                } break;}                                          
      
      
               case 4:  // counter=counter+8;
                         if(counter%8==0)   {
                         if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+ farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } // teil1
                                         else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} //teil 2
                                                      else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} //teil 4
                                                                        else    {htmlOut  = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"  align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                                } break;}else{
                         if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } //teil 1
                                         else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} // teil 2
                                                      else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} // teil 4
                                                                        else    {htmlOut  = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                                } break;}                                    
              } //switch ende
      
      }
      
      async  function tabelleFinish() {
      
      switch (mehrfachTabelle) {  
             case 1:    break;
      
             case 2:    
                        if(counter%2==0)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                      
                        break;
      
             case 3:   if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                       if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");        
                       if(counter%3==0)      htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                     
                        break;
             case 4:   if(counter%4==3)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                       if(counter%4==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                       if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");    
                       if(counter%4==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");      
                       break; }
           
               var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
             var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>";
              
              if (!htmlSignature) htmlUnter="";
                //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
                 var htmlOutVIS="";
               //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                  if (htmlUberschrift) 
                      { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+buttonScript  : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter +buttonScript ;
      
                    } else {
                     zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+buttonScript  :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+buttonScript ;
      
                       }
                       
      
        // log("bin raus aus tabelleBind");
                 if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
      
       var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>"
      
       if (!htmlSignature) htmlUnter="";
        var htmlEnd="</table>"+htmlUnter+"</div></body>";
       //mit oder ohne überschrift - zentriert oder links
      htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
       //log(htmlOut);
      
      
      }
      
      
      var gesucht="";
      var gefunden="";
      var gefunden_2="";
      var gefunden2="";
      var gefunden2_2=""; 
      
      var myArr2=[];   var myArr22=[];  var myArr222=[];
      var myArr2_2=[]; var myArr22_2=[];
      var myArr3=[];
      var myArr3_2=[];
      var myArr4=[];
      var myObj=[];
      var myObjFilter=[];
      var counterlein=0;
      var allesDa=true;
         var vorher=""; 
        var jetzt; 
        var myObjFilterHelp=[] ; 
      
      
      async function getTV(){
         return new Promise(async (resolve, reject) => {
      //try {
        await request(url, async function (error, response, result) {
        //console.log("result: "+result);
        gesucht="";
        gesucht=result;  //log(" gesucht - direct_____________JETZT: "+ gesucht);
         // setState("controll-own.0.AAATEST.TVTVTVTV",result);
          holeTV(gesucht);
          //log("bin raus getTV");
          if (gesucht!="") {resolve()} else {reject()}
      ;  }).on("error", function (e) {console.error(e);});
      
        //log("bin raus getTV");
       });
      
      }
      
      async function holeTV(gesuchtVal){
      //log("bin in holeTV");
       gesucht="";
      gefunden="";
      gefunden_2="";
      gefunden2="";
      gefunden2_2=""; 
      
      myArr2=[];    myArr22=[];   myArr222=[]; 
      myArr2_2=[];  myArr22_2=[];
      myArr3=[];
      myArr3_2=[];
      myArr4=[];
      myObj=[];
      myObjFilter=[];
           vorher=""; 
      
        myObjFilterHelp=[] ; 
      
      counterlein=0;
      var re =/\s<a title=".+?" name="bid_/g;
      
      gesucht = gesuchtVal;
      
      gefunden= "fff"+gesucht.match(re);
      
      
               let helper2=[];
                let helper=gefunden.match(/\".+?" name="bid_/g);
                // log("--------"+helper.length.toString());
               for (var i=0;i<helper.length;i++){
                   let hhh= helper[i].replace(/,/g, " --");// 
                   hhh= hhh.replace(/\'/g, " ");//          
                // if(i<1) log(hhh)
                   hhh=hhh.replace(/ (\d\d):(\d\d) /g, " $1\-\-\-$2");
                // if(i<1)  log(hhh)
                   hhh=hhh.replace(/\:/g, ";");
                // if(i<1)   log(hhh)
                   hhh=hhh.replace(/(\d\d)---(\d\d)/g, " $1:$2 ");
                // if(i>20 && i<25)   log(hhh)
                   hhh=hhh.replace(/www\..+\/tv-pro/g, "tv-pro");   // vernichtet punkte am ende
                   hhh=hhh.replace(/(\d\d\.\d\d\..+)\.(.+)\" data/g, "$1x_y_x$2 data"); //ersetzt punkt in sendernamen (sat.1)
                // if(i>20 && i<25)  log("++++++++++++++++++++"+hhh)
                   hhh=hhh.replace(/(^.+?)\.+(.+?\d\d\.\d\d\.)/g, "$1x_x_x$2"); //ersetzt punkte im datum
                // if(i>20 && i<25)  log("++++++++++++++++++++"+hhh)
                   hhh=hhh.replace(/\*/g, "_");
                   hhh=hhh.replace(/ data.+programm(.+)/g,"bbb$1");
                //  if(i>20 && i<25)    log("++++++++++++++++++++"+hhh)
               
                   helper2.push(hhh)
               }
      
      var myArr    =helper2.toString().split(",");
      
      //log(myArr.length.toString()+"---"+myArr[3].toString());
      
      for(var i=0;i<myArr.length;i++){   var haken=myArr[i].replace( /,>/g , "");       myArr22.push(haken);}  // /,>/g , ""
      for(var i=0;i<myArr22.length;i++){  var    haken=myArr22[i].replace("xxx","");     myArr222.push(haken);}  // /,>/g , ""
      for(var i=0;i<myArr222.length;i++){  var    haken=myArr222[i].replace(/\"/g,"");     myArr2.push(haken);if (i<0) log(myArr2[i])}  // /,>/g , ""
      
      
      
                 
      
       for(var i=0;i<myArr2.length;i++) {
         let val4help= myArr2[i].slice(((myArr2[i].indexOf('bbb') + 1 + 3) - 1), myArr2[i].length); val4help=val4help.replace(/ name=bid_/g,""); if(i<0) log(val4help)
         let val3= myArr2[i].slice(0, (myArr2[i].indexOf(':') + 1) - 5).trim(); val3=val3.replace(/x_x_x/g,"."); val3=val3.replace(/x_y_x/g,".") // val3=val3.slice(0, (val3.lastIndexOf('-') + 1) - 1);   // sendung
         let val2=myArr2[i].slice(((myArr2[i].lastIndexOf('.') + 1 + 1) - 1), myArr2[i].length).trim();val2=val2.replace(/bbb.+/g,"") ;;if(i<0) log(val2); val2=val2.replace(/x_x_x/g,".");  val2=val2.replace(/x_y_x/g,".")// sender
         let val1=myArr2[i].slice((((myArr2[i].lastIndexOf(':') + 1) - 2) - 1), myArr2[i].indexOf(':') + 1 + 2).trim();                // uhrzeit
            
          myObj.push([val1,val2,val3,val4help]);
        
       }
      
      
      
      var mySort = ["Tele 5","Fix&Foxi","Nicktoons","VH1 Classic","MTV Brand New","Gute Laune TV","Nautical Channel",
      "Silverline","Penthouse Passion HD","Playboy TV","Lust Pur","Blue Hustler","RTL Living","Disney XD","RCK TV","MTV",
      "Animal Planet","Planet","Geo Television","auto motor und sport channel","Extreme Sports Channel","SPORT1+","RTL Passion",
      "RTL Crime","ProSieben Fun", "1 emotions","kabel eins classics","Sony Channel","Sony AXN","Jukebox","MTV Live HD","MTV HD",
      "Stingray Classica","Boomerang","Cartoon Network","Disney Junior","Junior","TV","Heimatkanal","E! Entertainment","TNT Comedy",
      "Romance TV","Kinowelt TV","TNT Film","TNT Serie","Universal TV","FOX","Syfy","13TH STREET","Spiegel TV Wissen","Spiegel Geschichte",
      "Crime + Investigation","History","Der Buckingham-Palast - Geheimnisse -- Affären","National Geographic Wild",
      "National Geographic","Discovery Channel","Motorvision TV","Sportdigital Fußball","Eurosport 2","Sky Sport Austria 1",
      "Sky Sport News HD","Sky Sport 2 HD","Sky Sport 1 HD","Sky Sport Bundesliga 1","Sky Krimi","Sky 1","Sky Atlantic HD",
      "Sky Cinema Special HD","Sky Cinema Family HD","Sky Cinema Nostalgie","Sky Cinema Emotion","Sky Cinema Comedy",
      "Sky Cinema Action","Sky Cinema Hits","Sky Cinema +24","Sky Cinema +1","Sky Cinema","TRT Türk","TV 2","DR 1",
      "Rouge TV","France 24","TV5MONDE","CNBC Paneurope","CNN","BBC World News","BBC Entertainment","Die Neue Zeit",
      "Bibel TV","Star TV","Schweiz 5","5plus","3plus","SRF info","SRF 2","SRF 1","sixx Austria","Puls 4","ATV2","ATV",
      "Spreekanal","rheinmainTV","Rhein-Neckar-Fernsehen","München TV","Hamburg 1","ORF Sport +","ORF 3","ORF 2","ORF 1",
      "Franken Fernsehen","Berlin","DW English","Deutsches Anleger Fernsehen","tv","Channel 21","HSE24","QVC",
      "Deutsches Musik Fernsehen","Deluxe Music","RiC","Anixe Plus","Anixe HD Serie","TLC","Health TV","Home & Garden TV",
      "RTL Plus","VOXup","1 Gold","DMAX","ProSieben Maxx","N24 Doku","Kabel 1 Doku","eSports1","SPORT1","Eurosport 1",
      "Zee One","Comedy Central","Nick","KiKA","Tele 5","Disney Channel","Euronews","Welt der Wunder","01. NDR","02. NDR",
      "WELT","Beate-Uhse.TV","sonnenklar.tv","TV.Berlin","Stingray Classica","Sat.1 emotions","Sat.1 Gold","tagesschau24","NICK Jr.","BonGusto"];
      var fehlendeFilter=["One","ZDFinfo","ZDFneo","tagesschau24","ARD alpha","Phoenix","RBB","HR","SWR","BR","MDR","WDR","n-tv",
                         "NDR","3sat","Arte","VOX","RTL Zwei","kabel eins","ProSieben","1","RTL","ZDF","Das Erste","NITRO","Servus TV","Sixx","Super RTL"];
      
      
         for (var b =0; b<myObj.length; b++){
         
        
            if(!mySort.includes(myObj[b][1].trim()) && myObj[b][1].trim()!="" ) 
            { 
            myObjFilter.push(myObj[b]);
         
            } else{
                //myObjFilter.push(myObj[ind2]);
              // log("filtered"+myObj[b][1])
               }
         
       }
       //log("gefiltert"+myObjFilter.toString());
                  
      for (var b =0; b<myObjFilter.length; b++){
         //log("vorher: "+ vorher+ " object: "+myObjFilter[b][1]);
        if (myObjFilter[b][1]!=vorher){myObjFilterHelp.push(myObjFilter[b]); vorher =myObjFilter[b][1] } else{}
      
      }
      
      
      
      for(var index in myObjFilter) {counterlein++; /*log(counterlein.toString())*/}
      
      
      return myObjFilterHelp;
      
      
      }
      
             on({id: dpVISReminder, ack: false, change: "any"}, function (obj) { 
             //log(getState(dpANLEGEN).val+"----refresh");
             var timeout2 = setTimeout(function () {
             
                   if (existsState(dpVISReminder)){
                    if (getState(dpVISReminder).val!=""){
                         var valHelpi=getState(dpVISReminder).val.split(",")
                         val0="&ensp;"+symbolSavedReminder+"<i> <font color=\""+farbeErinnerung+"\">"+valHelpi[1]+"</i>";  
                         if (valHelpi[0]!=undefined){
                             let  istGueltig=formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm")
           
                             if ( ((parseFloat((valHelpi[0].slice(0, (valHelpi[0].indexOf(':') + 1) - 1))) *60) + parseFloat((valHelpi[0].slice(((valHelpi[0].indexOf(':') + 1 + 1) - 1), valHelpi[0].length)))) >=  ((parseFloat((istGueltig.slice(0, (istGueltig.indexOf(':') + 1) - 1))))*60)  + parseFloat((istGueltig.slice(((istGueltig.indexOf(':') + 1 + 1) - 1), istGueltig.length))) )  {
                              writeHTML();
                             
                             }        } } }
      
         }, 1500);
         });
      
      
      
      
      
      

      // @liv-in-sky 28.2.2020-14:19
      
      
      //HIER WIRD PFAD UND FILENAME DEFINIERT
      const path = "/htmltv2200.html";                   //FIlenamen definieren
      const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
      let   braucheEinFile=false;                          // bei true wird ein file geschrieben
      let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
      let dpVIS="controll-own.0.TABELLEN.TV2200"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget Type: String
      let dpVISReminder="controll-own.0.TABELLEN.TVReminder"          //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget Type : String 
      let mySchedule="  */20 9-23,0 * * * ";                        
       var symbolLink="📌";                                                                    //  👎  💀 ❌  ⚪  ⚫ ⭕  🔴 🔵 🌎 🚩 🗺 🕸️ 📌
       let symbolLinkhoerzu="📺"
      let farbeSchalterON="blue";
       let erinnerung=true;
      let symbolLinkReminder="⏰";
       let farbeErinnerung="white";          // farbe des reminders in tabelle
       let symbolSavedReminder="🔔";                     //  das symbol am ende der tabelle für gesicherte reminder
      //---------------------------------------
      
      //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
      var htmlFeld1='SENDER';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
      var htmlFeld2='22:00';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
      var htmlFeld3='SENDUNG';         var Feld3lAlign="left";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
      //-----------------------------------
      
      
      //hier werden die styles für die tabelle definiert
      //ÜBERSCHRIFT ÜBER TABELLE
      let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
      let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
      const htmlFeldUeber='TV Programm um 22:00';              // Überschrift und Signature
      const htmlFarbUber="white";                         // Farbe der Überschrift
      const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
      const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
      //MEHRERE TABELLEN NEBENEINANDER
      let   mehrfachTabelle=1;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
      const trennungsLinie="2";                             //extra trennungslinie bei mehrfachtabellen - evtl auf 0 stellen, wnn htmlRahmenLinien auf none sind
      const farbetrennungsLinie="white";
      const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
      const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
      //ÜBERSCHRIFT SPALTEN
      const UeberSchriftHöhe="35";                          //Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
      const LinieUnterUeberschrift="3";                   // Linie nur unter Spaltenüberschrift - 
      const farbeLinieUnterUeberschrift="white";
      const groesseUeberschrift=16;
      const UeberschriftStyle="normal"                     // möglich "bold"
      //GANZE TABELLE
      let abstandZelle="1";
      let farbeUngeradeZeilen="#000000";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
      let farbeGeradeZeilen="#151515";                        //Farbe für gerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
      let weite="auto";                                     //Weite der Tabelle
      let zentriert=true;                                   //ganze tabelle zentriert
      const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
      const htmlSchriftart="Helvetica";
      const htmlSchriftgroesse="14px";
      //FELDER UND RAHMEN
      let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
      const htmlFarbFelderschrift="#BDBDBD";                  // SchriftFarbe der Felder
      const htmlFarbFelderschrift2="#D8D8D8";                 // SchriftFarbe der Felder für jede 2te Tabelle
      const htmlFarbTableColorGradient1="#424242";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
      const htmlFarbTableColorGradient2="#424242";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
      const htmlFarbTableBorderColor="grey";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
      let htmlRahmenLinien="none";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
      const htmlSpalte1Weite="auto";                   //  Weite der ersten beiden  Spalten oder z.b. 115px
      
      // HIER NICHTS  ÄNDERN
      
      let borderHelpBottum;
      let borderHelpRight;
      let htmlcenterHelp;
      let htmlcenterHelp2;
      
      if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
      if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
      if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
      if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
      zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
      zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";
      
      
      const htmlZentriert='<center>'
      const htmlStart=    "<!DOCTYPE html><html lang=\"de\"><head><title>Vorlage</title><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"+
                         "<style> * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                         " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                        // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                        "a:link { text-decoration:none;}"+
                         " td { padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                         " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                         "td:nth-child(1) {width: "+htmlSpalte1Weite+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite+"}"+
                         " </style></head><body> <div>";
      //const htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"</p>";                    
      const htmlTabStyle= "<table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                            "; font-family:"+htmlSchriftart+";background-image: linear-gradient(42deg,"+htmlFarbTableColorGradient2+","+htmlFarbTableColorGradient1+");\">";
      const htmlTabUeber1="<tr height=\""+UeberSchriftHöhe+"\" style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \">";
      const htmlTabUeber3="</tr>";
      
      
      //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3
      
      var htmlTabUeber2="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;&ensp;&ensp;<a href=\"https:\/\/"+ "www.hoerzu.de\/tv-programm\/" + "\" target=\"_blank\" onclick=\"window.open(this.href,this.target,\'width=960,height=640\'); return false;\">"+symbolLinkhoerzu+"</a></td>";
      var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                         "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
      const buttonScript = '<script> function setOnClickCustom( myvalue ) {	var Self = this; var objID = myvalue;	 var2 = \"' + dpVISReminder + '\"; Self.servConn.setState(var2, myvalue);  console.log("reminder"); } ' +
                          ' function schliesseWindowA(valButtonSingle, namely, auswahl) { console.log(namely); valButtonSingle=valButtonSingle+\"?dummyParameter=\"+new Date().getTime(); console.log(valButtonSingle); window[namely]=window.open(valButtonSingle ,\'_blank\',\' width=680, height=640 , top=170,  left=200\'); console.log(auswahl);setOnDblClickCustom(auswahl); setTimeout (function() \{ window[namely].close(); console.log(\"close\"); \}, 20000);} </script>'                  
      
      //------------------------------------------------------
      
      var url='https://www.hoerzu.de/tv-programm/heute/22:30/';
      const request = require('request-promise-native');
      let auswahlHelp=1;
      var htmlTabUeber="";
      var htmlOut="";
      var mix;
      var counter;
      //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
      var val1; var val0; var val2;
      
      async function writeHTML(){
      
      
      
      
      htmlOut="";
      
      counter=-1;
      htmlTabUeber="";
      switch (mehrfachTabelle) { 
         case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
         case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
         case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
         case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
      };   
      if (!UeberschriftSpalten) {htmlTabUeber=""}
      
      
      //--------------------------------------------------------------------------------------------------------------------------------------------------
      //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
      //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
      //--------------------------------------------------------------------------------------------------------------------------------------------------
      
      
      getTV().then(function() {
        
      
      var myOjects= myObjFilterHelp;
      
      
      //var myOjects=holeTV();
      for (var index in myOjects) {   
                counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                 
            val1=myOjects[index][0]; val1=val1.replace( /,/g , "");/*log(val1);*/ let val1help=val1; val1="um "+val1; //zeit
            val0=myOjects[index][1]; val0=val0.replace( /,/g , ""); //log(val0); 
           
            val2=myOjects[index][2]; val2=val2.replace( /,/g , ""); val2=val2.replace(/-$/,"");    // val2=val2.substring(0,37)+" ..."; //log(val2);
             let valButton2;
            
            if (val2.length>=33)   val2=val2.substring(0,32)+" ..."  //log(val2);
            if (erinnerung) {valButton2=val1help+","+ val0 + "," + val2; val0="<button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\" value=\"toggle\" onclick=\"setOnClickCustom\(\'"+valButton2+"\')\">"+symbolLinkReminder + "</button>"+val0;}
            let valButton=myOjects[index][3]; valButton='https://www.hoerzu.de/tv-programm'+valButton; //log(valButton);                                                                                                   //, \'_blank\'
           let namlyMain= "mywin"+index;  
           val2="<button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\"  onclick=\"schliesseWindowA\(\'"+valButton+"\', \'"+namlyMain+"\', \'"+auswahlHelp+"\')\">"+symbolLink+" </button>" +val2;
         
           tabelleBind(); 
          
      
         }; 
           if (erinnerung && existsState(dpVISReminder)){
                    if (getState(dpVISReminder).val!=""){
                         var valHelpi=getState(dpVISReminder).val.split(",")
                         val0="&ensp;"+symbolSavedReminder+"<i> <font color=\""+farbeErinnerung+"\">"+valHelpi[1]+"</i>";  
                         if (valHelpi[0]!=undefined){
                             let  istGueltig=formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm")
           
                             if ( ((parseFloat((valHelpi[0].slice(0, (valHelpi[0].indexOf(':') + 1) - 1))) *60) + parseFloat((valHelpi[0].slice(((valHelpi[0].indexOf(':') + 1 + 1) - 1), valHelpi[0].length)))) >=  ((parseFloat((istGueltig.slice(0, (istGueltig.indexOf(':') + 1) - 1))))*60)  + parseFloat((istGueltig.slice(((istGueltig.indexOf(':') + 1 + 1) - 1), istGueltig.length))) )  {
                                  counter++;   //log("ist true")            
                                  val1="<i><font color=\""+farbeErinnerung+"\">um "+valHelpi[0]+"</i>";
                                  val2="<i><font color=\""+farbeErinnerung+"\">&ensp;&ensp;&ensp;"+valHelpi[2]+"<i>";
                                  tabelleBind();} 
                             else {setState(dpVISReminder,"");}
         
                                                     } } }
      
      }).then(tabelleFinish)
      
      //-------------------------------------------------------------------------------------------------------------------------------------------------
      //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
      //-------------------------------------------------------------------------------------------------------------------------------------------------
      
       
           
      } // function ende
      
      //MAIN:
       
      schedule(mySchedule,  function () { 
       writeHTML();
       //if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
      }); 
      writeHTML();
      //writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });
      
      async function tabelleBind(){
         //  counter=counter+mehrfachTabelle;
             switch (mehrfachTabelle) { 
      
               case 1: if(counter%2==0)         {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;}else    
                                                {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;}
               case 2: if(counter%4==0){
                          if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                              ";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                     else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;
                            }else{
                                      if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                              ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                     else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;}
                                          
               case 3:if(counter%2==0)   {
                          if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                              ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } //Teil1 c=0
                                     else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                              "; \"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} //Teil 2 c=1
                                                      else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";} //Teil 3 c=3
                                                } break;}else{
                          if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                              ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                     else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                              ";\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                      else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                } break;}                                          
      
      
               case 4:  // counter=counter+8;
                         if(counter%8==0)   {
                         if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+ farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } // teil1
                                         else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} //teil 2
                                                      else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} //teil 4
                                                                        else    {htmlOut  = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"  align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                                } break;}else{
                         if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } //teil 1
                                         else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} // teil 2
                                                      else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} // teil 4
                                                                        else    {htmlOut  = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                                } break;}                                    
              } //switch ende
      
      }
      
      async  function tabelleFinish() {
      
      switch (mehrfachTabelle) {  
             case 1:    break;
      
             case 2:    
                        if(counter%2==0)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                      
                        break;
      
             case 3:   if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                       if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");        
                       if(counter%3==0)      htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                     
                        break;
             case 4:   if(counter%4==3)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                       if(counter%4==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                       if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");    
                       if(counter%4==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");      
                       break; }
           
               var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
             var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>";
              
              if (!htmlSignature) htmlUnter="";
                //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
                 var htmlOutVIS="";
               //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                  if (htmlUberschrift) 
                      { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter +buttonScript: htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+buttonScript ;
      
                    } else {
                     zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+buttonScript :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+buttonScript;
      
                       }
                       
      
        // log("bin raus aus tabelleBind");
                 if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
      
       var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>"
      
       if (!htmlSignature) htmlUnter="";
        var htmlEnd="</table>"+htmlUnter+"</div></body>";
       //mit oder ohne überschrift - zentriert oder links
      htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
       //log(htmlOut);
      
      
      }
      
      
      var gesucht="";
      var gefunden="";
      var gefunden_2="";
      var gefunden2="";
      var gefunden2_2=""; 
      
      var myArr2=[];   var myArr22=[];  var myArr222=[];
      var myArr2_2=[]; var myArr22_2=[];
      var myArr3=[];
      var myArr3_2=[];
      var myArr4=[];
      var myObj=[];
      var myObjFilter=[];
      var counterlein=0;
      var allesDa=true;
         var vorher=""; 
        var jetzt; 
        var myObjFilterHelp=[] ; 
      
      
      async function getTV(){
         return new Promise(async (resolve, reject) => {
      //try {
        await request(url, async function (error, response, result) {
        //console.log("result: "+result);
        gesucht="";
        gesucht=result;  //log(" gesucht - direct_____________JETZT: "+ gesucht);
         // setState("controll-own.0.AAATEST.TVTVTVTV",result);
          holeTV(gesucht);
          //log("bin raus getTV");
          if (gesucht!="") {resolve()} else {reject()}
      ;  }).on("error", function (e) {console.error(e);});
      
        //log("bin raus getTV");
       });
      
      }
      
      async function holeTV(gesuchtVal){
      //log("bin in holeTV");
       gesucht="";
      gefunden="";
      gefunden_2="";
      gefunden2="";
      gefunden2_2=""; 
      
      myArr2=[];    myArr22=[];   myArr222=[]; 
      myArr2_2=[];  myArr22_2=[];
      myArr3=[];
      myArr3_2=[];
      myArr4=[];
      myObj=[];
      myObjFilter=[];
           vorher=""; 
      
        myObjFilterHelp=[] ; 
      
      counterlein=0;
      var re =/\s<a title=".+?" name="bid_/g;
      
      gesucht = gesuchtVal;
      
      gefunden= "fff"+gesucht.match(re);
      
      
               let helper2=[];
                let helper=gefunden.match(/\".+?" name="bid_/g);
                // log("--------"+helper.length.toString());
               for (var i=0;i<helper.length;i++){
                   let hhh= helper[i].replace(/,/g, " --");//       
                   hhh= hhh.replace(/\'/g, " ");//    
                // if(i<1) log(hhh)
                   hhh=hhh.replace(/ (\d\d):(\d\d) /g, " $1\-\-\-$2");
                // if(i<1)  log(hhh)
                   hhh=hhh.replace(/\:/g, ";");
                // if(i<1)   log(hhh)
                   hhh=hhh.replace(/(\d\d)---(\d\d)/g, " $1:$2 ");
                // if(i>20 && i<25)   log(hhh)
                   hhh=hhh.replace(/www\..+\/tv-pro/g, "tv-pro");   // vernichtet punkte am ende
                   hhh=hhh.replace(/(\d\d\.\d\d\..+)\.(.+)\" data/g, "$1x_y_x$2 data"); //ersetzt punkt in sendernamen (sat.1)
                // if(i>20 && i<25)  log("++++++++++++++++++++"+hhh)
                   hhh=hhh.replace(/(^.+?)\.+(.+?\d\d\.\d\d\.)/g, "$1x_x_x$2"); //ersetzt punkte im datum
                // if(i>20 && i<25)  log("++++++++++++++++++++"+hhh)
                   hhh=hhh.replace(/\*/g, "_");
                   hhh=hhh.replace(/ data.+programm(.+)/g,"bbb$1");
                //  if(i>20 && i<25)    log("++++++++++++++++++++"+hhh)
               
                   helper2.push(hhh)
               }
      
      var myArr    =helper2.toString().split(",");
      
      //log(myArr.length.toString()+"---"+myArr[3].toString());
      
      for(var i=0;i<myArr.length;i++){   var haken=myArr[i].replace( /,>/g , "");       myArr22.push(haken);}  // /,>/g , ""
      for(var i=0;i<myArr22.length;i++){  var    haken=myArr22[i].replace("xxx","");     myArr222.push(haken);}  // /,>/g , ""
      for(var i=0;i<myArr222.length;i++){  var    haken=myArr222[i].replace(/\"/g,"");     myArr2.push(haken);if (i<0) log(myArr2[i])}  // /,>/g , ""
      
      
      
                 
      
       for(var i=0;i<myArr2.length;i++) {
         let val4help= myArr2[i].slice(((myArr2[i].indexOf('bbb') + 1 + 3) - 1), myArr2[i].length); val4help=val4help.replace(/ name=bid_/g,""); if(i<0) log(val4help)
         let val3= myArr2[i].slice(0, (myArr2[i].indexOf(':') + 1) - 5).trim(); val3=val3.replace(/x_x_x/g,"."); val3=val3.replace(/x_y_x/g,".") // val3=val3.slice(0, (val3.lastIndexOf('-') + 1) - 1);   // sendung
         let val2=myArr2[i].slice(((myArr2[i].lastIndexOf('.') + 1 + 1) - 1), myArr2[i].length).trim();val2=val2.replace(/bbb.+/g,"") ;;if(i<0) log(val2); val2=val2.replace(/x_x_x/g,".");  val2=val2.replace(/x_y_x/g,".")// sender
         let val1=myArr2[i].slice((((myArr2[i].lastIndexOf(':') + 1) - 2) - 1), myArr2[i].indexOf(':') + 1 + 2).trim();                // uhrzeit
            
          myObj.push([val1,val2,val3,val4help]);
        
       }
      
      
      
      var mySort = ["Tele 5","Fix&Foxi","Nicktoons","VH1 Classic","MTV Brand New","Gute Laune TV","Nautical Channel",
      "Silverline","Penthouse Passion HD","Playboy TV","Lust Pur","Blue Hustler","RTL Living","Disney XD","RCK TV","MTV",
      "Animal Planet","Planet","Geo Television","auto motor und sport channel","Extreme Sports Channel","SPORT1+","RTL Passion",
      "RTL Crime","ProSieben Fun", "1 emotions","kabel eins classics","Sony Channel","Sony AXN","Jukebox","MTV Live HD","MTV HD",
      "Stingray Classica","Boomerang","Cartoon Network","Disney Junior","Junior","TV","Heimatkanal","E! Entertainment","TNT Comedy",
      "Romance TV","Kinowelt TV","TNT Film","TNT Serie","Universal TV","FOX","Syfy","13TH STREET","Spiegel TV Wissen","Spiegel Geschichte",
      "Crime + Investigation","History","Der Buckingham-Palast - Geheimnisse -- Affären","National Geographic Wild",
      "National Geographic","Discovery Channel","Motorvision TV","Sportdigital Fußball","Eurosport 2","Sky Sport Austria 1",
      "Sky Sport News HD","Sky Sport 2 HD","Sky Sport 1 HD","Sky Sport Bundesliga 1","Sky Krimi","Sky 1","Sky Atlantic HD",
      "Sky Cinema Special HD","Sky Cinema Family HD","Sky Cinema Nostalgie","Sky Cinema Emotion","Sky Cinema Comedy",
      "Sky Cinema Action","Sky Cinema Hits","Sky Cinema +24","Sky Cinema +1","Sky Cinema","TRT Türk","TV 2","DR 1",
      "Rouge TV","France 24","TV5MONDE","CNBC Paneurope","CNN","BBC World News","BBC Entertainment","Die Neue Zeit",
      "Bibel TV","Star TV","Schweiz 5","5plus","3plus","SRF info","SRF 2","SRF 1","sixx Austria","Puls 4","ATV2","ATV",
      "Spreekanal","rheinmainTV","Rhein-Neckar-Fernsehen","München TV","Hamburg 1","ORF Sport +","ORF 3","ORF 2","ORF 1",
      "Franken Fernsehen","Berlin","DW English","Deutsches Anleger Fernsehen","tv","Channel 21","HSE24","QVC",
      "Deutsches Musik Fernsehen","Deluxe Music","RiC","Anixe Plus","Anixe HD Serie","TLC","Health TV","Home & Garden TV",
      "RTL Plus","VOXup","1 Gold","DMAX","ProSieben Maxx","N24 Doku","Kabel 1 Doku","eSports1","SPORT1","Eurosport 1",
      "Zee One","Comedy Central","Nick","KiKA","Tele 5","Disney Channel","Euronews","Welt der Wunder","01. NDR","02. NDR",
      "WELT","Beate-Uhse.TV","sonnenklar.tv","TV.Berlin","Stingray Classica","Sat.1 emotions","Sat.1 Gold","tagesschau24","NICK Jr.","BonGusto"];
      var fehlendeFilter=["One","ZDFinfo","ZDFneo","tagesschau24","ARD alpha","Phoenix","RBB","HR","SWR","BR","MDR","WDR","n-tv",
                         "NDR","3sat","Arte","VOX","RTL Zwei","kabel eins","ProSieben","1","RTL","ZDF","Das Erste","NITRO","Servus TV","Sixx","Super RTL"];
      
      
         for (var b =0; b<myObj.length; b++){
         
        
            if(!mySort.includes(myObj[b][1].trim()) && myObj[b][1].trim()!="" ) 
            { 
            myObjFilter.push(myObj[b]);
         
            } else{
                //myObjFilter.push(myObj[ind2]);
              // log("filtered"+myObj[b][1])
               }
         
       }
       //log("gefiltert"+myObjFilter.toString());
                  
      for (var b =0; b<myObjFilter.length; b++){
         //log("vorher: "+ vorher+ " object: "+myObjFilter[b][1]);
        if (myObjFilter[b][1]!=vorher){myObjFilterHelp.push(myObjFilter[b]); vorher =myObjFilter[b][1] } else{}
      
      }
      
      
      
      for(var index in myObjFilter) {counterlein++; /*log(counterlein.toString())*/}
      
      
      return myObjFilterHelp;
      
      
      }
      
             on({id: dpVISReminder, ack: false, change: "any"}, function (obj) { 
             //log(getState(dpANLEGEN).val+"----refresh");
             var timeout2 = setTimeout(function () {
             
                   if (existsState(dpVISReminder)){
                    if (getState(dpVISReminder).val!=""){
                         var valHelpi=getState(dpVISReminder).val.split(",")
                         val0="&ensp;"+symbolSavedReminder+"<i> <font color=\""+farbeErinnerung+"\">"+valHelpi[1]+"</i>";  
                         if (valHelpi[0]!=undefined){
                             let  istGueltig=formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm")
           
                             if ( ((parseFloat((valHelpi[0].slice(0, (valHelpi[0].indexOf(':') + 1) - 1))) *60) + parseFloat((valHelpi[0].slice(((valHelpi[0].indexOf(':') + 1 + 1) - 1), valHelpi[0].length)))) >=  ((parseFloat((istGueltig.slice(0, (istGueltig.indexOf(':') + 1) - 1))))*60)  + parseFloat((istGueltig.slice(((istGueltig.indexOf(':') + 1 + 1) - 1), istGueltig.length))) )  {
                              writeHTML();
                             
                             }        } } }
      
         }, 1500);
         });
      
      
      
      
      
      


      @sigi234 lass einfach mal laufen - aber dann scheint es auch bei dir da sproblem zu geben, dass die webseitee wieder müll anzeigt - hast du mal die webseite aufgemacht - was steht dort

      https://www.hoerzu.de/text/tv-programm/jetzt.php oder https://www.hoerzu.de/text/tv-programm/gleich.php

      sigi234S Online
      sigi234S Online
      sigi234
      Forum Testing Most Active
      wrote on last edited by
      #4

      @liv-in-sky sagte in TV Programm Mini Anzeige - HTML Tabelle:

      was steht dort

      Wie bei dir

      Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
      Immer Daten sichern!

      liv-in-skyL 1 Reply Last reply
      0
      • sigi234S sigi234

        @liv-in-sky sagte in TV Programm Mini Anzeige - HTML Tabelle:

        was steht dort

        Wie bei dir

        liv-in-skyL Offline
        liv-in-skyL Offline
        liv-in-sky
        wrote on last edited by liv-in-sky
        #5

        // @liv-in-sky 28.2.2020-14:19
        
        
        //HIER WIRD PFAD UND FILENAME DEFINIERT
        const path = "/htmltv2015.html";                   //FIlenamen definieren
        const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
        let   braucheEinFile=false;                          // bei true wird ein file geschrieben
        let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
        let dpVIS="controll-own.0.TABELLEN.TV2015"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget Type: String
        let dpVISReminder="controll-own.0.TABELLEN.TVReminder"          //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget Type : String 
        let mySchedule="  0 7,17 * * * ";                        
         var symbolLink="📌";                                                                    //  👎  💀 ❌  ⚪  ⚫ ⭕  🔴 🔵 🌎 🚩 🗺 🕸️ 📌
         let symbolLinkhoerzu="📺"
        let farbeSchalterON="blue";
         let erinnerung=true;
        let symbolLinkReminder="⏰";
        let farbeErinnerung="white";          // farbe des reminders in tabelle
        let symbolSavedReminder="🔔";                     //  das symbol am ende der tabelle für gesicherte reminder
        //---------------------------------------
        
        //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
        var htmlFeld1='SENDER';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
        var htmlFeld2='20:15';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
        var htmlFeld3='SENDUNG';         var Feld3lAlign="left";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
        //-----------------------------------
        
        
        //hier werden die styles für die tabelle definiert
        //ÜBERSCHRIFT ÜBER TABELLE
        let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
        let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
        const htmlFeldUeber='TV Programm um 20:15';              // Überschrift und Signature
        const htmlFarbUber="white";                         // Farbe der Überschrift
        const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
        const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
        //MEHRERE TABELLEN NEBENEINANDER
        let   mehrfachTabelle=1;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
        const trennungsLinie="2";                             //extra trennungslinie bei mehrfachtabellen - evtl auf 0 stellen, wnn htmlRahmenLinien auf none sind
        const farbetrennungsLinie="white";
        const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
        const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
        //ÜBERSCHRIFT SPALTEN
        const UeberSchriftHöhe="35";                          //Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
        const LinieUnterUeberschrift="3";                   // Linie nur unter Spaltenüberschrift - 
        const farbeLinieUnterUeberschrift="white";
        const groesseUeberschrift=16;
        const UeberschriftStyle="normal"                     // möglich "bold"
        //GANZE TABELLE
        let abstandZelle="1";
        let farbeUngeradeZeilen="#000000";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
        let farbeGeradeZeilen="#151515";                        //Farbe für gerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
        let weite="auto";                                     //Weite der Tabelle
        let zentriert=true;                                   //ganze tabelle zentriert
        const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
        const htmlSchriftart="Helvetica";
        const htmlSchriftgroesse="14px";
        //FELDER UND RAHMEN
        let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
        const htmlFarbFelderschrift="#BDBDBD";                  // SchriftFarbe der Felder
        const htmlFarbFelderschrift2="#D8D8D8";                 // SchriftFarbe der Felder für jede 2te Tabelle
        const htmlFarbTableColorGradient1="#424242";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
        const htmlFarbTableColorGradient2="#424242";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
        const htmlFarbTableBorderColor="grey";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
        let htmlRahmenLinien="none";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
        const htmlSpalte1Weite="auto";                   //  Weite der ersten beiden  Spalten oder z.b. 115px
        
        // HIER NICHTS  ÄNDERN
        
        let borderHelpBottum;
        let borderHelpRight;
        let htmlcenterHelp;
        let htmlcenterHelp2;
        
        if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
        if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
        if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
        if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
        zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
        zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";
        
        
        const htmlZentriert='<center>'
        const htmlStart=    "<!DOCTYPE html><html lang=\"de\"><head><title>Vorlage</title><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"+
                           "<style> * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                           " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                          // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                          "a:link { text-decoration:none;}"+
                           " td { padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                           " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                           "td:nth-child(1) {width: "+htmlSpalte1Weite+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite+"}"+
                           " </style></head><body> <div>";
        //const htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"</p>";                    
        const htmlTabStyle= "<table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                              "; font-family:"+htmlSchriftart+";background-image: linear-gradient(42deg,"+htmlFarbTableColorGradient2+","+htmlFarbTableColorGradient1+");\">";
        const htmlTabUeber1="<tr height=\""+UeberSchriftHöhe+"\" style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \">";
        const htmlTabUeber3="</tr>";
        
        
        //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3
        
        var htmlTabUeber2="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;&ensp;&ensp;<a href=\"https:\/\/"+ "www.hoerzu.de\/tv-programm\/" + "\" target=\"_blank\" onclick=\"window.open(this.href,this.target,\'width=960,height=640\'); return false;\">"+symbolLinkhoerzu+"</a></td>";
        var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                           "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
        const buttonScript = '<script> function setOnClickCustom( myvalue ) {	var Self = this; var objID = myvalue;	 var2 = \"' + dpVISReminder + '\"; Self.servConn.setState(var2, myvalue);  console.log("reminder"); } ' +
                            ' function schliesseWindowA(valButtonSingle, namely, auswahl) { console.log(namely); valButtonSingle=valButtonSingle+\"?dummyParameter=\"+new Date().getTime(); console.log(valButtonSingle); window[namely]=window.open(valButtonSingle ,\'_blank\',\' width=680, height=640 , top=170,  left=200\'); console.log(auswahl);setOnDblClickCustom(auswahl); setTimeout (function() \{ window[namely].close(); console.log(\"close\"); \}, 20000);} </script>' 
                                         
        
        
        //------------------------------------------------------
        
        var url='https://www.hoerzu.de/tv-programm/heute/20:30/';
        const request = require('request-promise-native');
        let auswahlHelp=1;
        var htmlTabUeber="";
        var htmlOut="";
        var mix;
        var counter;
        //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
        var val1; var val0; var val2;
        
        async function writeHTML(){
        
        
        
        
        htmlOut="";
        
        counter=-1;
        htmlTabUeber="";
        switch (mehrfachTabelle) { 
           case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
           case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
           case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
           case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
        };   
        if (!UeberschriftSpalten) {htmlTabUeber=""}
        
        
        //--------------------------------------------------------------------------------------------------------------------------------------------------
        //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
        //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
        //--------------------------------------------------------------------------------------------------------------------------------------------------
        
        
        getTV().then(function() {
          
        
        var myOjects= myObjFilterHelp;
        
        
        //var myOjects=holeTV();
        for (var index in myOjects) {   
                  counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                   
              val1=myOjects[index][0]; val1=val1.replace( /,/g , "");/*log(val1);*/ let val1help=val1; val1="um "+val1; //zeit
              val0=myOjects[index][1]; val0=val0.replace( /,/g , ""); //log(val0); 
             
              val2=myOjects[index][2]; val2=val2.replace( /,/g , ""); val2=val2.replace(/-$/,"");    // val2=val2.substring(0,37)+" ..."; //log(val2);
               let valButton2;
              
              if (val2.length>=33)   val2=val2.substring(0,32)+" ..."  //log(val2);
              if (erinnerung) {valButton2=val1help+","+ val0 + "," + val2; val0="<button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\" value=\"toggle\" onclick=\"setOnClickCustom\(\'"+valButton2+"\')\">"+symbolLinkReminder + "</button>"+val0;}
              let valButton=myOjects[index][3]; valButton='https://www.hoerzu.de/tv-programm'+valButton; //log(valButton);  
              let namlyMain= "mywin"+index;                                                                                                 //, \'_blank\'
              val2="<button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\"  onclick=\"schliesseWindowA\(\'"+valButton+"\', \'"+namlyMain+"\', \'"+auswahlHelp+"\')\">"+symbolLink+" </button>" +val2;
           
             tabelleBind(); 
            
        
           }; 
             if (erinnerung && existsState(dpVISReminder)){
                      if (getState(dpVISReminder).val!=""){
                           var valHelpi=getState(dpVISReminder).val.split(",")
                           val0="&ensp;"+symbolSavedReminder+"<i> <font color=\""+farbeErinnerung+"\">"+valHelpi[1]+"</i>";  
                           if (valHelpi[0]!=undefined){
                               let  istGueltig=formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm")
             
                               if ( ((parseFloat((valHelpi[0].slice(0, (valHelpi[0].indexOf(':') + 1) - 1))) *60) + parseFloat((valHelpi[0].slice(((valHelpi[0].indexOf(':') + 1 + 1) - 1), valHelpi[0].length)))) >=  ((parseFloat((istGueltig.slice(0, (istGueltig.indexOf(':') + 1) - 1))))*60)  + parseFloat((istGueltig.slice(((istGueltig.indexOf(':') + 1 + 1) - 1), istGueltig.length))) )  {
                                    counter++;   //log("ist true")            
                                    val1="<i><font color=\""+farbeErinnerung+"\">um "+valHelpi[0]+"</i>";
                                    val2="<i><font color=\""+farbeErinnerung+"\">&ensp;&ensp;&ensp;"+valHelpi[2]+"<i>";
                                    tabelleBind();} 
                               else {setState(dpVISReminder,"");}
           
                                                       } } }
        
        }).then(tabelleFinish)
        
        //-------------------------------------------------------------------------------------------------------------------------------------------------
        //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
        //-------------------------------------------------------------------------------------------------------------------------------------------------
        
         
             
        } // function ende
        
        //MAIN:
         
        schedule(mySchedule,  function () { 
         writeHTML();
         //if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
        }); 
        writeHTML();
        //writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });
        
        async function tabelleBind(){
           //  counter=counter+mehrfachTabelle;
               switch (mehrfachTabelle) { 
        
                 case 1: if(counter%2==0)         {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;}else    
                                                  {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;}
                 case 2: if(counter%4==0){
                            if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                ";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                       else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;
                              }else{
                                        if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                       else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;}
                                            
                 case 3:if(counter%2==0)   {
                            if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } //Teil1 c=0
                                       else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                "; \"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} //Teil 2 c=1
                                                        else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";} //Teil 3 c=3
                                                  } break;}else{
                            if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                       else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                ";\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                        else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                  } break;}                                          
        
        
                 case 4:  // counter=counter+8;
                           if(counter%8==0)   {
                           if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+ farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } // teil1
                                           else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} //teil 2
                                                        else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} //teil 4
                                                                          else    {htmlOut  = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"  align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                                  } break;}else{
                           if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } //teil 1
                                           else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} // teil 2
                                                        else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} // teil 4
                                                                          else    {htmlOut  = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                                  } break;}                                    
                } //switch ende
        
        }
        
        async  function tabelleFinish() {
        
        switch (mehrfachTabelle) {  
               case 1:    break;
        
               case 2:    
                          if(counter%2==0)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                        
                          break;
        
               case 3:   if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                         if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");        
                         if(counter%3==0)      htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                       
                          break;
               case 4:   if(counter%4==3)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                         if(counter%4==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                         if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");    
                         if(counter%4==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");      
                         break; }
             
                 var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
               var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>";
                
                if (!htmlSignature) htmlUnter="";
                  //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
                   var htmlOutVIS="";
                 //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                    if (htmlUberschrift) 
                        { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+buttonScript : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+buttonScript ;
        
                      } else {
                       zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter +buttonScript:  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+buttonScript;
        
                         }
                         
        
          // log("bin raus aus tabelleBind");
                   if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
        
         var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>"
        
         if (!htmlSignature) htmlUnter="";
          var htmlEnd="</table>"+htmlUnter+"</div></body>";
         //mit oder ohne überschrift - zentriert oder links
        htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
         //log(htmlOut);
        
        
        }
        
        
        var gesucht="";
        var gefunden="";
        var gefunden_2="";
        var gefunden2="";
        var gefunden2_2=""; 
        
        var myArr2=[];   var myArr22=[];  var myArr222=[];
        var myArr2_2=[]; var myArr22_2=[];
        var myArr3=[];
        var myArr3_2=[];
        var myArr4=[];
        var myObj=[];
        var myObjFilter=[];
        var counterlein=0;
        var allesDa=true;
           var vorher=""; 
          var jetzt; 
          var myObjFilterHelp=[] ; 
        
        
        async function getTV(){
           return new Promise(async (resolve, reject) => {
        //try {
          await request(url, async function (error, response, result) {
          //console.log("result: "+result);
          gesucht="";
          gesucht=result;  //log(" gesucht - direct_____________JETZT: "+ gesucht);
           // setState("controll-own.0.AAATEST.TVTVTVTV",result);
            holeTV(gesucht);
            //log("bin raus getTV");
            if (gesucht!="") {resolve()} else {reject()}
        ;  }).on("error", function (e) {console.error(e);});
        
          //log("bin raus getTV");
         });
        
        }
        
        async function holeTV(gesuchtVal){
        //log("bin in holeTV");
         gesucht="";
        gefunden="";
        gefunden_2="";
        gefunden2="";
        gefunden2_2=""; 
        
        myArr2=[];    myArr22=[];   myArr222=[]; 
        myArr2_2=[];  myArr22_2=[];
        myArr3=[];
        myArr3_2=[];
        myArr4=[];
        myObj=[];
        myObjFilter=[];
             vorher=""; 
        
          myObjFilterHelp=[] ; 
        
        counterlein=0;
        var re =/\s<a title=".+?" name="bid_/g;
        
        gesucht = gesuchtVal;
        
        gefunden= "fff"+gesucht.match(re);
        
        
                 let helper2=[];
                  let helper=gefunden.match(/\".+?" name="bid_/g);
                  // log("--------"+helper.length.toString());
                 for (var i=0;i<helper.length;i++){
                     let hhh= helper[i].replace(/,/g, " --");// 
                     hhh= hhh.replace(/\'/g, " ");//          
                  // if(i<1) log(hhh)
                     hhh=hhh.replace(/ (\d\d):(\d\d) /g, " $1\-\-\-$2");
                  // if(i<1)  log(hhh)
                     hhh=hhh.replace(/\:/g, ";");
                  // if(i<1)   log(hhh)
                     hhh=hhh.replace(/(\d\d)---(\d\d)/g, " $1:$2 ");
                  // if(i>20 && i<25)   log(hhh)
                     hhh=hhh.replace(/www\..+\/tv-pro/g, "tv-pro");   // vernichtet punkte am ende
                     hhh=hhh.replace(/(\d\d\.\d\d\..+)\.(.+)\" data/g, "$1x_y_x$2 data"); //ersetzt punkt in sendernamen (sat.1)
                  // if(i>20 && i<25)  log("++++++++++++++++++++"+hhh)
                     hhh=hhh.replace(/(^.+?)\.+(.+?\d\d\.\d\d\.)/g, "$1x_x_x$2"); //ersetzt punkte im datum
                  // if(i>20 && i<25)  log("++++++++++++++++++++"+hhh)
                     hhh=hhh.replace(/\*/g, "_");
                     hhh=hhh.replace(/ data.+programm(.+)/g,"bbb$1");
                  //  if(i>20 && i<25)    log("++++++++++++++++++++"+hhh)
                 
                     helper2.push(hhh)
                 }
        
        var myArr    =helper2.toString().split(",");
        
        //log(myArr.length.toString()+"---"+myArr[3].toString());
        
        for(var i=0;i<myArr.length;i++){   var haken=myArr[i].replace( /,>/g , "");       myArr22.push(haken);}  // /,>/g , ""
        for(var i=0;i<myArr22.length;i++){  var    haken=myArr22[i].replace("xxx","");     myArr222.push(haken);}  // /,>/g , ""
        for(var i=0;i<myArr222.length;i++){  var    haken=myArr222[i].replace(/\"/g,"");     myArr2.push(haken);if (i<0) log(myArr2[i])}  // /,>/g , ""
        
        
        
                   
        
         for(var i=0;i<myArr2.length;i++) {
           let val4help= myArr2[i].slice(((myArr2[i].indexOf('bbb') + 1 + 3) - 1), myArr2[i].length); val4help=val4help.replace(/ name=bid_/g,""); if(i<0) log(val4help)
           let val3= myArr2[i].slice(0, (myArr2[i].indexOf(':') + 1) - 5).trim(); val3=val3.replace(/x_x_x/g,"."); val3=val3.replace(/x_y_x/g,".") // val3=val3.slice(0, (val3.lastIndexOf('-') + 1) - 1);   // sendung
           let val2=myArr2[i].slice(((myArr2[i].lastIndexOf('.') + 1 + 1) - 1), myArr2[i].length).trim();val2=val2.replace(/bbb.+/g,"") ;;if(i<0) log(val2); val2=val2.replace(/x_x_x/g,".");  val2=val2.replace(/x_y_x/g,".")// sender
           let val1=myArr2[i].slice((((myArr2[i].lastIndexOf(':') + 1) - 2) - 1), myArr2[i].indexOf(':') + 1 + 2).trim();                // uhrzeit
              
            myObj.push([val1,val2,val3,val4help]);
          
         }
        
        
        
        var mySort = ["Tele 5","Fix&Foxi","Nicktoons","VH1 Classic","MTV Brand New","Gute Laune TV","Nautical Channel",
        "Silverline","Penthouse Passion HD","Playboy TV","Lust Pur","Blue Hustler","RTL Living","Disney XD","RCK TV","MTV",
        "Animal Planet","Planet","Geo Television","auto motor und sport channel","Extreme Sports Channel","SPORT1+","RTL Passion",
        "RTL Crime","ProSieben Fun", "1 emotions","kabel eins classics","Sony Channel","Sony AXN","Jukebox","MTV Live HD","MTV HD",
        "Stingray Classica","Boomerang","Cartoon Network","Disney Junior","Junior","TV","Heimatkanal","E! Entertainment","TNT Comedy",
        "Romance TV","Kinowelt TV","TNT Film","TNT Serie","Universal TV","FOX","Syfy","13TH STREET","Spiegel TV Wissen","Spiegel Geschichte",
        "Crime + Investigation","History","Der Buckingham-Palast - Geheimnisse -- Affären","National Geographic Wild",
        "National Geographic","Discovery Channel","Motorvision TV","Sportdigital Fußball","Eurosport 2","Sky Sport Austria 1",
        "Sky Sport News HD","Sky Sport 2 HD","Sky Sport 1 HD","Sky Sport Bundesliga 1","Sky Krimi","Sky 1","Sky Atlantic HD",
        "Sky Cinema Special HD","Sky Cinema Family HD","Sky Cinema Nostalgie","Sky Cinema Emotion","Sky Cinema Comedy",
        "Sky Cinema Action","Sky Cinema Hits","Sky Cinema +24","Sky Cinema +1","Sky Cinema","TRT Türk","TV 2","DR 1",
        "Rouge TV","France 24","TV5MONDE","CNBC Paneurope","CNN","BBC World News","BBC Entertainment","Die Neue Zeit",
        "Bibel TV","Star TV","Schweiz 5","5plus","3plus","SRF info","SRF 2","SRF 1","sixx Austria","Puls 4","ATV2","ATV",
        "Spreekanal","rheinmainTV","Rhein-Neckar-Fernsehen","München TV","Hamburg 1","ORF Sport +","ORF 3","ORF 2","ORF 1",
        "Franken Fernsehen","Berlin","DW English","Deutsches Anleger Fernsehen","tv","Channel 21","HSE24","QVC",
        "Deutsches Musik Fernsehen","Deluxe Music","RiC","Anixe Plus","Anixe HD Serie","TLC","Health TV","Home & Garden TV",
        "RTL Plus","VOXup","1 Gold","DMAX","ProSieben Maxx","N24 Doku","Kabel 1 Doku","eSports1","SPORT1","Eurosport 1",
        "Zee One","Comedy Central","Nick","KiKA","Tele 5","Disney Channel","Euronews","Welt der Wunder","01. NDR","02. NDR",
        "WELT","Beate-Uhse.TV","sonnenklar.tv","TV.Berlin","Stingray Classica","Sat.1 emotions","Sat.1 Gold","tagesschau24","NICK Jr.","BonGusto"];
        var fehlendeFilter=["One","ZDFinfo","ZDFneo","tagesschau24","ARD alpha","Phoenix","RBB","HR","SWR","BR","MDR","WDR","n-tv",
                           "NDR","3sat","Arte","VOX","RTL Zwei","kabel eins","ProSieben","1","RTL","ZDF","Das Erste","NITRO","Servus TV","Sixx","Super RTL"];
        
        
           for (var b =0; b<myObj.length; b++){
           
          
              if(!mySort.includes(myObj[b][1].trim()) && myObj[b][1].trim()!="" ) 
              { 
              myObjFilter.push(myObj[b]);
           
              } else{
                  //myObjFilter.push(myObj[ind2]);
                // log("filtered"+myObj[b][1])
                 }
           
         }
         //log("gefiltert"+myObjFilter.toString());
                    
        for (var b =0; b<myObjFilter.length; b++){
           //log("vorher: "+ vorher+ " object: "+myObjFilter[b][1]);
          if (myObjFilter[b][1]!=vorher){myObjFilterHelp.push(myObjFilter[b]); vorher =myObjFilter[b][1] } else{}
        
        }
        
        
        
        for(var index in myObjFilter) {counterlein++; /*log(counterlein.toString())*/}
        
        
        return myObjFilterHelp;
        
        
        }
        
               on({id: dpVISReminder, ack: false, change: "any"}, function (obj) { 
               //log(getState(dpANLEGEN).val+"----refresh");
               var timeout2 = setTimeout(function () {
               
                     if (existsState(dpVISReminder)){
                      if (getState(dpVISReminder).val!=""){
                           var valHelpi=getState(dpVISReminder).val.split(",")
                           val0="&ensp;"+symbolSavedReminder+"<i> <font color=\""+farbeErinnerung+"\">"+valHelpi[1]+"</i>";  
                           if (valHelpi[0]!=undefined){
                               let  istGueltig=formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm")
             
                               if ( ((parseFloat((valHelpi[0].slice(0, (valHelpi[0].indexOf(':') + 1) - 1))) *60) + parseFloat((valHelpi[0].slice(((valHelpi[0].indexOf(':') + 1 + 1) - 1), valHelpi[0].length)))) >=  ((parseFloat((istGueltig.slice(0, (istGueltig.indexOf(':') + 1) - 1))))*60)  + parseFloat((istGueltig.slice(((istGueltig.indexOf(':') + 1 + 1) - 1), istGueltig.length))) )  {
                                writeHTML();
                               
                               }        } } }
        
           }, 1500);
           });
        
           
        
        
        
        

        @sigi234 jetzt gerade stimmt es -

        Image 1.png

        nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

        sigi234S 1 Reply Last reply
        0
        • liv-in-skyL liv-in-sky

          // @liv-in-sky 28.2.2020-14:19
          
          
          //HIER WIRD PFAD UND FILENAME DEFINIERT
          const path = "/htmltv2015.html";                   //FIlenamen definieren
          const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
          let   braucheEinFile=false;                          // bei true wird ein file geschrieben
          let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
          let dpVIS="controll-own.0.TABELLEN.TV2015"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget Type: String
          let dpVISReminder="controll-own.0.TABELLEN.TVReminder"          //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget Type : String 
          let mySchedule="  0 7,17 * * * ";                        
           var symbolLink="📌";                                                                    //  👎  💀 ❌  ⚪  ⚫ ⭕  🔴 🔵 🌎 🚩 🗺 🕸️ 📌
           let symbolLinkhoerzu="📺"
          let farbeSchalterON="blue";
           let erinnerung=true;
          let symbolLinkReminder="⏰";
          let farbeErinnerung="white";          // farbe des reminders in tabelle
          let symbolSavedReminder="🔔";                     //  das symbol am ende der tabelle für gesicherte reminder
          //---------------------------------------
          
          //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
          var htmlFeld1='SENDER';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
          var htmlFeld2='20:15';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
          var htmlFeld3='SENDUNG';         var Feld3lAlign="left";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
          //-----------------------------------
          
          
          //hier werden die styles für die tabelle definiert
          //ÜBERSCHRIFT ÜBER TABELLE
          let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
          let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
          const htmlFeldUeber='TV Programm um 20:15';              // Überschrift und Signature
          const htmlFarbUber="white";                         // Farbe der Überschrift
          const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
          const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
          //MEHRERE TABELLEN NEBENEINANDER
          let   mehrfachTabelle=1;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
          const trennungsLinie="2";                             //extra trennungslinie bei mehrfachtabellen - evtl auf 0 stellen, wnn htmlRahmenLinien auf none sind
          const farbetrennungsLinie="white";
          const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
          const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
          //ÜBERSCHRIFT SPALTEN
          const UeberSchriftHöhe="35";                          //Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
          const LinieUnterUeberschrift="3";                   // Linie nur unter Spaltenüberschrift - 
          const farbeLinieUnterUeberschrift="white";
          const groesseUeberschrift=16;
          const UeberschriftStyle="normal"                     // möglich "bold"
          //GANZE TABELLE
          let abstandZelle="1";
          let farbeUngeradeZeilen="#000000";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
          let farbeGeradeZeilen="#151515";                        //Farbe für gerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
          let weite="auto";                                     //Weite der Tabelle
          let zentriert=true;                                   //ganze tabelle zentriert
          const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
          const htmlSchriftart="Helvetica";
          const htmlSchriftgroesse="14px";
          //FELDER UND RAHMEN
          let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
          const htmlFarbFelderschrift="#BDBDBD";                  // SchriftFarbe der Felder
          const htmlFarbFelderschrift2="#D8D8D8";                 // SchriftFarbe der Felder für jede 2te Tabelle
          const htmlFarbTableColorGradient1="#424242";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
          const htmlFarbTableColorGradient2="#424242";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
          const htmlFarbTableBorderColor="grey";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
          let htmlRahmenLinien="none";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
          const htmlSpalte1Weite="auto";                   //  Weite der ersten beiden  Spalten oder z.b. 115px
          
          // HIER NICHTS  ÄNDERN
          
          let borderHelpBottum;
          let borderHelpRight;
          let htmlcenterHelp;
          let htmlcenterHelp2;
          
          if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
          if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
          if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
          if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
          zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
          zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";
          
          
          const htmlZentriert='<center>'
          const htmlStart=    "<!DOCTYPE html><html lang=\"de\"><head><title>Vorlage</title><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"+
                             "<style> * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                             " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                            // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                            "a:link { text-decoration:none;}"+
                             " td { padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                             " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                             "td:nth-child(1) {width: "+htmlSpalte1Weite+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite+"}"+
                             " </style></head><body> <div>";
          //const htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"</p>";                    
          const htmlTabStyle= "<table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                                "; font-family:"+htmlSchriftart+";background-image: linear-gradient(42deg,"+htmlFarbTableColorGradient2+","+htmlFarbTableColorGradient1+");\">";
          const htmlTabUeber1="<tr height=\""+UeberSchriftHöhe+"\" style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \">";
          const htmlTabUeber3="</tr>";
          
          
          //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3
          
          var htmlTabUeber2="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;&ensp;&ensp;<a href=\"https:\/\/"+ "www.hoerzu.de\/tv-programm\/" + "\" target=\"_blank\" onclick=\"window.open(this.href,this.target,\'width=960,height=640\'); return false;\">"+symbolLinkhoerzu+"</a></td>";
          var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                             "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
          const buttonScript = '<script> function setOnClickCustom( myvalue ) {	var Self = this; var objID = myvalue;	 var2 = \"' + dpVISReminder + '\"; Self.servConn.setState(var2, myvalue);  console.log("reminder"); } ' +
                              ' function schliesseWindowA(valButtonSingle, namely, auswahl) { console.log(namely); valButtonSingle=valButtonSingle+\"?dummyParameter=\"+new Date().getTime(); console.log(valButtonSingle); window[namely]=window.open(valButtonSingle ,\'_blank\',\' width=680, height=640 , top=170,  left=200\'); console.log(auswahl);setOnDblClickCustom(auswahl); setTimeout (function() \{ window[namely].close(); console.log(\"close\"); \}, 20000);} </script>' 
                                           
          
          
          //------------------------------------------------------
          
          var url='https://www.hoerzu.de/tv-programm/heute/20:30/';
          const request = require('request-promise-native');
          let auswahlHelp=1;
          var htmlTabUeber="";
          var htmlOut="";
          var mix;
          var counter;
          //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
          var val1; var val0; var val2;
          
          async function writeHTML(){
          
          
          
          
          htmlOut="";
          
          counter=-1;
          htmlTabUeber="";
          switch (mehrfachTabelle) { 
             case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
             case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
             case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
             case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
          };   
          if (!UeberschriftSpalten) {htmlTabUeber=""}
          
          
          //--------------------------------------------------------------------------------------------------------------------------------------------------
          //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
          //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
          //--------------------------------------------------------------------------------------------------------------------------------------------------
          
          
          getTV().then(function() {
            
          
          var myOjects= myObjFilterHelp;
          
          
          //var myOjects=holeTV();
          for (var index in myOjects) {   
                    counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                     
                val1=myOjects[index][0]; val1=val1.replace( /,/g , "");/*log(val1);*/ let val1help=val1; val1="um "+val1; //zeit
                val0=myOjects[index][1]; val0=val0.replace( /,/g , ""); //log(val0); 
               
                val2=myOjects[index][2]; val2=val2.replace( /,/g , ""); val2=val2.replace(/-$/,"");    // val2=val2.substring(0,37)+" ..."; //log(val2);
                 let valButton2;
                
                if (val2.length>=33)   val2=val2.substring(0,32)+" ..."  //log(val2);
                if (erinnerung) {valButton2=val1help+","+ val0 + "," + val2; val0="<button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\" value=\"toggle\" onclick=\"setOnClickCustom\(\'"+valButton2+"\')\">"+symbolLinkReminder + "</button>"+val0;}
                let valButton=myOjects[index][3]; valButton='https://www.hoerzu.de/tv-programm'+valButton; //log(valButton);  
                let namlyMain= "mywin"+index;                                                                                                 //, \'_blank\'
                val2="<button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\"  onclick=\"schliesseWindowA\(\'"+valButton+"\', \'"+namlyMain+"\', \'"+auswahlHelp+"\')\">"+symbolLink+" </button>" +val2;
             
               tabelleBind(); 
              
          
             }; 
               if (erinnerung && existsState(dpVISReminder)){
                        if (getState(dpVISReminder).val!=""){
                             var valHelpi=getState(dpVISReminder).val.split(",")
                             val0="&ensp;"+symbolSavedReminder+"<i> <font color=\""+farbeErinnerung+"\">"+valHelpi[1]+"</i>";  
                             if (valHelpi[0]!=undefined){
                                 let  istGueltig=formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm")
               
                                 if ( ((parseFloat((valHelpi[0].slice(0, (valHelpi[0].indexOf(':') + 1) - 1))) *60) + parseFloat((valHelpi[0].slice(((valHelpi[0].indexOf(':') + 1 + 1) - 1), valHelpi[0].length)))) >=  ((parseFloat((istGueltig.slice(0, (istGueltig.indexOf(':') + 1) - 1))))*60)  + parseFloat((istGueltig.slice(((istGueltig.indexOf(':') + 1 + 1) - 1), istGueltig.length))) )  {
                                      counter++;   //log("ist true")            
                                      val1="<i><font color=\""+farbeErinnerung+"\">um "+valHelpi[0]+"</i>";
                                      val2="<i><font color=\""+farbeErinnerung+"\">&ensp;&ensp;&ensp;"+valHelpi[2]+"<i>";
                                      tabelleBind();} 
                                 else {setState(dpVISReminder,"");}
             
                                                         } } }
          
          }).then(tabelleFinish)
          
          //-------------------------------------------------------------------------------------------------------------------------------------------------
          //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
          //-------------------------------------------------------------------------------------------------------------------------------------------------
          
           
               
          } // function ende
          
          //MAIN:
           
          schedule(mySchedule,  function () { 
           writeHTML();
           //if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
          }); 
          writeHTML();
          //writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });
          
          async function tabelleBind(){
             //  counter=counter+mehrfachTabelle;
                 switch (mehrfachTabelle) { 
          
                   case 1: if(counter%2==0)         {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;}else    
                                                    {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;}
                   case 2: if(counter%4==0){
                              if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                  ";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                         else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;
                                }else{
                                          if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                  ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                         else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;}
                                              
                   case 3:if(counter%2==0)   {
                              if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                  ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } //Teil1 c=0
                                         else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                  "; \"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} //Teil 2 c=1
                                                          else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";} //Teil 3 c=3
                                                    } break;}else{
                              if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                  ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                         else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                  ";\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                          else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                    } break;}                                          
          
          
                   case 4:  // counter=counter+8;
                             if(counter%8==0)   {
                             if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+ farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } // teil1
                                             else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} //teil 2
                                                          else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} //teil 4
                                                                            else    {htmlOut  = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"  align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                                    } break;}else{
                             if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } //teil 1
                                             else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} // teil 2
                                                          else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} // teil 4
                                                                            else    {htmlOut  = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                                    } break;}                                    
                  } //switch ende
          
          }
          
          async  function tabelleFinish() {
          
          switch (mehrfachTabelle) {  
                 case 1:    break;
          
                 case 2:    
                            if(counter%2==0)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                          
                            break;
          
                 case 3:   if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                           if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");        
                           if(counter%3==0)      htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                         
                            break;
                 case 4:   if(counter%4==3)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                           if(counter%4==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                           if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");    
                           if(counter%4==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");      
                           break; }
               
                   var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
                 var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>";
                  
                  if (!htmlSignature) htmlUnter="";
                    //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
                     var htmlOutVIS="";
                   //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                      if (htmlUberschrift) 
                          { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+buttonScript : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+buttonScript ;
          
                        } else {
                         zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter +buttonScript:  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+buttonScript;
          
                           }
                           
          
            // log("bin raus aus tabelleBind");
                     if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
          
           var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>"
          
           if (!htmlSignature) htmlUnter="";
            var htmlEnd="</table>"+htmlUnter+"</div></body>";
           //mit oder ohne überschrift - zentriert oder links
          htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
           //log(htmlOut);
          
          
          }
          
          
          var gesucht="";
          var gefunden="";
          var gefunden_2="";
          var gefunden2="";
          var gefunden2_2=""; 
          
          var myArr2=[];   var myArr22=[];  var myArr222=[];
          var myArr2_2=[]; var myArr22_2=[];
          var myArr3=[];
          var myArr3_2=[];
          var myArr4=[];
          var myObj=[];
          var myObjFilter=[];
          var counterlein=0;
          var allesDa=true;
             var vorher=""; 
            var jetzt; 
            var myObjFilterHelp=[] ; 
          
          
          async function getTV(){
             return new Promise(async (resolve, reject) => {
          //try {
            await request(url, async function (error, response, result) {
            //console.log("result: "+result);
            gesucht="";
            gesucht=result;  //log(" gesucht - direct_____________JETZT: "+ gesucht);
             // setState("controll-own.0.AAATEST.TVTVTVTV",result);
              holeTV(gesucht);
              //log("bin raus getTV");
              if (gesucht!="") {resolve()} else {reject()}
          ;  }).on("error", function (e) {console.error(e);});
          
            //log("bin raus getTV");
           });
          
          }
          
          async function holeTV(gesuchtVal){
          //log("bin in holeTV");
           gesucht="";
          gefunden="";
          gefunden_2="";
          gefunden2="";
          gefunden2_2=""; 
          
          myArr2=[];    myArr22=[];   myArr222=[]; 
          myArr2_2=[];  myArr22_2=[];
          myArr3=[];
          myArr3_2=[];
          myArr4=[];
          myObj=[];
          myObjFilter=[];
               vorher=""; 
          
            myObjFilterHelp=[] ; 
          
          counterlein=0;
          var re =/\s<a title=".+?" name="bid_/g;
          
          gesucht = gesuchtVal;
          
          gefunden= "fff"+gesucht.match(re);
          
          
                   let helper2=[];
                    let helper=gefunden.match(/\".+?" name="bid_/g);
                    // log("--------"+helper.length.toString());
                   for (var i=0;i<helper.length;i++){
                       let hhh= helper[i].replace(/,/g, " --");// 
                       hhh= hhh.replace(/\'/g, " ");//          
                    // if(i<1) log(hhh)
                       hhh=hhh.replace(/ (\d\d):(\d\d) /g, " $1\-\-\-$2");
                    // if(i<1)  log(hhh)
                       hhh=hhh.replace(/\:/g, ";");
                    // if(i<1)   log(hhh)
                       hhh=hhh.replace(/(\d\d)---(\d\d)/g, " $1:$2 ");
                    // if(i>20 && i<25)   log(hhh)
                       hhh=hhh.replace(/www\..+\/tv-pro/g, "tv-pro");   // vernichtet punkte am ende
                       hhh=hhh.replace(/(\d\d\.\d\d\..+)\.(.+)\" data/g, "$1x_y_x$2 data"); //ersetzt punkt in sendernamen (sat.1)
                    // if(i>20 && i<25)  log("++++++++++++++++++++"+hhh)
                       hhh=hhh.replace(/(^.+?)\.+(.+?\d\d\.\d\d\.)/g, "$1x_x_x$2"); //ersetzt punkte im datum
                    // if(i>20 && i<25)  log("++++++++++++++++++++"+hhh)
                       hhh=hhh.replace(/\*/g, "_");
                       hhh=hhh.replace(/ data.+programm(.+)/g,"bbb$1");
                    //  if(i>20 && i<25)    log("++++++++++++++++++++"+hhh)
                   
                       helper2.push(hhh)
                   }
          
          var myArr    =helper2.toString().split(",");
          
          //log(myArr.length.toString()+"---"+myArr[3].toString());
          
          for(var i=0;i<myArr.length;i++){   var haken=myArr[i].replace( /,>/g , "");       myArr22.push(haken);}  // /,>/g , ""
          for(var i=0;i<myArr22.length;i++){  var    haken=myArr22[i].replace("xxx","");     myArr222.push(haken);}  // /,>/g , ""
          for(var i=0;i<myArr222.length;i++){  var    haken=myArr222[i].replace(/\"/g,"");     myArr2.push(haken);if (i<0) log(myArr2[i])}  // /,>/g , ""
          
          
          
                     
          
           for(var i=0;i<myArr2.length;i++) {
             let val4help= myArr2[i].slice(((myArr2[i].indexOf('bbb') + 1 + 3) - 1), myArr2[i].length); val4help=val4help.replace(/ name=bid_/g,""); if(i<0) log(val4help)
             let val3= myArr2[i].slice(0, (myArr2[i].indexOf(':') + 1) - 5).trim(); val3=val3.replace(/x_x_x/g,"."); val3=val3.replace(/x_y_x/g,".") // val3=val3.slice(0, (val3.lastIndexOf('-') + 1) - 1);   // sendung
             let val2=myArr2[i].slice(((myArr2[i].lastIndexOf('.') + 1 + 1) - 1), myArr2[i].length).trim();val2=val2.replace(/bbb.+/g,"") ;;if(i<0) log(val2); val2=val2.replace(/x_x_x/g,".");  val2=val2.replace(/x_y_x/g,".")// sender
             let val1=myArr2[i].slice((((myArr2[i].lastIndexOf(':') + 1) - 2) - 1), myArr2[i].indexOf(':') + 1 + 2).trim();                // uhrzeit
                
              myObj.push([val1,val2,val3,val4help]);
            
           }
          
          
          
          var mySort = ["Tele 5","Fix&Foxi","Nicktoons","VH1 Classic","MTV Brand New","Gute Laune TV","Nautical Channel",
          "Silverline","Penthouse Passion HD","Playboy TV","Lust Pur","Blue Hustler","RTL Living","Disney XD","RCK TV","MTV",
          "Animal Planet","Planet","Geo Television","auto motor und sport channel","Extreme Sports Channel","SPORT1+","RTL Passion",
          "RTL Crime","ProSieben Fun", "1 emotions","kabel eins classics","Sony Channel","Sony AXN","Jukebox","MTV Live HD","MTV HD",
          "Stingray Classica","Boomerang","Cartoon Network","Disney Junior","Junior","TV","Heimatkanal","E! Entertainment","TNT Comedy",
          "Romance TV","Kinowelt TV","TNT Film","TNT Serie","Universal TV","FOX","Syfy","13TH STREET","Spiegel TV Wissen","Spiegel Geschichte",
          "Crime + Investigation","History","Der Buckingham-Palast - Geheimnisse -- Affären","National Geographic Wild",
          "National Geographic","Discovery Channel","Motorvision TV","Sportdigital Fußball","Eurosport 2","Sky Sport Austria 1",
          "Sky Sport News HD","Sky Sport 2 HD","Sky Sport 1 HD","Sky Sport Bundesliga 1","Sky Krimi","Sky 1","Sky Atlantic HD",
          "Sky Cinema Special HD","Sky Cinema Family HD","Sky Cinema Nostalgie","Sky Cinema Emotion","Sky Cinema Comedy",
          "Sky Cinema Action","Sky Cinema Hits","Sky Cinema +24","Sky Cinema +1","Sky Cinema","TRT Türk","TV 2","DR 1",
          "Rouge TV","France 24","TV5MONDE","CNBC Paneurope","CNN","BBC World News","BBC Entertainment","Die Neue Zeit",
          "Bibel TV","Star TV","Schweiz 5","5plus","3plus","SRF info","SRF 2","SRF 1","sixx Austria","Puls 4","ATV2","ATV",
          "Spreekanal","rheinmainTV","Rhein-Neckar-Fernsehen","München TV","Hamburg 1","ORF Sport +","ORF 3","ORF 2","ORF 1",
          "Franken Fernsehen","Berlin","DW English","Deutsches Anleger Fernsehen","tv","Channel 21","HSE24","QVC",
          "Deutsches Musik Fernsehen","Deluxe Music","RiC","Anixe Plus","Anixe HD Serie","TLC","Health TV","Home & Garden TV",
          "RTL Plus","VOXup","1 Gold","DMAX","ProSieben Maxx","N24 Doku","Kabel 1 Doku","eSports1","SPORT1","Eurosport 1",
          "Zee One","Comedy Central","Nick","KiKA","Tele 5","Disney Channel","Euronews","Welt der Wunder","01. NDR","02. NDR",
          "WELT","Beate-Uhse.TV","sonnenklar.tv","TV.Berlin","Stingray Classica","Sat.1 emotions","Sat.1 Gold","tagesschau24","NICK Jr.","BonGusto"];
          var fehlendeFilter=["One","ZDFinfo","ZDFneo","tagesschau24","ARD alpha","Phoenix","RBB","HR","SWR","BR","MDR","WDR","n-tv",
                             "NDR","3sat","Arte","VOX","RTL Zwei","kabel eins","ProSieben","1","RTL","ZDF","Das Erste","NITRO","Servus TV","Sixx","Super RTL"];
          
          
             for (var b =0; b<myObj.length; b++){
             
            
                if(!mySort.includes(myObj[b][1].trim()) && myObj[b][1].trim()!="" ) 
                { 
                myObjFilter.push(myObj[b]);
             
                } else{
                    //myObjFilter.push(myObj[ind2]);
                  // log("filtered"+myObj[b][1])
                   }
             
           }
           //log("gefiltert"+myObjFilter.toString());
                      
          for (var b =0; b<myObjFilter.length; b++){
             //log("vorher: "+ vorher+ " object: "+myObjFilter[b][1]);
            if (myObjFilter[b][1]!=vorher){myObjFilterHelp.push(myObjFilter[b]); vorher =myObjFilter[b][1] } else{}
          
          }
          
          
          
          for(var index in myObjFilter) {counterlein++; /*log(counterlein.toString())*/}
          
          
          return myObjFilterHelp;
          
          
          }
          
                 on({id: dpVISReminder, ack: false, change: "any"}, function (obj) { 
                 //log(getState(dpANLEGEN).val+"----refresh");
                 var timeout2 = setTimeout(function () {
                 
                       if (existsState(dpVISReminder)){
                        if (getState(dpVISReminder).val!=""){
                             var valHelpi=getState(dpVISReminder).val.split(",")
                             val0="&ensp;"+symbolSavedReminder+"<i> <font color=\""+farbeErinnerung+"\">"+valHelpi[1]+"</i>";  
                             if (valHelpi[0]!=undefined){
                                 let  istGueltig=formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm")
               
                                 if ( ((parseFloat((valHelpi[0].slice(0, (valHelpi[0].indexOf(':') + 1) - 1))) *60) + parseFloat((valHelpi[0].slice(((valHelpi[0].indexOf(':') + 1 + 1) - 1), valHelpi[0].length)))) >=  ((parseFloat((istGueltig.slice(0, (istGueltig.indexOf(':') + 1) - 1))))*60)  + parseFloat((istGueltig.slice(((istGueltig.indexOf(':') + 1 + 1) - 1), istGueltig.length))) )  {
                                  writeHTML();
                                 
                                 }        } } }
          
             }, 1500);
             });
          
             
          
          
          
          

          @sigi234 jetzt gerade stimmt es -

          Image 1.png

          sigi234S Online
          sigi234S Online
          sigi234
          Forum Testing Most Active
          wrote on last edited by
          #6

          @liv-in-sky sagte in TV Programm Mini Anzeige - HTML Tabelle:

          @sigi234 jetzt gerade stimmt es -

          auch ein html file kann erzeugt werden,

          Wird nicht erzeugt.

          Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
          Immer Daten sichern!

          liv-in-skyL 1 Reply Last reply
          0
          • sigi234S sigi234

            @liv-in-sky sagte in TV Programm Mini Anzeige - HTML Tabelle:

            @sigi234 jetzt gerade stimmt es -

            auch ein html file kann erzeugt werden,

            Wird nicht erzeugt.

            liv-in-skyL Offline
            liv-in-skyL Offline
            liv-in-sky
            wrote on last edited by
            #7

            @sigi234 hast du auf true gesetz ? ich glaube, ich hebae es auf false gestellt

            es wird auch nur eines erzeugt, wenn die daten stimmen - also wie beinm vis-dp . gibt es für die vis etwas, wird auch ein file geschrieben

            nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

            sigi234S 1 Reply Last reply
            0
            • liv-in-skyL liv-in-sky

              @sigi234 hast du auf true gesetz ? ich glaube, ich hebae es auf false gestellt

              es wird auch nur eines erzeugt, wenn die daten stimmen - also wie beinm vis-dp . gibt es für die vis etwas, wird auch ein file geschrieben

              sigi234S Online
              sigi234S Online
              sigi234
              Forum Testing Most Active
              wrote on last edited by
              #8

              @liv-in-sky sagte in TV Programm Mini Anzeige - HTML Tabelle:

              @sigi234 hast du auf true gesetz ? ich glaube, ich hebae es auf false gestellt

              es wird auch nur eines erzeugt, wenn die daten stimmen - also wie beinm vis-dp . gibt es für die vis etwas, wird auch ein file geschrieben

               //HIER WIRD PFAD UND FILENAME DEFINIERT
               const path = "/tvjetzt.html";                   //FIlenamen definieren
               const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
               let   braucheEinFile=true;                          // bei true wird ein file geschrieben
               let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
               let dpVIS="javascript.0.Eigene_Datenpunkte.TVjetzt"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
               let mySchedule="  */3  * * * * ";                       //jede minute  
               //---------------------------------------
              
              //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
              var htmlFeld1='SENDER';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
              var htmlFeld2='DAUER';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
              var htmlFeld3='SENDUNG';         var Feld3lAlign="left";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
              //-----------------------------------
              

              Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
              Immer Daten sichern!

              liv-in-skyL 2 Replies Last reply
              0
              • sigi234S sigi234

                @liv-in-sky sagte in TV Programm Mini Anzeige - HTML Tabelle:

                @sigi234 hast du auf true gesetz ? ich glaube, ich hebae es auf false gestellt

                es wird auch nur eines erzeugt, wenn die daten stimmen - also wie beinm vis-dp . gibt es für die vis etwas, wird auch ein file geschrieben

                 //HIER WIRD PFAD UND FILENAME DEFINIERT
                 const path = "/tvjetzt.html";                   //FIlenamen definieren
                 const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
                 let   braucheEinFile=true;                          // bei true wird ein file geschrieben
                 let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
                 let dpVIS="javascript.0.Eigene_Datenpunkte.TVjetzt"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                 let mySchedule="  */3  * * * * ";                       //jede minute  
                 //---------------------------------------
                
                //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
                var htmlFeld1='SENDER';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                var htmlFeld2='DAUER';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                var htmlFeld3='SENDUNG';         var Feld3lAlign="left";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                //-----------------------------------
                
                liv-in-skyL Offline
                liv-in-skyL Offline
                liv-in-sky
                wrote on last edited by
                #9

                @sigi234 kann eine zeit dauern - bis das kommt - habe aber vermutung, diese php seite von denen soll wohl nicht dauernd daten bringen

                momentan wird wieder nix upgedatet - es gibt auch kein interval - mal geht es mal wieder nicht - ich denke, das wird nicht funktional sein und man kann das so nicht gebrauchen

                danke fürs auspobieren

                nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                1 Reply Last reply
                0
                • sigi234S sigi234

                  @liv-in-sky sagte in TV Programm Mini Anzeige - HTML Tabelle:

                  @sigi234 hast du auf true gesetz ? ich glaube, ich hebae es auf false gestellt

                  es wird auch nur eines erzeugt, wenn die daten stimmen - also wie beinm vis-dp . gibt es für die vis etwas, wird auch ein file geschrieben

                   //HIER WIRD PFAD UND FILENAME DEFINIERT
                   const path = "/tvjetzt.html";                   //FIlenamen definieren
                   const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
                   let   braucheEinFile=true;                          // bei true wird ein file geschrieben
                   let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
                   let dpVIS="javascript.0.Eigene_Datenpunkte.TVjetzt"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                   let mySchedule="  */3  * * * * ";                       //jede minute  
                   //---------------------------------------
                  
                  //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
                  var htmlFeld1='SENDER';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                  var htmlFeld2='DAUER';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                  var htmlFeld3='SENDUNG';         var Feld3lAlign="left";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                  //-----------------------------------
                  
                  liv-in-skyL Offline
                  liv-in-skyL Offline
                  liv-in-sky
                  wrote on last edited by
                  #10

                  @sigi234 bei mir hat es über 30 minuten gedauert, bis das file gekommen ist. hast u mal geschaut, ob die österreichischen snder kommen - wenn doch mal daten kommen - die habe ich gefiltert

                  nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                  sigi234S 1 Reply Last reply
                  0
                  • liv-in-skyL liv-in-sky

                    @sigi234 bei mir hat es über 30 minuten gedauert, bis das file gekommen ist. hast u mal geschaut, ob die österreichischen snder kommen - wenn doch mal daten kommen - die habe ich gefiltert

                    sigi234S Online
                    sigi234S Online
                    sigi234
                    Forum Testing Most Active
                    wrote on last edited by
                    #11

                    @liv-in-sky
                    Noch nie was gekommen.

                    Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                    Immer Daten sichern!

                    1 Reply Last reply
                    0
                    • liv-in-skyL Offline
                      liv-in-skyL Offline
                      liv-in-sky
                      wrote on last edited by
                      #12

                      also nur, wenn du lust hast könnte zeitverschwendung sein

                      probiermal das und schau ins log, was da steht alle drei minuten sollte da was passieren

                      datenpunkt wieder angleichen

                      
                      
                      
                      //HIER WIRD PFAD UND FILENAME DEFINIERT
                      const path = "/htmltvjetzt.html";                   //FIlenamen definieren
                      const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
                      let   braucheEinFile=true;                          // bei true wird ein file geschrieben
                      let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
                      let dpVIS="controll-own.0.TABELLEN.TVjetzt"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                      let mySchedule="  */3  * * * * ";                       //jede minute  
                      //---------------------------------------
                      
                      //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
                      var htmlFeld1='SENDER';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                      var htmlFeld2='DAUER';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                      var htmlFeld3='SENDUNG';         var Feld3lAlign="left";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                      //-----------------------------------
                      
                      
                      
                      //hier werden die styles für die tabelle definiert
                      //ÜBERSCHRIFT ÜBER TABELLE
                      let   htmlUberschrift=true;                           // mit Überschrift über der tabelle
                      const htmlFeldUeber='Das TV Programm - jetzt im Programm';              // Überschrift
                      const htmlFarbUber="#40FF00";                         // Farbe der Überschrift
                      //MEHRERE TABELLEN NEBENEINANDER
                      let   mehrfachTabelle=2;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                      const htmlFarbZweiteTabelle="#00FF00";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                      const htmlFarbTableColorUber="blue";               // Überschrift in der tabelle - der einzelnen Spalten
                      //GANZE TABELLE
                      let abstandZelle="2";
                      let weite="auto";                                     //Weite der Tabelle
                      let zentriert=true;                                   //ganze tabelle zentriert
                      const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
                      const htmlSchriftart="Helvetica";
                      const htmlSchriftgroesse="14px";
                      //FELDER UND RAHMEN
                      let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
                      const htmlFarbFelderschrift="#000000";                  // SchriftFarbe der Felder
                      const htmlFarbFelderschrift2="#000000";                 // SchriftFarbe der Felder für jede 2te Tabelle
                      const htmlFarbTableColorGradient1="#A9F5A9";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
                      const htmlFarbTableColorGradient2="#81F7F3";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
                      const htmlFarbTableBorderColor="blue";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
                      let htmlRahmenLinien="all";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
                      
                      // HIER NICHTS  ÄNDERN
                      
                      let borderHelpBottum;
                      let borderHelpRight;
                      let htmlcenterHelp;
                      let htmlcenterHelp2;
                      
                      if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
                      if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
                      if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
                      if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
                      zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
                      zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";
                      
                      const htmlEnd=      '</table></div></body>';
                      const htmlZentriert='<center>'
                      const htmlStart=    "<!DOCTYPE html><html lang=\"de\"><head><title>Vorlage</title><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"+
                                         "<style> * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                                         " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                                        // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                                         " td {padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                                         " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                                         " </style></head><body> <div>";
                      //const htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"</p>";                    
                      const htmlTabStyle= "<table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                                            "; font-family:"+htmlSchriftart+";background-image: linear-gradient(42deg,"+htmlFarbTableColorGradient2+","+htmlFarbTableColorGradient1+");\">";
                      const htmlTabUeber1="<tr style=\"color:"+htmlFarbTableColorUber+"; font-weight: bold\">";
                      const htmlTabUeber3="</tr>";
                      
                      
                      
                      
                      //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3
                      
                         	var htmlTabUeber2="<td align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td>";
                      var htmlTabUeber2_1="<td align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                                         "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
                      //------------------------------------------------------
                      var url='https://www.hoerzu.de/text/tv-programm/jetzt.php';
                      var url2='https://www.hoerzu.de/text/tv-programm/gleich.php';
                      const request = require('request');
                      
                      var htmlTabUeber="";
                      var htmlOut="";
                      var mix;
                      var counter;
                      //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
                      var val1; var val0; var val2;
                      
                      async function writeHTML(){
                      
                      
                      htmlOut="";
                      
                      counter=-1;
                      htmlTabUeber="";
                      switch (mehrfachTabelle) { 
                         case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
                         case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                         case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
                         case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                      };   
                      if (!UeberschriftSpalten) {htmlTabUeber=""}
                      
                      
                      //--------------------------------------------------------------------------------------------------------------------------------------------------
                      //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
                      //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
                      //--------------------------------------------------------------------------------------------------------------------------------------------------
                      
                      //await
                      getTV().then(function() {
                         //getTV().then(holeTV).then(function() {
                      //await holeTV();
                      
                      var myOjects= myObjFilter;
                      // log ("bin hier");
                      // var timeout4 = setTimeout(function () {
                         //log("______________objetsTest: "+myOjects[3][0]+myOjects[3][1]+myOjects[3][2]);
                        //  log ("bin hier");
                      //for(var index in myObjFilter) {counterlein++;log(counterlein+"---"+myObj[index][0]+"______"+myObj[index][2]+"______"+myObj[index][1])};
                      
                      //var myOjects=holeTV();
                      for (var index in myOjects) {   
                                counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                 
                            val0=myOjects[index][0]; val0=val0.replace( /,/g , "");
                            val1=myOjects[index][1]; val1=val1.replace( /,/g , "");
                            val2=myOjects[index][2]; val2=val2.replace( /,/g , ""); val2=val2.substring(0,40);
                      
                      
                         
                           tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                          
                      
                         }; //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!! 
                      }).then(tabelleFinish)
                      //}, 3000);
                      //-------------------------------------------------------------------------------------------------------------------------------------------------
                      //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                      //-------------------------------------------------------------------------------------------------------------------------------------------------
                      
                          // tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                           
                      } // function ende
                      
                      //MAIN:
                       
                      schedule(mySchedule,  function () { 
                       writeHTML();
                       //if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                      }); 
                      writeHTML();
                      //writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });
                      
                      
                      async function tabelleBind(){
                             switch (mehrfachTabelle) {  
                               case 1:                    htmlOut=htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;
                               case 2:  if(counter%2==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                     else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;
                                                          
                               case 3: if(counter%3==0 )  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                     else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                      else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                                } break;
                      
                      
                               case 4: if(counter%4==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                         else {if(counter%2==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                      else    {if(counter%2==1 && counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} 
                                                                                        else    {htmlOut = htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><tdalign="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}}
                                                                } break; } //switch ende
                      //log("bin raus aus tabelleBind");
                      }
                      
                      async function tabelleFinish() {
                      
                       switch (mehrfachTabelle) {  
                               case 1:    break;
                               case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                          if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                          break;
                               case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                          if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                          if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                          break;
                               case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                          if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                          if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                          if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                                          break; }
                             var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
                                //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
                                 var htmlOutVIS="";
                               //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                                  if (htmlUberschrift) 
                                      { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" ;
                      
                                    } else {
                                     zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                      
                                       }
                      
                      
                                 if (braucheEinVISWidget && allesDa) setState(dpVIS, htmlOutVIS );
                      
                       //mit oder ohne überschrift - zentriert oder links
                       htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
                      // log("bin raus aus tabelleBind");
                        if (braucheEinFile && allesDa) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                        //getTV2();
                      }
                      
                      
                      var gesucht="";
                      var gefunden="";
                      var gefunden_2="";
                      var gefunden2="";
                      var gefunden2_2=""; 
                      
                      var myArr2=[];   var myArr22=[];
                      var myArr2_2=[]; var myArr22_2=[];
                      var myArr3=[];
                      var myArr3_2=[];
                      var myArr4=[];
                      var myObj=[];
                      var myObjFilter=[];
                      var counterlein=0;
                      var allesDa=true;
                      
                      
                      async function getTV(){
                         return new Promise(async (resolve, reject) => {
                      //try {
                        await request.get(url, async function (error, response, result) {
                        //console.log("result: "+result);
                        gesucht=result; //log(" gesucht - direct: "+ gesucht);
                         // setState("controll-own.0.AAATEST.TVTVTVTV",result);
                          holeTV(gesucht);
                         // log("bin raus getTV");
                          if (gesucht!="") {resolve()} else {reject()}
                      ;  }).on("error", function (e) {console.error(e);});
                      
                      //  log("bin raus getTV");
                       });
                      
                      }
                      
                      async function holeTV(gesuchtVal){
                      //log("bin in holeTV");
                       gesucht="";
                      gefunden="";
                      gefunden_2="";
                      gefunden2="";
                      gefunden2_2=""; 
                      
                      myArr2=[];    myArr22=[];
                      myArr2_2=[];  myArr22_2=[];
                      myArr3=[];
                      myArr3_2=[];
                      myArr4=[];
                      myObj=[];
                      myObjFilter=[];
                      counterlein=0;
                      var re = /href.+?Uhr/g;
                      
                      var re1 = />.+?Uhr/g;
                      
                      gesucht = gesuchtVal;
                      let missing=gesucht.match(/<H3>Es ist jetzt.+?Uhr/g);
                      missing==null? allesDa=false : allesDa=true; 
                      if (!allesDa) {log(" DA FEHLT WAS - bin in jetzt ! "+missing)}else{"schreibe jetzt"};
                      //log(" DA FHLT WAS ! "+ gesucht.match(/<H3>Es ist jetzt.+?Uhr/g).length.toString());
                      //gesucht.match(/<H3>Es ist jetzt.+?Uhr/g).length==0 ? allesDa=false : allesDa=true; 
                      //log(" DA FHLT WAS ! "+ gesucht.match(/<H3>Es ist jetzt.+?Uhr/g).length.toString());
                      //gefunden = gesucht.match(re);
                      //gesucht=getState("controll-own.0.AAATEST.TVTVTVTV").val
                      //log("gesucht: ----------------: "+gesucht);
                      gefunden=  "fff"+gesucht.match(re);
                      gefunden_2="fff"+gesucht.match(/\*.+?Uhr .<br\/>/g);
                      //log("gefunden_2: ----------------: "+gefunden_2);
                       gefunden2=  "xxx"+gefunden.match(re1);  
                       gefunden2_2="xxx"+gefunden_2.match(/\*.+?Uhr/g); 
                      //log("gefunden2_2: ----------------: "+gefunden2_2);
                      var myArr    = gefunden2.split("Uhr");
                      var myArr_2 = gefunden2_2.split("Uhr");
                      //log(myArr.length.toString()+"---"+myArr.toString());
                      
                      for(var i=0;i<myArr.length;i++){   let haken=myArr[i].replace( /,>/g , "");       myArr22.push(haken);}  // /,>/g , ""
                      for(var i=0;i<myArr22.length;i++){  let    haken=myArr22[i].replace("xxx>","");     myArr2.push(haken);}  // /,>/g , ""
                      for(var i=0;i<myArr_2.length;i++){ let haken=myArr_2[i].replace(/,\*/g,"");    myArr22_2.push(haken);}    //   ",>",""
                      for(var i=0;i<myArr22_2.length;i++){ let haken=myArr22_2[i].replace("xxx>","");   myArr2_2.push(haken);}    //   ",>",""
                      
                      
                      for(var i=0;i<myArr2.length;i++){   var haken=myArr2[i].replace("xxx>","");     myArr3.push(haken);  }
                      for(var i=0;i<myArr2_2.length;i++){ var haken2=myArr2_2[i].replace("xxx*","");  myArr3_2.push(haken2);}
                      
                      //log(myArr3.length.toString()+"---"+myArr3.toString());
                      //log(myArr3_2.length.toString()+"---"+myArr3_2.toString());
                      
                      for(var i=0;i<myArr3_2.length;i++){myArr3.push(myArr3_2[i])}
                      
                       for(var i=0;i<myArr3.length;i++) {
                          
                         let val1=myArr3[i].slice(0, myArr3[i].indexOf(',') + 1).trim();
                         let val3=myArr3[i].slice(((myArr3[i].indexOf(',') + 1) - 1), myArr3[i].lastIndexOf(',') + 1).trim();
                          let val2=myArr3[i].slice(((myArr3[i].lastIndexOf(',') + 1) - 1), myArr3[i].length).trim();
                           //  val1=val1.replace( /,/g , "");                
                           //  val2=val2.replace( /,/g , "");               
                           //  val3=val3.replace( /,/g , "");         
                          myObj.push([val1,val2,val3]);
                        
                       }
                      
                      
                      var mySort = ["TIMM","Anixe HD","ESPN Classic","Classica" ,"Motorvision TV","Motors TV","Extreme Sports Channel" ,"ESPN Classic" ,"BonGusto" ,
                                   "The Biography Channel","Junior" ,"Boomerang" ,"Disney Junior" ,"Disney Cinemagic" ,"Disney XD" ,"Disney Channel" ,"Spiegel Geschichte",
                                   "QVC","One","tagesschau24","Bibel TV","ORF 2","ORF 3","ORF Sport +","ATV","ATV2","Puls 4", "SRF 1", "SRF 2", "TV5MONDE", "TF1", "France 3",
                                   "Sky Cinema","Sky Cinema +1", "Sky Cinema Nostalgie", "Sky Cinema +24", "Sky Krimi", "Sky Cinema Action", "Sky Cinema Emotion",
                                   "Sky Cinema Comedy", "Sky Cinema Hits", "Sky Cinema Special HD", "Sky Sport 1", "Sky Sport 2", "Sky Sport Austria 1", "Sky Sport Bundesliga 1",
                                   "13TH STREET", "Syfy", "FOX", "TNT Serie", "TNT Film", "Sony AXN", "Kinowelt TV", "Silverline", "Sat.1 emotions", "kabel eins classics",
                                   "RTL Crime", "RTL Passion", "Romance TV", "Gute Laune TV", "GoldStar TV", "Heimatkanal", "National Geographic", "National Geographic Wild",
                                   "Discovery Channel", "Animal Planet", "History", "Spiegel TV Wissen", "Spiegel Geschichte", "Disney XD", "Boomerang", "E! Entertainment",
                                   "BBC Entertainment", "eSports1", "Extreme Sports Channel", "Nautical Channel", "Motorvision TV", "MTV Dance", "MTV Hits UK", "VH1 Classic",
                                   "Sky Sport 1 HD", "Sky Select", "National Geographic HD", "History HD", "ProSieben Fun", "Deluxe Music", "Euronews", "Sky Atlantic",
                                   "TNT Comedy", "VOXup", "Hamburg 1", "TV.Berlin", "Franken Fernsehen", "Rhein-Neckar-Fernsehen", "rheinmainTV", "WELT", "HSE24",
                                   "sixx Austria","Playboy TV","ESPN America","Austria 9","Obwepfalz TV","Sky Cinema HD", "France 2","Fashion TV","Star TV","Niederlande 1",
                                   "Niederlande 2","Niederlande 3", "RTL Living", "Planet", "Disney Junior", "Junior", "MTV", "Trace.TV", "Sportdigital Fußball",
                                   "Motorvision TV","Motors TV","Extreme Sports Channel","ESPN Classic","BonGusto","The Biography Channel","Entertainment","Junior",
                                   "Boomerang","Disney Junior","Disney Cinemagic","Disney XD","Spiegel Geschichte","Spiegel TV Wissen","History","Discovery Channel",
                                   "Nat Geo Wild","National Geographic Channel","Planet","Heimatkanal","Goldstar TV","Romance TV","Passion","RTL Crime",
                                   "kabel eins classics","Sat.1 Emotions HD","Sat.1 Emotions","MGM","Silverline","Kinowelt TV","AXN","TNT Film","TNT Serie","FOX",
                                   "Syfy","13TH STREET Universal","Sky Select","Sky Select","Sky Fußball Bundesliga","Sky Sport Austria","Sky Sport 2","Sky Sport 1",
                                   "Sky Hits","Sky Comedy","Sky Emotion","Sky Action","Sky Krimi","Sky Cinema +24","Sky Nostalgie","Sky Cinema +1","Sky Cinema","TF1",
                                   "TV 5","SF2","SF1","Puls 4","ATV2","ATV","ORF 3","ORF 1","KTV","Bibel TV","ZDFinfo","ZDFkultur","EinsPlus","tagesschau24","QVC",
                                   "Anixe HD","TIMM","DMAX","Sixx","Servus TV","Tele 5","VIVA","SPORT1","Eurosport","rheinmainTV","Rhein-Neckar-Fernsehen",
                                   "Franken Fernsehen","Berlin","ORF Sport Plus","Das VIERTE","München TV","SkySport HD 1","Deutsche Welle TV","Oberpfalz TV","Disney Cinemagic HD",
                                   "National Geographic Channel Hd", "HH 1","KiKA"];
                      
                      //log("sortierung: "+mySort.length.toString())
                      //log(myObj[28][0].toString()+mySort[17]+mySort[18]+mySort[19]);
                      
                      for (var b =0; b<mySort.length; b++){
                       
                            if(!mySort.includes(myObj[b][0].replace( /,/g , "").trim()) && myObj[b][0].replace( /,/g , "").trim()!="" ) 
                            { 
                            myObjFilter.push(myObj[b]);
                           //log("unfiltered  "+myObj[b][0].replace( /,/g , "").trim()+myObj[b][2]+myObj[b][1])
                            } else{
                                //myObjFilter.push(myObj[ind2]);
                               // log("filtered"+myObj[b][0])
                               }
                         
                       }
                                          
                      
                      
                      //for(var ind1 in mySort) {log(mySort[ind1])}
                      //for (var intndex  in myObj){log(myObj[index][0].replace( /,/g , ""))}
                      
                      //log(myObjFilter.length.toString()+"---"+myObjFilter.toString());
                      //log (myObjFilter.length.toString());
                      for(var index in myObjFilter) {counterlein++; /*log(counterlein.toString())*/}
                      //for(var index in myObjFilter) {counterlein++;log(counterlein+"---"+myObj[index][0]+"______"+myObj[index][2]+"______"+myObj[index][1])};
                      //for(var index in myObjFilter) {counterlein++;log("\""+myObj[index][0]+"\"")};
                      //log(counterlein.toString());//
                      //log("bin raus holeTV");
                      
                      return myObjFilter;
                      
                      
                      }
                      
                      async function getTV2(){
                         
                      
                      request.get(url2, async function (error, response, result) {
                        //console.log("result: "+result);
                        //gesucht=result; //log(" gesucht - direct: "+ gesucht);
                         // setState("controll-own.0.AAATEST.TVTVTVTV",result);
                          //holeTV(gesucht);
                          //log("bin raus getTV");
                        
                      ;  }).on("error", function (e) {console.error(e);});
                      }
                      
                      

                      nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                      sigi234S O 2 Replies Last reply
                      0
                      • liv-in-skyL liv-in-sky

                        also nur, wenn du lust hast könnte zeitverschwendung sein

                        probiermal das und schau ins log, was da steht alle drei minuten sollte da was passieren

                        datenpunkt wieder angleichen

                        
                        
                        
                        //HIER WIRD PFAD UND FILENAME DEFINIERT
                        const path = "/htmltvjetzt.html";                   //FIlenamen definieren
                        const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
                        let   braucheEinFile=true;                          // bei true wird ein file geschrieben
                        let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
                        let dpVIS="controll-own.0.TABELLEN.TVjetzt"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                        let mySchedule="  */3  * * * * ";                       //jede minute  
                        //---------------------------------------
                        
                        //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
                        var htmlFeld1='SENDER';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                        var htmlFeld2='DAUER';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                        var htmlFeld3='SENDUNG';         var Feld3lAlign="left";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                        //-----------------------------------
                        
                        
                        
                        //hier werden die styles für die tabelle definiert
                        //ÜBERSCHRIFT ÜBER TABELLE
                        let   htmlUberschrift=true;                           // mit Überschrift über der tabelle
                        const htmlFeldUeber='Das TV Programm - jetzt im Programm';              // Überschrift
                        const htmlFarbUber="#40FF00";                         // Farbe der Überschrift
                        //MEHRERE TABELLEN NEBENEINANDER
                        let   mehrfachTabelle=2;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                        const htmlFarbZweiteTabelle="#00FF00";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                        const htmlFarbTableColorUber="blue";               // Überschrift in der tabelle - der einzelnen Spalten
                        //GANZE TABELLE
                        let abstandZelle="2";
                        let weite="auto";                                     //Weite der Tabelle
                        let zentriert=true;                                   //ganze tabelle zentriert
                        const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
                        const htmlSchriftart="Helvetica";
                        const htmlSchriftgroesse="14px";
                        //FELDER UND RAHMEN
                        let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
                        const htmlFarbFelderschrift="#000000";                  // SchriftFarbe der Felder
                        const htmlFarbFelderschrift2="#000000";                 // SchriftFarbe der Felder für jede 2te Tabelle
                        const htmlFarbTableColorGradient1="#A9F5A9";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
                        const htmlFarbTableColorGradient2="#81F7F3";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
                        const htmlFarbTableBorderColor="blue";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
                        let htmlRahmenLinien="all";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
                        
                        // HIER NICHTS  ÄNDERN
                        
                        let borderHelpBottum;
                        let borderHelpRight;
                        let htmlcenterHelp;
                        let htmlcenterHelp2;
                        
                        if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
                        if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
                        if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
                        if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
                        zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
                        zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";
                        
                        const htmlEnd=      '</table></div></body>';
                        const htmlZentriert='<center>'
                        const htmlStart=    "<!DOCTYPE html><html lang=\"de\"><head><title>Vorlage</title><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"+
                                           "<style> * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                                           " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                                          // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                                           " td {padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                                           " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                                           " </style></head><body> <div>";
                        //const htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"</p>";                    
                        const htmlTabStyle= "<table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                                              "; font-family:"+htmlSchriftart+";background-image: linear-gradient(42deg,"+htmlFarbTableColorGradient2+","+htmlFarbTableColorGradient1+");\">";
                        const htmlTabUeber1="<tr style=\"color:"+htmlFarbTableColorUber+"; font-weight: bold\">";
                        const htmlTabUeber3="</tr>";
                        
                        
                        
                        
                        //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3
                        
                           	var htmlTabUeber2="<td align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td>";
                        var htmlTabUeber2_1="<td align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                                           "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
                        //------------------------------------------------------
                        var url='https://www.hoerzu.de/text/tv-programm/jetzt.php';
                        var url2='https://www.hoerzu.de/text/tv-programm/gleich.php';
                        const request = require('request');
                        
                        var htmlTabUeber="";
                        var htmlOut="";
                        var mix;
                        var counter;
                        //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
                        var val1; var val0; var val2;
                        
                        async function writeHTML(){
                        
                        
                        htmlOut="";
                        
                        counter=-1;
                        htmlTabUeber="";
                        switch (mehrfachTabelle) { 
                           case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
                           case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                           case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
                           case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                        };   
                        if (!UeberschriftSpalten) {htmlTabUeber=""}
                        
                        
                        //--------------------------------------------------------------------------------------------------------------------------------------------------
                        //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
                        //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
                        //--------------------------------------------------------------------------------------------------------------------------------------------------
                        
                        //await
                        getTV().then(function() {
                           //getTV().then(holeTV).then(function() {
                        //await holeTV();
                        
                        var myOjects= myObjFilter;
                        // log ("bin hier");
                        // var timeout4 = setTimeout(function () {
                           //log("______________objetsTest: "+myOjects[3][0]+myOjects[3][1]+myOjects[3][2]);
                          //  log ("bin hier");
                        //for(var index in myObjFilter) {counterlein++;log(counterlein+"---"+myObj[index][0]+"______"+myObj[index][2]+"______"+myObj[index][1])};
                        
                        //var myOjects=holeTV();
                        for (var index in myOjects) {   
                                  counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                   
                              val0=myOjects[index][0]; val0=val0.replace( /,/g , "");
                              val1=myOjects[index][1]; val1=val1.replace( /,/g , "");
                              val2=myOjects[index][2]; val2=val2.replace( /,/g , ""); val2=val2.substring(0,40);
                        
                        
                           
                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                            
                        
                           }; //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!! 
                        }).then(tabelleFinish)
                        //}, 3000);
                        //-------------------------------------------------------------------------------------------------------------------------------------------------
                        //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                        //-------------------------------------------------------------------------------------------------------------------------------------------------
                        
                            // tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                             
                        } // function ende
                        
                        //MAIN:
                         
                        schedule(mySchedule,  function () { 
                         writeHTML();
                         //if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                        }); 
                        writeHTML();
                        //writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });
                        
                        
                        async function tabelleBind(){
                               switch (mehrfachTabelle) {  
                                 case 1:                    htmlOut=htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;
                                 case 2:  if(counter%2==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                       else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;
                                                            
                                 case 3: if(counter%3==0 )  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                       else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                        else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                                  } break;
                        
                        
                                 case 4: if(counter%4==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                           else {if(counter%2==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                        else    {if(counter%2==1 && counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} 
                                                                                          else    {htmlOut = htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><tdalign="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}}
                                                                  } break; } //switch ende
                        //log("bin raus aus tabelleBind");
                        }
                        
                        async function tabelleFinish() {
                        
                         switch (mehrfachTabelle) {  
                                 case 1:    break;
                                 case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                            if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                            break;
                                 case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                            if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                            if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                            break;
                                 case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                            if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                            if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                            if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                                            break; }
                               var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
                                  //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
                                   var htmlOutVIS="";
                                 //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                                    if (htmlUberschrift) 
                                        { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" ;
                        
                                      } else {
                                       zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                        
                                         }
                        
                        
                                   if (braucheEinVISWidget && allesDa) setState(dpVIS, htmlOutVIS );
                        
                         //mit oder ohne überschrift - zentriert oder links
                         htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
                        // log("bin raus aus tabelleBind");
                          if (braucheEinFile && allesDa) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                          //getTV2();
                        }
                        
                        
                        var gesucht="";
                        var gefunden="";
                        var gefunden_2="";
                        var gefunden2="";
                        var gefunden2_2=""; 
                        
                        var myArr2=[];   var myArr22=[];
                        var myArr2_2=[]; var myArr22_2=[];
                        var myArr3=[];
                        var myArr3_2=[];
                        var myArr4=[];
                        var myObj=[];
                        var myObjFilter=[];
                        var counterlein=0;
                        var allesDa=true;
                        
                        
                        async function getTV(){
                           return new Promise(async (resolve, reject) => {
                        //try {
                          await request.get(url, async function (error, response, result) {
                          //console.log("result: "+result);
                          gesucht=result; //log(" gesucht - direct: "+ gesucht);
                           // setState("controll-own.0.AAATEST.TVTVTVTV",result);
                            holeTV(gesucht);
                           // log("bin raus getTV");
                            if (gesucht!="") {resolve()} else {reject()}
                        ;  }).on("error", function (e) {console.error(e);});
                        
                        //  log("bin raus getTV");
                         });
                        
                        }
                        
                        async function holeTV(gesuchtVal){
                        //log("bin in holeTV");
                         gesucht="";
                        gefunden="";
                        gefunden_2="";
                        gefunden2="";
                        gefunden2_2=""; 
                        
                        myArr2=[];    myArr22=[];
                        myArr2_2=[];  myArr22_2=[];
                        myArr3=[];
                        myArr3_2=[];
                        myArr4=[];
                        myObj=[];
                        myObjFilter=[];
                        counterlein=0;
                        var re = /href.+?Uhr/g;
                        
                        var re1 = />.+?Uhr/g;
                        
                        gesucht = gesuchtVal;
                        let missing=gesucht.match(/<H3>Es ist jetzt.+?Uhr/g);
                        missing==null? allesDa=false : allesDa=true; 
                        if (!allesDa) {log(" DA FEHLT WAS - bin in jetzt ! "+missing)}else{"schreibe jetzt"};
                        //log(" DA FHLT WAS ! "+ gesucht.match(/<H3>Es ist jetzt.+?Uhr/g).length.toString());
                        //gesucht.match(/<H3>Es ist jetzt.+?Uhr/g).length==0 ? allesDa=false : allesDa=true; 
                        //log(" DA FHLT WAS ! "+ gesucht.match(/<H3>Es ist jetzt.+?Uhr/g).length.toString());
                        //gefunden = gesucht.match(re);
                        //gesucht=getState("controll-own.0.AAATEST.TVTVTVTV").val
                        //log("gesucht: ----------------: "+gesucht);
                        gefunden=  "fff"+gesucht.match(re);
                        gefunden_2="fff"+gesucht.match(/\*.+?Uhr .<br\/>/g);
                        //log("gefunden_2: ----------------: "+gefunden_2);
                         gefunden2=  "xxx"+gefunden.match(re1);  
                         gefunden2_2="xxx"+gefunden_2.match(/\*.+?Uhr/g); 
                        //log("gefunden2_2: ----------------: "+gefunden2_2);
                        var myArr    = gefunden2.split("Uhr");
                        var myArr_2 = gefunden2_2.split("Uhr");
                        //log(myArr.length.toString()+"---"+myArr.toString());
                        
                        for(var i=0;i<myArr.length;i++){   let haken=myArr[i].replace( /,>/g , "");       myArr22.push(haken);}  // /,>/g , ""
                        for(var i=0;i<myArr22.length;i++){  let    haken=myArr22[i].replace("xxx>","");     myArr2.push(haken);}  // /,>/g , ""
                        for(var i=0;i<myArr_2.length;i++){ let haken=myArr_2[i].replace(/,\*/g,"");    myArr22_2.push(haken);}    //   ",>",""
                        for(var i=0;i<myArr22_2.length;i++){ let haken=myArr22_2[i].replace("xxx>","");   myArr2_2.push(haken);}    //   ",>",""
                        
                        
                        for(var i=0;i<myArr2.length;i++){   var haken=myArr2[i].replace("xxx>","");     myArr3.push(haken);  }
                        for(var i=0;i<myArr2_2.length;i++){ var haken2=myArr2_2[i].replace("xxx*","");  myArr3_2.push(haken2);}
                        
                        //log(myArr3.length.toString()+"---"+myArr3.toString());
                        //log(myArr3_2.length.toString()+"---"+myArr3_2.toString());
                        
                        for(var i=0;i<myArr3_2.length;i++){myArr3.push(myArr3_2[i])}
                        
                         for(var i=0;i<myArr3.length;i++) {
                            
                           let val1=myArr3[i].slice(0, myArr3[i].indexOf(',') + 1).trim();
                           let val3=myArr3[i].slice(((myArr3[i].indexOf(',') + 1) - 1), myArr3[i].lastIndexOf(',') + 1).trim();
                            let val2=myArr3[i].slice(((myArr3[i].lastIndexOf(',') + 1) - 1), myArr3[i].length).trim();
                             //  val1=val1.replace( /,/g , "");                
                             //  val2=val2.replace( /,/g , "");               
                             //  val3=val3.replace( /,/g , "");         
                            myObj.push([val1,val2,val3]);
                          
                         }
                        
                        
                        var mySort = ["TIMM","Anixe HD","ESPN Classic","Classica" ,"Motorvision TV","Motors TV","Extreme Sports Channel" ,"ESPN Classic" ,"BonGusto" ,
                                     "The Biography Channel","Junior" ,"Boomerang" ,"Disney Junior" ,"Disney Cinemagic" ,"Disney XD" ,"Disney Channel" ,"Spiegel Geschichte",
                                     "QVC","One","tagesschau24","Bibel TV","ORF 2","ORF 3","ORF Sport +","ATV","ATV2","Puls 4", "SRF 1", "SRF 2", "TV5MONDE", "TF1", "France 3",
                                     "Sky Cinema","Sky Cinema +1", "Sky Cinema Nostalgie", "Sky Cinema +24", "Sky Krimi", "Sky Cinema Action", "Sky Cinema Emotion",
                                     "Sky Cinema Comedy", "Sky Cinema Hits", "Sky Cinema Special HD", "Sky Sport 1", "Sky Sport 2", "Sky Sport Austria 1", "Sky Sport Bundesliga 1",
                                     "13TH STREET", "Syfy", "FOX", "TNT Serie", "TNT Film", "Sony AXN", "Kinowelt TV", "Silverline", "Sat.1 emotions", "kabel eins classics",
                                     "RTL Crime", "RTL Passion", "Romance TV", "Gute Laune TV", "GoldStar TV", "Heimatkanal", "National Geographic", "National Geographic Wild",
                                     "Discovery Channel", "Animal Planet", "History", "Spiegel TV Wissen", "Spiegel Geschichte", "Disney XD", "Boomerang", "E! Entertainment",
                                     "BBC Entertainment", "eSports1", "Extreme Sports Channel", "Nautical Channel", "Motorvision TV", "MTV Dance", "MTV Hits UK", "VH1 Classic",
                                     "Sky Sport 1 HD", "Sky Select", "National Geographic HD", "History HD", "ProSieben Fun", "Deluxe Music", "Euronews", "Sky Atlantic",
                                     "TNT Comedy", "VOXup", "Hamburg 1", "TV.Berlin", "Franken Fernsehen", "Rhein-Neckar-Fernsehen", "rheinmainTV", "WELT", "HSE24",
                                     "sixx Austria","Playboy TV","ESPN America","Austria 9","Obwepfalz TV","Sky Cinema HD", "France 2","Fashion TV","Star TV","Niederlande 1",
                                     "Niederlande 2","Niederlande 3", "RTL Living", "Planet", "Disney Junior", "Junior", "MTV", "Trace.TV", "Sportdigital Fußball",
                                     "Motorvision TV","Motors TV","Extreme Sports Channel","ESPN Classic","BonGusto","The Biography Channel","Entertainment","Junior",
                                     "Boomerang","Disney Junior","Disney Cinemagic","Disney XD","Spiegel Geschichte","Spiegel TV Wissen","History","Discovery Channel",
                                     "Nat Geo Wild","National Geographic Channel","Planet","Heimatkanal","Goldstar TV","Romance TV","Passion","RTL Crime",
                                     "kabel eins classics","Sat.1 Emotions HD","Sat.1 Emotions","MGM","Silverline","Kinowelt TV","AXN","TNT Film","TNT Serie","FOX",
                                     "Syfy","13TH STREET Universal","Sky Select","Sky Select","Sky Fußball Bundesliga","Sky Sport Austria","Sky Sport 2","Sky Sport 1",
                                     "Sky Hits","Sky Comedy","Sky Emotion","Sky Action","Sky Krimi","Sky Cinema +24","Sky Nostalgie","Sky Cinema +1","Sky Cinema","TF1",
                                     "TV 5","SF2","SF1","Puls 4","ATV2","ATV","ORF 3","ORF 1","KTV","Bibel TV","ZDFinfo","ZDFkultur","EinsPlus","tagesschau24","QVC",
                                     "Anixe HD","TIMM","DMAX","Sixx","Servus TV","Tele 5","VIVA","SPORT1","Eurosport","rheinmainTV","Rhein-Neckar-Fernsehen",
                                     "Franken Fernsehen","Berlin","ORF Sport Plus","Das VIERTE","München TV","SkySport HD 1","Deutsche Welle TV","Oberpfalz TV","Disney Cinemagic HD",
                                     "National Geographic Channel Hd", "HH 1","KiKA"];
                        
                        //log("sortierung: "+mySort.length.toString())
                        //log(myObj[28][0].toString()+mySort[17]+mySort[18]+mySort[19]);
                        
                        for (var b =0; b<mySort.length; b++){
                         
                              if(!mySort.includes(myObj[b][0].replace( /,/g , "").trim()) && myObj[b][0].replace( /,/g , "").trim()!="" ) 
                              { 
                              myObjFilter.push(myObj[b]);
                             //log("unfiltered  "+myObj[b][0].replace( /,/g , "").trim()+myObj[b][2]+myObj[b][1])
                              } else{
                                  //myObjFilter.push(myObj[ind2]);
                                 // log("filtered"+myObj[b][0])
                                 }
                           
                         }
                                            
                        
                        
                        //for(var ind1 in mySort) {log(mySort[ind1])}
                        //for (var intndex  in myObj){log(myObj[index][0].replace( /,/g , ""))}
                        
                        //log(myObjFilter.length.toString()+"---"+myObjFilter.toString());
                        //log (myObjFilter.length.toString());
                        for(var index in myObjFilter) {counterlein++; /*log(counterlein.toString())*/}
                        //for(var index in myObjFilter) {counterlein++;log(counterlein+"---"+myObj[index][0]+"______"+myObj[index][2]+"______"+myObj[index][1])};
                        //for(var index in myObjFilter) {counterlein++;log("\""+myObj[index][0]+"\"")};
                        //log(counterlein.toString());//
                        //log("bin raus holeTV");
                        
                        return myObjFilter;
                        
                        
                        }
                        
                        async function getTV2(){
                           
                        
                        request.get(url2, async function (error, response, result) {
                          //console.log("result: "+result);
                          //gesucht=result; //log(" gesucht - direct: "+ gesucht);
                           // setState("controll-own.0.AAATEST.TVTVTVTV",result);
                            //holeTV(gesucht);
                            //log("bin raus getTV");
                          
                        ;  }).on("error", function (e) {console.error(e);});
                        }
                        
                        

                        sigi234S Online
                        sigi234S Online
                        sigi234
                        Forum Testing Most Active
                        wrote on last edited by
                        #13

                        @liv-in-sky

                        
                        javascript.0	2020-01-03 22:46:17.549	info	(16100) script.js.Listen.TV_Programm_jetzt: DA FEHLT WAS - bin in jetzt ! null
                        javascript.0	2020-01-03 22:46:17.471	info	(16100) script.js.Listen.TV_Programm_jetzt: registered 0 subscriptions and 1 schedule
                        javascript.0	2020-01-03 22:46:17.469	info	(16100) Start javascript script.js.Listen.TV_Programm_jetzt
                        javascript.0	2020-01-03 22:46:17.465	info	(16100) Stop script script.js.Listen.TV_Programm_jetzt
                        javascript.0	2020-01-03 22:46:02.689	info	(16100) script.js.Listen.TV_Programm_jetzt: DA FEHLT WAS - bin in jetzt ! null
                        javascript.0	2020-01-03 22:46:02.597	info	(16100) script.js.Listen.TV_Programm_jetzt: registered 0 subscriptions and 1 schedule
                        javascript.0	2020-01-03 22:46:02.590	info	(16100) Start javascript script.js.Listen.TV_Programm_jetzt
                        javascript.0	2020-01-03 22:46:02.587	info	(16100) Stop script script.js.Listen.TV_Programm_jetzt
                        

                        Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                        Immer Daten sichern!

                        1 Reply Last reply
                        0
                        • liv-in-skyL liv-in-sky

                          also nur, wenn du lust hast könnte zeitverschwendung sein

                          probiermal das und schau ins log, was da steht alle drei minuten sollte da was passieren

                          datenpunkt wieder angleichen

                          
                          
                          
                          //HIER WIRD PFAD UND FILENAME DEFINIERT
                          const path = "/htmltvjetzt.html";                   //FIlenamen definieren
                          const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
                          let   braucheEinFile=true;                          // bei true wird ein file geschrieben
                          let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
                          let dpVIS="controll-own.0.TABELLEN.TVjetzt"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                          let mySchedule="  */3  * * * * ";                       //jede minute  
                          //---------------------------------------
                          
                          //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
                          var htmlFeld1='SENDER';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                          var htmlFeld2='DAUER';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                          var htmlFeld3='SENDUNG';         var Feld3lAlign="left";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                          //-----------------------------------
                          
                          
                          
                          //hier werden die styles für die tabelle definiert
                          //ÜBERSCHRIFT ÜBER TABELLE
                          let   htmlUberschrift=true;                           // mit Überschrift über der tabelle
                          const htmlFeldUeber='Das TV Programm - jetzt im Programm';              // Überschrift
                          const htmlFarbUber="#40FF00";                         // Farbe der Überschrift
                          //MEHRERE TABELLEN NEBENEINANDER
                          let   mehrfachTabelle=2;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                          const htmlFarbZweiteTabelle="#00FF00";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                          const htmlFarbTableColorUber="blue";               // Überschrift in der tabelle - der einzelnen Spalten
                          //GANZE TABELLE
                          let abstandZelle="2";
                          let weite="auto";                                     //Weite der Tabelle
                          let zentriert=true;                                   //ganze tabelle zentriert
                          const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
                          const htmlSchriftart="Helvetica";
                          const htmlSchriftgroesse="14px";
                          //FELDER UND RAHMEN
                          let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
                          const htmlFarbFelderschrift="#000000";                  // SchriftFarbe der Felder
                          const htmlFarbFelderschrift2="#000000";                 // SchriftFarbe der Felder für jede 2te Tabelle
                          const htmlFarbTableColorGradient1="#A9F5A9";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
                          const htmlFarbTableColorGradient2="#81F7F3";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
                          const htmlFarbTableBorderColor="blue";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
                          let htmlRahmenLinien="all";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
                          
                          // HIER NICHTS  ÄNDERN
                          
                          let borderHelpBottum;
                          let borderHelpRight;
                          let htmlcenterHelp;
                          let htmlcenterHelp2;
                          
                          if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
                          if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
                          if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
                          if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
                          zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
                          zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";
                          
                          const htmlEnd=      '</table></div></body>';
                          const htmlZentriert='<center>'
                          const htmlStart=    "<!DOCTYPE html><html lang=\"de\"><head><title>Vorlage</title><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"+
                                             "<style> * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                                             " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                                            // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                                             " td {padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                                             " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                                             " </style></head><body> <div>";
                          //const htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"</p>";                    
                          const htmlTabStyle= "<table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                                                "; font-family:"+htmlSchriftart+";background-image: linear-gradient(42deg,"+htmlFarbTableColorGradient2+","+htmlFarbTableColorGradient1+");\">";
                          const htmlTabUeber1="<tr style=\"color:"+htmlFarbTableColorUber+"; font-weight: bold\">";
                          const htmlTabUeber3="</tr>";
                          
                          
                          
                          
                          //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3
                          
                             	var htmlTabUeber2="<td align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td>";
                          var htmlTabUeber2_1="<td align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                                             "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
                          //------------------------------------------------------
                          var url='https://www.hoerzu.de/text/tv-programm/jetzt.php';
                          var url2='https://www.hoerzu.de/text/tv-programm/gleich.php';
                          const request = require('request');
                          
                          var htmlTabUeber="";
                          var htmlOut="";
                          var mix;
                          var counter;
                          //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
                          var val1; var val0; var val2;
                          
                          async function writeHTML(){
                          
                          
                          htmlOut="";
                          
                          counter=-1;
                          htmlTabUeber="";
                          switch (mehrfachTabelle) { 
                             case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
                             case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                             case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
                             case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                          };   
                          if (!UeberschriftSpalten) {htmlTabUeber=""}
                          
                          
                          //--------------------------------------------------------------------------------------------------------------------------------------------------
                          //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
                          //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
                          //--------------------------------------------------------------------------------------------------------------------------------------------------
                          
                          //await
                          getTV().then(function() {
                             //getTV().then(holeTV).then(function() {
                          //await holeTV();
                          
                          var myOjects= myObjFilter;
                          // log ("bin hier");
                          // var timeout4 = setTimeout(function () {
                             //log("______________objetsTest: "+myOjects[3][0]+myOjects[3][1]+myOjects[3][2]);
                            //  log ("bin hier");
                          //for(var index in myObjFilter) {counterlein++;log(counterlein+"---"+myObj[index][0]+"______"+myObj[index][2]+"______"+myObj[index][1])};
                          
                          //var myOjects=holeTV();
                          for (var index in myOjects) {   
                                    counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                     
                                val0=myOjects[index][0]; val0=val0.replace( /,/g , "");
                                val1=myOjects[index][1]; val1=val1.replace( /,/g , "");
                                val2=myOjects[index][2]; val2=val2.replace( /,/g , ""); val2=val2.substring(0,40);
                          
                          
                             
                               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                              
                          
                             }; //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!! 
                          }).then(tabelleFinish)
                          //}, 3000);
                          //-------------------------------------------------------------------------------------------------------------------------------------------------
                          //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                          //-------------------------------------------------------------------------------------------------------------------------------------------------
                          
                              // tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                               
                          } // function ende
                          
                          //MAIN:
                           
                          schedule(mySchedule,  function () { 
                           writeHTML();
                           //if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                          }); 
                          writeHTML();
                          //writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });
                          
                          
                          async function tabelleBind(){
                                 switch (mehrfachTabelle) {  
                                   case 1:                    htmlOut=htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;
                                   case 2:  if(counter%2==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                         else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;
                                                              
                                   case 3: if(counter%3==0 )  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                         else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                          else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                                    } break;
                          
                          
                                   case 4: if(counter%4==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                             else {if(counter%2==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                          else    {if(counter%2==1 && counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} 
                                                                                            else    {htmlOut = htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><tdalign="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}}
                                                                    } break; } //switch ende
                          //log("bin raus aus tabelleBind");
                          }
                          
                          async function tabelleFinish() {
                          
                           switch (mehrfachTabelle) {  
                                   case 1:    break;
                                   case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                              break;
                                   case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                              if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                              break;
                                   case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                              if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                              if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                                              break; }
                                 var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
                                    //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
                                     var htmlOutVIS="";
                                   //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                                      if (htmlUberschrift) 
                                          { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" ;
                          
                                        } else {
                                         zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                          
                                           }
                          
                          
                                     if (braucheEinVISWidget && allesDa) setState(dpVIS, htmlOutVIS );
                          
                           //mit oder ohne überschrift - zentriert oder links
                           htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
                          // log("bin raus aus tabelleBind");
                            if (braucheEinFile && allesDa) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                            //getTV2();
                          }
                          
                          
                          var gesucht="";
                          var gefunden="";
                          var gefunden_2="";
                          var gefunden2="";
                          var gefunden2_2=""; 
                          
                          var myArr2=[];   var myArr22=[];
                          var myArr2_2=[]; var myArr22_2=[];
                          var myArr3=[];
                          var myArr3_2=[];
                          var myArr4=[];
                          var myObj=[];
                          var myObjFilter=[];
                          var counterlein=0;
                          var allesDa=true;
                          
                          
                          async function getTV(){
                             return new Promise(async (resolve, reject) => {
                          //try {
                            await request.get(url, async function (error, response, result) {
                            //console.log("result: "+result);
                            gesucht=result; //log(" gesucht - direct: "+ gesucht);
                             // setState("controll-own.0.AAATEST.TVTVTVTV",result);
                              holeTV(gesucht);
                             // log("bin raus getTV");
                              if (gesucht!="") {resolve()} else {reject()}
                          ;  }).on("error", function (e) {console.error(e);});
                          
                          //  log("bin raus getTV");
                           });
                          
                          }
                          
                          async function holeTV(gesuchtVal){
                          //log("bin in holeTV");
                           gesucht="";
                          gefunden="";
                          gefunden_2="";
                          gefunden2="";
                          gefunden2_2=""; 
                          
                          myArr2=[];    myArr22=[];
                          myArr2_2=[];  myArr22_2=[];
                          myArr3=[];
                          myArr3_2=[];
                          myArr4=[];
                          myObj=[];
                          myObjFilter=[];
                          counterlein=0;
                          var re = /href.+?Uhr/g;
                          
                          var re1 = />.+?Uhr/g;
                          
                          gesucht = gesuchtVal;
                          let missing=gesucht.match(/<H3>Es ist jetzt.+?Uhr/g);
                          missing==null? allesDa=false : allesDa=true; 
                          if (!allesDa) {log(" DA FEHLT WAS - bin in jetzt ! "+missing)}else{"schreibe jetzt"};
                          //log(" DA FHLT WAS ! "+ gesucht.match(/<H3>Es ist jetzt.+?Uhr/g).length.toString());
                          //gesucht.match(/<H3>Es ist jetzt.+?Uhr/g).length==0 ? allesDa=false : allesDa=true; 
                          //log(" DA FHLT WAS ! "+ gesucht.match(/<H3>Es ist jetzt.+?Uhr/g).length.toString());
                          //gefunden = gesucht.match(re);
                          //gesucht=getState("controll-own.0.AAATEST.TVTVTVTV").val
                          //log("gesucht: ----------------: "+gesucht);
                          gefunden=  "fff"+gesucht.match(re);
                          gefunden_2="fff"+gesucht.match(/\*.+?Uhr .<br\/>/g);
                          //log("gefunden_2: ----------------: "+gefunden_2);
                           gefunden2=  "xxx"+gefunden.match(re1);  
                           gefunden2_2="xxx"+gefunden_2.match(/\*.+?Uhr/g); 
                          //log("gefunden2_2: ----------------: "+gefunden2_2);
                          var myArr    = gefunden2.split("Uhr");
                          var myArr_2 = gefunden2_2.split("Uhr");
                          //log(myArr.length.toString()+"---"+myArr.toString());
                          
                          for(var i=0;i<myArr.length;i++){   let haken=myArr[i].replace( /,>/g , "");       myArr22.push(haken);}  // /,>/g , ""
                          for(var i=0;i<myArr22.length;i++){  let    haken=myArr22[i].replace("xxx>","");     myArr2.push(haken);}  // /,>/g , ""
                          for(var i=0;i<myArr_2.length;i++){ let haken=myArr_2[i].replace(/,\*/g,"");    myArr22_2.push(haken);}    //   ",>",""
                          for(var i=0;i<myArr22_2.length;i++){ let haken=myArr22_2[i].replace("xxx>","");   myArr2_2.push(haken);}    //   ",>",""
                          
                          
                          for(var i=0;i<myArr2.length;i++){   var haken=myArr2[i].replace("xxx>","");     myArr3.push(haken);  }
                          for(var i=0;i<myArr2_2.length;i++){ var haken2=myArr2_2[i].replace("xxx*","");  myArr3_2.push(haken2);}
                          
                          //log(myArr3.length.toString()+"---"+myArr3.toString());
                          //log(myArr3_2.length.toString()+"---"+myArr3_2.toString());
                          
                          for(var i=0;i<myArr3_2.length;i++){myArr3.push(myArr3_2[i])}
                          
                           for(var i=0;i<myArr3.length;i++) {
                              
                             let val1=myArr3[i].slice(0, myArr3[i].indexOf(',') + 1).trim();
                             let val3=myArr3[i].slice(((myArr3[i].indexOf(',') + 1) - 1), myArr3[i].lastIndexOf(',') + 1).trim();
                              let val2=myArr3[i].slice(((myArr3[i].lastIndexOf(',') + 1) - 1), myArr3[i].length).trim();
                               //  val1=val1.replace( /,/g , "");                
                               //  val2=val2.replace( /,/g , "");               
                               //  val3=val3.replace( /,/g , "");         
                              myObj.push([val1,val2,val3]);
                            
                           }
                          
                          
                          var mySort = ["TIMM","Anixe HD","ESPN Classic","Classica" ,"Motorvision TV","Motors TV","Extreme Sports Channel" ,"ESPN Classic" ,"BonGusto" ,
                                       "The Biography Channel","Junior" ,"Boomerang" ,"Disney Junior" ,"Disney Cinemagic" ,"Disney XD" ,"Disney Channel" ,"Spiegel Geschichte",
                                       "QVC","One","tagesschau24","Bibel TV","ORF 2","ORF 3","ORF Sport +","ATV","ATV2","Puls 4", "SRF 1", "SRF 2", "TV5MONDE", "TF1", "France 3",
                                       "Sky Cinema","Sky Cinema +1", "Sky Cinema Nostalgie", "Sky Cinema +24", "Sky Krimi", "Sky Cinema Action", "Sky Cinema Emotion",
                                       "Sky Cinema Comedy", "Sky Cinema Hits", "Sky Cinema Special HD", "Sky Sport 1", "Sky Sport 2", "Sky Sport Austria 1", "Sky Sport Bundesliga 1",
                                       "13TH STREET", "Syfy", "FOX", "TNT Serie", "TNT Film", "Sony AXN", "Kinowelt TV", "Silverline", "Sat.1 emotions", "kabel eins classics",
                                       "RTL Crime", "RTL Passion", "Romance TV", "Gute Laune TV", "GoldStar TV", "Heimatkanal", "National Geographic", "National Geographic Wild",
                                       "Discovery Channel", "Animal Planet", "History", "Spiegel TV Wissen", "Spiegel Geschichte", "Disney XD", "Boomerang", "E! Entertainment",
                                       "BBC Entertainment", "eSports1", "Extreme Sports Channel", "Nautical Channel", "Motorvision TV", "MTV Dance", "MTV Hits UK", "VH1 Classic",
                                       "Sky Sport 1 HD", "Sky Select", "National Geographic HD", "History HD", "ProSieben Fun", "Deluxe Music", "Euronews", "Sky Atlantic",
                                       "TNT Comedy", "VOXup", "Hamburg 1", "TV.Berlin", "Franken Fernsehen", "Rhein-Neckar-Fernsehen", "rheinmainTV", "WELT", "HSE24",
                                       "sixx Austria","Playboy TV","ESPN America","Austria 9","Obwepfalz TV","Sky Cinema HD", "France 2","Fashion TV","Star TV","Niederlande 1",
                                       "Niederlande 2","Niederlande 3", "RTL Living", "Planet", "Disney Junior", "Junior", "MTV", "Trace.TV", "Sportdigital Fußball",
                                       "Motorvision TV","Motors TV","Extreme Sports Channel","ESPN Classic","BonGusto","The Biography Channel","Entertainment","Junior",
                                       "Boomerang","Disney Junior","Disney Cinemagic","Disney XD","Spiegel Geschichte","Spiegel TV Wissen","History","Discovery Channel",
                                       "Nat Geo Wild","National Geographic Channel","Planet","Heimatkanal","Goldstar TV","Romance TV","Passion","RTL Crime",
                                       "kabel eins classics","Sat.1 Emotions HD","Sat.1 Emotions","MGM","Silverline","Kinowelt TV","AXN","TNT Film","TNT Serie","FOX",
                                       "Syfy","13TH STREET Universal","Sky Select","Sky Select","Sky Fußball Bundesliga","Sky Sport Austria","Sky Sport 2","Sky Sport 1",
                                       "Sky Hits","Sky Comedy","Sky Emotion","Sky Action","Sky Krimi","Sky Cinema +24","Sky Nostalgie","Sky Cinema +1","Sky Cinema","TF1",
                                       "TV 5","SF2","SF1","Puls 4","ATV2","ATV","ORF 3","ORF 1","KTV","Bibel TV","ZDFinfo","ZDFkultur","EinsPlus","tagesschau24","QVC",
                                       "Anixe HD","TIMM","DMAX","Sixx","Servus TV","Tele 5","VIVA","SPORT1","Eurosport","rheinmainTV","Rhein-Neckar-Fernsehen",
                                       "Franken Fernsehen","Berlin","ORF Sport Plus","Das VIERTE","München TV","SkySport HD 1","Deutsche Welle TV","Oberpfalz TV","Disney Cinemagic HD",
                                       "National Geographic Channel Hd", "HH 1","KiKA"];
                          
                          //log("sortierung: "+mySort.length.toString())
                          //log(myObj[28][0].toString()+mySort[17]+mySort[18]+mySort[19]);
                          
                          for (var b =0; b<mySort.length; b++){
                           
                                if(!mySort.includes(myObj[b][0].replace( /,/g , "").trim()) && myObj[b][0].replace( /,/g , "").trim()!="" ) 
                                { 
                                myObjFilter.push(myObj[b]);
                               //log("unfiltered  "+myObj[b][0].replace( /,/g , "").trim()+myObj[b][2]+myObj[b][1])
                                } else{
                                    //myObjFilter.push(myObj[ind2]);
                                   // log("filtered"+myObj[b][0])
                                   }
                             
                           }
                                              
                          
                          
                          //for(var ind1 in mySort) {log(mySort[ind1])}
                          //for (var intndex  in myObj){log(myObj[index][0].replace( /,/g , ""))}
                          
                          //log(myObjFilter.length.toString()+"---"+myObjFilter.toString());
                          //log (myObjFilter.length.toString());
                          for(var index in myObjFilter) {counterlein++; /*log(counterlein.toString())*/}
                          //for(var index in myObjFilter) {counterlein++;log(counterlein+"---"+myObj[index][0]+"______"+myObj[index][2]+"______"+myObj[index][1])};
                          //for(var index in myObjFilter) {counterlein++;log("\""+myObj[index][0]+"\"")};
                          //log(counterlein.toString());//
                          //log("bin raus holeTV");
                          
                          return myObjFilter;
                          
                          
                          }
                          
                          async function getTV2(){
                             
                          
                          request.get(url2, async function (error, response, result) {
                            //console.log("result: "+result);
                            //gesucht=result; //log(" gesucht - direct: "+ gesucht);
                             // setState("controll-own.0.AAATEST.TVTVTVTV",result);
                              //holeTV(gesucht);
                              //log("bin raus getTV");
                            
                          ;  }).on("error", function (e) {console.error(e);});
                          }
                          
                          

                          O Online
                          O Online
                          Oli
                          wrote on last edited by
                          #14

                          @liv-in-sky

                          finde die Idee super, nach sowas habe ich schon lange gesucht, bin auch gerade am testen, muss ich den Datenpunkt manuell anlegen, oder wird er automatisch erzeugt?

                          Gruß
                          Oliver

                          liv-in-skyL 1 Reply Last reply
                          0
                          • O Oli

                            @liv-in-sky

                            finde die Idee super, nach sowas habe ich schon lange gesucht, bin auch gerade am testen, muss ich den Datenpunkt manuell anlegen, oder wird er automatisch erzeugt?

                            liv-in-skyL Offline
                            liv-in-skyL Offline
                            liv-in-sky
                            wrote on last edited by
                            #15

                            @Oli ist manuell anzulegen - ich mache gerade neue tests mit einer stabilen seite - daten kommen zumindest immer, wenn ich anfrage

                            wenn es was neues gibt - melde ich mich wieder

                            nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                            O 1 Reply Last reply
                            0
                            • liv-in-skyL liv-in-sky

                              @Oli ist manuell anzulegen - ich mache gerade neue tests mit einer stabilen seite - daten kommen zumindest immer, wenn ich anfrage

                              wenn es was neues gibt - melde ich mich wieder

                              O Online
                              O Online
                              Oli
                              wrote on last edited by
                              #16

                              @liv-in-sky

                              super dankeschön

                              Gruß
                              Oliver

                              liv-in-skyL 1 Reply Last reply
                              0
                              • O Oli

                                @liv-in-sky

                                super dankeschön

                                liv-in-skyL Offline
                                liv-in-skyL Offline
                                liv-in-sky
                                wrote on last edited by
                                #17

                                @Oli du weißt es gibt auch den tv spielfilm adapter - der hat auch bildchen und beschreibung zum programm - nur als hinweis

                                nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                                O 1 Reply Last reply
                                0
                                • liv-in-skyL liv-in-sky

                                  @Oli du weißt es gibt auch den tv spielfilm adapter - der hat auch bildchen und beschreibung zum programm - nur als hinweis

                                  O Online
                                  O Online
                                  Oli
                                  wrote on last edited by Oli
                                  #18

                                  @liv-in-sky

                                  ja ich weis, der zeigt aber nicht alle Programme, ich habe momentan die hoerzu Seite als iframe eingefügt

                                  Gruß
                                  Oliver

                                  1 Reply Last reply
                                  0
                                  • NashraN Offline
                                    NashraN Offline
                                    Nashra
                                    Most Active Forum Testing
                                    wrote on last edited by
                                    #19

                                    Geil, da kann ich den Adapter ja endlich killen d.h. der Adapter ist ja ok
                                    nur TV-Spielfilm versaut einem hier alles da nicht viel freigegben ist.
                                    Werde mal die Scripte installieren und schauen

                                    Gruß Ralf
                                    Mir egal, wer Dein Vater ist! Wenn ich hier angel, wird nicht übers Wasser gelaufen!!

                                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                    liv-in-skyL 1 Reply Last reply
                                    0
                                    • NashraN Nashra

                                      Geil, da kann ich den Adapter ja endlich killen d.h. der Adapter ist ja ok
                                      nur TV-Spielfilm versaut einem hier alles da nicht viel freigegben ist.
                                      Werde mal die Scripte installieren und schauen

                                      liv-in-skyL Offline
                                      liv-in-skyL Offline
                                      liv-in-sky
                                      wrote on last edited by
                                      #20

                                      @Nashra nee - spar die die scripte im moment - ich arbeite an etwas anderem - die scripte sind nicht zuverlässig- da immer wieder die seite, die ich abfrage, falsche daten lieffert

                                      nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                                      NashraN sigi234S 2 Replies Last reply
                                      0
                                      • liv-in-skyL liv-in-sky

                                        @Nashra nee - spar die die scripte im moment - ich arbeite an etwas anderem - die scripte sind nicht zuverlässig- da immer wieder die seite, die ich abfrage, falsche daten lieffert

                                        NashraN Offline
                                        NashraN Offline
                                        Nashra
                                        Most Active Forum Testing
                                        wrote on last edited by
                                        #21

                                        @liv-in-sky sagte in TV Programm Mini Anzeige - HTML Tabelle:

                                        @Nashra nee - spar die die scripte im moment - ich arbeite an etwas anderem - die scripte sind nicht zuverlässig- da immer wieder die seite, die ich abfrage, falsche daten lieffert

                                        Ok, dann warte ich mal, Du machst das schon 👍

                                        Gruß Ralf
                                        Mir egal, wer Dein Vater ist! Wenn ich hier angel, wird nicht übers Wasser gelaufen!!

                                        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                        1 Reply Last reply
                                        0
                                        • liv-in-skyL Offline
                                          liv-in-skyL Offline
                                          liv-in-sky
                                          wrote on last edited by
                                          #22

                                          noch ein versuch

                                          4 neue scripte im ersten post

                                          wenn die horzu etwas an ihrer webseite ändert - werden wohl auch diese scripte ein problem bekommen - es wird einfach die webseite geparst

                                          der filterblock ist immer noch ganz unten (großer roter block) zu ändern - der kann dann in jedes andere script kopiert werden - am ende davon gibt es auch die sender, die ich nicht filtere - die kann man dann je nach bedarf darüber einsetzen

                                          bitte mal testen, ob das bei euch funktioniert

                                          nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                                          O 2 Replies Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          470

                                          Online

                                          32.4k

                                          Users

                                          81.3k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe