[Offen] REST-Ergebnis für Instanz-Vorbelegung

Wie man einen Adapter entwickelt, oder wie man debuggen kann.
Antworten
Benutzeravatar
smaragdschlange
starter
Beiträge: 16
Registriert: 17.08.2018, 13:41

[Offen] REST-Ergebnis für Instanz-Vorbelegung

Beitrag von smaragdschlange » 23.09.2018, 19:48

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
Zuletzt geändert von smaragdschlange am 07.10.2018, 15:49, insgesamt 1-mal geändert.
Gruß,
Sven

Benutzeravatar
Jey Cee
guru
Beiträge: 1627
Registriert: 22.12.2014, 17:00

Re: REST-Ergebnis für Instanz-Vorbelegung

Beitrag von Jey Cee » 23.09.2018, 20:20

Zum Abrufen kannst du http.get 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.

Benutzeravatar
smaragdschlange
starter
Beiträge: 16
Registriert: 17.08.2018, 13:41

Re: REST-Ergebnis für Instanz-Vorbelegung

Beitrag von smaragdschlange » 28.09.2018, 12:40

Vielen Dank Jey!

Ich hatte bisher noch keine Zeit, Deine Lösung auszuprobieren, aber ich werde berichten, wenn ich dazu komme.

Gruß,
Sven
Gruß,
Sven

Benutzeravatar
smaragdschlange
starter
Beiträge: 16
Registriert: 17.08.2018, 13:41

Re: REST-Ergebnis für Instanz-Vorbelegung

Beitrag von smaragdschlange » 06.10.2018, 10:15

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:
  • 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.

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
Gruß,
Sven

Benutzeravatar
Jey Cee
guru
Beiträge: 1627
Registriert: 22.12.2014, 17:00

Re: [Offen] REST-Ergebnis für Instanz-Vorbelegung

Beitrag von Jey Cee » 11.10.2018, 16:41

smaragdschlange hat geschrieben:
06.10.2018, 10:15
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?
smaragdschlange hat geschrieben:
06.10.2018, 10:15
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?

Benutzeravatar
smaragdschlange
starter
Beiträge: 16
Registriert: 17.08.2018, 13:41

Re: [Offen] REST-Ergebnis für Instanz-Vorbelegung

Beitrag von smaragdschlange » 13.10.2018, 12:16

Hi,
hier der Code des https.get-Ansatzes:

Code: Alles auswählen

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:

Code: Alles auswählen

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

Code: Alles auswählen

const https = require('https');
bzw.

Code: Alles auswählen

const request = require('request');
Part ausgeführt wurde. Aber selbst dann wurde die Adminseite fehlerhaft dargestellt, und ich weiß nicht, welchen Fehler ich dabei noch machen konnte...

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.
Gruß,
Sven

Antworten