Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Ölpreis

    NEWS

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    SOLVED Ölpreis

    This topic has been deleted. Only users with topic management privileges can see it.
    • O
      Oli @sigi234 last edited by

      @sigi234

      Anbei das View
      Heizölview.txt

      Übrigens dein Wetterview ist genial.

      Gruß Oliver

      1 Reply Last reply Reply Quote 1
      • O
        Oli last edited by

        Hallo zusammen,

        ich habe die Warnmeldungen aus dem 2. Script "Heizölpreis am Wohnort" beseitigen können.

        Hier das neue Script:

        /* Ölpreis abfragen
        Auf diese Anfrage hin: http://forum.iobroker.net/viewtopic.php?f=8&t=3455
        am 4.11.2016 getestet, nach Änderung der Webseite nun Fehler
        Quelle: heizoel24.de
        Basis: solar-wetter Skript
        {1}
        erstellt: 03.08.2016 von pix
        12.11.2016 Webseite liefert nicht mehr Prognose, sondern Ist-Preis. Skript angepasst
        29.08.2017 SKRIPT AUSGESCHALTET, DA NICHT IN GEBRAUCH
        {2}
        Angepasst am 14.07.2019 von Oliver Böhm, verwendet für "Heizölpreis für Wohnort abfragen"
        Quelle:  www.esyoil.com
        */
         
        var logging = false;
        var link = getState('javascript.0.Heizoel.Bestelldaten.Weblink').val;
         
        // ab hier nix mehr ändern, solange die Webseite die Daten nicht ändert
        var request = require('request');
        var price;
        var priceLB;
        var MwStG;
        var MwStL;
        var idPriceGB     =   'Heizoel.Heizölpreis.Wohnort.Gesamt.Bruttopreis Gesamt',
            idPriceLB     =   'Heizoel.Heizölpreis.Wohnort.Je 100L.Bruttopreis 100l',
            idMwStL       =   'Heizoel.Heizölpreis.Wohnort.Je 100L.MwSt 100l',
            idMwStG       =   'Heizoel.Heizölpreis.Wohnort.Gesamt.MwSt Gesamt',
            idZuschlagN   =   'Heizoel.Heizölpreis.Wohnort.Je 100L.Nettozuschlag 100l',
            idZuschlagGN  =   'Heizoel.Heizölpreis.Wohnort.Gesamt.Nettozuschlag Gesamt',
            idPriceLN     =   'Heizoel.Heizölpreis.Wohnort.Je 100L.Nettopreis 100l',
            idPriceGN     =   'Heizoel.Heizölpreis.Wohnort.Gesamt.Nettopreis Gesamt',
            idLieferant   =   'Heizoel.Lieferant.Name',
            idWebseite    =   'Heizoel.Lieferant.Webseite',
            idDate        =   'Heizoel.Datum';
           
        createState(idPriceGB, {
           name: 'Heizölpreis Gesamt Brutto',
           desc: 'Heizölpreis Gesamt Brutto für heute',
           type: 'number',
           def: 0,
           min: 0,
           unit: '€'
        });
        
        createState(idPriceLB, {
           name: 'Heizölpreis je 100l Brutto',
           desc: 'Heizölpreis je 100l Brutto für heute',
           type: 'number',
           def: 0,
           min: 0,
           unit: '€/100l'
        });
        
        createState(idMwStL, {
           name: 'Mehrwertsteuer je 100l',
           desc: 'Mehrwertsteuer je 100l für heute',
           type: 'number',
           def: 0,
           min: 0,
           unit: '€/100l'
        });
        
        createState(idMwStG, {
           name: 'Mehrwertsteuer Gesamt',
           desc: 'Mehrwertsteuer Gesamt für heute',
           type: 'number',
           def: 0,
           min: 0,
           unit: '€'
        });
        
        createState(idZuschlagN, {
           name: 'Zuschlag je 100l Netto',
           desc: 'Zuschlag je 100l Netto für heute',
           type: 'number',
           def: 0,
           min: 0,
           unit: '€/100l'
        });
        
        createState(idZuschlagGN, {
           name: 'Zuschlag Gesamt Netto',
           desc: 'Zuschlag Gesamt Netto für heute',
           type: 'number',
           def: 0,
           min: 0,
           unit: '€'
        });
        
        createState(idPriceLN, {
           name: 'Heizölpreis je 100l Netto',
           desc: 'Heizölpreis je 100l Netto für heute',
           type: 'number',
           def: 0,
           min: 0,
           unit: '€/100l'
        });
        
        createState(idPriceGN, {
           name: 'Heizölpreis Gesamt Netto',
           desc: 'Heizölpreis Gesamt Netto für heute',
           type: 'number',
           def: 0,
           min: 0,
           unit: '€'
        });
        
        createState(idLieferant, {
           name: 'Lieferant',
           desc: 'Lieferant für heute',
           type: 'string',
           unit: ' '
        });
        
        createState(idWebseite, {
           name: 'esyoil.com Webseite von Lieferant',
           desc: 'esyoil.com Webseite von Lieferant',
           type: 'string',
           unit: ' '
        });
        
        createState(idDate, {
           name: 'Datum',
           desc: 'Heizölpreis Zeitstempel (als String)',
           type: 'string',
           def: ''
        });
         
        function extractText(body,text1,text2) {
           var start = body.indexOf(text1) + text1.length;
           var ende = body.indexOf(text2,start);
           if (logging) log('Startposition: ' + start);
           if (logging) log('Endposition: ' + ende);
           var zwischenspeicher;
           if (((start != -1) && (ende != -1)) && (start<ende)) {                                                       // Fehler abfangen
               zwischenspeicher = body.slice(start,ende);
               zwischenspeicher = zwischenspeicher.trim();
               if (logging) log(zwischenspeicher);
               return(zwischenspeicher);
           } else {
               zwischenspeicher = 'Fehler beim Ausschneiden';
               log(zwischenspeicher, 'error');
               return(0);
           }
        }
         
        function findPrice (body) {   
           var text1 = '<li class="total_price_brutto">',                                                               // erstes Auftauchen
               text2 = '&thinsp;&euro;</li>';                                                                           // erstes Auftauchen
           price = extractText(body,text1,text2); 
           var price_array = price.split('.');
           price = price_array[0] + price_array[1];     
           price_array = price.split(',');
           price = price_array[0] + '.' + price_array[1];
           //price = price.toFixed(2);
           price = parseFloat(price);
           priceLB = price / 50;
           priceLB = priceLB.toFixed(2);   
           priceLB = parseFloat(priceLB);      
           MwStG = price / 119 * 19;
           MwStG = MwStG.toFixed(2);
           MwStG = parseFloat(MwStG);
           MwStL = priceLB / 119 * 19;
           MwStL = MwStL.toFixed(2);
           MwStL = parseFloat(MwStL);
           if (logging) log('Heizöl Preis: ' + price + ' EUR');
        
           setState(idPriceLB, parseFloat(priceLB,10));
           setState(idPriceGB, parseFloat(price,10));
           setState(idMwStG, parseFloat(MwStG,10));                                                                                    // Wert in Objekt schreiben
           setState(idMwStL, parseFloat(MwStL,10));                                                                                    // Wert in Objekt schreiben
        }
        
        function findZuschlag (body) {   
           var text1 = '<dd data-polyfill-hidden class="delivery-charge">+&nbsp;',                                      // erstes Auftauchen
               text2 = '<dt data-polyfill-hidden class="vat">';                                                         // erstes Auftauchen
           var zuschlag = extractText(body,text1,text2);
           var zuschlagLN = zuschlag.replace("&nbsp;€</dd>","");
           var zuschlag_array = zuschlagLN.split(',');
           zuschlagLN = zuschlag_array[0] + '.' + zuschlag_array[1];   
           //zuschlagLN = zuschlagLN.toFixed(2);
           zuschlagLN = parseFloat(zuschlagLN);   
           setState(idZuschlagN, parseFloat(zuschlagLN,10.00));   
           var zuschlagG = zuschlagLN * 49.8;
           zuschlagG = zuschlagG.toFixed(2);
           zuschlagG = parseFloat(zuschlagG);                                    
           var priceLN = priceLB - MwStL - zuschlagLN;
           priceLN = priceLN.toFixed(2);
           priceLN = parseFloat(priceLN);
           var priceGN = price - MwStG - zuschlagG;
           priceGN = priceGN.toFixed(2);
           priceGN = parseFloat(priceGN);   
           if (logging) log('Zuschlag: ' + zuschlagLN + ' EUR');
           
           setState(idZuschlagGN, parseFloat(zuschlagG,10));  
           setState(idPriceLN, parseFloat(priceLN,10));                                                                                // Wert in Objekt schreiben
           setState(idPriceGN, parseFloat(priceGN,10));                                                                                // Wert in Objekt schreiben
        }
        
        function findLieferant (body) {
           var text1 = '<div data-polyfill-hidden style="width:330px;word-wrap:break-word;">',		                    // erstes Auftauchen
               text2 = '<br data-polyfill-hidden>';                                                                     // erstes Auftauchen
           var lieferant = extractText(body,text1,text2); 
           lieferant = lieferant.replace(" ","");
           lieferant = lieferant.replace(/&nbsp;/g," ");
           
           setState(idLieferant, lieferant);                                                                            // Wert in Objekt schreiben
        }
        
        function findWebseite (body) {
           var text1 = '<a class="img provider-logo-container" tabindex="-1" href="',		                            // erstes Auftauchen
               text2 = 'class="lazy provider-logo';                                                                     // erstes Auftauchen
           var web = extractText(body,text1,text2);
           web = web.replace(/" "/g,"");
           web = web.replace(/">/g,"");
           web = web.replace(/<img/g,"");   
           web = web.replace('"><imgclass="lazyprovider-logo"',"");
           web = 'https://www.esyoil.com/heizoel-haendler/' + web;  
        
           setState(idWebseite, web);                                                                                   // Wert in Objekt schreiben
        }  
         
        function findDate (body) {   
           var text1 = '<strong>Aktuelle Heizölpreise</strong>:<span id="h4-until-base-3"> 90530 Wendelstein von ',     // erstes Auftauchen + 1 Tag
               text2 = ' Uhr</span>    </h1>';                                                                          // erstes Auftauchen
           var time = extractText(body,text1,text2); 
           var datum = new Date();
           var heute = datum.getDate() + "." + (datum.getMonth()+1) + "." + datum.getFullYear() + " " + time ;
           if (logging) log('Heizöl Datum: ' + heute);   
           setState(idDate, heute);                                                                                     // Wert in Objekt schreiben
        }
         
        function leseWebseite () {
           try {
               request(link, function (error, response, body) {
                   if (!error && response.statusCode == 200) {                                                          // kein Fehler, Inhalt in body
                       findPrice (body);               
                       findZuschlag (body);
                       findLieferant (body);
                       findWebseite (body);
                       findDate (body);               
                       log('Heizöl-Preis von esyoil.com eingelesen');
                   } else log(error,'error');                                                                           // Error beim Einlesen
               });
           } catch (e) {
               log('Fehler (try) leseWebseite: ' + e, 'error');
           }   
        }
         
        // bei Skriptstart
        leseWebseite();
         
        // Schedule
        schedule("59 * * * *", leseWebseite);
        

        Hier das angepasste View:
        Heizölview.txt

        liv-in-sky sigi234 2 Replies Last reply Reply Quote 0
        • C
          ChrisXY last edited by

          DVielen Dank das du das teilst 😉 Kann ich "bald" echt gut brauchen.

          1 Reply Last reply Reply Quote 0
          • liv-in-sky
            liv-in-sky @Oli last edited by

            @Oliver-Böhm

            1how-marvin-the-paranoid-android-spends-his-weekends-klein.png tolle arbeit

            1 Reply Last reply Reply Quote 0
            • sigi234
              sigi234 Forum Testing Most Active @Oli last edited by sigi234

              @Oliver-Böhm

              Hallo, habe es mal getestet, Lieferantendaten bekomme ich keine.
              Ok, da muss ich im Skript auf Ösi umstellen, gibt es auch für at.

              https://www.heizoel24.at/

              Screenshot (3669).png

              O 1 Reply Last reply Reply Quote 0
              • O
                Oli @sigi234 last edited by

                @sigi234

                ich hole die Daten nicht von Heizöl24, sondern von esyoil, eventuell musst du den Link für Österreich anpassen.
                Gruß Oliver

                R sigi234 2 Replies Last reply Reply Quote 0
                • R
                  ReverZ @Oli last edited by

                  @Oliver-Böhm

                  Re: (gelöst) Ölpreis

                  Der Preis für 100l stimmt irgendwie nicht.

                  Gesammtbrutto (für 3000 Liter): 2038.47 €
                  Unter Heizöl -> Heizölpreis -> Allgemein -> Preis: 66.96 €

                  Aber unter Heizöl ->Heizölpreis -> Wohnort -> Je 100L steht dann folgendes
                  Je 100 L: 40.77 €/100l

                  Wenn das stimmen würde, würde sofort eine Großbestellung raus gehen 😊

                  O 1 Reply Last reply Reply Quote 0
                  • sigi234
                    sigi234 Forum Testing Most Active @Oli last edited by sigi234

                    @Oliver-Böhm sagte in (gelöst) Ölpreis:

                    Link für Österreich anpassen

                    Wo und in welchen Skript?
                    Ich glaube esyoli ist nur für DE

                    Sorry, Skript ist für mich Bahnhof.........bin eher der Vis Freund.........😀

                    O 1 Reply Last reply Reply Quote 0
                    • O
                      Oli @ReverZ last edited by Oli

                      @ReverZ

                      was sagt den die Homepage von esyoli.com?
                      Sind auf der Homepage zusätzliche Lieferkosten aufgeführt?

                      Ich bin momentan unterwegs, ich schaue mir das heute Abend an.

                      R 1 Reply Last reply Reply Quote 0
                      • O
                        Oli @sigi234 last edited by

                        @sigi234

                        schau bitte erstmal, ob esyoli.com Ölpreise für Österreich bereitstellt.
                        Die Seite von Heizöl24 kann nicht geparst werden, da im Quellcode keine detailierte Informationen vorhanden sind.

                        1 Reply Last reply Reply Quote 0
                        • R
                          ReverZ @Oli last edited by

                          @Oliver-Böhm

                          Nein und der Gesamtpreis stimmt mit der Homepage überein.
                          Lediglich der 100L-Preis ist unterschiedlich.

                          In iobroker: 40.77 €/100l (brutto)
                          Auf der Website: 67,95 €/100l (brutto)

                          Danke, ich checke auch nochmal alle Orte die User-Konfiguration brauchen.

                          O 1 Reply Last reply Reply Quote 0
                          • O
                            Oli @ReverZ last edited by

                            @ReverZ
                            dann liegt es an den nicht vorhandenen zusätzlichen Lieferkosten, ist mir gestern schon aufgefallen, bin aber noch nicht dazu gekommen dies zu bereinigen.

                            R 1 Reply Last reply Reply Quote 0
                            • R
                              ReverZ @Oli last edited by ReverZ

                              @Oliver-Böhm

                              Nein, im Script wird einfach der Preis durch 50 dividiert

                              priceLB = price / 50;
                              
                              

                              Die 50 darf hier nicht hart codiert werden, da du von deinen 5000 Litern Gesamtmenge ausgegangen bist.
                              In dem Fall stimmt das Ergebnis natürlich. Wenn du aber - wie ich z.b.- 3000 Liter eingegeben hast, stimmt der 100L-Preis dann nicht mehr.

                              Müsste also entweder aus dem HTML ausgelesen werden oder errechnet durch

                              priceLB = price / <Liefermenge> * 100;
                              
                              O 1 Reply Last reply Reply Quote 0
                              • O
                                Oli @ReverZ last edited by

                                @ReverZ
                                stimmt, da hast du recht, daran merkt man, dass ich Script-Anfänger bin :-).

                                Für Verbesserungen oder Vereinfachung der Scripte bin ich immer dankbar.

                                1 Reply Last reply Reply Quote 0
                                • O
                                  Oli last edited by

                                  Hallo zusammen,

                                  anbei ein kleines Update:

                                  1. Vis wurde neu gestaltet, die Bestelldaten können jetzt im Vis direkt über Textfelder und Dropdownfelder eingestellt werden.

                                  ab342e77-6001-46c2-99f0-3c8ecae13d6e-image.png

                                  Heizölview.txt

                                  1. Die Javascripts wurden angepasst und einige Fehler beseitigt. Danke für den Hinweis @ReverZ .

                                  Die neuen Scripte füge ich im Anhang bei.

                                  Script 1: Erstellt alle nötigen States, bitte einmal manuell ausführen.

                                  /* Legt alle nötigen States an.
                                    Dieses Schript zu Beginn einmal manuell ausführen.
                                  */
                                  
                                  // ab hier nix mehr ändern, solange die Webseite die Daten nicht ändert
                                  var idLiter            =   'Heizoel.Bestelldaten.Liefermenge',
                                     idPLZ              =   'Heizoel.Bestelldaten.Lieferort',
                                     idEntladestellen   =   'Heizoel.Bestelldaten.Entladestellen',
                                     idHeizölsorte      =   'Heizoel.Bestelldaten.Heizölsorte',
                                     idHeizölsorteID    =   'Heizoel.Bestelldaten.Heizölsorte ID',
                                     idBezahlung        =   'Heizoel.Bestelldaten.Zahlungsart',
                                     idBezahlungID      =   'Heizoel.Bestelldaten.Zahlungsart ID',
                                     idLink             =   'Heizoel.Bestelldaten.Weblink',
                                     idPriceGB          =   'Heizoel.Heizölpreis.Wohnort.Gesamt.Bruttopreis Gesamt',
                                     idPriceLB          =   'Heizoel.Heizölpreis.Wohnort.Je 100L.Bruttopreis 100l',
                                     idMwStL            =   'Heizoel.Heizölpreis.Wohnort.Je 100L.MwSt 100l',
                                     idMwStG            =   'Heizoel.Heizölpreis.Wohnort.Gesamt.MwSt Gesamt',
                                     idZuschlagN        =   'Heizoel.Heizölpreis.Wohnort.Je 100L.Nettozuschlag 100l',
                                     idZuschlagGN       =   'Heizoel.Heizölpreis.Wohnort.Gesamt.Nettozuschlag Gesamt',
                                     idPriceLN          =   'Heizoel.Heizölpreis.Wohnort.Je 100L.Nettopreis 100l',
                                     idPriceGN          =   'Heizoel.Heizölpreis.Wohnort.Gesamt.Nettopreis Gesamt',
                                     idLieferant        =   'Heizoel.Lieferant.Name',
                                     idWebseite         =   'Heizoel.Lieferant.Webseite',
                                     idPriceA           =   'Heizoel.Heizölpreis.Allgemein.Preis',
                                     idTrend            =   'Heizoel.Heizölpreis.Allgemein.Trend zum Vortag',
                                     idPercent          =   'Heizoel.Heizölpreis.Allgemein.Änderung zum Vortag',    
                                     idDate             =   'Heizoel.Datum';   
                                    
                                  createState(idLiter, {
                                    name: 'Liefermenge',
                                    desc: 'Liefermenge',
                                    type: 'string',
                                    unit: ' '
                                  });
                                  createState(idPLZ, {
                                    name: 'Lieferort',
                                    desc: 'Lieferort',
                                    type: 'string',
                                    unit: ' '
                                  });
                                  
                                  createState(idEntladestellen, {
                                    name: 'Entladestellen',
                                    desc: 'Entladestellen',
                                    type: 'string',
                                    unit: ' '
                                  });
                                  
                                  createState(idHeizölsorte, {
                                    name: 'Heizölsorte',
                                    desc: 'Heizölsorte',
                                    type: 'string',
                                    unit: ' '
                                  });
                                  
                                  createState(idHeizölsorteID, {
                                    name: 'Heizölsorte ID',
                                    desc: 'Heizölsorte ID',
                                    type: 'string',
                                    unit: ' '
                                  });
                                  
                                  createState(idBezahlung, {
                                    name: 'Bezahlart',
                                    desc: 'Bezahlart',
                                    type: 'string',
                                    unit: ' '
                                  });
                                  
                                  createState(idBezahlungID, {
                                    name: 'Bezahlart ID',
                                    desc: 'Bezahlart ID',
                                    type: 'string',
                                    unit: ' '
                                  });
                                  
                                  createState(idLink, {
                                    name: 'Weblink von esyoil',
                                    desc: 'Weblink von esyoil',
                                    type: 'string',
                                    unit: ' '
                                  });
                                  
                                  createState(idPriceGB, {
                                    name: 'Heizölpreis Gesamt Brutto',
                                    desc: 'Heizölpreis Gesamt Brutto für heute',
                                    type: 'number',
                                    def: 0,
                                    min: 0,
                                    unit: '€'
                                  });
                                  
                                  createState(idPriceLB, {
                                    name: 'Heizölpreis je 100l Brutto',
                                    desc: 'Heizölpreis je 100l Brutto für heute',
                                    type: 'number',
                                    def: 0,
                                    min: 0,
                                    unit: '€/100l'
                                  });
                                  
                                  createState(idMwStL, {
                                    name: 'Mehrwertsteuer je 100l',
                                    desc: 'Mehrwertsteuer je 100l für heute',
                                    type: 'number',
                                    def: 0,
                                    min: 0,
                                    unit: '€/100l'
                                  });
                                  
                                  createState(idMwStG, {
                                    name: 'Mehrwertsteuer Gesamt',
                                    desc: 'Mehrwertsteuer Gesamt für heute',
                                    type: 'number',
                                    def: 0,
                                    min: 0,
                                    unit: '€'
                                  });
                                  
                                  createState(idZuschlagN, {
                                    name: 'Zuschlag je 100l Netto',
                                    desc: 'Zuschlag je 100l Netto für heute',
                                    type: 'number',
                                    def: 0,
                                    min: 0,
                                    unit: '€/100l'
                                  });
                                  
                                  createState(idZuschlagGN, {
                                    name: 'Zuschlag Gesamt Netto',
                                    desc: 'Zuschlag Gesamt Netto für heute',
                                    type: 'number',
                                    def: 0,
                                    min: 0,
                                    unit: '€'
                                  });
                                  
                                  createState(idPriceLN, {
                                    name: 'Heizölpreis je 100l Netto',
                                    desc: 'Heizölpreis je 100l Netto für heute',
                                    type: 'number',
                                    def: 0,
                                    min: 0,
                                    unit: '€/100l'
                                  });
                                  
                                  createState(idPriceGN, {
                                    name: 'Heizölpreis Gesamt Netto',
                                    desc: 'Heizölpreis Gesamt Netto für heute',
                                    type: 'number',
                                    def: 0,
                                    min: 0,
                                    unit: '€'
                                  });
                                  
                                  createState(idLieferant, {
                                    name: 'Lieferant',
                                    desc: 'Lieferant für heute',
                                    type: 'string',
                                    unit: ' '
                                  });
                                  
                                  createState(idWebseite, {
                                    name: 'esyoil.com Webseite von Lieferant',
                                    desc: 'esyoil.com Webseite von Lieferant',
                                    type: 'string',
                                    unit: ' '
                                  });
                                  
                                  createState(idDate, {
                                    name: 'Datum',
                                    desc: 'Heizölpreis Zeitstempel (als String)',
                                    type: 'string',
                                    def: ''
                                  });
                                  
                                  createState(idPriceA, {
                                    name: 'Heizölpreis für heute',
                                    desc: 'Heizölpreis für heute',
                                    type: 'number',
                                    def: 0,
                                    min: 0,
                                    unit: '€/100l'
                                  });
                                  createState(idPercent, {
                                    name: 'Heizölpreisänderung in Prozent zum Vortag',
                                    desc: 'Heizölpreisänderung zum Vortag',
                                    type: 'number',
                                    def: 0,
                                    min: 0,
                                    max: 100,
                                    unit: '%'
                                  });
                                  
                                  createState(idTrend, {
                                    name: 'Trend zum Vortag',
                                    desc: 'Trend zum Vortag',
                                    type: 'string',
                                    unit: ' '
                                  });
                                  
                                  createState('javascript.0.Heizoel.Skriptstart', false, {name: 'Skript bei VIS Tastendruck starten'});
                                  
                                  
                                  
                                  

                                  Scripts 2: Wird ausgeführt, sobald sich in den Bestelldaten etwas ändert und der Abfragebutton betätigt wird. Es wird ein angepasster Link für die Preisabfrage erstellt.

                                  /* Ölpreis abfragen
                                  Auf diese Anfrage hin: http://forum.iobroker.net/viewtopic.php?f=8&t=3455
                                  am 4.11.2016 getestet, nach Änderung der Webseite nun Fehler
                                  Quelle: heizoel24.de
                                  Basis: solar-wetter Skript
                                  {1}
                                  erstellt: 03.08.2016 von pix
                                  12.11.2016 Webseite liefert nicht mehr Prognose, sondern Ist-Preis. Skript angepasst
                                  29.08.2017 SKRIPT AUSGESCHALTET, DA NICHT IN GEBRAUCH
                                  {2}
                                  Angepasst am 14.07.2019 von Oliver Böhm, verwendet für "Bestelldaten für Heizölbestellung eintragen"
                                  */
                                  
                                  on('javascript.0.Heizoel.Skriptstart', function (obj) {
                                     if (!obj.state.ack && obj.state.val) {
                                  
                                         var logging = false;  
                                         var link = 'http://www.heizoel24.de/heizoelpreise';
                                   
                                         // ab hier nix mehr ändern, solange die Webseite die Daten nicht ändert
                                         var request = require('request');
                                         var idheizöl = getState('javascript.0.Heizoel.Bestelldaten.Heizölsorte ID').val;
                                         var idzahlart = getState('javascript.0.Heizoel.Bestelldaten.Zahlungsart ID').val;
                                         var entladestellen = getState('javascript.0.Heizoel.Bestelldaten.Entladestellen').val;
                                         var liefermenge = getState('javascript.0.Heizoel.Bestelldaten.Liefermenge').val;                                       
                                         var lieferort = getState('javascript.0.Heizoel.Bestelldaten.Lieferort').val;                                        
                                  
                                         var idLiter          =   'Heizoel.Bestelldaten.Liefermenge',
                                             idPLZ            =   'Heizoel.Bestelldaten.Lieferort',
                                             idEntladestellen =   'Heizoel.Bestelldaten.Entladestellen',
                                             idHeizölsorte    =   'Heizoel.Bestelldaten.Heizölsorte',
                                             idBezahlung      =   'Heizoel.Bestelldaten.Zahlungsart',
                                             idLink           =   'Heizoel.Bestelldaten.Weblink';   
                                     
                                         function findLink () {   
                                             if (idheizöl == "8") {
                                                 heizölsorte = "Normal Schwefelarm";                    
                                             } else if (idheizöl == "4") {
                                                 heizölsorte = "Premium Schwefelarm";                    
                                             } else if (idheizöl == "9") {
                                                 heizölsorte = "Klimaneutral";                  
                                             }    
                                    
                                             if (idzahlart == "1") {
                                                 zahlart = "Barzahlung";                    
                                             } else if (idzahlart == "2") {
                                                 zahlart = "EC-Karte";                    
                                             } else if (idzahlart == "4") {
                                                 zahlart = "Lastschrift";                  
                                             } else if (idzahlart == "10") {
                                                 zahlart = "Ratenkauf";                  
                                             } else if (idzahlart == "6") {
                                                 zahlart = "Rechnung";                  
                                             } else if (idzahlart == "3") {
                                                 zahlart = "Vorkasse";                  
                                             } else if (idzahlart == "5") {
                                                 zahlart = "Wärmekonto";                  
                                             }
                                   
                                             // Erstellung des Abfragelinks
                                             var url = 'https://www.esyoil.com/'  
                                               + '?calc%5Bzipcode%5D='          + lieferort
                                               + '&calc%5Bamount%5D='           + liefermenge
                                               + '&calc%5Bunloading_points%5D=' + entladestellen
                                               + '&calc%5Bprod%5D='             + idheizöl
                                               + '&calc%5Bpayment_type%5D='     + idzahlart 
                                               + '&calc%5Bexpress%5D=0&calc%5Bdelivery_date_sel%5D=&calc%5Bhose%5D=40m&calc%5Bshort_vehicle%5D=&calc%5Bsubmit%5D='         // driving = default
                                                             
                                             setState(idLink, url);                                           // Wert in Objekt schreiben
                                             setState(idBezahlung, zahlart);                                  // Wert in Objekt schreiben         
                                             setState(idHeizölsorte, heizölsorte);                            // Wert in Objekt schreiben
                                             setState('javascript.0.Heizoel.Skriptstart', "false");                            // Wert in Objekt schreiben
                                         }
                                   
                                         function leseWebseite () {
                                             try {
                                                     request(link, function (error, response, body) {
                                                 if (!error && response.statusCode == 200) {              // kein Fehler, Inhalt in body
                                                     findLink ();                              
                                                     log('Bestelldaten eingelesen');
                                                 } else log(error,'error');                               // Error beim Einlesen
                                                 });
                                             } catch (e) {
                                                 log('Fehler (try) leseWebseite: ' + e, 'error');
                                             }   
                                         }
                                   
                                         // bei Skriptstart
                                         leseWebseite();
                                     }
                                  });
                                      
                                  

                                  Script 3: Wird ausgeführt, sobald sich in den Bestelldaten etwas ändert und der Abfragebutton betätigt wird und jede Stunde. Hier findet die eigentliche Preisabfrage für den Wohnort statt.

                                  /* Ölpreis abfragen
                                  Auf diese Anfrage hin: http://forum.iobroker.net/viewtopic.php?f=8&t=3455
                                  am 4.11.2016 getestet, nach Änderung der Webseite nun Fehler
                                  Quelle: heizoel24.de
                                  Basis: solar-wetter Skript
                                  {1}
                                  erstellt: 03.08.2016 von pix
                                  12.11.2016 Webseite liefert nicht mehr Prognose, sondern Ist-Preis. Skript angepasst
                                  29.08.2017 SKRIPT AUSGESCHALTET, DA NICHT IN GEBRAUCH
                                  {2}
                                  Angepasst am 14.07.2019 von Oliver Böhm, verwendet für "Heizölpreis für Wohnort abfragen"
                                  Dieses Script wird automatisch ausgeführt, sobald sich etwas in den Bestelldaten ändert, und alle 59 Minuten.
                                  Quelle:  www.esyoil.com
                                  */
                                  
                                  on({id:"javascript.0.Heizoel.Bestelldaten.Weblink", change: 'ne'}, function (obj) { 
                                  var logging = false;
                                  
                                  // ab hier nix mehr ändern, solange die Webseite die Daten nicht ändert
                                  var request = require('request');
                                  var price;
                                  var priceLB;
                                  var MwStG;
                                  var MwStL;
                                  var zuschlag;
                                  var zuschlagLN;
                                  var Liefermenge = getState('javascript.0.Heizoel.Bestelldaten.Liefermenge').val;
                                  var link = getState('javascript.0.Heizoel.Bestelldaten.Weblink').val;
                                  var idPriceGB     =   'Heizoel.Heizölpreis.Wohnort.Gesamt.Bruttopreis Gesamt',
                                     idPriceLB     =   'Heizoel.Heizölpreis.Wohnort.Je 100L.Bruttopreis 100l',
                                     idMwStL       =   'Heizoel.Heizölpreis.Wohnort.Je 100L.MwSt 100l',
                                     idMwStG       =   'Heizoel.Heizölpreis.Wohnort.Gesamt.MwSt Gesamt',
                                     idZuschlagN   =   'Heizoel.Heizölpreis.Wohnort.Je 100L.Nettozuschlag 100l',
                                     idZuschlagGN  =   'Heizoel.Heizölpreis.Wohnort.Gesamt.Nettozuschlag Gesamt',
                                     idPriceLN     =   'Heizoel.Heizölpreis.Wohnort.Je 100L.Nettopreis 100l',
                                     idPriceGN     =   'Heizoel.Heizölpreis.Wohnort.Gesamt.Nettopreis Gesamt',
                                     idLieferant   =   'Heizoel.Lieferant.Name',
                                     idWebseite    =   'Heizoel.Lieferant.Webseite',      
                                     idDate        =   'Heizoel.Datum';
                                  
                                  function extractText(body,text1,text2) {
                                    var start = body.indexOf(text1) + text1.length;
                                    var ende = body.indexOf(text2,start);
                                    if (logging) log('Startposition: ' + start);
                                    if (logging) log('Endposition: ' + ende);
                                    var zwischenspeicher;
                                    if (((start != -1) && (ende != -1)) && (start<ende)) {                                                       // Fehler abfangen
                                        zwischenspeicher = body.slice(start,ende);
                                        zwischenspeicher = zwischenspeicher.trim();
                                        if (logging) log(zwischenspeicher);
                                        return(zwischenspeicher);
                                    } else {
                                        zwischenspeicher = 'Fehler beim Ausschneiden';
                                        log(zwischenspeicher, 'error');
                                        return(0);
                                    }
                                  }
                                  
                                  function findPrice (body) {   
                                    var text1 = '<li class="total_price_brutto">',                                                               
                                        text2 = '&thinsp;&euro;</li>';                                                                          
                                    price = extractText(body,text1,text2); 
                                    var price_array = price.split('.');
                                    price = price_array[0] + price_array[1];     
                                    price_array = price.split(',');
                                    price = price_array[0] + '.' + price_array[1];   
                                    price = parseFloat(price);
                                    priceLB = price / Liefermenge * 100;
                                    priceLB = priceLB.toFixed(2);   
                                    priceLB = parseFloat(priceLB);      
                                    MwStG = price / 119 * 19;
                                    MwStG = MwStG.toFixed(2);
                                    MwStG = parseFloat(MwStG);
                                    MwStL = priceLB / 119 * 19;
                                    MwStL = MwStL.toFixed(2);
                                    MwStL = parseFloat(MwStL);
                                    if (logging) log('Heizöl Preis: ' + price + ' EUR');
                                  
                                    setState(idPriceLB, parseFloat(priceLB,10));
                                    setState(idPriceGB, parseFloat(price,10));
                                    setState(idMwStG, parseFloat(MwStG,10));                                                                                    
                                    setState(idMwStL, parseFloat(MwStL,10));                                                                                   
                                  }
                                  
                                  function findLieferant (body) {
                                    var text1 = '<div data-polyfill-hidden style="width:330px;word-wrap:break-word;">',		                    
                                        text2 = '<br data-polyfill-hidden>';                                                                     
                                    var lieferant = extractText(body,text1,text2); 
                                    lieferant = lieferant.replace(" ","");
                                    lieferant = lieferant.replace(/&nbsp;/g," ");
                                    
                                    setState(idLieferant, lieferant);                                                                            
                                  }
                                  
                                  function findWebseite (body) {
                                    var text1 = '<a class="img provider-logo-container" tabindex="-1" href="',		                            
                                        text2 = 'class="lazy provider-logo';                                                                     
                                    var web = extractText(body,text1,text2);
                                    web = web.replace(/" "/g,"");
                                    web = web.replace(/">/g,"");
                                    web = web.replace(/<img/g,"");   
                                    web = web.replace('"><imgclass="lazyprovider-logo"',"");
                                    web = 'https://www.esyoil.com/heizoel-haendler/' + web;  
                                  
                                    setState(idWebseite, web);                                                                                   // Wert in Objekt schreiben
                                  }  
                                  
                                  function findDate (body) {   
                                    var text1 = '<strong>Aktuelle Heizölpreise</strong>:<span id="h4-until-base-3">',                            
                                        text2 = ' Uhr</span>    </h1>';                                                                          
                                    var time = extractText(body,text1,text2);
                                    var time_array = time.split('von');
                                    time = time_array[1]; 
                                    var datum = new Date();
                                    var heute = datum.getDate() + "." + (datum.getMonth()+1) + "." + datum.getFullYear() + ", " + time ;
                                    if (logging) log('Heizöl Datum: ' + heute);   
                                    setState(idDate, heute);                                                                                     // Wert in Objekt schreiben
                                  }
                                  
                                  function findZuschlagLN (body) {   
                                    var text1 = '<li class="pricelist-entry" data-order="1"><!-- Dealer 2 BEGIN -->',                            
                                        text2 = '<dd data-polyfill-hidden class="delivery-charge">+&nbsp;';          
                                    var start = body.indexOf(text1);
                                    var ende = body.indexOf(text2);   
                                    if (ende < start) {                                                                                          // Fehler abfangen, falls Zuschlag nicht vorhanden
                                         text1 = '<dd data-polyfill-hidden class="delivery-charge">+&nbsp;',                                      
                                         text2 = '<dt data-polyfill-hidden class="vat">';                                                         
                                         zuschlag = extractText(body,text1,text2);
                                         zuschlagLN = zuschlag.replace("&nbsp;€</dd>","");
                                    } else {
                                         zuschlagLN = "0,00";
                                    }   
                                    var zuschlag_array = zuschlagLN.split(',');
                                    zuschlagLN = zuschlag_array[0] + '.' + zuschlag_array[1];   
                                    zuschlagLN = parseFloat(zuschlagLN);   
                                    setState(idZuschlagN, parseFloat(zuschlagLN,10.00));
                                    var priceLN = priceLB - MwStL - zuschlagLN;
                                    priceLN = priceLN.toFixed(2);
                                    priceLN = parseFloat(priceLN);
                                    setState(idPriceLN, parseFloat(priceLN,10));   
                                  }      
                                  
                                  function findZuschlagG (body) {
                                    var text1 = '<li class="pricelist-entry" data-order="1"><!-- Dealer 2 BEGIN -->',                            
                                        text2 = '<dd data-polyfill-hidden class="delivery-charge">+&nbsp;';          
                                    var start = body.indexOf(text1);
                                    var ende = body.indexOf(text2);   
                                    if (ende < start) {                                                      
                                        text1 = '<dt data-polyfill-hidden class="net">Gesamtbetrag <span data-polyfill-hidden class="description">(netto)</span></dt>',                                                   
                                        text2 = '<dt data-polyfill-hidden class="gross">Gesamtbetrag <span data-polyfill-hidden class="description">(brutto)</span></dt>';                                          
                                        var body = extractText(body,text1,text2);   
                                        text1 = '<dd data-polyfill-hidden class="delivery-charge">+&nbsp;',                                      
                                        text2 = '<dt data-polyfill-hidden class="vat">zzgl. 19 % gesetzl. MwSt.</dt>';                                                         
                                        var zuschlagG = extractText(body,text1,text2);        
                                        zuschlagG = zuschlagG.replace("&nbsp;€</dd>","");
                                    } else {
                                        var zuschlagG = "0,00";
                                    }  
                                    var zuschlag_array = zuschlagG.split(',');
                                    zuschlagG = zuschlag_array[0] + '.' + zuschlag_array[1];
                                    zuschlagG = parseFloat(zuschlagG);   
                                    var priceGN = price - MwStG - zuschlagG;
                                    priceGN = priceGN.toFixed(2);
                                    priceGN = parseFloat(priceGN);   
                                    if (logging) log('Zuschlag: ' + zuschlagG + ' EUR');   
                                    setState(idZuschlagGN, parseFloat(zuschlagG,10));                                                                                   
                                    setState(idPriceGN, parseFloat(priceGN,10));                                                                                   
                                  }
                                  
                                  function leseWebseite () {
                                    try {
                                        request(link, function (error, response, body) {
                                            if (!error && response.statusCode == 200) {                                                          // kein Fehler, Inhalt in body
                                                findPrice (body);               
                                                findLieferant (body);
                                                findWebseite (body);
                                                findDate (body);
                                                findZuschlagLN (body);               
                                                findZuschlagG (body);               
                                                log('Heizöl-Preis von esyoil.com eingelesen');
                                            } else log(error,'error');                                                                           // Error beim Einlesen
                                        });
                                    } catch (e) {
                                        log('Fehler (try) leseWebseite: ' + e, 'error');
                                    }   
                                  }
                                  
                                  // bei Skriptstart
                                  leseWebseite();
                                  
                                  // Schedule
                                  schedule("59 * * * *", leseWebseite);
                                  });
                                  
                                  

                                  Script 4: Wird ausgeführt, sobald sich nach einer Preisabfrage der günstigste Anbieter ändert. Hier werden die Daten des Anbieters abgefragt.

                                  /* Ölpreis abfragen
                                  Auf diese Anfrage hin: http://forum.iobroker.net/viewtopic.php?f=8&t=3455
                                  am 4.11.2016 getestet, nach Änderung der Webseite nun Fehler
                                  Quelle: heizoel24.de
                                  Basis: solar-wetter Skript
                                  {1}
                                  erstellt: 03.08.2016 von pix
                                  12.11.2016 Webseite liefert nicht mehr Prognose, sondern Ist-Preis. Skript angepasst
                                  29.08.2017 SKRIPT AUSGESCHALTET, DA NICHT IN GEBRAUCH
                                  {2}
                                  Angepasst am 14.07.2019 von Oliver Böhm, verwendet für "Günstigsten Heizöl-Lieferanten abfragen".
                                  Dieses Script wird automatisch ausgeführt, sobald sich nach einer Preisabfrage der günstigste Anbieter ändert.
                                  Quelle:  www.esyoil.com
                                  */
                                  
                                  on({id:"javascript.0.Heizoel.Lieferant.Webseite", change: 'ne'}, function (obj) {
                                  var logging = false;
                                  var link = getState('javascript.0.Heizoel.Lieferant.Webseite').val; 
                                  
                                  // ab hier nix mehr ändern, solange die Webseite die Daten nicht ändert
                                  var request = require('request');
                                  var strasse;
                                  var plz;
                                  var ort;
                                  var fax;
                                  var idAdresse = 'Heizoel.Lieferant.Adresse';
                                  var idTelefon = 'Heizoel.Lieferant.Telefon';
                                  var idFax     = 'Heizoel.Lieferant.Fax';
                                  var idMail    = 'Heizoel.Lieferant.Mail';
                                  
                                  createState(idAdresse, {
                                    name: 'Lieferantenadresse',
                                    desc: 'Lieferantenadresse',
                                    type: 'string',
                                    unit: ' '
                                  });
                                  
                                  createState(idTelefon, {
                                    name: 'Lieferanten Telefonnummer',
                                    desc: 'Lieferanten Telefonnummer',
                                    type: 'string',
                                    unit: ' '
                                  });
                                  
                                  createState(idFax, {
                                    name: 'Lieferanten Faxnummer',
                                    desc: 'Lieferanten Faxnummer',
                                    type: 'string',
                                    unit: ' '
                                  });
                                  
                                  createState(idMail, {
                                    name: 'Lieferanten Mailadresse',
                                    desc: 'Lieferanten Mailadresse',
                                    type: 'string',
                                    unit: ' '
                                  });
                                  
                                  
                                  function extractText(body,text1,text2) {
                                    var start = body.indexOf(text1) + text1.length;
                                    var ende = body.indexOf(text2,start);
                                    if (logging) log('Startposition: ' + start);
                                    if (logging) log('Endposition: ' + ende);
                                    var zwischenspeicher;
                                    if (((start != -1) && (ende != -1)) && (start<ende)) {                      // Fehler abfangen
                                        zwischenspeicher = body.slice(start,ende);
                                        zwischenspeicher = zwischenspeicher.trim();
                                        if (logging) log(zwischenspeicher);
                                        return(zwischenspeicher);
                                    } else {
                                        zwischenspeicher = 'Fehler beim Ausschneiden';
                                        log(zwischenspeicher, 'error');
                                        return(0);
                                    }
                                  }
                                  
                                  function findStraße (body) {
                                    var text1 = '"streetAddress": "',                                            // erstes Auftauchen
                                        text2 = '"email": [';                                                    // erstes Auftauchen
                                    straße = extractText(body,text1,text2);
                                    straße = straße.replace(/"/g,"");
                                    straße = straße.replace(/,/g,"");   
                                  }
                                  
                                  function findPLZ (body) {
                                    var text1 = '"postalCode": "',                                               // erstes Auftauchen
                                        text2 = '"streetAddress": ';                                             // erstes Auftauchen
                                    plz = extractText(body,text1,text2);
                                    plz = plz.replace(/"/g,"");
                                    plz = plz.replace(/,/g,"");   
                                  }
                                  
                                  function findOrt (body) {
                                    var text1 = '"addressLocality": "',                                          // erstes Auftauchen
                                        text2 = '"postalCode": "';                                               // erstes Auftauchen
                                    ort = extractText(body,text1,text2);
                                    ort = ort.replace(/"/g,"");
                                    ort = ort.replace(/,/g,"");
                                    setState(idAdresse, straße + ", " + plz + " " + ort);   
                                  }
                                  
                                  function findTelefon (body) {
                                    var text1 = '"telephone": "',                                                // erstes Auftauchen
                                        text2 = '"aggregateRating": ';                                           // erstes Auftauchen
                                    var telefon = extractText(body,text1,text2);
                                    telefon = telefon.replace(/"/g,"");
                                    telefon = telefon.replace(/}/g,"");
                                    telefon = telefon.replace(/,/g,"");
                                    setState(idTelefon, telefon);   
                                  }
                                  
                                  function findFax (body) {
                                    var text1 = '"faxNumber": "',                                                // erstes Auftauchen
                                        text2 = '"telephone": "';                                                // erstes Auftauchen
                                    fax = extractText(body,text1,text2);
                                    if (fax.length > 15) {
                                        fax = "unbekannt";
                                    } else {
                                         fax = fax.replace(/"/g,"");   
                                         fax = fax.replace(/,/g,"");
                                    }    
                                    setState(idFax, fax);   
                                  }
                                  
                                  function findMail (body) {
                                    if (fax == "unbekannt") {
                                         var text1 = '"email": [',                                                 // erstes Auftauchen
                                             text2 = '"telephone": "';                                             // erstes Auftauchen  
                                     } else {
                                         var text1 = '"email": [',                                                 // erstes Auftauchen
                                             text2 = '"faxNumber": "';                                             // erstes Auftauchen
                                     }                                                                 
                                    var mail = extractText(body,text1,text2);      
                                    mail = mail.replace(/"/g,"");
                                    mail = mail.replace(/,/g,"");
                                    mail = mail.replace(/]/g,"");
                                    var mail_array = mail.split(' ');
                                    mail = mail_array[0];
                                         
                                    setState(idMail, mail);   
                                  }                             
                                  
                                  function leseWebseite () {
                                    try {
                                        request(link, function (error, response, body) {
                                            if (!error && response.statusCode == 200) {                          // kein Fehler, Inhalt in body
                                                findStraße (body);
                                                findPLZ (body);
                                                findOrt (body);
                                                findTelefon (body);
                                                findFax (body);
                                                findMail (body);
                                                log('Heizöl-Preis von esyoil.com eingelesen');
                                            } else log(error,'error');                                           // Error beim Einlesen
                                        });
                                    } catch (e) {
                                        log('Fehler (try) leseWebseite: ' + e, 'error');
                                    }
                                  } 
                                  
                                  // bei Skriptstart
                                  leseWebseite();
                                  });
                                  
                                  

                                  Script 5: Wird alle 59 Minuten ausgeführt. Hier wird die Differenz zum Vortag abgefragt.

                                  /* Ölpreis abfragen
                                  Auf diese Anfrage hin: http://forum.iobroker.net/viewtopic.php?f=8&t=3455
                                  am 4.11.2016 getestet, nach Änderung der Webseite nun Fehler
                                  Quelle: heizoel24.de
                                  Basis: solar-wetter Skript
                                  {1}
                                  erstellt: 03.08.2016 von pix
                                  12.11.2016 Webseite liefert nicht mehr Prognose, sondern Ist-Preis. Skript angepasst
                                  29.08.2017 SKRIPT AUSGESCHALTET, DA NICHT IN GEBRAUCH
                                  {2}
                                  Angepasst am 14.07.2019 von Oliver Böhm, verwendet für "Heizölpreis Allgemein und Differenz zum Vortag abfragen".
                                  Dieses Script wird automatisch alle 59 Minuten ausgeführt.
                                  Quelle:  www.esyoil.com
                                  */
                                  
                                  var logging = false;
                                  var link = 'https://www.esyoil.com/%c3%b6lpreis';
                                  
                                  // ab hier nix mehr ändern, solange die Webseite die Daten nicht ändert
                                  var request = require('request');
                                  var idPriceA =   'Heizoel.Heizölpreis.Allgemein.Preis',
                                     idTrend =   'Heizoel.Heizölpreis.Allgemein.Trend zum Vortag',
                                     idPercent = 'Heizoel.Heizölpreis.Allgemein.Änderung zum Vortag';
                                     
                                  function extractText(body,text1,text2) {   
                                    var start = body.indexOf(text1) + text1.length;
                                    var ende = body.indexOf(text2,start);
                                    if (logging) log('Startposition: ' + start);
                                    if (logging) log('Endposition: ' + ende);
                                    var zwischenspeicher;
                                    if (((start != -1) && (ende != -1)) && (start<ende)) {                      // Fehler abfangen
                                        zwischenspeicher = body.slice(start,ende);
                                        zwischenspeicher = zwischenspeicher.trim();
                                        if (logging) log(zwischenspeicher);
                                        return(zwischenspeicher);
                                    } else {
                                        zwischenspeicher = 'Fehler beim Ausschneiden';
                                        log(zwischenspeicher, 'error');
                                        return(0);
                                    }
                                  }
                                  
                                  function findNewBody (body) {   
                                    var text1 = '>Heizöl</a>',                                                   // erstes Auftauchen
                                        text2 = 'id="1-oelpreis-news"';                                          // erstes Auftauchen
                                    var body = extractText(body,text1,text2);   
                                  }
                                  
                                  function findPrice (body) {   
                                    var text1 = '<td class="">',                                                 // erstes Auftauchen
                                        text2 = '€';                                                             // erstes Auftauchen
                                    var price = extractText(body,text1,text2); 
                                    var price_array = price.split(',');
                                    price = price_array[0] + '.' + price_array[1];
                                    price = parseFloat(price);
                                    if (logging) log('Heizöl Preis: ' + price + ' EUR');
                                    setState(idPriceA, parseFloat(price,10));                                     // Wert in Objekt schreiben
                                  }
                                  
                                  function findPercent (body) {   
                                    var text1 = '<span class=" text-success">',                                  // erstes Auftauchen
                                        text2 = '%</span>';                                                      // erstes Auftauchen    
                                    var percent = extractText(body,text1,text2);   
                                    var ausschnitt = percent.slice(0, 1);
                                    percent = percent.replace(ausschnitt,"");   
                                    var percent_array = percent.split(',');
                                    percent = percent_array[0] + '.' + percent_array[1];
                                    percent = parseFloat(percent);
                                    if (logging) log('Heizöl Prozent: ' + percent.toFixed(2) + '%');
                                    setState(idPercent, percent);                                                // Wert in Objekt schreiben
                                    setState(idTrend, ausschnitt);                                               // Wert in Objekt schreiben
                                  }
                                  
                                  function leseWebseite () {
                                    try {
                                        request(link, function (error, response, body) {
                                            if (!error && response.statusCode == 200) {                          // kein Fehler, Inhalt in body
                                                findNewBody (body);
                                                findPrice(body);
                                                findPercent(body);               
                                                log('Heizöl-Preis von esyoil.com eingelesen');
                                            } else log(error,'error');                                           // Error beim Einlesen
                                        });
                                    } catch (e) {
                                        log('Fehler (try) leseWebseite: ' + e, 'error');
                                    }   
                                  }
                                  
                                  // bei Skriptstart
                                  leseWebseite();
                                  
                                  // Schedule
                                  schedule("59 * * * *", leseWebseite);
                                  

                                  Verbesserungen der Scripte, Fehlermeldungen und Anregungen nehme ich gerne entgegen.

                                  Gruß
                                  Oliver

                                  R liv-in-sky 3 Replies Last reply Reply Quote 0
                                  • R
                                    ReverZ @Oli last edited by ReverZ

                                    @Oliver-Böhm

                                    Danke für das Update!
                                    Ich denke da sind noch etwas Optimierungspotential drin.
                                    Was mir bis jetzt aufgefallen ist:
                                    Im Script 2 werden variablen wie "heizölsorte" und "zahlart" verwenden ohne diese zuvor zu deklarieren. Der JS-Editor meckert das sofort an.

                                    O 1 Reply Last reply Reply Quote 0
                                    • O
                                      Oli @ReverZ last edited by

                                      @ReverZ

                                      wie gesagt, bin blutiger Anfänger in Sachen Javascript.

                                      Danke für den Hinweis, ich wusste nicht mal, dass es einen Js-Editor gibt.🙄

                                      R 1 Reply Last reply Reply Quote 0
                                      • R
                                        ReverZ @Oli last edited by ReverZ

                                        @Oliver-Böhm

                                        In Script 3 setzt du die parseFloat-Funktion ein, übergibst aber statt zwei statt einem Argument:

                                           setState(idPriceLB, parseFloat(priceLB,10));
                                           setState(idPriceGB, parseFloat(price,10));
                                           setState(idMwStG, parseFloat(MwStG,10));                                                                                    
                                           setState(idMwStL, parseFloat(MwStL,10)); 
                                        

                                        Was willst du mit der "10" jeweils erreichen?

                                        O 1 Reply Last reply Reply Quote 0
                                        • O
                                          Oli @ReverZ last edited by

                                          @ReverZ

                                          eigentlich wollte ich damit erreichen, dass er mir 2 Nachkommastellen übergibt.

                                          R 1 Reply Last reply Reply Quote 0
                                          • R
                                            ReverZ @Oli last edited by

                                            @Oliver-Böhm

                                            OK. Wie verifizierst du denn die Syntax von deinem JS-Code wenn nicht im JS-Editor?
                                            Schreibst du den Code in Notepad und lädst die fertige JS-Datei dann irgendwo hoch?

                                            O 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            792
                                            Online

                                            32.1k
                                            Users

                                            80.7k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            15
                                            65
                                            14233
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo