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 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
                                      • dslraser
                                        dslraser Forum Testing Most Active last edited by dslraser

                                        Edit: morgen gehts weiter.....

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

                                          @J-A-R-V-I-S
                                          Edit: gelöscht

                                          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
                                            @Jey-Cee

                                            Hier noch mal das bisherige Script, falls es jemand weiter verfolgen möchte. Ich werde wohl nicht damit weiter machen, obwohl jetzt die Anmeldung und auch der Abruf der Geräte soweit funktioniert.

                                            const request = require('request');
                                             
                                            const username = 'xxx.xxx@xxx.de';
                                            const password = 'xxxxxxxxxx';
                                            const appKey   = 'xxxxxxxxxx';
                                            
                                            const token = 'muss aus gelesen werden';
                                            const user_id = 'kommt hier rein';
                                            const refresh_token = 'wird auch erstellt und muss hier rein';
                                            
                                            const options = {
                                                url: 'https://sg-api.dss.husqvarnagroup.net/sg-1/sessions',
                                                method: 'POST',
                                                headers: {
                                                    'Content-Type': 'application/json'
                                                },
                                                body: JSON.stringify({
                                                    'sessions': {
                                                        'email': username,
                                                        'password': password
                                                    }
                                                })
                                            }
                                            
                                            //Locations abrufen
                                            request({
                                                url: 'https://sg-api.dss.husqvarnagroup.net/sg-1/locations/?user_id=' + user_id,
                                                method: 'GET',
                                                headers: {
                                                    'Content-Type': 'application/json',
                                                    'X-Session': token
                                                },
                                            }, (err, res, body) => {
                                                //console.log(body);
                                            })
                                            
                                            //Devices abrufen
                                            request({
                                                url: 'https://sg-api.dss.husqvarnagroup.net/sg-1/devices/?locationId=' + 'xxxxxxx',
                                                method: 'GET',
                                                headers: {
                                                    'Content-Type': 'application/json',
                                                    'X-Session': token
                                                }
                                            }, (err, res, body) => {
                                                //console.log(body);
                                            })
                                            
                                            //Befehl an Device senden
                                            request({
                                                url: 'https://sg-api.dss.husqvarnagroup.net/sg-1/devices/' + 'xxx' + 
                                                    '/abilities/valve/command?locationId=' + 'xxx',
                                                method: 'PUT',
                                                headers: {
                                                    'Content-Type': 'application/json',
                                                    'X-Session': token
                                                },
                                                body: JSON.stringify({
                                                    'name': 'stop_until_next_task'
                                                })
                                            }, (err, res, body) => {
                                                //console.log(body);
                                            })
                                            
                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            632
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

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