NEWS
SOLVED Ölpreis
-
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 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…):
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
-
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
-
@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
-
@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 -
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.