NEWS
Hilfe bei Gardena API
-
@dslraser hast du das benötigte Modul im Javascript Adapter hinterlegt?
-
Diese Module habe ich im Javascript Adapter
-
@dslraser dann fehlt dort das 'url' Modul.
-
@J-A-R-V-I-S
okay, jetzt kommt schon mal kein Fehler mehr. Wie kann ich jetzt Daten abrufen ?
Dabei brauche ich Hilfe. -
@dslraser welche möchtest du denn abrufen?
-
@dslraser du musst die Funktion login Ausführen:
let token = login();
So bekommst du den Token in deine Variable.
-
@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
-
@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); }); }
-
@J-A-R-V-I-S
Das ist die andere Methode, oder ? -
@dslraser das wäre das Abfragen der Locations. Du kannst da natürlich auch eine Funktion draus machen. Habe es oben geändert.
-
@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. -
@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.
-
@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.
-
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); }); }
-
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);
-
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);
-
@J-A-R-V-I-S
damit bekam ich{"message":"Forbidden"}
-
async function getData(appKey) { let token = await login(); requestLocations(token, appKey); } getData(appKey);
Damit habe ich nichts mehr im Log
-
@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
. -
@J-A-R-V-I-S
kommt kein Token im Logconst 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);