NEWS
Hilfe bei Skripte von request auf httpGet umbauen
-
Hallo
Ich habe 8 Scripte, wo noch
request
läuft.
Reicht mWn nicht, einfachrequest
durchhttpGet
zu ersetzen.Könnte da wer über meine Scripte drüberschaun und mir dabei behilflich sein?
Das ist zB eins von den 8.
var url = "http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365"; var pfad = "Volkszaehler."; var idAKTUELLER_VERBRAUCH = pfad + "AKTUELLER_VERBRAUCH"; var idAKTUELLE_ERZEUGUNG = pfad + "AKTUELLE_LIEFERUNG"; // var idAKTUELLE_HEIZUNG = pfad + "AKTUELLE_HEIZUNG"; // Vorgegebene Funktion, die nur dazu dient, das JSON einzulesen // Angelehnt an: http://www.iobroker.net/docu/?page_id=3691 var request = require("request"); function readJson(url, callback) { request(url, function(err, state, body) { if (body) { var json = {}; if (body !== "") { try { json = JSON.parse(body); } catch (ex) { json = {}; } if (!json) { json = {}; } } callback(null, json); } else { var error = "(" + err + ") ERROR bei Abfrage von: " + url; log(error, "warn"); callback(error, null); } }); } // Erzeugen der Objekte in ioBroker createState(idAKTUELLER_VERBRAUCH, 0, { name: 'Aktueller Verbrauch', desc: 'Aktueller Verbrauch', type: 'number', role: 'value', unit: 'W' }); createState(idAKTUELLE_ERZEUGUNG, 0, { name: 'Aktuelle Erzeugung', desc: 'Aktuelle Erzeugung', type: 'number', role: 'value', unit: 'W' }); // createState(idAKTUELLE_HEIZUNG, 0, { // name: 'Aktuelle Heizung', // desc: 'Aktuelle Heizung', // type: 'number', // role: 'value', // unit: 'W' // }); // Startet das Skript alle 2 Sekunden neu schedule("*/2 * * * * *", function() { readJson(url, function(err, json) { if (!err) { var wert1 = json.data[0].tuples[0][1]; var wert2 = json.data[1].tuples[0][1]; // var wert3 = json.data[2].tuples[0][1]; // Setzen der Werte in ioBroker // Man füllt die oben erzeugten Objekte jetzt mit den Werten setState(idAKTUELLER_VERBRAUCH, wert1); setState(idAKTUELLE_ERZEUGUNG, wert2); // setState(idAKTUELLE_HEIZUNG, wert3); } else { log("Fehler beim Auslesen des JSON fuer Volkszaehler. Keine Daten erhalten.", "warn"); } }); });
Der Tipp von @paul53
Lass Zeile 10 weg und ersetze Zeilen 12, 13 durch
httpGet(url, (err, response) => { if(!err) { const body = response.data;
Die Funktion liest nicht nur das JSON ein, sondern wandelt es auch in ein Objekt.
bringt mir eine Warnung
javascript.0 2024-05-21 22:00:04.003 warn script.js.common.Volkszaehler: Fehler beim Auslesen des JSON fuer Volkszaehler. Keine Daten erhalten. javascript.0 2024-05-21 22:00:04.003 warn script.js.common.Volkszaehler: (timeout of 2000ms exceeded) ERROR bei Abfrage von: http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365
Danke
-
@negalein hatten wir die Tage schon mal...
https://forum.iobroker.net/topic/74901/request-ablösen-durch-httpget?_=1716783342175
-
@arteck sagte in Hilfe bei Skripte von request auf httpGet umbauen:
hatten wir die Tage schon mal...
Danke, den hab ich bereits durchforstet und versucht in meinen Scripten umzusetzen.
Ich hab jetzt nochmal den Vorschlag von @paul53 versucht.
Es klappt jetzt. Keine Ahnung, warum vorher die Meldungen gekommen sind. -
@negalein sagte in Hilfe bei Skripte von request auf httpGet umbauen:
Lass Zeile 10 weg und ersetze Zeilen 12, 13 durch
müßte dann so aussehen
(ist das gewollt, dass das alle 2 sekunden ausgeführt wird ?)var url = "http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365"; var pfad = "Volkszaehler."; var idAKTUELLER_VERBRAUCH = pfad + "AKTUELLER_VERBRAUCH"; var idAKTUELLE_ERZEUGUNG = pfad + "AKTUELLE_LIEFERUNG"; // var idAKTUELLE_HEIZUNG = pfad + "AKTUELLE_HEIZUNG"; // Vorgegebene Funktion, die nur dazu dient, das JSON einzulesen // Angelehnt an: http://www.iobroker.net/docu/?page_id=3691 //var request = require("request"); function readJson(url, callback) { httpGet(url, { timeout: 3000, responseType: 'text' },function(err,response) { const body=response.data; if (!err) { var json = {}; if (body !== "") { try { json = JSON.parse(body); } catch (ex) { json = {}; } if (!json) { json = {}; } } callback(null, json); } else { var error = "(" + err + ") ERROR bei Abfrage von: " + url; log(error, "warn"); callback(error, null); } }); } // Erzeugen der Objekte in ioBroker createState(idAKTUELLER_VERBRAUCH, 0, { name: 'Aktueller Verbrauch', desc: 'Aktueller Verbrauch', type: 'number', role: 'value', unit: 'W' }); createState(idAKTUELLE_ERZEUGUNG, 0, { name: 'Aktuelle Erzeugung', desc: 'Aktuelle Erzeugung', type: 'number', role: 'value', unit: 'W' }); // createState(idAKTUELLE_HEIZUNG, 0, { // name: 'Aktuelle Heizung', // desc: 'Aktuelle Heizung', // type: 'number', // role: 'value', // unit: 'W' // }); // Startet das Skript alle 2 Sekunden neu schedule("*/2 * * * * *", function() { readJson(url, function(err, json) { if (!err) { var wert1 = json.data[0].tuples[0][1]; var wert2 = json.data[1].tuples[0][1]; // var wert3 = json.data[2].tuples[0][1]; // Setzen der Werte in ioBroker // Man füllt die oben erzeugten Objekte jetzt mit den Werten setState(idAKTUELLER_VERBRAUCH, wert1); setState(idAKTUELLE_ERZEUGUNG, wert2); // setState(idAKTUELLE_HEIZUNG, wert3); } else { log("Fehler beim Auslesen des JSON fuer Volkszaehler. Keine Daten erhalten.", "warn"); } }); });
-
@negalein sorry - -du hast es schon erledigt - hatte ich nicht gesehen
-
@liv-in-sky sagte in Hilfe bei Skripte von request auf httpGet umbauen:
sorry - -du hast es schon erledigt - hatte ich nicht gesehen
Danke.
Hab gerade gesehn, dass wieder die Meldungen kkommen.
Liegt das anDie Funktion liest nicht nur das JSON ein, sondern wandelt es auch in ein Objekt.
?javascript.0 2024-05-27 08:01:14.003 warn script.js.common.Volkszaehler: Fehler beim Auslesen des JSON fuer Volkszaehler. Keine Daten erhalten. javascript.0 2024-05-27 08:01:14.002 warn script.js.common.Volkszaehler: (timeout of 2000ms exceeded) ERROR bei Abfrage von: http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365 javascript.0 2024-05-27 08:01:12.004 warn script.js.common.Volkszaehler: Fehler beim Auslesen des JSON fuer Volkszaehler. Keine Daten erhalten. javascript.0 2024-05-27 08:01:12.004 warn script.js.common.Volkszaehler: (timeout of 2000ms exceeded) ERROR bei Abfrage von: http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365 javascript.0 2024-05-27 08:01:10.004 warn script.js.common.Volkszaehler: Fehler beim Auslesen des JSON fuer Volkszaehler. Keine Daten erhalten. javascript.0 2024-05-27 08:01:10.004 warn script.js.common.Volkszaehler: (timeout of 2000ms exceeded) ERROR bei Abfrage von: http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365 javascript.0 2024-05-27 08:01:08.002 warn script.js.common.Volkszaehler: Fehler beim Auslesen des JSON fuer Volkszaehler. Keine Daten erhalten. javascript.0 2024-05-27 08:01:08.002 warn script.js.common.Volkszaehler: (timeout of 2000ms exceeded) ERROR bei Abfrage von: http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365 javascript.0 2024-05-27 08:01:06.003 warn script.js.common.Volkszaehler: Fehler beim Auslesen des JSON fuer Volkszaehler. Keine Daten erhalten. javascript.0 2024-05-27 08:01:06.002 warn script.js.common.Volkszaehler: (timeout of 2000ms exceeded) ERROR bei Abfrage von: http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365 javascript.0 2024-05-27 08:01:04.004 warn script.js.common.Volkszaehler: Fehler beim Auslesen des JSON fuer Volkszaehler. Keine Daten erhalten. javascript.0 2024-05-27 08:01:04.003 warn script.js.common.Volkszaehler: (timeout of 2000ms exceeded) ERROR bei Abfrage von: http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365 javascript.0 2024-05-27 08:00:14.003 warn script.js.common.Volkszaehler: Fehler beim Auslesen des JSON fuer Volkszaehler. Keine Daten erhalten. javascript.0 2024-05-27 08:00:14.003 warn script.js.common.Volkszaehler: (timeout of 2000ms exceeded) ERROR bei Abfrage von: http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365 javascript.0 2024-05-27 08:00:12.004 warn script.js.common.Volkszaehler: Fehler beim Auslesen des JSON fuer Volkszaehler. Keine Daten erhalten. javascript.0 2024-05-27 08:00:12.003 warn script.js.common.Volkszaehler: (timeout of 2000ms exceeded) ERROR bei Abfrage von: http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365 javascript.0 2024-05-27 08:00:10.007 warn script.js.common.Volkszaehler: Fehler beim Auslesen des JSON fuer Volkszaehler. Keine Daten erhalten. javascript.0 2024-05-27 08:00:10.007 warn script.js.common.Volkszaehler: (timeout of 2000ms exceeded) ERROR bei Abfrage von: http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365 javascript.0 2024-05-27 08:00:08.002 warn script.js.common.Volkszaehler: Fehler beim Auslesen des JSON fuer Volkszaehler. Keine Daten erhalten. javascript.0 2024-05-27 08:00:08.002 warn script.js.common.Volkszaehler: (timeout of 2000ms exceeded) ERROR bei Abfrage von: http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365 javascript.0 2024-05-27 08:00:06.003 warn script.js.common.Volkszaehler: Fehler beim Auslesen des JSON fuer Volkszaehler. Keine Daten erhalten. javascript.0 2024-05-27 08:00:06.003 warn script.js.common.Volkszaehler: (timeout of 2000ms exceeded) ERROR bei Abfrage von: http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365 javascript.0 2024-05-27 08:00:04.006 warn script.js.common.Volkszaehler: Fehler beim Auslesen des JSON fuer Volkszaehler. Keine Daten erhalten. javascript.0 2024-05-27 08:00:04.006 warn script.js.common.Volkszaehler: (timeout of 2000ms exceeded) ERROR bei Abfrage von: http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365
-
bei meinem script habe ich den timeout auf 3000 gesetzt - teste mal das evtl mit 4000
aber dann macht eine 2-sekunden abfrage keinen sinn - dass müßte dann angeglichen werden - z.b. abfrage alle 5 sek
-
@liv-in-sky sagte in Hilfe bei Skripte von request auf httpGet umbauen:
bei meinem script habe ich den timeout auf 3000 gesetzt - teste mal das evtl mit 4000
Danke dir.
Meldungen sind weg. Den Schedule hab ich auf 10 erhöht.Könntest du bei den anderen auch noch helfen?
-
-
Muss jetzt dann weg
Komme Mittag wieder, wenn sich kein anderer findet, sehe ich mir das an -
@liv-in-sky sagte in Hilfe bei Skripte von request auf httpGet umbauen:
Komme Mittag wieder, wenn sich kein anderer findet, sehe ich mir das an
Danke
-
die fronius scripte könntest du evtl selbst probieren - die sind ähnlich, wie das , was wir gerade gemacht hatten
-
@liv-in-sky sagte in Hilfe bei Skripte von request auf httpGet umbauen:
die fronius scripte könntest du evtl selbst probieren - die sind ähnlich, wie das , was wir gerade gemacht hatten
würde es so funktionieren?
var request = require("request");
geändert in
//var request = require("request");
und
request(url, function (err, state, body){ if (body) {
ersetz durch
httpGet(url, { timeout: 3000, responseType: 'text' },function(err,response) { const body=response.data;
-
@negalein sagte: ersetz durch
Besser:httpGet(url, { timeout: 3000, responseType: 'text' }, function(err, response) { if(!err) { const body = response.data;
-
-
bei dem "Volkszähler-Script" bin ich jetzt schon mit dem Timeout auf 10000 rauf.
Trotzdem kommt immer wieder die Warn-Meldung.Kann man diese Warn-Meldung unterdrücken?
Oder besser mit dem Timeout testen, bis die Meldung nicht mehr kommt? -
@negalein bei einem timeout von 10 sekunden denke ich, dass es evtl ein andres problem gibt - eigentlich sind 2000-4000 schon zu lange -
kannst du mal den volkszähler neustarten - ansonsten fällt mir gerade nix dazu ein
kommt der fehler immer? wenn ja, funktioniert es ein paarmal und ab einem zeitpunkt dann nicht mehr - oder funktioniert es immer wieder mal ?
-
@liv-in-sky sagte in Hilfe bei Skripte von request auf httpGet umbauen:
eigentlich sind 2000-4000 schon zu lange -
ehrlich?
ich hatte mit dem Wiffi bei 2000 auch einige timeout exceeded, nach Erhöhung auf 4000 bisher keinen einzigen mehr.
Später hab ich gesehen, dass im Originalskript 3000 msec timeout eingestellt waren.ich denke dass es u.a. auch auf das Netzwerk und das angesprochene Gerät ankommt.
Beim Wiffi ist WLAN und ESP im Spiel. -
ja ehrlich - ein device , dass solange braucht ist seltsam
wobei ich auch bei den sonoffs mit httpget immer auf 4000 gehe, da ich sonst fehler habe -
ich bin mir nicht sicher, ob diese 2000 wirklich 2 sekunden reine abfrage sind oder ob das irgendwie mehr beinhaltet
selbst das auslesen eines unifi controllers mit massig daten dauert keine 2 sekunden (wenn das netwerk in ordnung ist)
-
@homoran sagte in Hilfe bei Skripte von request auf httpGet umbauen:
WLAN und ESP i
das vermute ich auch - da ist aber dann die frage, ob es mit dem alten request auch immer zu fehlern gekommen ist (das script war auf "alle 2 sekunde abfrage" gestellt