NEWS
Zugangsgeschützte API-Schnittstelle auslesen mit Blockly
-
@tt-tom sagte in Zugangsgeschützte API-Schnittstelle auslesen mit Blockly:
"Authorization": Buffer.from("Basic hycube:hycube").toString(’base64’)
leider auch nicht. Basic soll nicht mit codiert werden.
"Authorization": "Basic " + Buffer.from("hycube:hycube").toString(’base64’)
Ist lustigerweise im Herstellerbeispiel auch falsch
Besser ist aber über config-objekt -
@tt-tom Dieser Code:
httpGet( 'http://ip/auth/', { headers: { "Authorization": "Basic " + Buffer.from("hycube:hycube").toString(’base64’) }, }, (error, response) => { if (!error) { console.log(response.statusCode); console.log(response.data); console.log(response.headers); } else { console.error(error); } } )
ergibt folgenden Fehler:
javascript.0 20:13:06.962 info Start JavaScript script.js.common.Hycube_TT-Tom (Javascript/js) javascript.0 20:13:06.963 error script.js.common.Hycube_TT-Tom compile failed: at script.js.common.Hycube_TT-Tom:6
...scheint also nur ein syntaktischer Fehler zu sein...
-
@oliverio Dieser Code:
httpGet( 'http://ip/auth/', null, { basicAuth: { user: 'hycube', password: 'hycube' } }, (error, response) => { if (!error) { console.log(response.statusCode); console.log(response.data); console.log(response.headers); } else { console.error(error); } } );
ergibt diese Fehlermeldungen:
javascript.0 20:17:23.191 info Start JavaScript script.js.common.HycubeOliverIO (Javascript/js) javascript.0 20:17:23.194 error script.js.common.HycubeOliverIO: TypeError: Cannot read properties of null (reading 'headers') javascript.0 20:17:23.195 error at script.js.common.HycubeOliverIO:2:1 javascript.0 20:17:23.195 error at script.js.common.HycubeOliverIO:25:3
Vielleicht hilft dir das weiter...
-
@schnipsel71 sagte in Zugangsgeschützte API-Schnittstelle auslesen mit Blockly:
wir nähern uns httpGet hat 2 Argumente und httpPost hat 3
httpGet( 'http://ip/auth/', { basicAuth: { user: 'hycube', password: 'hycube' } }, (error, response) => { if (!error) { console.log(response.statusCode); console.log(response.data); console.log(response.headers); } else { console.error(error); } } );
bitte über den werkzeugschlüssel auch mal noch alles anschalten
-
@oliverio Okay, folgende Meldungen:
javascript.0 20:47:50.692 info Start JavaScript script.js.common.HycubeOliverIO (Javascript/js) javascript.0 20:47:50.702 info script.js.common.HycubeOliverIO: httpGet(config={"method":"get","url":"http://ip/auth/","responseType":"text","responseEncoding":"utf8","timeout":2000,"auth":{"username":"hycube","password":"hycube"},"headers":{"User-Agent":"Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/121.0"}}) javascript.0 20:47:50.703 info script.js.common.HycubeOliverIO: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 20:47:50.741 info script.js.common.HycubeOliverIO: 401 javascript.0 20:47:50.741 info script.js.common.HycubeOliverIO: javascript.0 20:47:50.741 info script.js.common.HycubeOliverIO: Object [AxiosHeaders] { 'access-control-allow-headers': 'Authorization', 'access-control-allow-origin': '*', connection: 'close', 'content-length': '0', 'content-type': 'cty', 'www-authenticate': 'Basic realm="00"' }
Leider ist die böse 401 wieder dabei...
-
Hatte ich schon mal gefragt, dein Code. Hatte irgendwie nicht funktioniert.
Ps: jetzt ist erstmal EM kucken
-
nein der ist falsch, wie gesagt, bei get nur 2 argumente (url+config)
und bei httppost 3 argumente, url+daten+config -
so jetzt per header.
einmal so wie es sein sollte und einmal ein header wie er bei request wohl funktioniert hat, aber eigentlich nicht richtig ist. Das Basic wird angegeben fließt aber in die base64 kodierung nicht einhttpGet( 'http://jsonplaceholder.typicode.com/posts', { headers: { "Authorization": "Basic " + Buffer.from("hycube:hycube").toString("base64") } }, (error, response) => { if (!error) { console.log(response.statusCode); console.log(response.data); console.log(response.headers); } else { console.error(error); } } );
httpGet( 'http://jsonplaceholder.typicode.com/posts', { headers: { "Authorization": Buffer.from("Basic hycube:hycube").toString("base64") } }, (error, response) => { if (!error) { console.log(response.statusCode); console.log(response.data); console.log(response.headers); } else { console.error(error); } } );
-
@oliverio Ich verstehe nicht ganz: Was hat der Code mit meiner Anlage von Hycube zu tun? Ist die URL ein Versehen und soll dort stattdessen die IP meiner Hycube-Anlage stehen?
Wenn ich folgenden Code teste:httpGet( 'http://ip/auth/', { headers: { "Authorization": Buffer.from("Basic hycube:hycube").toString("base64") } }, (error, response) => { if (!error) { console.log(response.statusCode); console.log(response.data); console.log(response.headers); } else { console.error(error); } } );
dann bekomme ich folgende LOG-Einträge:
javascript.0 23:49:41.323 info Start JavaScript script.js.common.HycubeOliverIO (Javascript/js) javascript.0 23:49:41.325 info script.js.common.HycubeOliverIO: httpGet(config={"method":"get","url":"http://ip/auth/","responseType":"text","responseEncoding":"utf8","timeout":2000,"headers":{"User-Agent":"Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/121.0","Authorization":"QmFzaWMgaHljdWJlOmh5Y3ViZQ=="}}) javascript.0 23:49:41.326 info script.js.common.HycubeOliverIO: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 23:49:41.392 info script.js.common.HycubeOliverIO: 200 javascript.0 23:49:41.392 info script.js.common.HycubeOliverIO: ewogICAgIlBlcm1pc3Npb24iOiAzLAogICAgImV4cCI6IDE3MjA5OTczODEKfQo= javascript.0 23:49:41.392 info script.js.common.HycubeOliverIO: Object [AxiosHeaders] { 'access-control-allow-headers': 'Authorization', 'access-control-allow-origin': '*', connection: 'close', 'content-length': '64', 'content-type': 'cty' }
-
ja mit der url habe ich getestet.
das ergebnis sieht sehr gut aus.
http 200 heiß erfolgund
ewogICAgIlBlcm1pc3Npb24iOiAzLAogICAgImV4cCI6IDE3MjA5OTczODEKfQoist der session token für die nächste abfrage.
keine angst der ist sicherlich schon abgelaufen und das gerät ist ja nur in deinem lan erreichbar
welche der beiden versionen war das jetzt? -
@oliverio Der oben stehende Code. Gut, aber wie verwende ich den Token jetzt für die Abfrage der eigentlichen Werte?
-
@schnipsel71 sagte in Zugangsgeschützte API-Schnittstelle auslesen mit Blockly:
Der oben stehende Code
es waren 2 versionen des selben codes.
also 1.version oder 2.version?
-
@oliverio Na den hier:
httpGet( 'http://ip/auth/', { headers: { "Authorization": Buffer.from("Basic hycube:hycube").toString("base64") } }, (error, response) => { if (!error) { console.log(response.statusCode); console.log(response.data); console.log(response.headers); } else { console.error(error); } } );
-
also version 2. sorry wenn ich nachfragen musste. bin leider kein hellseher.
hab ja klar hingeschrieben, das es 2 sind und der andere wahrscheinlcih nicht funktioniert hat.
leider hat die firma dann wohl basic auth nicht richtig umgesetzt.so hier musst du nun an 2 stellen die ip adresse eintragen.
da die abfrage aus 2 requests besteht. 1. sozusagen login und man bekommt ein token. das token muss dann in der 2.abfrage mitgegeben werden, so das man die eigentlichen werte erhält.
bitte dann wieder die ausgegebenen daten hier postenhttpGet( 'http://ip/auth/', { basicAuth: { user: 'hycube', password: 'hycube' }, headers: { "Authorization": Buffer.from("Basic hycube:hycube").toString("base64"), } }, (error, response) => { if (!error) { let token = response.data; console.log("Token "+ token); httpGet( 'http://ip/get_values/', { headers: { "Authorization": token } }, (error, response) => { if (!error) { console.log(response.statusCode); console.log(response.data); console.log(response.headers); } else { console.error(error); } } ); } else { console.error(error); } } );
-
@oliverio Okay, deswegen hatte ich den Code ja auch zusammen mit dem Log gepostet. Übersehen, aber egal.
Hier das Ergebnis des zweifachen Aufrufs mit der bösen 401:javascript.0 00:20:35.105 info Start JavaScript script.js.common.HycubeOliverIO (Javascript/js) javascript.0 00:20:35.117 info script.js.common.HycubeOliverIO: httpGet(config={"method":"get","url":"http://ip/auth/","responseType":"text","responseEncoding":"utf8","timeout":2000,"auth":{"username":"hycube","password":"hycube"},"headers":{"User-Agent":"Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/121.0","Authorization":"QmFzaWMgaHljdWJlOmh5Y3ViZQ=="}}) javascript.0 00:20:35.119 info script.js.common.HycubeOliverIO: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 00:20:35.154 info script.js.common.HycubeOliverIO: Token javascript.0 00:20:35.154 info script.js.common.HycubeOliverIO: httpGet(config={"method":"get","url":"http://ip/get_values/","responseType":"text","responseEncoding":"utf8","timeout":2000,"headers":{"User-Agent":"Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/121.0","Authorization":""}}) javascript.0 00:20:35.242 info script.js.common.HycubeOliverIO: 401 javascript.0 00:20:35.242 info script.js.common.HycubeOliverIO: javascript.0 00:20:35.243 info script.js.common.HycubeOliverIO: Object [AxiosHeaders] { 'access-control-allow-headers': 'Authorization', 'access-control-allow-origin': '*', connection: 'close', 'content-length': '0', 'content-type': 'application/json; charset=utf-8', 'www-authenticate': 'Basic realm="02"' }
-
dann war es doch version1?
bitte beide versionen oben nochmal probieren und beide ergebnisse posten
um es genau zu machen
dieser post
https://forum.iobroker.net/topic/75532/zugangsgeschützte-api-schnittstelle-auslesen-mit-blockly/45?_=1720983979848 -
ah sorry
da hat sich beim copy paste noch was eingeschlichenhttpGet( 'http://ip/auth/', { headers: { "Authorization": Buffer.from("Basic hycube:hycube").toString("base64") } }, (error, response) => { if (!error) { let token = response.data; console.log("Token "+ token); httpGet( 'http://ip/get_values/', { headers: { "Authorization": token } }, (error, response) => { if (!error) { console.log(response.statusCode); console.log(response.data); console.log(response.headers); } else { console.error(error); } } ); } else { console.error(error); } } );
-
@oliverio Entschuldige bitte, aber ich glaube du verwechselst da etwas. Also nochmal: Wenn ich das hier teste:
httpGet( 'http://ip/auth/', { headers: { "Authorization": Buffer.from("Basic hycube:hycube").toString("base64") } }, (error, response) => { if (!error) { console.log(response.statusCode); console.log(response.data); console.log(response.headers); } else { console.error(error); } } );
dann bekomme ich dieses Ergebnis:
javascript.0 23:49:41.323 info Start JavaScript script.js.common.HycubeOliverIO (Javascript/js) javascript.0 23:49:41.325 info script.js.common.HycubeOliverIO: httpGet(config={"method":"get","url":"http://ip/auth/","responseType":"text","responseEncoding":"utf8","timeout":2000,"headers":{"User-Agent":"Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/121.0","Authorization":"QmFzaWMgaHljdWJlOmh5Y3ViZQ=="}}) javascript.0 23:49:41.326 info script.js.common.HycubeOliverIO: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 23:49:41.392 info script.js.common.HycubeOliverIO: 200 javascript.0 23:49:41.392 info script.js.common.HycubeOliverIO: ewogICAgIlBlcm1pc3Npb24iOiAzLAogICAgImV4cCI6IDE3MjA5OTczODEKfQo= javascript.0 23:49:41.392 info script.js.common.HycubeOliverIO: Object [AxiosHeaders] { 'access-control-allow-headers': 'Authorization', 'access-control-allow-origin': '*', connection: 'close', 'content-length': '64', 'content-type': 'cty' }
Exakt so steht es bereits in meinem Post direkt nach dem von dir hier zitierten Post.
Die andere Version, also:
httpGet( 'http://ip/auth/', { headers: { "Authorization": "Basic " + Buffer.from("hycube:hycube").toString("base64") } }, (error, response) => { if (!error) { console.log(response.statusCode); console.log(response.data); console.log(response.headers); } else { console.error(error); } } );
führt zu folgendem Fehler:
javascript.0 00:40:22.638 info Start JavaScript script.js.common.HycubeOliverIO (Javascript/js) javascript.0 00:40:22.647 info script.js.common.HycubeOliverIO: httpGet(config={"method":"get","url":"http://ip/auth/","responseType":"text","responseEncoding":"utf8","timeout":2000,"headers":{"User-Agent":"Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/121.0","Authorization":"Basic aHljdWJlOmh5Y3ViZQ=="}}) javascript.0 00:40:22.649 info script.js.common.HycubeOliverIO: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 00:40:22.706 info script.js.common.HycubeOliverIO: 401 javascript.0 00:40:22.706 info script.js.common.HycubeOliverIO: javascript.0 00:40:22.706 info script.js.common.HycubeOliverIO: Object [AxiosHeaders] { 'access-control-allow-headers': 'Authorization', 'access-control-allow-origin': '*', connection: 'close', 'content-length': '0', 'content-type': 'cty', 'www-authenticate': 'Basic realm="00"' }
-
@oliverio sagte in Zugangsgeschützte API-Schnittstelle auslesen mit Blockly:
ah sorry
da hat sich beim copy paste noch was eingeschlichenich hatte mittlerweile korrigiert
https://forum.iobroker.net/topic/75532/zugangsgeschützte-api-schnittstelle-auslesen-mit-blockly/54?_=1720983979855 -
@oliverio Ja, habe es schon gesehen und schon erfolgreich getestet:
javascript.0 00:44:41.907 info Start JavaScript script.js.common.HycubeOliverIO (Javascript/js) javascript.0 00:44:41.909 info script.js.common.HycubeOliverIO: httpGet(config={"method":"get","url":"http://ip/auth/","responseType":"text","responseEncoding":"utf8","timeout":2000,"headers":{"User-Agent":"Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/121.0","Authorization":"QmFzaWMgaHljdWJlOmh5Y3ViZQ=="}}) javascript.0 00:44:41.910 info script.js.common.HycubeOliverIO: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 00:44:41.955 info script.js.common.HycubeOliverIO: Token ewogICAgIlBlcm1pc3Npb24iOiAzLAogICAgImV4cCI6IDE3MjEwMDA2ODEKfQo= javascript.0 00:44:41.956 info script.js.common.HycubeOliverIO: httpGet(config={"method":"get","url":"http://ip/get_values/","responseType":"text","responseEncoding":"utf8","timeout":2000,"headers":{"User-Agent":"Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/121.0","Authorization":"ewogICAgIlBlcm1pc3Npb24iOiAzLAogICAgImV4cCI6IDE3MjEwMDA2ODEKfQo="}}) javascript.0 00:44:42.016 info script.js.common.HycubeOliverIO: 200 javascript.0 00:44:42.016 info script.js.common.HycubeOliverIO: { "Battery_C": 52, "Battery_I": -13, "Battery_P": -615, "Battery_V": 49.5, "Grid_P": -5, "Grid_V": 226.26, "Grid_f": 50.005, "Home_P": 563, "Inv1_I": 2.5, "Inv1_P": 570, "Inv1_V": 227.4, "Meter2_P": 2, "solar1_I": 0, "solar1_p": 0, "solar1_v": 7.9, "solar2_I": 0, "solar2_p": 0, "solar2_v": 8.9, "solar_total_P": 0 } javascript.0 00:44:42.016 info script.js.common.HycubeOliverIO: Object [AxiosHeaders] { 'access-control-allow-headers': 'Authorization', 'access-control-allow-origin': '*', connection: 'close', 'content-length': '393', 'content-type': 'application/json; charset=utf-8' }
Jetzt muss ich die Werte nur noch in die Variablen kriegen...