Navigation

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

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    SOLVED Ölpreis

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

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

      Wenn ich es in den Beitrag einfügen möchte, heißt es immer, der Beitrag ist zu lang.

      Als Datei hochladen.........Rechst neben dem Wolke Icon.

      O 1 Reply Last reply Reply Quote 0
      • 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
                                            • First post
                                              Last post

                                            Support us

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

                                            865
                                            Online

                                            31.9k
                                            Users

                                            80.3k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            15
                                            65
                                            13366
                                            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