NEWS
JavaScript 7.9.0 - Neue Objekt- und HTTP-Bausteine
-
@jwerlsdf sagte in JavaScript 7.9.0 - Neue Objekt- und HTTP-Bausteine:
wie ich genau den http get block benutzen muss, damit ich keinen timeout Fehler erhalte.
Aktuell ist der Timeout fix auf 2000ms gestellt. Warum dauert es denn so lange bis zum Response? Das ist ja eine halbe Ewigkeit. In der nächsten Version mach ich den Timeout konfigurierbar.
@diginix sagte in JavaScript 7.9.0 - Neue Objekt- und HTTP-Bausteine:
Wie kann ich denn nun Basic Auth mit http://user:pw@ip im http GET verwenden?
Wie im Ausgangspost beschrieben, kann der Blockly-Baustein das aktuell nicht. Nur per JavaScript. Siehe Doku
https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#httpget
Ich muss mal schauen wie ich das alles anbieten kann, ohne den Baustein komplett zu überfrachten.
@haus-automatisierung
Den timeout auf z.b. 4000 zu erhöhen, bringt leider auch nichts. Hast du noch eine andere Idee? -
@haus-automatisierung
Den timeout auf z.b. 4000 zu erhöhen, bringt leider auch nichts. Hast du noch eine andere Idee?@jwerlsdf sagte in JavaScript 7.9.0 - Neue Objekt- und HTTP-Bausteine:
Hast du noch eine andere Idee?
Schauen warum der Request so lange läuft und z.B. mal mit curl testen was zurück kommt (und wann).
-
@diginix sagte in JavaScript 7.9.0 - Neue Objekt- und HTTP-Bausteine:
Bie diesem Block zum Reboot eines Sonoff mit Tasmota FW
Welche FW Version? Dann kann ich das mal testen.
PS: Warum nicht per MQTT? :)
@haus-automatisierung FW: 13.4.0(lite) und die Sonoff hängen alle am sonoff Adapter und nicht am mqtt. Hab noch nicht geschaut ob es da auch ein Topic gibt den man für den Reboot schreiben kann.
Konnte auf die Schnelle kein Objekt unter sonoff.0.%device% für reboot finden.
-
@haus-automatisierung Bie diesem Block zum Reboot eines Sonoff mit Tasmota FW kommt eine Fehlermeldung

