NEWS
Zugangsgeschützte API-Schnittstelle auslesen mit Blockly
-
zumindest mal die Erwähnung der möglichen Parameter
httpGet(url[, config])
httpPost(url[, data[, config]])und ggfs. einen Verweis auf die Axios Dokumentation., was das Config-Objekt alles kann
In der Dokumentation sehe ich nur einen Aufruf.
Den ersten Parameter mit url können die meisten noch erkennen,
das der 2.Parameter ein optinaler Datenblock ist oder was es für Config-Möglichkeiten gibt, ist für die meisten hier wahre Magie.ohne die Referenz auf Axios können viele, die das nicht wissen, im Internet nicht nach Alternativ-Beispiele suchen und sind dann unbedingt hier aufs Forum angewiesen.
Ich kann da gern einen PR machen
https://github.com/ioBroker/ioBroker.javascript/pull/1637 -
@oliverio sagte in Zugangsgeschützte API-Schnittstelle auslesen mit Blockly:
zumindest mal die Erwähnung der möglichen Parameter
Das geben doch alles die Typings vor. Bisher werden daher in keiner Funktion alle Parameter genau in der Doku erklärt.
@oliverio sagte in Zugangsgeschützte API-Schnittstelle auslesen mit Blockly:
und ggfs. einen Verweis auf die Axios Dokumentation., was das Config-Objekt alles kann
Da findet intern ein Mapping statt. Ziel ist es, unabhängig von einer Bibliothek zu sein. Daher ist die Referenz auf axios falsch. Es wird nicht alles 1:1 an axios weitergegeben. Um in Zukunft die Lib austauschen zu können und nicht wieder in die Problematik (wie bei request) zu laufen.
-
@tt-tom Ich bekomme 2 Sekunden nach Start des Programms nur das hier:
javascript.0 908 2024-07-13 01:10:42.983 error script.js.common.Hycube_neu: timeout of 2000ms exceeded
-
Schnipsel hat keine Ahnung von typings
Und ich hab es trocken ohne live ein Script zu erstellen. -
Dann hat das nach 2 Sekunden das Gerät nicht reagiert. Steht da die richtige IP Adresse drin ?
-
@schnipsel71 wenn die url stimmt dann setze den timeout einfach mal höher 3000 oder mehr.
-
@oliverio Ich habe einen Unterordner "HyWebNeu" und die vier Variablen darin manuell eingerichtet, dein Code so abgeändert:
setState('0_userdata.0.HyWebNeu.Batterie', BatteryPower); setState('0_userdata.0.HyWebNeu.Grid', GridPower); setState('0_userdata.0.HyWebNeu.Hausverbrauch', HausPower); setState('0_userdata.0.HyWebNeu.Solar', solar);
Aber es erscheint dennoch alle fünf Sekunden diese Fehlermeldung:
javascript.0 908 2024-07-13 01:27:34.284 info script.js.common.HycubeOliverIO: An error occurred:
-
@schnipsel71 sind das alle Meldungen die du bekommst??
-
@oliverio Ja, die ist richtig.
-
@tt-tom Hab' ich gemacht. Die gleiche Fehlermeldung kommt aber wieder nach 2 Sekunden.
-
@tt-tom Ja, leider.
-
@schnipsel71 wenn du timeout auf 3000 setzt kommt nach zwei Sekunden die Fehlermeldung. Kann ich nicht nachvollziehen. Zeige mal das Script bitte.
-
httpPost( 'http://ip/auth/', { timeout: 3000, 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); } } )
und hier das Log:
javascript.0 02:39:28.715 info Start JavaScript script.js.common.Hycube_neu (Javascript/js) javascript.0 02:39:28.727 info script.js.common.Hycube_neu: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 02:39:30.730 error script.js.common.Hycube_neu: timeout of 2000ms exceeded
-
@schnipsel71 Im Beispiel vom javascript steht die Authentifizierung an 3. Stelle.
https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#httpposthttpPost( 'http://jsonplaceholder.typicode.com/posts', { title: 'foo', body: 'bar', userId: 1 }, { timeout: 2000, basicAuth: { user: 'admin', password: 'dg2LdALNznHFNo' }, headers: { 'Cookie': 'PHPSESSID=298zf09hf012fh2; csrftoken=u32t4o3tb3gg43; _gat=1' } }, (error, response) => { if (!error) { console.log(response.statusCode); console.log(response.data); console.log(response.headers); } else { console.error(error); } } );
-
@schnipsel71 nimm mal bitte httpGet statt httpPost.
Du möchtest ja Daten abrufen und nicht senden. -
@schnipsel71 sagte in Zugangsgeschützte API-Schnittstelle auslesen mit Blockly:
javascript.0 02:39:28.715 info Start JavaScript script.js.common.Hycube_neu (Javascript/js) javascript.0 02:39:28.727 info script.js.common.Hycube_neu: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 02:39:30.730 error script.js.common.Hycube_neu: timeout of 2000ms exceeded
also bei timeout ist das gerät unter der angegebenen adresse nicht erreichbar, also du hast da eine falsche ip eingetragen
-
Hast du da einen web zugriff? Mit Oberfläche? Muss man da was aktivieren?
Und mit request hat es immer getan?
Evtl beim Hersteller anfragen? Evtl ist die Anleitung für ein anderes Modell
Was passiert wenn du die IP im Browser eintippst?Im obigen Ausschnitt steht die adresse
http://ip/auth/IP hast du ja hoffentlich durch die richtige IP ersetzt
Dann wäre ich mit Hilfe erst Mal fertig, da das Gerät nicht erreichbar ist, kommt das Skript ja erst gar nicht richtig weiter.
-
@tt-tom Ja, nachdem ich httpPost durch httpGet ersetzt habe, jetzt kommt zumindest nach 3 Sekunden die Meldung:
javascript.0 16:19:13.539 info Start JavaScript script.js.common.Hycube_neu (Javascript/js) javascript.0 16:19:13.551 info script.js.common.Hycube_neu: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 16:19:16.554 error script.js.common.Hycube_neu: timeout of 3000ms exceeded
Aber weiteres bekomme ich nicht. Was jetzt?
-
@oliverio Mit dem alten Beispielscript und dem Request-Befehl funktioniert es seit mindestens zwei Jahren, aber eben seit ca. 2 Monaten nur noch mit folgendem (zweifachen) Warnhinweis im Log alle fünf Sekunden:
javascript.0 241772 2024-07-14 16:26:49.736 warn script.js.Steuerung.Hycube: request package is deprecated - please use httpGet (or a stable lib like axios) instead! javascript.0 241772 2024-07-14 16:26:49.812 warn script.js.Steuerung.Hycube: request package is deprecated - please use httpGet (or a stable lib like axios) instead!
Natürlich ersetze ich hier im Forum die tatsächliche, lokale IP des Hycube-Gerätes durch "ip".
-
@schnipsel71 lass mal das timeout weg.