Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Zugangsgeschützte API-Schnittstelle auslesen mit Blockly

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Zugangsgeschützte API-Schnittstelle auslesen mit Blockly

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      schnipsel71 @TT-Tom last edited by

      @tt-tom Hab' ich gemacht. Die gleiche Fehlermeldung kommt aber wieder nach 2 Sekunden.

      T 1 Reply Last reply Reply Quote 0
      • S
        schnipsel71 @TT-Tom last edited by

        @tt-tom Ja, leider.

        1 Reply Last reply Reply Quote 0
        • T
          TT-Tom @schnipsel71 last edited by

          @schnipsel71 wenn du timeout auf 3000 setzt kommt nach zwei Sekunden die Fehlermeldung. Kann ich nicht nachvollziehen. Zeige mal das Script bitte.

          S 1 Reply Last reply Reply Quote 0
          • S
            schnipsel71 @TT-Tom last edited by

            @tt-tom

            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
            
            T 1 Reply Last reply Reply Quote 0
            • M
              MCU last edited by

              @schnipsel71 Im Beispiel vom javascript steht die Authentifizierung an 3. Stelle.
              https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#httppost

              httpPost(
                  '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);
                      }
                  }
              );
              
              1 Reply Last reply Reply Quote 1
              • T
                TT-Tom @schnipsel71 last edited by TT-Tom

                @schnipsel71 nimm mal bitte httpGet statt httpPost.
                Du möchtest ja Daten abrufen und nicht senden.

                S 1 Reply Last reply Reply Quote 0
                • OliverIO
                  OliverIO last edited by

                  @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

                  1 Reply Last reply Reply Quote 0
                  • OliverIO
                    OliverIO last edited by OliverIO

                    @schnipsel71

                    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.

                    S 1 Reply Last reply Reply Quote 1
                    • S
                      schnipsel71 @TT-Tom last edited by schnipsel71

                      @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?

                      T 1 Reply Last reply Reply Quote 0
                      • S
                        schnipsel71 @OliverIO last edited by

                        @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".

                        1 Reply Last reply Reply Quote 0
                        • T
                          TT-Tom @schnipsel71 last edited by

                          @schnipsel71 lass mal das timeout weg.

                          S 1 Reply Last reply Reply Quote 0
                          • S
                            schnipsel71 @TT-Tom last edited by

                            @tt-tom Da kommt nur das zurück:

                            javascript.0	17:09:12.076	error	script.js.common.Hycube_TT-Tom: timeout of 2000ms exceeded
                            
                            T 1 Reply Last reply Reply Quote 0
                            • T
                              TT-Tom @schnipsel71 last edited by TT-Tom

                              @schnipsel71

                              habe mir noch mal den Code aus Post 2 angesehen. is nur ein Versuch

                              httpGet(
                                  'http://ip/auth/',
                                  {
                                      headers: {
                                      'Authorization': '(Basic hycube:hycube)'
                                      },
                                  },
                                  (error, response) => {
                                      if (!error) {
                                          console.log(response.statusCode);
                                          console.log(response.data);
                                          console.log(response.headers);
                                      } else {
                                          console.error(error);
                                      }
                                  }
                              )
                              
                              

                              oder mal die Klammern beim User:password weglassen.

                              OliverIO S 2 Replies Last reply Reply Quote 0
                              • OliverIO
                                OliverIO @TT-Tom last edited by OliverIO

                                @tt-tom sagte in Zugangsgeschützte API-Schnittstelle auslesen mit Blockly:

                                oder mal die Klammern beim User:password weglassen.

                                es wird immer mehr verschlimmbessert.
                                so funktioniert Basic Authentiction nicht.
                                Also entweder überlasst ihr das dem httpPost, in dem ihr im configobjekt user und password gemäß der doku angebt. dann erstellt das system für euch den header richtig
                                oder ihr erstellt den header selber, dazu muss aber userid und password richtig kodiert werden.
                                https://de.wikipedia.org/wiki/HTTP-Authentifizierung#Basic_Authentication
                                vergleiche dazu mein Beispiel wo das so gemacht wird.

                                Allerdings kommt die Anfrage ja noch gar nicht soweit, da der Server auf die Anfrage ja nicht reagiert und nach timeout die abfrage abgebrochen wird.

                                1 Reply Last reply Reply Quote 0
                                • S
                                  schnipsel71 @TT-Tom last edited by

                                  @tt-tom Jetzt kommt tatsächlich folgende Reaktion im Log:

                                  javascript.0	19:11:08.887	info	script.js.common.Hycube_TT-Tom: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                                  javascript.0	19:11:08.923	info	script.js.common.Hycube_TT-Tom: 401
                                  javascript.0	19:11:08.924	info	script.js.common.Hycube_TT-Tom:
                                  javascript.0	19:11:08.924	info	script.js.common.Hycube_TT-Tom: Object [AxiosHeaders] { 'access-control-allow-headers': 'Authorization', 'access-control-allow-origin': '*', connection: 'close', 'content-length': '0', 'content-type': 'cty', 'www-authenticate': 'Basic realm="00"' }
                                  javascript.0	19:11:16.897	info	Stopping script script.js.common.Hycube_TT-Tom
                                  

                                  Was fange ich damit jetzt an?

                                  OliverIO T 2 Replies Last reply Reply Quote 0
                                  • OliverIO
                                    OliverIO @schnipsel71 last edited by OliverIO

                                    @schnipsel71

                                    401 ist Unautorized

                                    https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401
                                    vgl dazu mein beitrag von soeben

                                    S 1 Reply Last reply Reply Quote 0
                                    • S
                                      schnipsel71 @OliverIO last edited by schnipsel71

                                      @oliverio sagte in Zugangsgeschützte API-Schnittstelle auslesen mit Blockly:

                                      @schnipsel71

                                      401 ist Unautorized

                                      https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401
                                      vgl dazu mein beitrag von soeben

                                      Danke für die Info.
                                      Immerhin aber wenigstens mal ein Lebenszeichen.

                                      Wie kann ich denn nun aber ganz konkret die Authentifizierung richtig durchführen?

                                      Hier mal das API-Manual vom Hycube-System:
                                      hycube API_Manual.pdf

                                      OliverIO 1 Reply Last reply Reply Quote 0
                                      • T
                                        TT-Tom @schnipsel71 last edited by

                                        @schnipsel71

                                        Probiere mal das.

                                        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);
                                                }
                                            }
                                        )
                                         
                                        
                                        
                                        OliverIO S 2 Replies Last reply Reply Quote 0
                                        • OliverIO
                                          OliverIO @schnipsel71 last edited by

                                          @oliverio sagte in Zugangsgeschützte API-Schnittstelle auslesen mit Blockly:

                                          Also entweder überlasst ihr das dem httpPost, in dem ihr im configobjekt user und password gemäß der doku angebt. dann erstellt das system für euch den header richtig

                                          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);
                                                  }
                                              }
                                          );
                                          
                                          S 1 Reply Last reply Reply Quote 0
                                          • OliverIO
                                            OliverIO @TT-Tom last edited by OliverIO

                                            @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

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            467
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            77
                                            3711
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo