NEWS
Zugangsgeschützte API-Schnittstelle auslesen mit Blockly
-
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...
-
so das ist dann einfaches kopieren aus dem ursprungsskript.
httpGet( '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); var result = JSON.parse(response.data); var GridPower= (result["Grid_P"]); var BatteryPower=result["Battery_P"]; var HausPower= result["Home_P"]; var solar= result["solar1_P"]; setState("HyWeb.Batterie", BatteryPower); setState("HyWeb.Grid", GridPower); setState("HyWeb.Hausverbrauch", HausPower); setState("HyWeb.Solar", solar); } else { console.error(error); } } ); } else { console.error(error); } } );
-
@oliverio Klingt logisch. Ich habe es ausprobiert und es klappt!
Vielen herzlichen Dank, OliverIO! -
Schön das es jetzt funktioniert, das Login ist wirklich blöd gelöst.
-
@tt-tom Dir natürlich auch herzlichen Dank!
-
@schnipsel71
moin, ich habe auch eine Hycube Anlage und hatte ein fertiges Script. Das funktioniert leider seit nem Update nicht mehr.
Nun habe ich das von dir gelesen und mich an die Arbeit gemacht.
Irgendwie kommen aber keine Daten aus meiner Anlage raus.
Ich pack das mal hier rein.httpGet( 'http://10.10.1.139/auth/', { headers: { "Authorization": Buffer.from("Basic hycube:hycube").toString("base64"), } }, (error, response) => { if (!error) { let token = response.data; console.log("Token "+ token); httpGet( 'http://10.10.1.139/get_values/', { headers: { "Authorization": token } }, (error, response) => { if (!error) { console.log(response.statusCode); console.log(response.data); var result = JSON.parse(response.data); var GridPower= (result["Grid_P"]); var BatteryPower=result["Battery_P"]; var HausPower= result["Home_P"]; var solar= result["solar1_P"]; setState("HyWeb.Batterie", BatteryPower); setState("HyWeb.Grid", GridPower); setState("HyWeb.Hausverbrauch", HausPower); setState("HyWeb.Solar", solar); } else { console.error(error); } } ); } else { console.error(error); } } );
Im Debugfenster kommt
javascript.0 14:06:19.611 info Stopping script script.js.ioBroker.Energie.Hycube.hycube javascript.0 14:06:19.711 info Start JavaScript script.js.ioBroker.Energie.Hycube.hycube (Javascript/js) javascript.0 14:06:19.724 info script.js.ioBroker.Energie.Hycube.hycube: httpGet(config={"method":"get","url":"http://10.10.1.139/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 14:06:19.727 info script.js.ioBroker.Energie.Hycube.hycube: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 14:06:19.772 info script.js.ioBroker.Energie.Hycube.hycube: Token ewogICAgIlBlcm1pc3Npb24iOiAzLAogICAgImV4cCI6IDE3MjE1NjcxNzkKfQo= javascript.0 14:06:19.772 info script.js.ioBroker.Energie.Hycube.hycube: httpGet(config={"method":"get","url":"http://10.10.1.139/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":"ewogICAgIlBlcm1pc3Npb24iOiAzLAogICAgImV4cCI6IDE3MjE1NjcxNzkKfQo="}}) javascript.0 14:06:19.782 info script.js.ioBroker.Energie.Hycube.hycube: 200 javascript.0 14:06:19.782 info script.js.ioBroker.Energie.Hycube.hycube: { "Battery_C": 100, "Battery_I": -21.299999237060547, "Battery_P": -1116.8814148439415, "Battery_V": 52.43574905395508, "Grid_I_L1": -19.158, "Grid_I_L2": -18.836, "Grid_I_L3": -18.267, "Grid_P": -13177.5, "Grid_V_L1": 237.6, "Grid_V_L2": 238.1, "Grid_V_L3": 236.2, "Grid_f": 50, "Home_P": 883.8000000000002, "Inv1_I_L1": 9.6, "Inv1_I_L2": 9.7, "Inv1_I_L3": 9.5, "Inv1_P_L1": -2365, "Inv1_P_L2": -2370, "Inv1_P_L3": -2372, "Inv1_V_L1": 238, "Inv1_V_L2": 238.4, "Inv1_V_L3": 236.1, "Meter2_P": -7043.7, "Meter3_P": -7017.6, "Solar1_I": 7.3, "Solar1_P": 2563, "Solar1_V": 381.8, "Solar2_I": 7.7, "Solar2_V": 464, "solar2_P": 3284, "solar_total_P": 5847 } javascript.0 14:06:19.783 warn at Object.<anonymous> (script.js.ioBroker.Energie.Hycube.hycube:32:25) javascript.0 14:06:19.785 warn at Object.<anonymous> (script.js.ioBroker.Energie.Hycube.hycube:33:25) javascript.0 14:06:19.788 warn at Object.<anonymous> (script.js.ioBroker.Energie.Hycube.hycube:34:25) javascript.0 14:06:19.789 warn at Object.<anonymous> (script.js.ioBroker.Energie.Hycube.hycube:35:25)
Datenpunkte werden keine angelegt
Mich würde interessieren wo da der Fehler im System ist -
Du musst die datenpunkte selbst anlegen.
SetState legt sie nicht an.Die Daten kommen an, man kann sie im log erkennen
-
@oliverio
Ah ok,
Dann versuche ich das mal
Zu lange her, dass ich das gemacht hatte -
Hallo Oliviero,
irgendwie klappts noch nicht wirklich.
Das Script liegt unter Scripte\ioBroker\Energy\Hycube.
Unter Objekte gibts oben den Ordner Userdata.
Es gibt aber auch einen Ordner Javascript.Hab in verschiedenen Ordner einen state Number BatteryPower angelegt aber steht immer 0 in Orange
Wahrscheinlich falscher Order oder falsch angelegt
-
der usprüngliche anfrager hatte diese datenpunkte
setState("HyWeb.Batterie", BatteryPower); setState("HyWeb.Grid", GridPower); setState("HyWeb.Hausverbrauch", HausPower); setState("HyWeb.Solar", solar);
ich glaube ich hatte mal darauf hingewiesen, das das so nicht zulässig ist (meines Wissens nach), es gab da aber keine antwort. keine Ahnung ob ihr da noch irgend etwas anderes verwendet.
Wenn du die Datenpunkte angelegt hast, dann kopiere den Datenpunktnamen und trage ihn im Skript ein.
Also so das bspw anstatt HyWeb.batterie dort 0_userdata.Batterie dransteht.