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.
    • OliverIO
      OliverIO @schnipsel71 last edited by OliverIO

      @schnipsel71

      Hast du auch schon Seite 8 deiner Anleitung angeschaut?
      Den code hier als Text posten, dann kann man das auf die neuen methoden umstellen. da wird noch request verwendet.

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

        @oliverio Danke für den Hinweis.

        Hier der Code:

        var TimeInterval= setInterval(MyJavascript ,5000);
        
        function MyJavascript(){
        var request = require(’request’);
        var user= "hycube";
        var password= "hycube";
        var options = {
        url: ’http://10.1.1.51/auth/’,
        headers: {
        "Authorization": Buffer.from("Basic " + user + ":" + password).toString(’base64’)
        },
        body: ’<?xml version="1.0" encoding="UTF-8"?> [...]’
        };
        request.post(options, function(error, response, body) {
        if (error) {
        console.log("Ein Fehler ist aufgetreten ")
        } else {
        
        var auth_token= body;
        
        var url = require(’request’);
        var options = {
        url: ’http://10.1.1.51/get_values/’,
        headers: {
        "Authorization": auth_token
        },
        body: ’<?xml version="1.0" encoding="UTF-8"?> [...]’
        };
        
        url.post(options, function(error, response, body) {
        if (error) {
        console.log("Ein Fehler ist aufgetreten ")
        } else {
        var result = JSON.parse(body);
        
        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);
        
        }
        });
        
        
        }
        });
        
        
        }
        
        
        OliverIO 1 Reply Last reply Reply Quote 0
        • OliverIO
          OliverIO @schnipsel71 last edited by

          @schnipsel71

          Und, funktioniert er?

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

            @oliverio Das ist der alte Code mit den request-Befehlen. Er funktioniert noch, allerdings bekomme ich alle 5 Sekunden eine Warnung im Log, dass die requests in httpGet umgestellt werden sollen. Und ich weiß leider nicht, wie das geht:

            script.js.Steuerung.Hycube: request package is deprecated - please use httpGet (or a stable lib like axios) instead!
            

            Kann mir jemand helfen?

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

              @schnipsel71

              probiere mal hiermit, ob du den Token zurück bekommst.

              httpPost(
                  'http://10.1.1.51/auth/',
                  {
                      timeout: 2000,
                      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);
                      }
                  }
              );
              

              Poste dann mal die Ausgaben vom Log

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

                @schnipsel71

                ohne garantie. da ich es ja selbst nicht testen kann.
                leider ist die doku https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#httppost auch interpretationswürdig.
                ich gehe mal davon aus, das die parameter von httppost analgo deren von axios.post sind.
                ich habe den obigen code durch die ki auf axios umschreiben lassen und axios.post, dann durch httpPost ersetzt.

                ich habe dann noch zusätzlich 2 console.log eingefügt, um zu prüfen, was da für daten zurückkommen, bevor sie weiterverarbeitet werden.

                bitte mal probieren.
                Ich weiß nicht, ob die Datenpunktnamen angepasst werden sollten.
                Sollte da nicht was wie

                0_userdata.HyWeb.Batterie
                

                oder

                javascript.0.HyWeb.Batterie
                

                stehen?
                an andere Stellen sollte man eigentlich nicht schreiben.
                Die datenpunkte sollten auch schon existieren.

                var TimeInterval= setInterval(MyJavascript ,5000);
                
                async function MyJavascript() {
                  const user = "hycube";
                  const password = "hycube";
                  const authUrl = 'http://10.1.1.51/auth/';
                  const getValuesUrl = 'http://10.1.1.51/get_values/';
                
                  try {
                    const authResponse = await httpPost(authUrl, null, {
                      headers: {
                        'Authorization': `Basic ${Buffer.from(`${user}:${password}`).toString('base64')}`
                      }
                    });
                    console.log(authResponse.data);
                    const authToken = authResponse.data;
                
                    const getValuesResponse = await httpPost(getValuesUrl, null, {
                      headers: {
                        'Authorization': authToken
                      }
                    });
                    console.log(getValuesResponse.data);
                    const result = getValuesResponse.data;
                
                    const GridPower = result["Grid_P"];
                    const BatteryPower = result["Battery_P"];
                    const HausPower = result["Home_P"];
                    const solar = result["solar1_P"];
                
                    setState('HyWeb.Batterie', BatteryPower);
                    setState('HyWeb.Grid', GridPower);
                    setState('HyWeb.Hausverbrauch', HausPower);
                    setState('HyWeb.Solar', solar);
                  } catch (error) {
                    console.log("An error occurred:", error.message);
                  }
                }
                
                haus-automatisierung S 2 Replies Last reply Reply Quote 0
                • haus-automatisierung
                  haus-automatisierung Developer Most Active @OliverIO last edited by

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

                  leider ist die doku https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#httppost auch interpretationswürdig

                  Lass mich gerne wissen was dir fehlt oder erstelle einen PR

                  OliverIO 1 Reply Last reply Reply Quote 0
                  • OliverIO
                    OliverIO @haus-automatisierung last edited by OliverIO

                    @haus-automatisierung

                    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

                    oweitman created this issue in ioBroker/ioBroker.javascript

                    closed improve documentation for httpget/httppost #1637

                    haus-automatisierung 1 Reply Last reply Reply Quote 0
                    • haus-automatisierung
                      haus-automatisierung Developer Most Active @OliverIO last edited by haus-automatisierung

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

                      https://github.com/ioBroker/ioBroker.javascript/blob/bdfc9031a32b4f7c7b08203a389e968961aa73cb/lib/javascript.d.ts#L1330-L1340

                      Screenshot 2024-07-12 at 19.33.21.png

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

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

                        @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
                        
                        OliverIO T 2 Replies Last reply Reply Quote 0
                        • OliverIO
                          OliverIO @haus-automatisierung last edited by

                          @haus-automatisierung

                          Schnipsel hat keine Ahnung von typings
                          Und ich hab es trocken ohne live ein Script zu erstellen.

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

                            @schnipsel71

                            Dann hat das nach 2 Sekunden das Gerät nicht reagiert. Steht da die richtige IP Adresse drin ?

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

                              @schnipsel71 wenn die url stimmt dann setze den timeout einfach mal höher 3000 oder mehr.

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

                                @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:
                                
                                T 1 Reply Last reply Reply Quote 0
                                • T
                                  TT-Tom @schnipsel71 last edited by

                                  @schnipsel71 sind das alle Meldungen die du bekommst??

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

                                    @oliverio Ja, die ist richtig.

                                    1 Reply Last reply Reply Quote 0
                                    • 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            552
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            77
                                            3564
                                            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