So ich habe es doch noch herausgefunden.
Es gibt jetzt noch eine weitere Funktion:
@paul53: danke für deine Hilfe
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); // ∅ 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('.'); // ∅ 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(); // ∅ 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!
@Adnim wenn du das Logging aktivierst siehst du das es daran liegt, dass das Datum nicht korrekt ermittelt werden kann (Zeile 89).