Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Hilfe bei Gardena API

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Hilfe bei Gardena API

    This topic has been deleted. Only users with topic management privileges can see it.
    • J.A.R.V.I.S.
      J.A.R.V.I.S. Developer @dslraser last edited by

      @dslraser welche möchtest du denn abrufen?

      dslraser 1 Reply Last reply Reply Quote 0
      • Jey Cee
        Jey Cee Developer @dslraser last edited by

        @dslraser du musst die Funktion login Ausführen:

        let token = login();
        

        So bekommst du den Token in deine Variable.

        1 Reply Last reply Reply Quote 0
        • dslraser
          dslraser Forum Testing Most Active @J.A.R.V.I.S. last edited by dslraser

          @J-A-R-V-I-S
          im Grund die von meinem Gateway bzw. vom Irrigation Control zur Bewässerung.

          https://developer.1689.cloud/apis/GARDENA+smart+system+API#/readme

          J.A.R.V.I.S. 1 Reply Last reply Reply Quote 0
          • J.A.R.V.I.S.
            J.A.R.V.I.S. Developer @dslraser last edited by J.A.R.V.I.S.

            @dslraser dann versuch mal folgendes mit deinen Daten.

            const request = require('request');
            
            function requestLocations(token, key) {
                const options = {
                    url: 'https://api.smart.gardena.dev/v1/locations',
                    method: 'GET',
                    headers: {
                        'Authorization': 'Bearer ' + token,
                        'Authorization-Provider': 'husqvarna',
                        'X-Api-Key': key
                    }
                }
            
                request(options, (error, response, body) => {
                    console.log(body);
                });
            }
            
            dslraser 1 Reply Last reply Reply Quote 0
            • dslraser
              dslraser Forum Testing Most Active @J.A.R.V.I.S. last edited by

              @J-A-R-V-I-S
              Das ist die andere Methode, oder ?

              J.A.R.V.I.S. Jey Cee 2 Replies Last reply Reply Quote 0
              • J.A.R.V.I.S.
                J.A.R.V.I.S. Developer @dslraser last edited by J.A.R.V.I.S.

                @dslraser das wäre das Abfragen der Locations. Du kannst da natürlich auch eine Funktion draus machen. Habe es oben geändert.

                1 Reply Last reply Reply Quote 0
                • Jey Cee
                  Jey Cee Developer @dslraser last edited by

                  @dslraser Die erste API ist für die Anmeldung, die Zweite zur Steuerung der Gardena Geräte. Du brauchst also beides.
                  In Zeile 8 muss der Token aus Skript eins rein.

                  dslraser 1 Reply Last reply Reply Quote 0
                  • dslraser
                    dslraser Forum Testing Most Active @Jey Cee last edited by dslraser

                    @Jey-Cee sagte in Hilfe bei Gardena API:

                    In Zeile 8 muss der Token aus Skript eins rein.

                    Den habe ich noch nicht und auch noch nicht genau verstanden wie ich den ins Log oder in eine Variable bekomme.

                    J.A.R.V.I.S. 1 Reply Last reply Reply Quote 0
                    • J.A.R.V.I.S.
                      J.A.R.V.I.S. Developer @dslraser last edited by J.A.R.V.I.S.

                      @dslraser

                      @Jey-Cee sagte in Hilfe bei Gardena API:

                      let token = login();

                      Damit bekommst du den Token. Und dann rufst du die zweite Funktion auf.

                      requestLocations(token, appKey);
                      

                      Meine Funktion ist ungetestet, da ich dort keine Zugangsdaten habe. Laut der Doku sollte die Abfrage aber so vonstattengehen.

                      dslraser 1 Reply Last reply Reply Quote 0
                      • dslraser
                        dslraser Forum Testing Most Active @J.A.R.V.I.S. last edited by

                        @J-A-R-V-I-S
                        @Jey-Cee

                        So ?

                        const fetch = require('node-fetch');
                        const { URLSearchParams } = require('url');
                        
                        const username = 'xxx@xxx.de';
                        const password = 'xxxxx';
                        const appKey   = 'xxxxx';
                        
                        async function login() {
                          const params = new URLSearchParams();
                          params.set('grant_type', 'password');
                          params.set('client_id', appKey);
                          params.set('username', username);
                          params.set('password', password);
                        
                          const res = await fetch('https://api.authentication.husqvarnagroup.dev/v1/oauth2/token', { 
                            method: 'POST',
                            body: params
                          });
                        
                          if (!res.ok) {
                            throw new Error(res.statusText);
                          }
                        
                          return res.json();
                        }
                        let token = login();
                        
                        const request = require('request');
                         
                        function requestLocations(token, key) {
                            const options = {
                                url: 'https://api.smart.gardena.dev/v1/locations',
                                method: 'GET',
                                headers: {
                                    'Authorization': 'Bearer ' + token,
                                    'Authorization-Provider': 'husqvarna',
                                    'X-Api-Key': '6dc5b7d9-d426-4b58-84c8-c3733e08e9cb'
                                }
                            }
                         
                            request(options, (error, response, body) => {
                                console.log(body);
                            });
                        }
                        
                        
                        J.A.R.V.I.S. 1 Reply Last reply Reply Quote 0
                        • J.A.R.V.I.S.
                          J.A.R.V.I.S. Developer @dslraser last edited by

                          @dslraser

                          const fetch = require('node-fetch');
                          const { URLSearchParams } = require('url');
                          const request = require('request');
                          
                          const username = 'xxx@xxx.de';
                          const password = 'xxxxx';
                          const appKey   = 'xxxxx';
                          
                          async function login() {
                          
                              const params = new URLSearchParams();
                              params.set('grant_type', 'password');
                              params.set('client_id', appKey);
                              params.set('username', username);
                              params.set('password', password);
                          
                              const res = await fetch('https://api.authentication.husqvarnagroup.dev/v1/oauth2/token', { 
                                  method: 'POST',
                                  body: params
                              });
                          
                              if (!res.ok) {
                                  throw new Error(res.statusText);
                              }
                          
                              return res.json();
                          }
                          
                          function requestLocations(token, key) {
                              const options = {
                                  url: 'https://api.smart.gardena.dev/v1/locations',
                                  method: 'GET',
                                  headers: {
                                      'Authorization': 'Bearer ' + token,
                                      'Authorization-Provider': 'husqvarna',
                                      'X-Api-Key': '6dc5b7d9-d426-4b58-84c8-c3733e08e9cb'
                                  }
                              }
                           
                              request(options, (error, response, body) => {
                                  console.log(body);
                              });
                          }
                          
                          let token = login();
                          
                          requestLocations(token, appKey);
                          
                          J.A.R.V.I.S. dslraser 2 Replies Last reply Reply Quote 0
                          • J.A.R.V.I.S.
                            J.A.R.V.I.S. Developer @J.A.R.V.I.S. last edited by

                            bzw. unten anders, da das sonst asyncron ausgeführt wird und du keinen Token erhälst:

                            let token = await login();
                            
                            requestLocations(token, appKey);
                            

                            das untere

                            async function getData(appKey) {
                                let token = await login();
                            
                                requestLocations(token, appKey);
                            }
                            
                            getData(appKey);
                            
                            dslraser 1 Reply Last reply Reply Quote 0
                            • dslraser
                              dslraser Forum Testing Most Active @J.A.R.V.I.S. last edited by

                              @J-A-R-V-I-S
                              damit bekam ich

                              {"message":"Forbidden"}
                              
                              1 Reply Last reply Reply Quote 0
                              • dslraser
                                dslraser Forum Testing Most Active @J.A.R.V.I.S. last edited by dslraser

                                @J-A-R-V-I-S

                                async function getData(appKey) {
                                    let token = await login();
                                 
                                    requestLocations(token, appKey);
                                }
                                 
                                getData(appKey);
                                
                                

                                Damit habe ich nichts mehr im Log

                                J.A.R.V.I.S. 1 Reply Last reply Reply Quote 0
                                • J.A.R.V.I.S.
                                  J.A.R.V.I.S. Developer @dslraser last edited by J.A.R.V.I.S.

                                  @dslraser sagte in Hilfe bei Gardena API:

                                  async function getData(appKey) {

                                  dann bau mal bitte in dieser Funktion eine Consolenausgabe ein, die den Token ausgibt.

                                  console.log(token);
                                  

                                  und verwende sonst einmal in der anderen Ausgabe anstatt body response.

                                  dslraser 1 Reply Last reply Reply Quote 0
                                  • dslraser
                                    dslraser Forum Testing Most Active @J.A.R.V.I.S. last edited by

                                    @J-A-R-V-I-S
                                    kommt kein Token im Log

                                    const fetch = require('node-fetch');
                                    const { URLSearchParams } = require('url');
                                    const request = require('request');
                                     
                                    const username = 'xxx.xxx@xxx.de';
                                    const password = 'xxx';
                                    const appKey   = 'xxx';
                                     
                                    async function login() {
                                     
                                        const params = new URLSearchParams();
                                        params.set('grant_type', 'password');
                                        params.set('client_id', appKey);
                                        params.set('username', username);
                                        params.set('password', password);
                                     
                                        const res = await fetch('https://api.authentication.husqvarnagroup.dev/v1/oauth2/token', { 
                                            method: 'POST',
                                            body: params
                                        });
                                     
                                        if (!res.ok) {
                                            throw new Error(res.statusText);
                                        }
                                     
                                        return res.json();
                                        
                                    }
                                     
                                    function requestLocations(token, key) {
                                        const options = {
                                            url: 'https://api.smart.gardena.dev/v1/locations',
                                            method: 'GET',
                                            headers: {
                                                'Authorization': 'Bearer ' + token,
                                                'Authorization-Provider': 'husqvarna',
                                                'X-Api-Key': 'xxx'
                                            }
                                        }
                                     
                                        request(options, (error, response, body) => {
                                            console.log(response);
                                        });
                                    }
                                     
                                    async function getData(appKey) {
                                        let token = await login();
                                        requestLocations(token, appKey);
                                        console.log(token);
                                    }
                                    
                                    getData(appKey);
                                    
                                    
                                    
                                    1 Reply Last reply Reply Quote 0
                                    • J.A.R.V.I.S.
                                      J.A.R.V.I.S. Developer last edited by

                                      @dslraser probier einfach nur mal folgenden Code in einem eigenen Skrip aus:

                                      const request = require('request');
                                      
                                      const username = 'xxx@xxx.de';
                                      const password = 'xxxxx';
                                      const appKey   = 'xxxxx';
                                      
                                      const options = {
                                          url: 'https://api.authentication.husqvarnagroup.dev/v1/oauth2/token',
                                          method: 'POST',
                                          body: {
                                              grant_type: 'password',
                                              client_id: appKey,
                                              username: username,
                                              password: password
                                          }
                                      }
                                      
                                      request(options, (err, response, body) => {
                                          console.log(body);
                                      });
                                      
                                      dslraser 1 Reply Last reply Reply Quote 0
                                      • dslraser
                                        dslraser Forum Testing Most Active @J.A.R.V.I.S. last edited by

                                        @J-A-R-V-I-S
                                        damit schmiert es direkt ab

                                        host.iobroker	2020-01-12 00:33:15.420	error	Caught by controller[1]: (node:1118) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js proce
                                        host.iobroker	2020-01-12 00:33:15.420	error	Caught by controller[1]: (node:1118) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by r
                                        host.iobroker	2020-01-12 00:33:15.420	error	Caught by controller[1]: (node:1118) UnhandledPromiseRejectionWarning: TypeError: URLSearchParams is not a constructor
                                        host.iobroker	2020-01-12 00:33:15.420	error	Caught by controller[0]: at processImmediate (timers.js:658:5)
                                        host.iobroker	2020-01-12 00:33:15.420	error	Caught by controller[0]: at tryOnImmediate (timers.js:676:5)
                                        host.iobroker	2020-01-12 00:33:15.420	error	Caught by controller[0]: at runCallback (timers.js:705:18)
                                        host.iobroker	2020-01-12 00:33:15.420	error	Caught by controller[0]: at Immediate.<anonymous> (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:578:7)
                                        host.iobroker	2020-01-12 00:33:15.420	error	Caught by controller[0]: at end (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:549:18)
                                        host.iobroker	2020-01-12 00:33:15.419	error	Caught by controller[0]: at Request.write (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1500:27)
                                        host.iobroker	2020-01-12 00:33:15.419	error	Caught by controller[0]: at ClientRequest.write (_http_outgoing.js:567:10)
                                        host.iobroker	2020-01-12 00:33:15.419	error	Caught by controller[0]: at write_ (_http_outgoing.js:595:11)
                                        host.iobroker	2020-01-12 00:33:15.418	error	Caught by controller[0]: TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be one of type string or Buffer. Received type object
                                        
                                        J.A.R.V.I.S. 1 Reply Last reply Reply Quote 0
                                        • J.A.R.V.I.S.
                                          J.A.R.V.I.S. Developer @dslraser last edited by J.A.R.V.I.S.

                                          @dslraser habe es ausgebessert:

                                          const request = require('request');
                                          
                                          const username = 'xxx@xxx.de';
                                          const password = 'xxxxx';
                                          const appKey   = 'xxxxx';
                                          
                                          const options = {
                                              url: 'https://api.authentication.husqvarnagroup.dev/v1/oauth2/token',
                                              method: 'POST',
                                              headers: {
                                                  'Content-Type': 'application/x-www-form-urlencoded'
                                              },
                                              body: JSON.stringify({
                                                  grant_type: 'password',
                                                  client_id: appKey,
                                                  username: username,
                                                  password: password
                                              })
                                          }
                                          
                                          request(options, (err, response, body) => {
                                              console.log(body);
                                          });
                                          
                                          dslraser 2 Replies Last reply Reply Quote 0
                                          • dslraser
                                            dslraser Forum Testing Most Active @J.A.R.V.I.S. last edited by

                                            @J-A-R-V-I-S

                                            javascript.0	2020-01-12 00:37:36.398	info	(1208) script.js.11_Gardena.Gardena1: {"error":"invalid_client","error_description":"Invalid client: cannot retrieve client credentials"}
                                            
                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            906
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            6
                                            59
                                            8262
                                            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