NEWS
Hilfe bei Gardena API
-
@Jey-Cee sagte in Hilfe bei Gardena API:
welche Fehler?
javascript.0 2020-01-11 23:32:22.052 error (377) at Script.runInContext (vm.js:133:20) javascript.0 2020-01-11 23:32:22.052 error (377) at script.js.09_Unifi.Gardena:2:29 javascript.0 2020-01-11 23:32:22.052 error (377) TypeError: Cannot destructure property `URLSearchParams` of 'undefined' or 'null'. javascript.0 2020-01-11 23:32:22.052 error (377) ^ javascript.0 2020-01-11 23:32:22.052 error (377) const { URLSearchParams } = require('url'); javascript.0 2020-01-11 23:32:22.051 error (377) script.js.09_Unifi.Gardena: script.js.09_Unifi.Gardena:2 javascript.0 2020-01-11 23:32:22.051 error (377) at Script.runInContext (vm.js:133:20) javascript.0 2020-01-11 23:32:22.050 error (377) at script.js.09_Unifi.Gardena:2:29 javascript.0 2020-01-11 23:32:22.050 error (377) script.js.09_Unifi.Gardena: Error: Cannot find module '/opt/iobroker/node_modules/iobroker.javascript/lib/../../url' -
@Jey-Cee sagte in Hilfe bei Gardena API:
welche Fehler?
javascript.0 2020-01-11 23:32:22.052 error (377) at Script.runInContext (vm.js:133:20) javascript.0 2020-01-11 23:32:22.052 error (377) at script.js.09_Unifi.Gardena:2:29 javascript.0 2020-01-11 23:32:22.052 error (377) TypeError: Cannot destructure property `URLSearchParams` of 'undefined' or 'null'. javascript.0 2020-01-11 23:32:22.052 error (377) ^ javascript.0 2020-01-11 23:32:22.052 error (377) const { URLSearchParams } = require('url'); javascript.0 2020-01-11 23:32:22.051 error (377) script.js.09_Unifi.Gardena: script.js.09_Unifi.Gardena:2 javascript.0 2020-01-11 23:32:22.051 error (377) at Script.runInContext (vm.js:133:20) javascript.0 2020-01-11 23:32:22.050 error (377) at script.js.09_Unifi.Gardena:2:29 javascript.0 2020-01-11 23:32:22.050 error (377) script.js.09_Unifi.Gardena: Error: Cannot find module '/opt/iobroker/node_modules/iobroker.javascript/lib/../../url' -
@dslraser hast du das benötigte Modul im Javascript Adapter hinterlegt?
@J-A-R-V-I-S
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. -
@J-A-R-V-I-S
okay, jetzt kommt schon mal kein Fehler mehr. Wie kann ich jetzt Daten abrufen ?
Dabei brauche ich Hilfe. -
@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?
@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
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); }); } -
@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 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:
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.
-
@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.
@J-A-R-V-I-S
@Jey-CeeSo ?
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
@Jey-CeeSo ?
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); -
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); -
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
damit bekam ich{"message":"Forbidden"} -
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
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
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
bodyresponse.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden