NEWS
Java Script https selfsigned certificate
-
Hi zusammen,
seit nunmehr 2 Wochen versuche ich in JScript einen 'API' Call zu machen.
Zuerst war meine Idee, in Blockly den Exec Block zu benuten und einfach 'curl' als Befehl, dann Java Script mit fetch() oder XMLHTTPRequest, ALLES funktioniert nicht.Chat-GPT hat mir 1000 Scripte geliefert, die alle nicht funktionieren.
Dann habe ich mehr oder weniger durch Zufall hier im Forum alle moeglichen Threads dazu gelesen. Alles keine Loesung oder augenscheinlich nichtmal funktional.Nun habe ich ENDLICH den Fehler gefunden.
Es ist ein selfsigned SSL Zertifikat, welches die WebSite (Unifi-Controller) zurueck gibt. Das bricht der 'request' im JScript Editor aber ab.Warum gibt es im ioBroker - JScript Adapter kein fetch()?
Was muss man dafuer tun? Im unterliegenden node 18.x.x ist es drin und funktioniert.
Von der Struktur unter ioBroker / node habe ich keine Ahnung, daher kann die Frage auch dumm sein.Aber nun meine eigentliche Frage:
Wie kann ich im JScript Editor im ioBroker einen selfsigned https POST mit JSON daten absetzen?
Weil request ist ja im ioBroker, habe ich im manual gefunden, aber das benoetigt auch htttps...Habt Ihr eine kurze Idee oder einen Link um mich in die richtige Richtung zu schubsen?
Oder soll ich npm install fetch-node?
Oh - und nein der Unifi Adapeter ist KEINE Loesung.
Zu unzuverlaessig in 3 Installationen, das schreib ich lieber selber.Vielen Dank fuer einen Tip.
-
@cat1510 sagte in Java Script https selfsigned certificate:
Wie kann ich im JScript Editor im ioBroker einen selfsigned https POST mit JSON daten absetzen?
Axios?
const axios = require('axios'); // Reverse-Geocoding anhand der aktuellen Koordinaten async function updateLocation() { const url = `https://nominatim.openstreetmap.org/reverse?lat=${latitude}&lon=${longitude}&format=json`; const response = await axios.get(url); ...
Würde mich sehr wundern, wenn man dem nicht beibringen könnte, Zertifikatsfehler zu ignorieren.
Habe ich aber bislang selbst noch nicht benötigt. -
@cat1510 sagte in Java Script https selfsigned certificate:
Habt Ihr eine kurze Idee oder einen Link um mich in die richtige Richtung zu schubsen?
Ich stand vor Kurzem vor einem ähnlichen Problem.
Mir hat hier eine Lösung mit https-Agent in den Optionen des fetch-Aufrufes geholfen, siehe z.B.: stackoverflow - using rejectUnauthorized wtih node-fetch in node.js
Achtung dabei, bitte lies betreffend Sicherheitsrisiko in der Lösung unbedingt auch die Warnung in der ersten Zeile der Antwort dazu!Im Javascript-Adapter dazu unter npm Module „node-fetch@2“ einfügen.
Das „@2“ ist wesentlich siehe: https://github.com/node-fetch/node-fetch?tab=readme-ov-file#commonjs
Bei require im js-Code wird dann aber „nur“ const fetch = require("node-fetch") ohne dem „@2“; eingefügt, wie auch im obigen Link zum Beispiel. -
Hi,
vielen Dank fuer Deine Antwort / Anleitung.
Es funktioniert so wie beschrieben auf jeden Fall.
Man konnte noch ergaenzen, dass mal den iobroker einmal neu starten muss.Leider bin ich immer noch zu doof das Ergebnis(result) in eine Variable schreiben zu lassen und damit weiter zu arbeiten.
Zum Glueck gab es in der Zwischenzeit ein Blockly update.
Damit glaube ich auch, dass das hier obsolete ist und man Script Engine ab 7.9.0 verwenden sollte.
Vielen Danke fuer Deine Hilfe auf jeden Fall...LG