09:24:16.358 info javascript.0 (1952275) script.js.test.Test: httpGet({"method":"get","url":"http://192.168.2.77/cm?cmnd=Restart%2099&user=admin&password=gzJIi3ab","responseType":"text","responseEncoding":"utf8","timeout":2000,"headers":{"User-Agent":"Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/121.0"}}) 09:24:18.604 error javascript.0 (1952275) script.js.test.Test: maxContentLength size of -1 exceeded@diginix sagte in JavaScript 7.9.0 - Neue Objekt- und HTTP-Bausteine:
Bie diesem Block zum Reboot eines Sonoff mit Tasmota FW kommt eine Fehlermeldung
Sieht so aus als wäre das ein Bug in Axios, wenn die Verbindung einfach geschlossen wird (was scheinbar beim Restart passiert). Das heißt, Tasmota antwortet da nicht sauber. Siehe auch
https://github.com/axios/axios/issues/5286
Wenn ich das mit curl mache, dann wartet der auch ewig auf ein Ergebnis, ohne dass die Verbindung sauber geschlossen wird. Muss ich dann manuell abbrechen.
Kann ich also nicht beheben - muss Tasmota tun.
curl -vvv "http://10.10.9.241/cm?cmnd=Restart%2099" * Trying 10.10.9.241:80... * Connected to 10.10.9.241 (10.10.9.241) port 80 (#0) > GET /cm?cmnd=Restart%2099 HTTP/1.1 > Host: 10.10.9.241 > User-Agent: curl/7.88.1 > Accept: */* > < HTTP/1.1 200 OK < Content-Type: application/json < Server: Tasmota/13.4.0 (ESP8285N08) < Cache-Control: no-cache, no-store, must-revalidate < Pragma: no-cache < Expires: -1 < Accept-Ranges: none < Transfer-Encoding: chunked < Connection: close < ^C -
@diginix sagte in JavaScript 7.9.0 - Neue Objekt- und HTTP-Bausteine:
Bie diesem Block zum Reboot eines Sonoff mit Tasmota FW kommt eine Fehlermeldung
Sieht so aus als wäre das ein Bug in Axios, wenn die Verbindung einfach geschlossen wird (was scheinbar beim Restart passiert). Das heißt, Tasmota antwortet da nicht sauber. Siehe auch
https://github.com/axios/axios/issues/5286
Wenn ich das mit curl mache, dann wartet der auch ewig auf ein Ergebnis, ohne dass die Verbindung sauber geschlossen wird. Muss ich dann manuell abbrechen.
Kann ich also nicht beheben - muss Tasmota tun.
curl -vvv "http://10.10.9.241/cm?cmnd=Restart%2099" * Trying 10.10.9.241:80... * Connected to 10.10.9.241 (10.10.9.241) port 80 (#0) > GET /cm?cmnd=Restart%2099 HTTP/1.1 > Host: 10.10.9.241 > User-Agent: curl/7.88.1 > Accept: */* > < HTTP/1.1 200 OK < Content-Type: application/json < Server: Tasmota/13.4.0 (ESP8285N08) < Cache-Control: no-cache, no-store, must-revalidate < Pragma: no-cache < Expires: -1 < Accept-Ranges: none < Transfer-Encoding: chunked < Connection: close < ^CWenn ich
Restart 1(1 = restart device with configuration saved to flash) nutze, klappt das übrigens und ich bekomme auch einen vernünftigen Response:{"Restart":"Restarting" -
Wenn ich
Restart 1(1 = restart device with configuration saved to flash) nutze, klappt das übrigens und ich bekomme auch einen vernünftigen Response:{"Restart":"Restarting"@haus-automatisierung Danke für den Test!
Dann stelle ich bei allen mal aufrestart 1um. Dann kann ich mir data sogar noch ausgeben lassen. Restart 99 ist halt ohne Config speichern, aber da die sich ja zu dem Zeitpunkt auch nicht geändert hat, sollte es mit 1 statt 99 auch keine Nachteile haben. -
@jwerlsdf sagte in JavaScript 7.9.0 - Neue Objekt- und HTTP-Bausteine:
Hast du noch eine andere Idee?
Schauen warum der Request so lange läuft und z.B. mal mit curl testen was zurück kommt (und wann).
@haus-automatisierung
Ok, ich habe es getestet.
Noch einmal zum Szenario: Der Befehl lässt eine MP3 über Sonos API abspielen.
In der Konsole bekomme ich ein "status": :succees" sobald das Lied FERTIG abgespielt ist.Jetzt das Problem: Wenn ich den timeout so hoch stelle wie das Lied z.b. 20sek, bekomme ich keinen timeout Fehler mehr, aber mein restliches Skript ist damit obsolet, da direkt nach dem Befehl die 3 Sekunden Pause und dann die weiteren Befehle kommen würden, was aber durch den hohen timeout nicht mehr geht. Ich hoffe, ich konnte das Problem verständlich erklären?!
-
@haus-automatisierung
Ok, ich habe es getestet.
Noch einmal zum Szenario: Der Befehl lässt eine MP3 über Sonos API abspielen.
In der Konsole bekomme ich ein "status": :succees" sobald das Lied FERTIG abgespielt ist.Jetzt das Problem: Wenn ich den timeout so hoch stelle wie das Lied z.b. 20sek, bekomme ich keinen timeout Fehler mehr, aber mein restliches Skript ist damit obsolet, da direkt nach dem Befehl die 3 Sekunden Pause und dann die weiteren Befehle kommen würden, was aber durch den hohen timeout nicht mehr geht. Ich hoffe, ich konnte das Problem verständlich erklären?!
@jwerlsdf sagte in JavaScript 7.9.0 - Neue Objekt- und HTTP-Bausteine:
da direkt nach dem Befehl die 3 Sekunden Pause und dann die weiteren Befehle kommen würden, was aber durch den hohen timeout nicht mehr geht.
Warum sollte das nicht gehen?! Das Script wartet nicht auf den http Response (deswegen ja der callback). Und läuft in der Zeit weiter durch.
Du kannst bei Timeout auch
0eintragen, dann ist es "unbegrenzt". -
@jwerlsdf sagte in JavaScript 7.9.0 - Neue Objekt- und HTTP-Bausteine:
da direkt nach dem Befehl die 3 Sekunden Pause und dann die weiteren Befehle kommen würden, was aber durch den hohen timeout nicht mehr geht.
Warum sollte das nicht gehen?! Das Script wartet nicht auf den http Response (deswegen ja der callback). Und läuft in der Zeit weiter durch.
Du kannst bei Timeout auch
0eintragen, dann ist es "unbegrenzt".@haus-automatisierung
Ich habe überall 0 ms eingetragen und jetzt bekomme ich wieder den Fehler 2000ms timeout obwohl ich 2000 nicht eingestellt habe. -
Aktuelle Test Version 7.9.0 Veröffentlichungsdatum 13.03.2024 Github Link https://github.com/ioBroker/ioBroker.javascript/releases/tag/v7.9.0 Auch in dieser Version gibt es wieder viele neue Blöcke, Bugfixes und Features. Das wichtigste zuerst:
Besten Dank an alle Teilnehmer des ioBroker-Master-Kurses. Ihr habt die vielen Stunden Entwicklung (wie immer) finanziert. Natürlich werde ich die neuen Bausteine und Feature auch dort in neuen Lektionen noch ausführlich zeigen und erklären.
Blockly-Bausteine für Objekte

Ich konnte es nicht mehr sehen, wie hier einige mit Text-Bausteinen JSON-Strings zusammenbauen. Super lange Verkettungen von Text, und am Ende wurde ein Komma abgeschnitten, damit das JSON gültig ist. Schlimm - aber das war in Blockly leider bis dato die einzige Möglichkeit neue Objekte zu erstellen.
Das ist jetzt anders. Du kannst ein neues Objekt anlegen und die Attribute frei (im Blockly) definieren. Das klappt einfach über das "Zahnrad" des Bausteins (wie bei vielen anderen Blöcken auch).

Nachträglich weitere Attribute hinzufügen geht selbstverständlich auch:

Entfernen von Attributen funktioniert genauso per Block. Also alles, um endlich einige Strukturen abzulösen. Die
Objekt zu JSON-Blöcke gibts ja schon länger. Und dann bekommst Du auch direkt "sauberes" JSON und kannst damit weiterarbeiten. Oder Du schreibst das Objekt direkt in einen Datenpunkt vom Typobjectoderarray- dann passiert die Konvertierung ganz automatisch. Aber das kennst Du ja wahrscheinlich schon und ist erstmal nix neues.HTTP-Funktionen
requestist ja leider schon lange deprecated und die Blockly-Bautsteine generieren JavaScript-Code, welcher das Paket mitrequiredirekt lädt. Das ist nicht so der Hit und wurde mal Zeit für eine Überarbeitung. Daher gibt es nun neue Blöcke. Nicht nur für GET, sondern auch für POST.
Der "alte" request Block erzeugt jetzt eine deprecated warning und wird irgendwann entfernt. Daher bitte auf die neuen Blöcke umstellen!
Intern unterstützt die Funktion auch Basic- und Digest-Authentication und eigene HTTP-Header - das ist nur noch nicht im Blockly-Baustein verfügbar. Ich muss mal schauen, wie das Thema angenommen wird und ob es dafür Bedarf gibt. Dann erweitere ich die Blöcke natürlich. Für die JavaScript-Varianten bitte in die Adapter-Doku schauen.
Installation des Adapters
Bitte ganz normal über das Beta-Repository oder das npm-Tab und NICHT über GitHub! Fragen dazu beantworte ich erstmal nicht. Absolute Grundlagen gibts an anderer Stelle ganz ausführlich.
Hallo,
ich möchte mit den neuen Baustein HTTP Get einen Befehl an meinen Yamaha Receiver senden.
Beim start des Skript funktioniert das auch, aber dann nicht mehr. Löse das Skript via Button DP aus.

-
Hallo,
ich möchte mit den neuen Baustein HTTP Get einen Befehl an meinen Yamaha Receiver senden.
Beim start des Skript funktioniert das auch, aber dann nicht mehr. Löse das Skript via Button DP aus.

-
@sigi234 sagte: Löse das Skript via Button DP aus.
Dann packe den HTTP-Block in den Trigger auf "ist wahr".
@paul53 sagte in JavaScript 7.9.0 - Neue Objekt- und HTTP-Bausteine:
@sigi234 sagte: Löse das Skript via Button DP aus.
Dann packe den HTTP-Block in den Trigger auf "ist wahr".
Danke , funktioniert muss halt immer 2 mal klicken.

-
@paul53 sagte in JavaScript 7.9.0 - Neue Objekt- und HTTP-Bausteine:
@sigi234 sagte: Löse das Skript via Button DP aus.
Dann packe den HTTP-Block in den Trigger auf "ist wahr".
Danke , funktioniert muss halt immer 2 mal klicken.

-
Aktuelle Test Version 7.9.0 Veröffentlichungsdatum 13.03.2024 Github Link https://github.com/ioBroker/ioBroker.javascript/releases/tag/v7.9.0 Auch in dieser Version gibt es wieder viele neue Blöcke, Bugfixes und Features. Das wichtigste zuerst:
Besten Dank an alle Teilnehmer des ioBroker-Master-Kurses. Ihr habt die vielen Stunden Entwicklung (wie immer) finanziert. Natürlich werde ich die neuen Bausteine und Feature auch dort in neuen Lektionen noch ausführlich zeigen und erklären.
Blockly-Bausteine für Objekte

Ich konnte es nicht mehr sehen, wie hier einige mit Text-Bausteinen JSON-Strings zusammenbauen. Super lange Verkettungen von Text, und am Ende wurde ein Komma abgeschnitten, damit das JSON gültig ist. Schlimm - aber das war in Blockly leider bis dato die einzige Möglichkeit neue Objekte zu erstellen.
Das ist jetzt anders. Du kannst ein neues Objekt anlegen und die Attribute frei (im Blockly) definieren. Das klappt einfach über das "Zahnrad" des Bausteins (wie bei vielen anderen Blöcken auch).

Nachträglich weitere Attribute hinzufügen geht selbstverständlich auch:

Entfernen von Attributen funktioniert genauso per Block. Also alles, um endlich einige Strukturen abzulösen. Die
Objekt zu JSON-Blöcke gibts ja schon länger. Und dann bekommst Du auch direkt "sauberes" JSON und kannst damit weiterarbeiten. Oder Du schreibst das Objekt direkt in einen Datenpunkt vom Typobjectoderarray- dann passiert die Konvertierung ganz automatisch. Aber das kennst Du ja wahrscheinlich schon und ist erstmal nix neues.HTTP-Funktionen
requestist ja leider schon lange deprecated und die Blockly-Bautsteine generieren JavaScript-Code, welcher das Paket mitrequiredirekt lädt. Das ist nicht so der Hit und wurde mal Zeit für eine Überarbeitung. Daher gibt es nun neue Blöcke. Nicht nur für GET, sondern auch für POST.
Der "alte" request Block erzeugt jetzt eine deprecated warning und wird irgendwann entfernt. Daher bitte auf die neuen Blöcke umstellen!
Intern unterstützt die Funktion auch Basic- und Digest-Authentication und eigene HTTP-Header - das ist nur noch nicht im Blockly-Baustein verfügbar. Ich muss mal schauen, wie das Thema angenommen wird und ob es dafür Bedarf gibt. Dann erweitere ich die Blöcke natürlich. Für die JavaScript-Varianten bitte in die Adapter-Doku schauen.
Installation des Adapters
Bitte ganz normal über das Beta-Repository oder das npm-Tab und NICHT über GitHub! Fragen dazu beantworte ich erstmal nicht. Absolute Grundlagen gibts an anderer Stelle ganz ausführlich.
-
@haus-automatisierung sagte: request ist ja leider schon lange deprecated
Ich habe in Version 7.9.4 festgestellt, dass für
requestwieder require('request') erforderlich ist. Habe PR für die Funktions-Doku erstellt.@paul53 Danke, ja eigentlich ist die Idee das direkt mit den neuen Funktionen zu ersetzen sodass man möglichst keine Abhängigkeiten in den Scripts hat
-
Ich verwende öfters den Parameter : mit Ergebnissen

Wie mache ich das nun mit dem neuen Block?
Hat sich erledigt, funktioniert.
-
@haus-automatisierung Bei CRON in der Form bekomme ich in Skripten mit 7.9.4 folgenden Fehler:

ReferenceError: check_garden_door_scheduler is not definedSelbst wenn ich den Titel im CRON ändere erscheint er nicht in den CRON Stop Block.
Bestehende Skripte zeigen optisch noch zum CRON Titel passende Titel im Stop, aber es kommt auch der ReferenceError wenn man speichert.Titel von neue Zeitplan CRON Triggern in einem komplett neuem Skript werden im Stop Block gar nicht angeboten.
Anscheinend wird keine Variable mehr vom Typ cron passend zum Zeitplan erstellt:<variable type="cron" id="check_garden_door_scheduler">check_garden_door_scheduler</variable>Edit: Mit 7.9.3 funktioniert es problemlos.
-
@ralla66 Du wollest einen leeren Post-Request und jetzt kommt die andere Seite damit nicht klar und möchte Werte? :)
Was rufst Du auf? Die ntp config? Die braucht doch Werte für die Konfiguration - laut Doku:
curl -u "admin:password" http://192.168.10.10/api/ntp/config -d 'data={"ntp_server":"my.own.ntp.server.home","ntp_timezone":"CET-1CEST,M3.5.0,M10.5.0/3","ntp_timezone_descr":"Europe/Berlin"}' {"type":"success","message":"Settings saved!"}Ich suche mal nicht weiter, gerne erklären wo der Fehler im JavaScript liegt mit einem funktionierenden Beispiel in curl.
kurz zur Info,
Post geht jetzt zu den Hoymiles Wechselrichtern raus, Limit wird in der WebUi gesetzt.
Code 1002 war Daten falsch gesendet.
Curl auf einem Windows 10 System muß Data in doppelten Hochzeichen gesetzt werden also
" data ...................... " sonst auch hier Code 1002
Daten Leerfeld teste ich noch per Wireshark.Geilomat,
Danke, Dankehttp://admin:blablabla@192.168.2.65/api/limit/config data={"serial":"114184210379", "limit_type":1, "limit_value":25}"
-
@haus-automatisierung Bei CRON in der Form bekomme ich in Skripten mit 7.9.4 folgenden Fehler:

ReferenceError: check_garden_door_scheduler is not definedSelbst wenn ich den Titel im CRON ändere erscheint er nicht in den CRON Stop Block.
Bestehende Skripte zeigen optisch noch zum CRON Titel passende Titel im Stop, aber es kommt auch der ReferenceError wenn man speichert.Titel von neue Zeitplan CRON Triggern in einem komplett neuem Skript werden im Stop Block gar nicht angeboten.
Anscheinend wird keine Variable mehr vom Typ cron passend zum Zeitplan erstellt:<variable type="cron" id="check_garden_door_scheduler">check_garden_door_scheduler</variable>Edit: Mit 7.9.3 funktioniert es problemlos.
-
kurz zur Info,
Post geht jetzt zu den Hoymiles Wechselrichtern raus, Limit wird in der WebUi gesetzt.
Code 1002 war Daten falsch gesendet.
Curl auf einem Windows 10 System muß Data in doppelten Hochzeichen gesetzt werden also
" data ...................... " sonst auch hier Code 1002
Daten Leerfeld teste ich noch per Wireshark.Geilomat,
Danke, Dankehttp://admin:blablabla@192.168.2.65/api/limit/config data={"serial":"114184210379", "limit_type":1, "limit_value":25}"
@ralla66 sagte in JavaScript 7.9.0 - Neue Objekt- und HTTP-Bausteine:
Post geht jetzt zu den Hoymiles Wechselrichtern raus

Okay, aber warum als String? Normalerweise müsstest Du das auch als Objekt definieren können mit den verschiedenen Eigenschaften (der HTTP-Block macht dann ja JSON draus im POST-Request). So ist der Block zumindest gedacht und dafür gibts ja die neuen Blöcke - damit man JSON nicht so umständlich zusammenbauen muss.
