NEWS
Hilfe bei Skripte von request auf httpGet umbauen
-
@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?
-
@rushmed Das stimmt allerdings, wenn man es so sieht. Keine Ahnung, ob da noch danach was „erwartet“ wird, was wegen des Reboots aber nicht kommt.
Gruss, Jürgen
-
@rushmed sagte in Hilfe bei Skripte von request auf httpGet umbauen:
Hat @haus-automatisierung hier evtl. einen Rat?
Tasmota ist hier zumindest immer wieder auffällig. Bitte mal die gleiche URL mit curl aufrufen und verbose aktivieren
-v
damit man alle Header sieht. -
@haus-automatisierung
ich habe:
Ausgeführt und es ist garnichts passiert. Weder wurde der Befehl ausgeführt, noch kam eine Antwort. -
@rushmed Mach das mal direkt per ssh oder auf einem anderen System. Also nicht aus Blockly heraus. Ansonsten müssen natürlich Anführungszeichen um die URL, damit die 1 am Ende noch dazu gehört (oder
%20
dazwischen) -
pi@Smartazamba:~ $ curl -v http://192.168.178.138/cm?cmnd=Restart 1 * Trying 192.168.178.138:80... * Connected to 192.168.178.138 (192.168.178.138) port 80 (#0) > GET /cm?cmnd=Restart HTTP/1.1 > Host: 192.168.178.138 > User-Agent: curl/7.88.1 > Accept: */* > < HTTP/1.1 200 OK < Content-Type: application/json < Server: Tasmota/14.1.0.1 (ESP8266EX) < Cache-Control: no-cache, no-store, must-revalidate < Pragma: no-cache < Expires: -1 < Accept-Ranges: none < Transfer-Encoding: chunked < Connection: close < * Closing connection 0 {"Restart":"1 to restart, 2 to halt"}* Trying 0.0.0.1:80...
Restart ist nicht erfolgt.
-
@rushmed sagte in Hilfe bei Skripte von request auf httpGet umbauen:
Restart ist nicht erfolgt.
Weil Du wieder keine Anführungszeichen um die Url gemacht hast und die
1
am Ende für curl somit nicht zur Url gehört (sieht man auch im verbose) -
@haus-automatisierung Sorry.
pi@Smartazamba:~ $ curl -v "http://192.168.178.138/cm?cmnd=Restart 1" * Closing connection -1 curl: (3) URL using bad/illegal format or missing URL
-
@rushmed
curl -v "http://192.168.178.138/cm?cmnd=Restart%201"
-
@haus-automatisierung sagte in Hilfe bei Skripte von request auf httpGet umbauen:
curl -v "http://192.168.178.138/cm?cmnd=Restart 1"
pi@Smartazamba:~ $ curl -v "http://192.168.178.138/cm?cmnd=Restart%201" * Trying 192.168.178.138:80... * Connected to 192.168.178.138 (192.168.178.138) port 80 (#0) > GET /cm?cmnd=Restart%201 HTTP/1.1 > Host: 192.168.178.138 > User-Agent: curl/7.88.1 > Accept: */* > < HTTP/1.1 200 OK < Content-Type: application/json < Server: Tasmota/14.1.0.1 (ESP8266EX) < Cache-Control: no-cache, no-store, must-revalidate < Pragma: no-cache < Expires: -1 < Accept-Ranges: none < Transfer-Encoding: chunked < Connection: close < * Closing connection 0 {"Restart":"Restarting"}p
Restart wir ausgeführt.
Script sendet wieder:javascript.0 22:20:34.986 error script.js.Matrix_Displays: timeout of 2000ms exceeded
Das passiert ohne Scriptneustart o.ä.. Scheinbar lauscht das Script aber empfängt nichts.
Gesendet hab' ich den Befehl per Putty. -
@rushmed sagte in Hilfe bei Skripte von request auf httpGet umbauen:
Transfer-Encoding: chunked
Könnte sein dass axios denkt dass da noch mehr kommen müsste und deswegen wartet (bis timeout). Muss ich mir mal ein Test-Setup aufbauen. Eventuell auch eine blöde Kombination in Tasmota mit Restart, dass die Verbindung dann nicht richtig geschlossen wird, weil ESP neustartet.
https://nothing-else.blog/blog/axios-timeout-for-chunked-responses
-
@haus-automatisierung Ich hab' noch eine Info:
Bringt nur:javascript.0 22:26:05.158 error script.js.Tasmota: timeout of 2000ms exceeded javascript.0 22:26:05.164 error script.js.Tasmota: timeout of 2000ms exceeded
bei drei angesprochenen Geräten von denen zwei offline sind. Hier kommt die Meldung für das Verfügbare gerät nicht. Das ist schlüssig.
Wo liegt hier der Unterschied? -
@rushmed sagte in Hilfe bei Skripte von request auf httpGet umbauen:
Wo liegt hier der Unterschied?
Andere Tasmota-Version?
-
@haus-automatisierung Oha, da passiert was, ich prüfe kurz.
Edit1:
Tasmota Development Version" Tasmota 14.1.0.1 (display)" bringt den Error.
Tasmota Master Version "Tasmota 14.1.0 (display)" bringt den Error nicht.
Super!
Werde die Devices auf die Tasmota Master umstellen.
Vielen Dank!Edit2:
Hab' mich zu früh gefreut. Der Error kommt wieder.Edit3:
Jetzt sind zwei von drei Geräten angschlossen bei der Ausführung von:
und die Errormeldung kommt nurnoch einmal. Wieder schlüssig. -
@rushmed Probiere mal
/cm?cmnd=Restart%201
Die
%20
maskieren das Leerzeichen (URL-Encoding), vielleicht liegt es daran -
@bananajoe sagte in Hilfe bei Skripte von request auf httpGet umbauen:
%20
Hat leider nicht geholfen. Die Meldung kommt dennoch.
Ich verstehe wiklich nicht warum die Meldung bei:
auftritt, aber bei:
nicht.