NEWS
Hilfe bei Skripte von request auf httpGet umbauen
-
@liv-in-sky sagte in Hilfe bei Skripte von request auf httpGet umbauen:
ls -la
pi@raspberrypi:/usr/local/bin $ ls -la insgesamt 11072 drwxrwsr-x 2 root staff 4096 Mai 28 09:21 . drwxrwsr-x 11 root staff 4096 Jul 7 2019 .. -rwxr-xr-x 1 pi pi 1909682 Apr 9 2019 composer -rw-r--r-- 1 root staff 0 Mai 27 22:58 curl-format.txt -rwxr-xr-x 1 root staff 1232 Mai 28 09:21 httptest -rwxr-xr-x 1 root staff 23084 Apr 9 2019 mbus-serial-request-data -rwxr-xr-x 1 root staff 21632 Apr 9 2019 mbus-serial-request-data-multi-reply -rwxr-xr-x 1 root staff 23428 Apr 9 2019 mbus-serial-scan -rwxr-xr-x 1 root staff 21840 Apr 9 2019 mbus-serial-scan-secondary -rwxr-xr-x 1 root staff 20132 Apr 9 2019 mbus-serial-select-secondary -rwxr-xr-x 1 root staff 22400 Apr 9 2019 mbus-serial-set-address -rwxr-xr-x 1 root staff 15448 Apr 9 2019 mbus-serial-switch-baudrate -rwxr-xr-x 1 root staff 21256 Apr 9 2019 mbus-tcp-application-reset -rwxr-xr-x 1 root staff 23460 Apr 9 2019 mbus-tcp-raw-send -rwxr-xr-x 1 root staff 22248 Apr 9 2019 mbus-tcp-request-data -rwxr-xr-x 1 root staff 21420 Apr 9 2019 mbus-tcp-request-data-multi-reply -rwxr-xr-x 1 root staff 22272 Apr 9 2019 mbus-tcp-scan -rwxr-xr-x 1 root staff 14864 Apr 9 2019 mbus-tcp-scan-secondary -rwxr-xr-x 1 root staff 15676 Apr 9 2019 mbus-tcp-select-secondary -rwxr-xr-x 1 root staff 9094204 Jul 7 2019 vzlogger pi@raspberrypi:/usr/local/bin $
-
@negalein
evtl ein rechte themaim verzeichnis sudo chmod 777 curl-format.txt
-
dann nochmal
curl -w "@curl-format.txt" -s 'http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365' | grep time_total -m 1 | awk '{print $2}' | sed -e 's/s//'
-
@liv-in-sky sagte in Hilfe bei Skripte von request auf httpGet umbauen:
dann nochmal
pi@raspberrypi:/usr/local/bin $ curl -w "@curl-format.txt" -s 'http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365' | grep time_total -m 1 | awk '{print $2}' | sed -e 's/s//' Warning: Failed to read curl-format.txtpi@raspberrypi:/usr/local/bin $
-
@negalein aaarghh
mach mal sudo httptest
-
@liv-in-sky sagte in Hilfe bei Skripte von request auf httpGet umbauen:
mach mal sudo httptest
das ist eine Zicke
pi@raspberrypi:/usr/local/bin $ sudo httptest Warning: Failed to read curl-format.txt/usr/local/bin/httptest: Zeile 3: iobroker: Kommando nicht gefunden. Warning: Failed to read curl-format.txt/usr/local/bin/httptest: Zeile 6: iobroker: Kommando nicht gefunden. Warning: Failed to read curl-format.txt/usr/local/bin/httptest: Zeile 9: iobroker: Kommando nicht gefunden. Warning: Failed to read curl-format.txt/usr/local/bin/httptest: Zeile 12: iobroker: Kommando nicht gefunden. pi@raspberrypi:/usr/local/bin $
-
siehe chat
-
sehr gut. das wäre die bibliothek gewesen, die ich auch verwendet hätte.
bei den headers könnte man ein paar noch entfernen, aber die stören so ja nicht. -
warum probiert ihr jetzt noch mit einer curlversion?
-
@oliverio sagte in Hilfe bei Skripte von request auf httpGet umbauen:
warum probiert ihr jetzt noch mit einer curlversion?
der curl ist ein Test für ein anderes Script, dass alle 10 Minuten einen Timeout hat.
-
wir haben noch ein andres thema.
wir machen mit dem curtl rum, damit wir die zugriffszeiten mal checken können. das script hatte wohl mit "request" keine probleme, mit hhtpget schon
ich hwollte dieses script nunmal mit axios testen, habe aber das problem, dass ich unterschiedliche antworten-daten bekomme
vorher:
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); } }); }
mit axios:
async function readJson(url, callback) {log("readjson") await axios.get(url,{headers:{"Content-Type": "application/json"}}).then(response => { const contentType = response.headers["application/json"]; const body=response.data; log(response) log(response.data); log(JSON.stringify(response.data)); log(JSON.stringify(response)); log( response.data.join('\n') ); if (!response.err) { var json = {}; if (body !== "") { try { json = JSON.parse(body); } catch (ex) { json = {}; } if (!json) { json = {}; } } callback(null, json); } else { var error = "(" + Error + ") ERROR bei Abfrage von: " + url; log(error, "warn"); callback(error, null); } }); }
da sind die antwort.data unterschedlich - hast du da eine idee dazu
-
lasse mal dieses script laufen und poste das log - @OliverIO kann dann den output sehen - wegen dem unterschied
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"; //url = "http://ip.jsontest.com/?callback=showMyIP" //url="https://httpbin.org/get" //url="http://ip.jsontest.com/" var pfad = "Volkszaehler."; var idAKTUELLER_VERBRAUCH = pfad + "AKTUELLER_VERBRAUCH"; var idAKTUELLE_ERZEUGUNG = pfad + "AKTUELLE_LIEFERUNG"; // var idAKTUELLE_HEIZUNG = pfad + "AKTUELLE_HEIZUNG"; const axios=require('axios'); // Vorgegebene Funktion, die nur dazu dient, das JSON einzulesen // Angelehnt an: http://www.iobroker.net/docu/?page_id=3691 //var request = require("request"); axios.get(url,{headers:{"Content-Type": "json"}}).then(response => { const contentType = response.headers["json"]; const body=response.data; log(response) log(response.data); log(JSON.stringify(response.data)); // log( response.data.join('\n') ); } ); var request = require("request"); request(url, function(err, state, body) { log("---------------------------") log(body) });
-
@liv-in-sky sagte in Hilfe bei Skripte von request auf httpGet umbauen:
lasse mal dieses script laufen und poste das log - @OliverIO kann dann den output sehen - wegen dem unterschied
javascript.0 16:22:19.541 info Start JavaScript script.js.common.VolkszaehlerNeuTest (Javascript/js) javascript.0 16:22:19.549 warn script.js.common.VolkszaehlerNeuTest: request package is deprecated - please use httpGet (or a stable lib like axios) instead! javascript.0 16:22:19.551 info script.js.common.VolkszaehlerNeuTest: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 16:22:19.587 info script.js.common.VolkszaehlerNeuTest: { status: 200, statusText: 'OK', headers: Object [AxiosHeaders] { server: 'nginx/1.14.2', date: 'Tue, 28 May 2024 14:22:19 GMT', 'content-type': 'application/json', 'content-length': '442', connection: 'keep-alive', 'cache-control': 'no-cache, private', 'access-control-allow-origin': '*', 'x-powered-by': 'React/alpha' }, config: { transitional: { silentJSONParsing: true, forcedJSONParsing: true, clarifyTimeoutError: false }, adapter: [ 'xhr', 'http', 'fetch' ], transformRequest: [ [Function: transformRequest] ], transformResponse: [ [Function: transformResponse] ], timeout: 0, xsrfCookieName: 'XSRF-TOKEN', xsrfHeaderName: 'X-XSRF-TOKEN', maxContentLength: -1, maxBodyLength: -1, env: { FormData: [Function], Blob: [class Blob] }, validateStatus: [Function: validateStatus], headers: Object [AxiosHeaders] { Accept: 'application/json, text/plain, */*', 'Content-Type': 'json', 'User-Agent': 'axios/1.7.2', 'Accept-Encoding': 'gzip, compress, deflate, br' }, method: 'get', url: 'http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365', data: undefined }, request: <ref *1> ClientRequest { _events: [Object: null prototype] { error: [Array], abort: [Function (anonymous)], aborted: [Function (anonymous)], connect: [Function (anonymous)], socket: [Function (anonymous)], timeout: [Function (anonymous)], finish: [Function: requestOnFinish] }, _eventsCount: 7, _maxListeners: 100, outputData: [], outputSize: 0, writable: true, destroyed: true, _last: true, chunkedEncoding: false, shouldKeepAlive: true, maxRequestsOnConnectionReached: false, _defaultKeepAlive: true, useChunkedEncodingByDefault: false, sendDate: false, _removedConnection: false, _removedContLen: false, _removedTE: false, strictContentLength: false, _contentLength: 0, _hasBody: true, _trailer: '', finished: true, _headerSent: true, _closed: true, socket: Socket { connecting: false, _hadError: false, _parent: null, _host: null, _closeAfterHandlingError: false, _events: [Object], _readableState: [ReadableState], _writableState: [WritableState], allowHalfOpen: false, _maxListeners: 100, _eventsCount: 6, _sockname: null, _pendingData: null, _pendingEncoding: '', server: null, _server: null, timeout: 5000, parser: null, _httpMessage: null, [Symbol(async_id_symbol)]: -1, [Symbol(kHandle)]: [TCP], [Symbol(lastWriteQueueSize)]: 0, [Symbol(timeout)]: Timeout { _idleTimeout: 5000, _idlePrev: [TimersList], _idleNext: [Timeout], _idleStart: 22210741, _onTimeout: [Function: bound ], _timerArgs: undefined, _repeat: null, _destroyed: false, [Symbol(refed)]: false, [Symbol(kHasPrimitive)]: false, [Symbol(asyncId)]: 12550793, [Symbol(triggerId)]: 12550791 }, [Symbol(kBuffer)]: null, [Symbol(kBufferCb)]: null, [Symbol(kBufferGen)]: null, [Symbol(shapeMode)]: true, [Symbol(kCapture)]: false, [Symbol(kSetNoDelay)]: true, [Symbol(kSetKeepAlive)]: true, [Symbol(kSetKeepAliveInitialDelay)]: 1, [Symbol(kBytesRead)]: 0, [Symbol(kBytesWritten)]: 0 }, _header: 'GET /middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365 HTTP/1.1\r\n' + 'Accept: application/json, text/plain, */*\r\n' + 'Content-Type: json\r\n' + 'User-Agent: axios/1.7.2\r\n' + 'Accept-Encoding: gzip, compress, deflate, br\r\n' + 'Host: 10.0.1.93\r\n' + 'Connection: keep-alive\r\n' + '\r\n', _keepAliveTimeout: 0, _onPendingData: [Function: nop], agent: Agent { _events: [Object: null prototype], _eventsCount: 2, _maxListeners: undefined, defaultPort: 80, protocol: 'http:', options: [Object: null prototype], requests: [Object: null prototype] {}, sockets: [Object: null prototype], freeSockets: [Object: null prototype], keepAliveMsecs: 1000, keepAlive: true, maxSockets: Infinity, maxFreeSockets: 256, scheduling: 'lifo', maxTotalSockets: Infinity, totalSocketCount: 2, [Symbol(shapeMode)]: false, [Symbol(kCapture)]: false }, socketPath: undefined, method: 'GET', maxHeaderSize: undefined, insecureHTTPParser: undefined, joinDuplicateHeaders: undefined, path: '/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365', _ended: true, res: IncomingMessage { _events: [Object], _readableState: [ReadableState], _maxListeners: 100, socket: null, httpVersionMajor: 1, httpVersionMinor: 1, httpVersion: '1.1', complete: true, rawHeaders: [Array], rawTrailers: [], joinDuplicateHeaders: undefined, aborted: false, upgrade: false, url: '', method: null, statusCode: 200, statusMessage: 'OK', client: [Socket], _consuming: false, _dumped: false, req: [Circular *1], _eventsCount: 4, responseUrl: 'http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365', redirects: [], [Symbol(shapeMode)]: true, [Symbol(kCapture)]: false, [Symbol(kHeaders)]: [Object], [Symbol(kHeadersCount)]: 16, [Symbol(kTrailers)]: null, [Symbol(kTrailersCount)]: 0 }, aborted: false, timeoutCb: null, upgradeOrConnect: false, parser: null, maxHeadersCount: null, reusedSocket: false, host: '10.0.1.93', protocol: 'http:', _redirectable: Writable { _events: [Object], _writableState: [WritableState], _maxListeners: 100, _options: [Object], _ended: true, _ending: true, _redirectCount: 0, _redirects: [], _requestBodyLength: 0, _requestBodyBuffers: [], _eventsCount: 3, _onNativeResponse: [Function (anonymous)], _currentRequest: [Circular *1], _currentUrl: 'http://10.0.1.93/middleware.php/data.json?from=now&uuid[]=bc3edcd0-24c4-11ea-b257-bdbd9553c516&uuid[]=deda8550-24c4-11ea-b402-275ee0956365', [Symbol(shapeMode)]: true, [Symbol(kCapture)]: false }, [Symbol(shapeMode)]: false, [Symbol(kCapture)]: false, [Symbol(kBytesWritten)]: 0, [Symbol(kNeedDrain)]: false, [Symbol(corked)]: 0, [Symbol(kOutHeaders)]: [Object: null prototype] { accept: [Array], 'content-type': [Array], 'user-agent': [Array], 'accept-encoding': [Array], host: [Array] }, [Symbol(errored)]: null, [Symbol(kHighWaterMark)]: 16384, [Symbol(kRejectNonStandardBodyWrites)]: false, [Symbol(kUniqueHeaders)]: null }, data: { version: '0.3', data: [ [Object], [Object] ] } } javascript.0 16:22:19.588 info script.js.common.VolkszaehlerNeuTest: { version: '0.3', data: [ { tuples: [Array], uuid: 'bc3edcd0-24c4-11ea-b257-bdbd9553c516', from: 1716906055000, to: 1716906115000, min: [Array], max: [Array], average: 0, consumption: 0, rows: 2 }, { tuples: [Array], uuid: 'deda8550-24c4-11ea-b402-275ee0956365', from: 1716906085000, to: 1716906115000, min: [Array], max: [Array], average: 840, consumption: 7, rows: 2 } ] } javascript.0 16:22:19.588 info script.js.common.VolkszaehlerNeuTest: {"version":"0.3","data":[{"tuples":[[1716906115000,0,1]],"uuid":"bc3edcd0-24c4-11ea-b257-bdbd9553c516","from":1716906055000,"to":1716906115000,"min":[1716906115000,0],"max":[1716906115000,0],"average":0,"consumption":0,"rows":2},{"tuples":[[1716906115000,840,1]],"uuid":"deda8550-24c4-11ea-b402-275ee0956365","from":1716906085000,"to":1716906115000,"min":[1716906115000,840],"max":[1716906115000,840],"average":840,"consumption":7,"rows":2}]} javascript.0 16:22:19.590 info script.js.common.VolkszaehlerNeuTest: --------------------------- javascript.0 16:22:19.590 info script.js.common.VolkszaehlerNeuTest: {"version":"0.3","data":[{"tuples":[[1716906115000,0,1]],"uuid":"bc3edcd0-24c4-11ea-b257-bdbd9553c516","from":1716906055000,"to":1716906115000,"min":[1716906115000,0],"max":[1716906115000,0],"average":0,"consumption":0,"rows":2},{"tuples":[[1716906115000,840,1]],"uuid":"deda8550-24c4-11ea-b402-275ee0956365","from":1716906085000,"to":1716906115000,"min":[1716906115000,840],"max":[1716906115000,840],"average":840,"consumption":7,"rows":2}]} javascript.0 16:22:34.588 info Stopping script script.js.common.VolkszaehlerNeuTest
-
wo seht ihr nun einen unterschied?
die beiden zeilen sind doch gleich?javascript.0 16:22:19.588 info script.js.common.VolkszaehlerNeuTest: {"version":"0.3","data":[{"tuples":[[1716906115000,0,1]],"uuid":"bc3edcd0-24c4-11ea-b257-bdbd9553c516","from":1716906055000,"to":1716906115000,"min":[1716906115000,0],"max":[1716906115000,0],"average":0,"consumption":0,"rows":2},{"tuples":[[1716906115000,840,1]],"uuid":"deda8550-24c4-11ea-b402-275ee0956365","from":1716906085000,"to":1716906115000,"min":[1716906115000,840],"max":[1716906115000,840],"average":840,"consumption":7,"rows":2}]} javascript.0 16:22:19.590 info script.js.common.VolkszaehlerNeuTest: --------------------------- javascript.0 16:22:19.590 info script.js.common.VolkszaehlerNeuTest: {"version":"0.3","data":[{"tuples":[[1716906115000,0,1]],"uuid":"bc3edcd0-24c4-11ea-b257-bdbd9553c516","from":1716906055000,"to":1716906115000,"min":[1716906115000,0],"max":[1716906115000,0],"average":0,"consumption":0,"rows":2},{"tuples":[[1716906115000,840,1]],"uuid":"deda8550-24c4-11ea-b402-275ee0956365","from":1716906085000,"to":1716906115000,"min":[1716906115000,840],"max":[1716906115000,840],"average":840,"consumption":7,"rows":2}]} j
-
@oliverio oh sorry - da ich nicht testen kann und das script etwas angepaßt habe, funktioniert es jetzt - dann kann ich mit @Negalein wiede weitermachen
vorher stand bei max und min nur das wort [array] drin
also so:
javascript.0 16:22:19.590 info script.js.common.VolkszaehlerNeuTest: {"version":"0.3","data":[{"tuples":[[1716906115000,0,1]],"uuid":"bc3edcd0-24c4-11ea-b257-bdbd9553c516","from":1716906055000,"to":1716906115000,"min":[array],"max":[array],"average":0,"consumption":0,"rows":2},{"tuples":[[1716906115000,840,1]],"uuid":"deda8550-24c4-11ea-b402-275ee0956365","from":1716906085000,"to":1716906115000,"min":[array],"max":[array],"average":840,"consumption":7,"rows":2}]} j
-
@liv-in-sky
das kann eine funktion der log ausgabe sein, die ab einer bestimmten tiefe der objektverschachtelung nur noch den typ ausgibt, obwohl es da schon noch weitergeht.
über die stringify ausgabe seht ihr ja, das da alles da ist.
die reihenfolge der properties in einem json ist nicht standardisiert, führt aber immer zum gleichen objekt. daher ist ein textbasierter vergleich meist schwierig. -
neues Thema aufgemacht
-
Hallo meine Herren,
ich muss nochmal nach dem Thema:
timeout of 2000ms exceeded
fragen.
Wenn ich diesen Block ausführe:
bekomme ich diese Antwort:javascript.0 19:17:46.172 info Start JavaScript script.js.Matrix_Displays (Blockly) javascript.0 19:17:46.207 info script.js.Matrix_Displays: registered 69 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 19:17:46.267 info script.js.Matrix_Displays: {"Restart":"Restarting"} javascript.0 19:17:50.287 error script.js.Matrix_Displays: timeout of 2000ms exceeded
Der Befehl wird auf dem (Tasmota) Gerät ausgeführt und die Antwort kommt ja augenscheinlich auch im ioBroker an. Warum kommt dann hier der Error und kann ich etwas dagegen tun?
Danke vorab.
-
@rushmed Vermutlich, weil das Gerät den Restart gleich ausführt, ohne darüber nochmal eine Rückmeldung zu geben. Also wird nach den 2 Sekunden eben der Timeout ins Log geschrieben.
Ich meine, wenn ich bei (einigen zumindest) Tasmota-Geräten per Webinterface einen Restart auslöse, dass dann auch die Fehlerseite aufgeht, dass die Seite nicht erreichbar wäre. Bei anderen kommt vorher noch eine Seite mit „Success“. Woran das aber liegt, dass die Success-Seite mal kommt und mal nicht und ob das immer die gleichen Geräte sind habe ich nie verfolgt, weil es mich bisher auch nicht gestört hat.Gruss, Jürgen
EDIT: Der Restart wird ammer in beiden Fällen jeweils problemlos ausgeführt.
-
@wildbill Ok, aber die Antwort von Tasmota:
javascript.0 19:17:46.267 info script.js.Matrix_Displays: {"Restart":"Restarting"}
wird doch empfangen aber scheinbar nicht als Antwort interpretiert.
Hat @haus-automatisierung hier evtl. einen Rat?