Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [geloest] Javascript aus basicHTML starten

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.2k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.5k

[geloest] Javascript aus basicHTML starten

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
14 Beiträge 6 Kommentatoren 2.9k Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • S Offline
    S Offline
    Sly
    schrieb am zuletzt editiert von
    #5

    Danke Jey Cee & Bluefox für die Hilfe …

    sieht jetzt so aus ... funzt ....
    926_vis_epg.png

    Ich weiß zwar nicht wie man einen Beitrag als "GELÖST" markiert, aber für mich ich das Thema gelöst ….

    Sly

    1 Antwort Letzte Antwort
    0
    • Jey CeeJ Online
      Jey CeeJ Online
      Jey Cee
      Developer
      schrieb am zuletzt editiert von
      #6

      Bitte super das es geht.

      Gelöst: Einfach den betreff im ersten Beitrag um [gelöst] erweitern.

      Gesendet von meinem Tab2A7-10F mit Tapatalk

      Persönlicher Support
      Spenden -> paypal.me/J3YC33

      1 Antwort Letzte Antwort
      0
      • S Offline
        S Offline
        Sly
        schrieb am zuletzt editiert von
        #7

        Danke für die INFO …

        Sly

        1 Antwort Letzte Antwort
        0
        • coyoteC Offline
          coyoteC Offline
          coyote
          Most Active
          schrieb am zuletzt editiert von
          #8

          Gefällt mir, dein EPG. Vielleicht möchtest du ja das Script hier zur Verfügung stellen?

          Gesendet von meinem SM-T700 mit Tapatalk

          1 Antwort Letzte Antwort
          0
          • S Offline
            S Offline
            Sly
            schrieb am zuletzt editiert von
            #9

            Danke Coyote,

            werd ich noch machen … aber muss das Skript noch auskommentieren.

            Sobald ich das hab stell ich es ein.

            Sly

            1 Antwort Letzte Antwort
            0
            • S Offline
              S Offline
              Sly
              schrieb am zuletzt editiert von
              #10

              Wie gewünscht das Script.

              Gewisse Abschnitte lassen sich wahrscheinlich einfacher schreiben, aber das ist eins meiner ersten Scripte.

              Super wäre Feedback zu erhalten wie man gewisse Passagen kürzer schreiben könnte.

              Im oberen Bereich ist das SCRIPT, im unteren Bereiche sind die Einträge für CSS & Widget.

              ! ````
              // MINI-EPG
              // EINLESEN VON TELE.AT
              "use strict";
              createState('MM.TVPrg.IsRunning', "", {name: 'Abfrage ob Aktualisierung läuft'});
              createState('MM.TVPrg.CMD', "false", {name: 'Startbefehl für Aktualisierung'});
              createState('MM.TVPrg.Switch', "0", {name: 'Umschalten TV Programm Liste-Sender'});
              var request = require('request');
              var bodyText;
              var abschnittText;
              var UmrechnenWert;
              var counter = 0;
              var counterStep = 30;
              var counterStart = 0;
              var counterEnde = 120; // max. 120 ANZAHL DER PROGAMME BEI TELE 4
              ! // DATEN BEI TELE.AT ANFORDERN
              function WEBRequest(counter) {
              console.log("Anfrage bei TELE.AT");

              // WEBSEITEN EINLESEN
              //var Datum = formatDate(new Date(), "YYYY-MM-DD");
              if (counter < 30) //ANZAHL DER TV-SENDUNGEN/HTNL-SEITE
                  {
                  TVURL = 'http://www.tele.at/tv-programm/jetzt-im-tv.html?limit=30&stationType=-1&timeGroup=1&'; //ERSTE HTML-SEITE
                  console.log('Daten werden eingelesen ... ');
                  }
              else
                  {
                  TVURL = 'http://www.tele.at/tv-programm/jetzt-im-tv.html?limit=30&stationType=-1&timeGroup=1&start=' + counterStart; //ALLE WEITEREN HTML-SEITEN
                  console.log('Daten werden eingelesen ... ');
                  }
              request(TVURL, function (error, response, body) {
                  body = body.replace(//g, ')');
                  // SUCHTEXT FÜR ABSCHNITT MIT DATEN 
                  var bodyAnfang = '(body)';
                  var bodyEnde   = '(/body)';
                  // POSITIONEN IN DATENBLOCK SUCHEN    
                  var bodyZeichenAnfang = body.indexOf(bodyAnfang, 1);
                  var bodyZeichenEnde   = body.indexOf(bodyEnde, bodyZeichenAnfang + bodyAnfang.length + 1);
                  bodyText              = body.slice(bodyZeichenAnfang, bodyZeichenEnde +1); //NUR DATEN AUSSCHNEIDEN -> REST WEGSCHMEISSEN
              
                  body = null;
                  bodyZeichenAnfang = 1;
              
                  abschnitt(bodyZeichenAnfang);
                  // TV SENDER MIT INFOS EXTRAHIEREN    
                  function abschnitt(startAnfang) {
                      setTimeout(function() {
                          counter++;
                          var asTitel = 'hasNext'; // BEGINN TV-SENDER DATENSATZ
              
                          var asZeichenAnfang = bodyText.indexOf(asTitel, startAnfang + 1);
                          var asZeichenEnde   = bodyText.indexOf(asTitel, asZeichenAnfang + asTitel.length + 1);
                          var asText          = bodyText.slice(asZeichenAnfang, asZeichenEnde);
                              asText          = asText.trim();
              
                          var SenderAnfang    = asText.indexOf('alt="', 1);
                          var SenderEnde      = asText.indexOf('"', SenderAnfang + 'alt="'.length + 1);
                          var Sender          = asText.slice(SenderAnfang + 'alt="'.length, SenderEnde);
                              Sender          = Sender.trim();
              
                          var BeginnAnfang    = asText.indexOf('(br/)', SenderEnde + '"'.length + 1);
                          var BeginnEnde      = asText.indexOf('(br/)', BeginnAnfang + '(br/)'.length + 1);
                          var BeginnZeit      = asText.slice(BeginnAnfang + '(br/)'.length, BeginnEnde);
                              BeginnZeit      = BeginnZeit.trim();
              
                          var EndeAnfang    = asText.indexOf('(br/)', BeginnEnde + '(br/)'.length + 1);
                          var EndeEnde      = asText.indexOf('(/div)', EndeAnfang + '(br/)'.length + 1);
                          var EndeZeit      = asText.slice(EndeAnfang + '(br/)'.length, EndeEnde);
                              EndeZeit      = EndeZeit.trim();
              
                          var TitelAnfang     = asText.indexOf('title="', EndeEnde + '(/div)'.length + 1);
                          var TitelEnde       = asText.indexOf('"', TitelAnfang + 'title="'.length + 1);
                          var Titel           = asText.slice(TitelAnfang + 'title="'.length, TitelEnde);
                              Titel           = Titel.trim();
                              //if (Titel.length > 60) {Titel = Titel.slice(0,70) + '...'}
              
                          //var DauerAnfang     = asText.indexOf('(div class="progress")', TitelEnde + '"'.length + 1);
                          //var DauerEnde       = asText.indexOf('(/div)', DauerAnfang + '(div class="progress")'.length + 1);
                          //var Dauer           = asText.slice(DauerAnfang + '(div class="progress")'.length, DauerEnde);
                          //if (DauerAnfang == -1) {Dauer = "keine Laufzeit"}
                          //    Dauer           = Dauer.trim();
              

              ! var LabelAnfang = asText.indexOf('class="info")', TitelEnde + '"'.length + 1);
              //var LabelAnfang = asText.indexOf('class="info")', DauerEnde + '(/div)'.length + 1);
              var LabelEnde = asText.indexOf('(/div)', LabelAnfang + 'class="info")'.length + 1);
              var Label = asText.slice(LabelAnfang + 'class="info")'.length, LabelEnde);
              if (LabelAnfang == -1) {Label = "keine Information"}
              Label = Label.trim();

                          var DanachAnfang    = asText.indexOf('Anschließend', LabelEnde + '"'.length + 1);
                          var DanachEnde      = asText.indexOf('(/a)', DanachAnfang + 'Anschließend'.length + 1);
                          var Danach          = asText.slice(DanachAnfang + 'Anschließend '.length + 1 , DanachEnde);
                              Danach          = Danach.replace(/[0-9]\w:[0-9]\w Uhr/g, '');
                              Danach          = Danach.trim();
                          console.log('Sender: ' + Sender + ' eingelesen ...');
              

              ! // AUSGABE AN VIS - VARIABELN DEFINIEREN
              //DATENSATZDEFINITION: = ['POSITION IN VIS'], ['BILDDATEI'], ['PROGRAMMNUMMER TV-GERÄT']
              var SenderData = [];
              SenderData['ORF eins'] = ['0', 'ORF_1.png' ,'p149' ];
              SenderData['ORF 2'] = ['1', 'ORF_2.png' ,'p150' ];
              SenderData['3sat'] = ['2', '3SAT.png' ,'p74' ];
              SenderData['ORF 3'] = ['3', 'ORF_III.png' ,'p212' ];
              SenderData['ORF Sport +'] = ['4', 'ORF_Sport+.png' ,'p213' ];
              SenderData['ATV'] = ['5', 'ATV.png' ,'p165' ];
              SenderData['Servus TV'] = ['6', 'ServusTV.png' ,'p151' ];
              SenderData['Sat.1'] = ['7', 'SAT1Austria.png' ,'p113' ];
              SenderData['SAT.1 Gold'] = ['8', 'SAT1Gold.png' ,'p108' ];
              SenderData['RTL'] = ['9', 'RTL.png' ,'p133' ];
              SenderData['ProSieben'] = ['10', 'Pro7.png' ,'p110' ];
              SenderData['Pro7 MAXX'] = ['11', 'Pro7_MAXX.png' ,'p101' ];
              SenderData['kabel eins'] = ['12', 'Kabel1Austria.png' ,'p112' ];
              SenderData['Puls 4'] = ['13', 'Puls4.png' ,'p115' ];
              SenderData['SIXX Austria'] = ['14', 'Sixx.png' ,'p68' ];
              SenderData['Super RTL'] = ['15', 'SuperRTL.png' ,'p136' ];
              SenderData['RTL II'] = ['16', 'RTL_II.png' ,'p135' ];
              SenderData['RTL NITRO'] = ['17', 'RTL_Nitro.png' ,'p102' ];
              SenderData['Tele 5'] = ['18', 'Tele_5.png' ,'p131' ];
              SenderData['VOX'] = ['19', 'VOX.png' ,'p134' ];
              SenderData['ARTE'] = ['20', 'Arte.png' ,'p2' ];
              SenderData['Das Erste'] = ['21', 'Das_Erste.png' ,'p1' ];
              SenderData['ZDF'] = ['22', 'ZDF.png' ,'p161' ];
              SenderData['Eins plus'] = ['23', 'EinsPlus.png' ,'p41' ];
              SenderData['Eins festival'] = ['24', 'EinsFestival.png' ,'p40' ];
              SenderData['ZDFkultur'] = ['25', 'ZDFKultur.png' ,'p163' ];
              SenderData['ZDF neo'] = ['26', 'ZDFNEO.png' ,'p162' ];
              SenderData['ZDF infokanal'] = ['27', 'ZDFInfo.png' ,'p78' ];
              SenderData['SF1'] = ['28', 'SRF_1.png' ,'p154' ];
              SenderData['SF2'] = ['29', 'SRF_2.png' ,'p155' ];
              SenderData['TLC'] = ['30', 'TLC.png' ,'p100' ];
              SenderData['DMAX'] = ['31', 'DMAX.png' ,'p24' ];
              // PRÜFEN OB EINGELESENER SENDER IN DATEN-ARRAY
              var AnzeigeZeit;
              var elem;
              for (elem in SenderData)
              {
              if (elem == Sender) // WENN VORHANDEN -> ZEIT BERECHNEN & AUSGABE IN VARIABLE
              {
              log('Sender: ' + Sender + ' aktualisiert ...', 'warn');

                                      createState('MM.TVPrg.Sender.' + SenderData[Sender][0], "", {name: Sender});
                                      createState('MM.TVPrg.Sender.' + SenderData[Sender][0] + '.html', "", {name: "SenderHTML"});
              
                                      var AktuellZeit = formatDate(new Date(), "hh:mm");
                                      var BeginnStd = parseInt(BeginnZeit.slice(0, BeginnZeit.indexOf(':')));
                                      var BeginnMin = parseInt(BeginnZeit.slice(BeginnZeit.indexOf(':') + 1 , BeginnZeit.indexOf(':') + 3));
              

              ! var AktuellStd = parseInt(AktuellZeit.slice(0, AktuellZeit.indexOf(':')));
              var AktuellMin = parseInt(AktuellZeit.slice(AktuellZeit.indexOf(':') + 1 , AktuellZeit.indexOf(':') + 3));
              ! var EndeStd = parseInt(EndeZeit.slice(0, EndeZeit.indexOf(':')));
              var EndeMin = parseInt(EndeZeit.slice(EndeZeit.indexOf(':') + 1 , EndeZeit.indexOf(':') + 3));
              // WENN ENDZEIT/AKTUELLE ZEIT ÜBER 24:00 LIEGT
              if (EndeStd < BeginnStd) {EndeStd = EndeStd + 24}
              if (AktuellStd < BeginnStd) {AktuellStd = AktuellStd + 24}
              ! var tmpBeginnZeit = ((BeginnStd * 60) + BeginnMin);
              var tmpAktuellZeit = ((AktuellStd * 60) + AktuellMin);
              var tmpEndeZeit = ((EndeStd) * 60 + EndeMin);
              ! var LaufZeit = (tmpAktuellZeit - tmpBeginnZeit);
              if (LaufZeit >= 0)
              {
              AnzeigeZeit = "Seit " + LaufZeit + " Minute(n)";
              }
              else
              {
              AnzeigeZeit = "Beginnt in " + -LaufZeit + " Minute(n)";
              LaufZeit = 0;
              }
              var LaufZeitProzent = ((tmpAktuellZeit - tmpBeginnZeit) / (tmpEndeZeit - tmpBeginnZeit)) * 100;
              // DATENSATZ FÜR SENDER ERSTELLEN
              var VisHTML = "" + BeginnZeit + ": " + Titel + "
              " + Label + "";
              VisHTML = VisHTML + "" + EndeZeit + ": " + Danach + "";
              VisHTML = VisHTML + " " + AnzeigeZeit + "";

              ! setState('javascript.0.MM.TVPrg.Sender.' + SenderData[Sender][0] + '.html', VisHTML);
              }
              }
              // LETZTEN DATENSATZ ERREICHT
              var startAnfangNeu = asZeichenAnfang + DanachEnde + 1;
              // PROGRAMMENDE / NÄCHSTER DATENSATZ
              if (counter == counterEnde)
              {
              console.log('Einlesen ENDE');
              setState('MM.TVPrg.IsRunning', false);
              return;
              }
              else
              {
              if (counter == counterStart + counterStep)
              {
              startAnfangNeu = 1;
              asZeichenAnfang = 1;
              counterStart = counterStart + counterStep;
              console.log('WEBREQUEST');
              WEBRequest(counter);
              }
              else
              {
              if (counter == 1) {counterStart = 0} // FALSCHEN COUNTER-WERT BEI PROGRAMMSTART RÜCKSETZEN
              abschnitt(startAnfangNeu);
              }
              }
              },750);
              }
              });
              }
              ! // STARTAURUF DURCH VISU
              on ('javascript.0.MM.TVPrg.CMD', function(obj) {
              console.log("TV Programm einlesen START");
              setState('MM.TVPrg.IsRunning', true); // OPTISCHE ANZEIGE FÜR PROGRAMMSTART EIN
              var counter = 0;
              WEBRequest (counter);
              });
              ! /*
              DARSTELLUNG IN WIDGET "BASIC - HTML"
              ! {javascript.0.MM.TVPrg.Sender.0.html}
              {javascript.0.MM.TVPrg.Sender.1.html}
              {javascript.0.MM.TVPrg.Sender.2.html}
              {javascript.0.MM.TVPrg.Sender.3.html}
              {javascript.0.MM.TVPrg.Sender.4.html}
              {javascript.0.MM.TVPrg.Sender.5.html}
              {javascript.0.MM.TVPrg.Sender.6.html}
              {javascript.0.MM.TVPrg.Sender.7.html}
              {javascript.0.MM.TVPrg.Sender.8.html}
              {javascript.0.MM.TVPrg.Sender.9.html}
              {javascript.0.MM.TVPrg.Sender.10.html}
              {javascript.0.MM.TVPrg.Sender.11.html}
              {javascript.0.MM.TVPrg.Sender.12.html}
              {javascript.0.MM.TVPrg.Sender.13.html}
              {javascript.0.MM.TVPrg.Sender.14.html}
              {javascript.0.MM.TVPrg.Sender.15.html}
              {javascript.0.MM.TVPrg.Sender.16.html}
              {javascript.0.MM.TVPrg.Sender.17.html}
              {javascript.0.MM.TVPrg.Sender.18.html}
              {javascript.0.MM.TVPrg.Sender.19.html}
              {javascript.0.MM.TVPrg.Sender.20.html}
              {javascript.0.MM.TVPrg.Sender.21.html}
              {javascript.0.MM.TVPrg.Sender.22.html}
              {javascript.0.MM.TVPrg.Sender.23.html}
              {javascript.0.MM.TVPrg.Sender.24.html}
              {javascript.0.MM.TVPrg.Sender.25.html}
              {javascript.0.MM.TVPrg.Sender.26.html}
              {javascript.0.MM.TVPrg.Sender.27.html}
              {javascript.0.MM.TVPrg.Sender.28.html}
              {javascript.0.MM.TVPrg.Sender.29.html}
              {javascript.0.MM.TVPrg.Sender.30.html}
              {javascript.0.MM.TVPrg.Sender.31.html}
              ! CSS - FORMATIERUNG FÜR DARSTELLUNG IN WIDGET "BASIC - HTML"
              .TVPrgAktuell {
              width:280px;
              height:50px;
              border-width:0;
              background-color:#CCFFCC;
              font-family:sans-serif;
              font-size:small;
              text-align:left;
              vertical-align:top;
              color:black;
              }
              .TVPrgDauer {
              height:15px;
              border-width:0;
              background-color:white;
              font-family:sans-serif;
              font-size:small;
              text-align:left;
              color:black;
              }
              .TVPrgDanach {
              width:150px;
              border-width:0;
              background-color:#eeeeee;
              font-family:sans-serif;
              font-size:small;
              text-align:left;
              vertical-align:top;
              color:black;
              }
              .TVPrgButton {
              width:60px;
              height:60px;
              background: none center no-repeat transparent;
              background-size: 60px 60px;
              }
              */

              Bei mir funzt's …
              
              Sly
              1 Antwort Letzte Antwort
              0
              • P Offline
                P Offline
                pix
                schrieb am zuletzt editiert von
                #11

                Hallo Sly,

                sehr schöne Umsetzung. Mir gefällt die Idee, mit einem Knopfdruck, gleich den entsprechenden Sender zu schalten.

                Ich würde die Funktion abschnitt() aus der Funktion WEBrequest auslagern (keine Funktion in einer Funktion).

                "console.log" kannst du durch "log" ersetzen. Wird die Variable TVURL irgendwo angelegt?

                bzw. gleich so

                // DATEN BEI TELE.AT ANFORDERN
                function WEBRequest(counter) {
                    log("Anfrage bei TELE.AT");
                
                    // WEBSEITEN EINLESEN
                    //var Datum = formatDate(new Date(), "YYYY-MM-DD");
                    var TVURL = 'http://www.tele.at/tv-programm/jetzt-im-tv.html?limit=30&stationType=-1&timeGroup=1&'; //ERSTE HTML-SEITE
                    if (counter >= 30) TVURL = TVURL + 'start=' + counterStart
                    log('Daten werden eingelesen ... ');
                
                    request...
                
                

                Und warum änderst beim Parsen du den html-Tag in (body) ? Funktioniert indexOf('', 1) nicht?

                Gruß,

                Pix

                ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                1 Antwort Letzte Antwort
                0
                • S Offline
                  S Offline
                  Sly
                  schrieb am zuletzt editiert von
                  #12

                  Hallo pix,

                  danke für die Infos.

                  Anscheinend habe ich vergessen die URL Variable zu definieren.

                  Die Umwandlung im body hab ich eigentlich nur zum Testen verwendet,

                  damit ich im LOG keine HTML Darstellung angezeigt bekomme.

                  Könnte man theoretisch herausnehmen.

                  Danke für Infos

                  Sly

                  1 Antwort Letzte Antwort
                  0
                  • S Offline
                    S Offline
                    Sly
                    schrieb am zuletzt editiert von
                    #13

                    <u>Warum die Antwort doppelt angezeigt wird weiß ich nicht, wie kann ich den wieder löschen?</u>

                    Hallo pix,

                    danke für die Infos.

                    Anscheinend habe ich vergessen die URL Variable zu definieren.

                    Die Umwandlung im body hab ich eigentlich nur zum Testen verwendet,

                    damit ich im LOG keine HTML Darstellung angezeigt bekomme.

                    Könnte man theoretisch herausnehmen.

                    Danke für Infos

                    Sly

                    1 Antwort Letzte Antwort
                    0
                    • F Offline
                      F Offline
                      File
                      schrieb am zuletzt editiert von
                      #14

                      Hallo Sly,

                      bin nicht so fit in Javascript. Funktioniert dein Script 2019 auch noch so wie du es hier oben gepostest hast? Bekomme Fehler wenn ich es in IO-broker einbinden will.
                      Kannst du eventuell nur das spript mal als Datei anhängen?

                      LG
                      Philipp

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      518

                      Online

                      32.5k

                      Benutzer

                      81.7k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe