NEWS


  • Hallo zusammen,

    hat vieleicht schon jemand den aktuellen Heizölpreis bei eine bestimmten Abnahme in seinem VIS dargestellt?

    z.B. wie beim Tankerkönig?

    Und wenn ja wie muss ich vorgehen?


  • Hallo Thisoft,

    habe deinen letzten Post leider nicht mehr gesehen und jetzt mal http://www.heizoel24.de/heizoelpreise verwendet. Und dort nur die Prognose für den nächsten Tag und nicht den aktuellen Preis. Denke, bei der großen Summe Geld, die man ausgibt, muss man eh noch mal den Preis vergleichen. Aber der Trend ist sicher mal aufschlussreich:

    Das Skript basiert auf meinem alten solar-wetter Skript. Ist eigentlich nicht groß was anderes.

    Es werden diese Prognosen für den nächsten Werktag gespeichert:

    __Preis,

    Trend in Prozent,

    Trend in Text__

    Datum der Vorhersage als Text aus der Webseite (nicht als Date-Objekt)

    Einen negativen Trend habe ich noch nicht testen können (gab heute keinen). Da muss ich vielleicht noch nachbessern.

    Skript startet jede Stunde zur Minute 59 und bei Skriptstart.

    /* Ölpreis abfragen
    Auf diese Anfrage hin: http://forum.iobroker.net/viewtopic.php?f=8&t=3455
    Quelle: heizoel24.de
    Basis: solar-wetter Skript
    erstellt: 03.08.2016 von pix
    */
    var logging = false;
    var link = 'http://www.heizoel24.de/heizoelpreise';
    // ab hier nix mehr ändern, solange die Webseite die Daten nicht ändert
    var idProgPrice =   'Heizoel.Forecast.Price',
       idProgText =    'Heizoel.Forecast.Text',
       idProgPercent = 'Heizoel.Forecast.Percent',
       idProgDate =    'Heizoel.Forecast.Date';
    
    createState(idProgPrice, {
       name: 'HeizOel24.de Vorhersage Preis',
       desc: 'Heizölpreis Prognose für den nächsten Werktag',
       type: 'number',
       def: 0,
       min: 0,
       unit: '€/100l'
    });
    createState(idProgText, {
       name: 'HeizOel24.de Vorhersage Text',
       desc: 'Heizölpreis Prognose für den nächsten Werktag',
       type: 'string',
       def: ''
    });
    createState(idProgPercent, {
       name: 'HeizOel24.de Vorhersage Änderung in Prozent',
       desc: 'Heizölpreis Prognose für den nächsten Werktag',
       type: 'number',
       def: 0,
       min: 0,
       max: 100,
       unit: '%'
    });
    createState(idProgDate, {
       name: 'HeizOel24.de Vorhersage Datum',
       desc: 'Heizölpreis Prognose für den nächsten Werktag, dieses Datum',
       type: 'string',
       def: ''
    });
    var request = require('request');
    function extractPrice(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
    

    Bitte um Feedback 🙂

    Gruß

    Pix

    EDIT 12.11.2016:

    Nach Umstellung der Quellwebseite wurde das Skript geändert http://forum.iobroker.net/viewtopic.php … 949#p39949

    Neue Version (Achtung defekt, wegen Forumumstellung):

    EDIT 08.07.2019 Skript repariert (aus Archiv hergestellt):

    Gruß
    Pix


  • Hallo Dirk,

    erstmal eine Quelle finden, wär gut. Dann kann man sehen, ob sie sich parsen lässt.

    Gruß

    Pix


  • Hallo pix,

    sieh mal hier: http://www.tecson.de/pheizoel.html

    wird zwar vom regionalen Anbieter abweichen, aber man eine Tendenz und die differenzen sind ja eh nur virtel oder

    halb Cent.


  • Hallo Dirk,

    tut mir leid, diese Grafik kann ich nicht parsen. Die ist doch aber perfekt, um sie als iframe einzubinden. Ich brauche schon Daten in Textform.

    Gruß

    Pix


  • Wie wär's damit:

    http://www.heizoel24.de/heizoelpreise/a … holz/09456

    Bin mir zwar nicht sicher, ob die Tabelle zu parsen geht, bin kein HTML-Experte.

    Oder die hier (etwas nach unten scrollen…):

    https://www.esyoil.com/

    Die sollte IMO zu parsen gehen - ist allerdings nicht besonders regional aber die Unterschiede sind ja wie schon gesagt nicht so gravierend.

    Gruß Thilo


  • Hallo Thisoft,

    habe deinen letzten Post leider nicht mehr gesehen und jetzt mal http://www.heizoel24.de/heizoelpreise verwendet. Und dort nur die Prognose für den nächsten Tag und nicht den aktuellen Preis. Denke, bei der großen Summe Geld, die man ausgibt, muss man eh noch mal den Preis vergleichen. Aber der Trend ist sicher mal aufschlussreich:

    Das Skript basiert auf meinem alten solar-wetter Skript. Ist eigentlich nicht groß was anderes.

    Es werden diese Prognosen für den nächsten Werktag gespeichert:

    __Preis,

    Trend in Prozent,

    Trend in Text__

    Datum der Vorhersage als Text aus der Webseite (nicht als Date-Objekt)

    Einen negativen Trend habe ich noch nicht testen können (gab heute keinen). Da muss ich vielleicht noch nachbessern.

    Skript startet jede Stunde zur Minute 59 und bei Skriptstart.

    /* Ölpreis abfragen
    Auf diese Anfrage hin: http://forum.iobroker.net/viewtopic.php?f=8&t=3455
    Quelle: heizoel24.de
    Basis: solar-wetter Skript
    erstellt: 03.08.2016 von pix
    */
    var logging = false;
    var link = 'http://www.heizoel24.de/heizoelpreise';
    // ab hier nix mehr ändern, solange die Webseite die Daten nicht ändert
    var idProgPrice =   'Heizoel.Forecast.Price',
       idProgText =    'Heizoel.Forecast.Text',
       idProgPercent = 'Heizoel.Forecast.Percent',
       idProgDate =    'Heizoel.Forecast.Date';
    
    createState(idProgPrice, {
       name: 'HeizOel24.de Vorhersage Preis',
       desc: 'Heizölpreis Prognose für den nächsten Werktag',
       type: 'number',
       def: 0,
       min: 0,
       unit: '€/100l'
    });
    createState(idProgText, {
       name: 'HeizOel24.de Vorhersage Text',
       desc: 'Heizölpreis Prognose für den nächsten Werktag',
       type: 'string',
       def: ''
    });
    createState(idProgPercent, {
       name: 'HeizOel24.de Vorhersage Änderung in Prozent',
       desc: 'Heizölpreis Prognose für den nächsten Werktag',
       type: 'number',
       def: 0,
       min: 0,
       max: 100,
       unit: '%'
    });
    createState(idProgDate, {
       name: 'HeizOel24.de Vorhersage Datum',
       desc: 'Heizölpreis Prognose für den nächsten Werktag, dieses Datum',
       type: 'string',
       def: ''
    });
    var request = require('request');
    function extractPrice(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
    

    Bitte um Feedback 🙂

    Gruß

    Pix

    EDIT 12.11.2016:

    Nach Umstellung der Quellwebseite wurde das Skript geändert http://forum.iobroker.net/viewtopic.php … 949#p39949

    Neue Version (Achtung defekt, wegen Forumumstellung):

    EDIT 08.07.2019 Skript repariert (aus Archiv hergestellt):

    Gruß
    Pix


  • Hallo pix,

    danke erst mal für deine Mühe, jetzt müßte mir aber noch einer erklären wie ich das Skript in den iobroker

    bekomme und mit welchem Widgets ich das darstellen kann.


  • OK Beschreibung gefunden, ich versuch erst mal.


  • Hallo pix,

    prima läuft gut, kannst du mir aber noch einen Tipp geben welches Widget ich nutzen kann um alles mit einem Mal darzustellen,

    oder brauch ich für jeden Wert ein extra Widget.



  • Danke Pix


  • Hallo zusammen, hallo Pix,

    es scheint so, als ob das Script leider nicht mehr funktioniert. Wollte es einbinden und bekomme folgende Fehlermeldungen:

    19:50:11.746	[error]	javascript.0 script.js.common.Heizoel: Fehler beim Ausschneiden
    19:50:11.747	[error]	javascript.0 script.js.common.Heizoel: Fehler beim Ausschneiden
    19:50:11.747	[error]	javascript.0 TypeError: body.split is not a function at findeDatum (script.js.common.Heizoel:169:28) at findForecastDate (script.js.common.Heizoel:164:18) at Request._callback (script.js.common.Heizoel:183:17) at Request.self.callback (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:188:22) at emitTwo (events.js:87:13) at Request.emit (events.js:172:7) at Request. (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1171:10) at emitOne (events.js:77:13) at Request.emit (events.js:169:7) at IncomingMessage. (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1091:12)
    19:50:56.940	[info]	javascript.0 Start javascript script.js.common.Heizoel
    19:50:56.940	[info]	javascript.0 script.js.common.Heizoel: registered 0 subscriptions and 1 schedule
    19:50:58.683	[error]	javascript.0 script.js.common.Heizoel: Fehler beim Ausschneiden
    19:50:58.683	[error]	javascript.0 script.js.common.Heizoel: Fehler beim Ausschneiden
    19:50:58.683	[error]	javascript.0 TypeError: body.split is not a function at findeDatum (script.js.common.Heizoel:169:28) at findForecastDate (script.js.common.Heizoel:164:18) at Request._callback (script.js.common.Heizoel:183:17) at Request.self.callback (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:188:22) at emitTwo (events.js:87:13) at Request.emit (events.js:172:7) at Request. (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1171:10) at emitOne (events.js:77:13) at Request.emit (events.js:169:7) at IncomingMessage. (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1091:12)
    19:51:42.016	[info]	javascript.0 Start javascript script.js.common.Heizoel
    19:51:42.016	[info]	javascript.0 script.js.common.Heizoel: registered 0 subscriptions and 1 schedule
    19:51:43.432	[error]	javascript.0 script.js.common.Heizoel: Fehler beim Ausschneiden
    19:51:43.433	[error]	javascript.0 script.js.common.Heizoel: Fehler beim Ausschneiden
    19:51:43.433	[error]	javascript.0 TypeError: body.split is not a function at findeDatum (script.js.common.Heizoel:169:28) at findForecastDate (script.js.common.Heizoel:164:18) at Request._callback (script.js.common.Heizoel:183:17) at Request.self.callback (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:188:22) at emitTwo (events.js:87:13) at Request.emit (events.js:172:7) at Request. (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1171:10) at emitOne (events.js:77:13) at Request.emit (events.js:169:7) at IncomingMessage. (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1091:12)
    19:52:27.617	[info]	javascript.0 Start javascript script.js.common.Heizoel
    19:52:27.617	[info]	javascript.0 script.js.common.Heizoel: registered 0 subscriptions and 1 schedule
    19:52:28.911	[error]	javascript.0 script.js.common.Heizoel: Fehler beim Ausschneiden
    19:52:28.911	[error]	javascript.0 script.js.common.Heizoel: Fehler beim Ausschneiden
    19:52:28.912	[error]	javascript.0 TypeError: body.split is not a function at findeDatum (script.js.common.Heizoel:169:28) at findForecastDate (script.js.common.Heizoel:164:18) at Request._callback (script.js.common.Heizoel:183:17) at Request.self.callback (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:188:22) at emitTwo (events.js:87:13) at Request.emit (events.js:172:7) at Request. (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1171:10) at emitOne (events.js:77:13) at Request.emit (events.js:169:7) at IncomingMessage. (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1091:12)
    

    Würde mich sehr freuen, wenn mir jemand hilft, das Script so anzupassen, dass es wieder klappt.

    Vielen Dank und Grüße

    Frank

  • Starter

    Hallo DirkK

    hast du dieses Script noch am laufen?

    würde mich sehr interessieren, nur bekomme ich das oben eingefügte Script nicht angepasst, wäre schön, wenn du mir deines zur Verfügung stellen könntest.

    Gruß Oliver

  • Developer

    @Oliver-Böhm ich habe das Skript oben gefixt, schau mal ob es jetzt geht.


  • Jey Cee hi ,

    wollte das auch ausprobieren - was meinst du mit oben - das zweite script unter neue version ?

    dieses script bringt einen compile fehler

  • Developer

    liv-in-sky beide, da waren noch Fehler von der Umstellung des Forums drin. Zum eigentlichen Skript kann ich nichts sagen.

    pix kannst du das Korrigieren? Ich weis nicht wie das Original Skript ausgesehen hat, scheint irgendwie HTML drin zu sein.


  • Jey Cee
    danke dir


  • weiß nicht, ob es euch hilft, aber ich gehe diesen Weg um mir den aktuellen Preis zu holen.

    Ich nutze dazu den Parser Adapter und hole die Daten von Esyoil.com.
    Unter Instanzen Parser.0 ein neues Objekt Heizoel-esyoil anlegen.
    Folgende RAW Daten in diesem Objekt einfügen:

    {
      "_id": "parser.0.Heizoel-esyoil",
      "common": {
        "name": "Heizoel-esyoil",
        "unit": "",
        "type": "string",
        "role": "value",
        "write": false,
        "read": true
      },
      "native": {
        "link": "https://www.esyoil.com/?calc%5Bunloading_points%5D=1&calc%5Bprod%5D=8&calc%5Bpayment_type%5D=1&calc%5Bshort_vehicle%5D=&calc%5Bhose%5D=&calc%5Bapp%5D=1&calc%5Bzipcode%5D=57635&calc%5Bamount%5D=3000&calc%5Bsubmit%5D=",
        "regex": "<data class=\"price\" value=\".....\">.....<\\/data>",
        "interval": "1800000",
        "substitute": "",
        "factor": 1,
        "item": 0,
        "offset": 0,
        "substituteOld": true,
        "comma": false
      },
      "type": "state",
      "from": "system.adapter.admin.0",
      "ts": 1536040105496,
      "acl": {
        "object": 1636,
        "owner": "system.user.admin",
        "ownerGroup": "system.group.administrator",
        "state": 1636
      }
    }
    

    Dann noch bei

    zipcode%5D=57635&calc%5Bamount%5D=3000
    

    eure Postleitzahl und die gewünschten Liter anpassen.

    Anschließend noch ein kleines Blockly Script

    <block xmlns="http://www.w3.org/1999/xhtml" type="on_ext" id="}Z(QWs,_Dq1yxoRm4{yC" x="-37" y="-12">
      <mutation items="1"></mutation>
      <field name="CONDITION">any</field>
      <field name="ACK_CONDITION"></field>
      <value name="OID0">
        <shadow type="field_oid" id="3I{9%R1TAuzhSZ!}RWUo">
          <field name="oid">parser.0.Heizoel-esyoil</field>
        </shadow>
      </value>
      <statement name="STATEMENT">
        <block type="control" id="dSKYZ[2LLnRDgSibSu[U">
          <mutation delay_input="false"></mutation>
          <field name="OID">javascript.0.HeizoelPreis</field>
          <field name="WITH_DELAY">FALSE</field>
          <value name="VALUE">
            <block type="convert_tonumber" id="#BPVviL}t--)~M^n%1zQ">
              <value name="VALUE">
                <block type="text_getSubstring" id="Y,ibD3hrm!c5BEb!uzH[" inline="false">
                  <mutation at1="true" at2="true"></mutation>
                  <field name="WHERE1">FROM_START</field>
                  <field name="WHERE2">FROM_START</field>
                  <value name="STRING">
                    <block type="get_value" id="+d|KY4mC(Sl2BK7^Gcfo">
                      <field name="ATTR">val</field>
                      <field name="OID">parser.0.Heizoel-esyoil</field>
                    </block>
                  </value>
                  <value name="AT1">
                    <block type="math_number" id="*3p]cE^gc]gVwKQCGga-">
                      <field name="NUM">28</field>
                    </block>
                  </value>
                  <value name="AT2">
                    <block type="math_number" id="m`4D^S7Cb=E.):`1AXYO">
                      <field name="NUM">32</field>
                    </block>
                  </value>
                </block>
              </value>
            </block>
          </value>
          <next>
            <block type="debug" id="@EOi`z^E.ZK2`?xw,+Uw">
              <field name="Severity">log</field>
              <value name="TEXT">
                <shadow type="text" id="bZKt@~*P))_/ctD`arom">
                  <field name="TEXT">Heizölpreis geparst</field>
                </shadow>
              </value>
            </block>
          </next>
        </block>
      </statement>
    </block>
    

    Hier muss in Javascipt.0 Objekte noch ein Datenpunkt "HeizoelPreis" angelegt sein.

    Grüße
    Tom

  • Starter

    Hallo TomT

    das hört sich gut an, habe noch nie mit dem Parser Adapter gearbeitet .

    wo und wie füge ich denn diese RAW Datei ein?

    Gruß Oliver


  • Im angelegten Objekt im Parser.0 Ordner der letzte Reiter RAW (nur Experten)
    Das Objekt sollte parser.0.Heizoel-esyoil heißen.

Suggested Topics

1.4k
Online

34.6k
Users

40.7k
Topics

557.3k
Posts