NEWS
[Closed] REST-Ergebnis für Instanz-Vorbelegung
-
Hallo,
ich habe einen (NUKI) Adapter gebaut, für den ich bei der Instanzerzeugung für einen der Eingabeparameter eine Auswahlliste erzeugen möchte. Die Werte der Auswahlliste sollen dynamisch über einen RESTful-Aufruf als JSON abgerufen werden*. Ich habe in den Anleitungen nicht gefunden, wie bzw. ob so etwas machbar ist.
Kann mir jemand einen Tipp geben, an welcher Stelle ich ansetzen muss/kann um 1. die URL aufzurufen und 2. die empfangene Liste als Selekt-Werteliste im Parameterfeld der index_m.html anzubinden?
*Es handelt sich bei der URL um die Bridge-Discovery URL von NUKI (https://api.nuki.io/discover/bridges). Nix Schlimmes
Wäre wirklich toll, wenn mir da jemand auf die Sprünge helfen könnte.
Gruß,
Sven
-
Zum Abrufen kannst du https://nodejs.org/api/http.html#http_http_get_options_callback verwenden.
Um das ganze in die Config zu bekommen kannst du hier Spicken:
https://github.com/Jey-Cee/ioBroker.eno … .html#L132
https://github.com/Jey-Cee/ioBroker.eno … .html#L493
https://github.com/Jey-Cee/ioBroker.eno … in.js#L552
Ich hoffe das bringt dich weiter.
-
Vielen Dank Jey!
Ich hatte bisher noch keine Zeit, Deine Lösung auszuprobieren, aber ich werde berichten, wenn ich dazu komme.
Gruß,
Sven
-
Hallo nochmal,
danke Dir Jey Cee, die Links waren sehr hilfreich, und ich habe verstanden, wie ich eine Werteliste aufbauen und auch an den Adapter senden kann.
Leider habe ich den HTTP-Aufruf bisher nicht hinbekommen. Es handelt sich bei der aufzurufenden URL um eine HTTPS-Adresse, die laut Doku der normale http.get nicht unterstützt wird. Deshalb hab ich zwei Ansätze versucht:
<list type="1.">* Ich habe mit require("https") versucht, einen https.get auszuführen.
<list type="2.">* Ich habe das Ganze über request versucht (was im Adapter selbst auch wunderbar funktioniert) und dazu ein require("request") eingefügt.
Leider war beides erfolglos. Offenbar verursacht der Require-Befehl bereits einen Fehler und die HTML-Seite wird nicht vollständig aufgebaut.Da es mir bislang nicht gelungen ist, eine funktionierende Debugging-Umgebung hinzustellen :roll: , ist das für mich Trial-and-Error, ich erhalte auch keine Konsolen-Messages
Wahrscheinlich sollte der ganze Aufruf eher in ein Adapter-Js im Discovery-Adapter, aber ich hätte wirklich gern gewusst, wie dieses Problem zu lösen ist, weil ich dadurch in nur einer einzigen Instanz sämtliche Nuki-Bridges und somit alle im LAN verfügbaren Nuki-Schlösser steuern könnte.
Vielen Dank für Eure Hilfe.
Gruß,
Sven
-
Deshalb hab ich zwei Ansätze versucht:
Ich habe mit require("https") versucht, einen https.get auszuführen.
Ich habe das Ganze über request versucht (was im Adapter selbst auch wunderbar funktioniert) und dazu ein require("request") eingefügt.
Leider war beides erfolglos. Offenbar verursacht der Require-Befehl bereits einen Fehler und die HTML-Seite wird nicht vollständig aufgebaut. ` Kannst du mal den Code zeigen?
Da es mir bislang nicht gelungen ist, eine funktionierende Debugging-Umgebung hinzustellen , ist das für mich Trial-and-Error, ich erhalte auch keine Konsolen-Messages ` Welche IDE oder Editor verwendest du?
-
Hi,
hier der Code des https.get-Ansatzes:
function getNukiBridges() { const https = require('https'); https.get('https://api.nuki.io/discover/bridges', (resp) => { let data = ''; // A chunk of data has been recieved. resp.on('data', (chunk) => { data += chunk; }); // The whole response has been received. Print out the result. resp.on('end', () => { console.log(JSON.parse(data).explanation); }); }).on("error", (err) => { console.log("Error: " + err.message); }); }
Und hier der request-Ansatz:
function getNukiBridges() { const request = require('request'); request('https://api.nuki.io/discover/bridges', { json: true }, (err, res, body) => { if (err) { return console.log(err); } console.log(body.url); console.log(body.explanation); }); }
Bei der Fehlersuche habe ich nach und nach immer mehr Code auskommentiert, bis jeweils nur noch der
const https = require('https');
bzw.````
const request = require('request');Ich verwende Visual Studio Code unter Windows 10 zum Entwickeln. Ich hab aber auch versucht eine Entwicklungsumgebung in der VM (erst Linux Mint, dann Ubuntu) mit Visual Studio Code und unter Ubuntu auch mit Webstorm einzurichten. Entwickeln geht wunderbar in allen Fällen, aber der Debugger streikt in jedem Fall.