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
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
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.
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.
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:
Ich muss doch gestehen, hier zu passen. Mit Hans' Aufruf und der korrekten SessionID erhalte ich als Antwort
"Error: Wrong ProcessID![1]+ Fertig"
Probiere ich es dann mit den "Post"-Befehlen, erhalte ich als Antwort ...
Please enter content (application/x-www-form-urlencoded) to be POSTed:
... also eine Eingabeaufforderung, was bei "POST" ja auch nicht verwundert. Ich verstehe dann aber nicht, wie es heißen kann "Die zweite und dritte Anfrage eine Zeitreihe mit Preisen als JSON.". Hans, Du sprichst von Abfragen, aber liefert "POST"-Anweisungen? Ich komme leider nicht weiter.
htrecksler Ich hätte jetzt an den "schedule" Befehl gedacht und nicht so. Ich muss ehrlich gestehen, dass mir dieses Javascript nicht sehr zugänglich ist.