Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Split is not a Function;Ölpreisskript

    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

    Split is not a Function;Ölpreisskript

    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      Adnim last edited by

      Hi!
      bekomme leider den Fehler,beim Ölpreisskript. Weiß jemand rat?

      javascript.0	2020-08-25 06:59:03.898	error	(15747) Error in request callback: TypeError: body.split is not a function
      javascript.0	2020-08-25 06:59:03.898	error	(15747) script.js.common.oelpreis: Fehler beim Ausschneiden
      
      /* Ö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
      
      erstellt: 03.08.2016 von pix
      12.11.2016 Webseite liefert nicht mehr Prognose, sondern Ist-Preis. Skript angepasst
      
      */
      
      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 idPrice =   'Heizoel.Ist.Price',
          idPercent = 'Heizoel.Ist.Percent',
          idDate =    'Heizoel.Ist.Date';
          
      createState(idPrice, {
          name: 'HeizOel24.de Preis',
          desc: 'Heizölpreis für heute',
          type: 'number',
          def: 0,
          min: 0,
          unit: '€/100l'
      });
      createState(idPercent, {
          name: 'HeizOel24.de Änderung in Prozent zum Vortag',
          desc: 'Heizölpreisänderung zum Vortag',
          type: 'number',
          def: 0,
          min: 0,
          max: 100,
          unit: '%'
      });
      createState(idDate, {
          name: 'HeizOel24.de 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);
          }
      }
      
      //ok
      function findPrice (body) {   
          var text1 = 'class="middle">', // erstes Auftauchen
              text2 = '<span class="currency">€</span>';  // erstes Auftauchen
          var price = extractText(body,text1,text2); // 50,54 
          var price_array = price.split(',');
          price = price_array[0] + '.' + price_array[1];
          price = parseFloat(price);
          if (logging) log('Heizöl Preis: ' + price + ' EUR');
          setState(idPrice, parseFloat(price,)); // Wert in Objekt schreiben
      }
      
      function findPercent (body) {   
          var text1 = '<span class="lower"><span class=" red">', // erstes Auftauchen
              text2 = '%</span> zum Vortag</span>';  // erstes Auftauchen
          var percent = extractText(body,text1,text2); // 50,54 
          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
      }
      
      function findDate (body) {   
          var text1 = 'class="upper">', // erstes Auftauchen
              text2 = 'class="middle">'; // erstes Auftauchen
          var day = extractText(body,text1,text2); // &empty; 100l, 12.11.2016</span>
          if (logging) log('Heizöl Datum: ' + day);
          var pdatum = findeDatum(day);
          setState(idDate, pdatum); // Wert in Objekt schreiben
      }
      
      function findeDatum (body) {   
          if (logging) log(body);
          var stringdatum_array = body.split('.'); // &empty; 100l, 12.11.2016
          var stringjahr = stringdatum_array[2].trim(); // 2016
          var stringmonat = stringdatum_array[1].trim(); // 11
          var stringtag_string = stringdatum_array[0].trim(); // &empty; 100l, 12
          var stringtag_array = stringtag_string.split(','); // bei Komma trennen
          var stringtag = stringtag_array[1].trim(); // 12
          var stringdatum = stringtag + '.' + stringmonat + '.' + parseInt(stringjahr,10);
          if (logging) log('Datum: ' + stringdatum);
          return(stringdatum);
      }
      
      function leseWebseite () {
          try {
              request(link, function (error, response, body) {
                  if (!error && response.statusCode == 200) {              // kein Fehler, Inhalt in body
                      findPrice(body);
                      findPercent(body);
                      findDate(body);
                      log('Heizöl-Preis von heizoel24.de eingelesen');
                  } else log(error,'error');                               // Error beim Einlesen
              });
          } catch (e) {
              log('Fehler (try) leseWebseite: ' + e, 'error');
          }   
      }
      
      // bei Skriptstart
      leseWebseite();
      
      // Schedule
      schedule("59 * * * *", leseWebseite);
      

      Danke!

      M 1 Reply Last reply Reply Quote 0
      • M
        mbw @Adnim last edited by

        @Adnim wenn du das Logging aktivierst siehst du das es daran liegt, dass das Datum nicht korrekt ermittelt werden kann (Zeile 89).

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

        Support us

        ioBroker
        Community Adapters
        Donate

        409
        Online

        31.8k
        Users

        80.0k
        Topics

        1.3m
        Posts

        javascript
        2
        2
        267
        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