Netatmo Welcome API

Hallo,

habe das Script von Boomx zur Anbindung der Netatmo Kamera (http://www.siio.de/sicherheitalarm/netatmo-welcome-status-mit-dem-fibaro-homecenter-2-auslesen/) ausprobiert und bekomme leider keine Verbindung zur API (siehe Beiträge unter dem vorherigen Link).
Das Script habe ich 1:1 übernommen, nichts geändert, nur oben meine Daten (Client-ID,Client secret und Netatmo Zugangsdaten) eingegeben. Das VD habe ich auskommentiert.
My-Netatmo zeigt die Kamera, keine Probleme.Erhalte auch Push-Nachrichten auf mein Handy, wenn sich etwas tut.
Auf der dev.Netatmo.com Seite logge ich mich mit den gleichen Daten ein, erstelle eine App und nehme die dann gelieferten Client-Daten für das Script.
Leider bekomme ich immer nur die Fehlermeldung, dass o2 auth keine Werte liefert, bisher konnte ich also auch keine Variablen auslesen / anlegen.
Ich vermute, dass ich bei der API etwas falsch mache, habe aber keine Ahnung, was?
Offenbar hat mimitoe ähnliche Probleme…

LG TT

Hier nochmal das Script:

--[[
%% properties
%% autostart
%% globals
--]]

-- DIESE DATEN ANPASSEN
local client_id = 'aus API'
local client_secret = 'aus API'
local username = 'my.Netatmo User'
local password = 'my.Netatmo PW'
local refresh = 20
local debug = 1

--local vd_ID = 179

-- AB HIER NICHTS MEHR ANPASSEN
local token = ''
local request_body = ''

Debug = function ( color, message )
  if (debug == 1) then
  fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
  elseif (debug == 0) then
  end
end

DebugChange = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end

DebugError = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end

fibaro:debug('netatmo welcome Integration v.1.0 gestartet.')

if (debug == 0) then
fibaro:debug('Debug = 0. Es wird bis auf Fehler und Status-Änderungen nichts debuggt.')
else 
fibaro:debug('Debug = 1. Es wird alles debuggt.')
end

fibaro:debug('Szene wird alle ' ..refresh.. ' Sekunden ausgeführt')

local sourceTrigger = fibaro:getSourceTrigger();

function oAuth(nextFunction)
 local request_body = 'grant_type=password&client_id=' .. client_id .. '&client_secret=' .. client_secret .. '&username=' .. username .. '&password=' .. password .. '&scope=read_camera'
 getResponseData('https://api.netatmo.net/oauth2/token', request_body, 
     function(data) 
      if (data.access_token ~= nil) then
        token = data.access_token
      	gethomedata()
      else
        DebugError( "red", "oAuth-API-Call konnte nicht durchgeführt werden! oAuth 2.0 lieferte keinen Wert zurück");
      end
    end
    )
    setTimeout(oAuth, refresh*1000)
end

function getResponseData(url, body, func)
 local http = net.HTTPClient()
 http:request(url, { 
 options = { 
 method = 'POST', 
         headers = {
 ['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
 },
 data = body
 },
 success = function(response) 
 func(json.decode(response.data))
 end
 })   
end

function gethomedata()
   request_body_cam = 'access_token=' ..token.. ''
   getResponseData('https://api.netatmo.net/api/gethomedata', request_body_cam, 
      function(getData)
      if (getData.body ~= nil) then
      for w, v in pairs(getData.body.homes) do
        --fibaro:debug('tabelle auslesen')
        for a, b in pairs(v.persons) do
        	if (b.pseudo ~= nil) then
             if (b.out_of_sight == false) then
                if (fibaro:getGlobalValue(b.pseudo..'_status') ~= nil and fibaro:getGlobalValue(b.pseudo..'_lastseen') ~= nil) then
                  fibaro:setGlobal(b.pseudo.. "_lastseen", b.last_seen)
                  local change_var = tonumber(fibaro:getGlobalValue(b.pseudo..'_status')) 
                  if (change_var == 0) then
                    DebugChange( "green", b.pseudo.. ' ist jetzt anwesend. Setze den Status 1 in der globalen Variblen')
                    fibaro:setGlobal(b.pseudo.. "_status", "1")
                  else
                    Debug( "white", b.pseudo.. 's Status hat sich nicht geändert. Mache nichts')
                  end 
                else
                  DebugError( "red", "ACHTUNG: Die Varaiblen " ..b.pseudo.. "_status & " ..b.pseudo.. "_lastseen müssen eingerichtet werden!")
                end
             else
                if (fibaro:getGlobalValue(b.pseudo..'_status') ~= nil and fibaro:getGlobalValue(b.pseudo..'_lastseen') ~= nil) then
                  fibaro:setGlobal(b.pseudo.. "_lastseen", b.last_seen)
                  local change_var2 = tonumber(fibaro:getGlobalValue(b.pseudo..'_status'))
                  if (change_var2  == 1) then
                    DebugChange( "orange", b.pseudo.. ' ist jetzt abwesend. Setze den Status 0 in der globalen Variblen')
                    fibaro:setGlobal(b.pseudo.. "_status", "0")
                  else
                    Debug( "white", b.pseudo.. 's Status hat sich nicht geändert. Mache nichts')
                  end
                else
                  DebugError( "red", "ACHTUNG: Die Varaiblen " ..b.pseudo.. "_status & " ..b.pseudo.. "_lastseen müssen eingerichtet werden!")
                end
             end
          end
      	end

      end
      else 
        DebugError( "red", "API-Call konnte nicht durchgeführt werden! Möglicherweise ist die Refresh-Rate zu klein!")
      end
      fibaro:call(vd_ID, "pressButton", "9")
 end
 )
end

if (sourceTrigger["type"] == "autostart") then
 oAuth()
end

Debug.png

Netatmo.jpg

Hi,

sieht eigentlich alles soweit ganz gut aus.

Änder die Szene heute Abend mal ein wenig ab und poste sie hier. Findest dann im Debug den URL-Call für die API, welchen du dann im Browser testen kannst. Dann sollte klar werden, woran es liegt.

Gruß

Hi,

hab es mir nochmal genau angeschaut. Es kommt bei euch kein Token zurück, weshalb ich darauf schließe, dass die Zugangsdaten nicht richtig sind. Alles andere kann eigentlich nicht sein.

Als Test könnt Ihr ja mal die Daten in das Fibaro-Plugin eingeben und schauen, ob es sich damit verbindet.

Gruß

Hi,

ist mir jetzt wirklich peinlich, aber Du hast natürlich recht! Hatte die Userdaten aus 1Password übernommen und war völlig sicher, dass die ok sind.
Jetzt habe ich einfach einen ganz neuen Account angelegt, damit geht es!
Geniales Script, ich werde jetzt immer die Heizung etwas höher regeln, wenn meine Frau zu Hause ist. Erhöht den WAF.

Vielen Dank für Deine Hilfe!
LG TT