NEWS
Zugangsgeschützte API-Schnittstelle auslesen mit Blockly
-
@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. -
@oliverio said in Zugangsgeschützte API-Schnittstelle auslesen mit Blockly:
GridPower
Hi, oki, Das habe ich verstanden und im alten Script war das auch mal so bei mir.
Ich hab das jetzt angepasst
setState("0_userdata.0.Datenpunkte_ioBroker.Hycube", BatteryPower); setState("0_userdata.0.Datenpunkte_ioBroker.Hycube", GridPower); setState("0_userdata.0.Datenpunkte_ioBroker.Hycube", HausPower); setState("0_userdata.0.Datenpunkte_ioBroker.Hycube", solar);
Dann lege ich in dem Hycube Ordner den Datenpunkt an aber selbes Ergebnis. 0
Die Orangenen Fehler von vorhin sind aber weg. Das würde bedeuten, dass er den Ordner findet
-
sorry war mein Fehler,
musste natürlich den Datenpunkt komplett im Script angeben.Jetzt gehts
Vielen Dank und schönen Sonntag
-
@heiko-glohr du schreibst die daten immer in den gleichen datenpunkt
das ist die bezeichnung des datenpunkts
0_userdata.0.Datenpunkte_ioBroker.Hycube
das ist die variable in der die daten enthalten sind und in den datenpunkt geschrieben werden sollen
BatteryPower
-
ok,
Werte kommen jetzt an aber noch wirr
Battery hat grag 81% und Wert kommt mit -1167,00667812
-
das sind die werte, die oben auf der console ausgegeben worden sind
von daher passt es vom wert, was da geliefert wird.
die interpretation der werte kann ich nicht. ich habe das gerät nicht.
aber evtl andere können da etwas dazu sagen.
hast du da eine weboberfläche oder app des gerätes?der dokumentation nach
file:///C:/Users/oweit/Downloads/API_Manual%20(3).pdfbedeuten die buchstaben das
Unit of measurement
Name Unit
C Capacity percent
P Power watt (W)
U Voltage volt (V)
I Current Ampere (A)
f frequenz Hertz (Hz){ "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 }
-
@oliverio
ah ok,ich spiel einfach mal bissl rum.
ISt ja schon mal gut wenn was zurückkommt. -
Nun passt alles soweit
Werte sind richtigSolarerzeugung kommt auch richtig zurück wenn ich das Script starte
Bleibt dann aber so stehenWie erreiche ich dass die Werte immer aktuell sind
-
du machst um deinen vorhandenen code die schedule anweisung
das müsste theoretisch alle 5 minuten dann ausführen.
mehr details findest du hier
https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#schedule
ich arbeite damit allerdings nicht, daher nur theoretischschedule("* */5 * * * *"),()=>{ hier dein code });