HC2 und Netatmo Presence

Hallo Leute,
ich habe eine Netatmo Pesence in das HC2 eingebunden. Nun würde ich gern über ein script die Überwachung bei Anwesenheit ausschalten. Ich habe zwar hier im Forum etwas über die Welcome lesen können, ist aber irgendwie nicht nutzbar oder ich verstehe es nicht.
Ich würde mich freuen wenn sich jemand meines Problems annehmen könnte.
Gruß secundani

da hätte ich auch Interesse dran…@secundani hast du das auch, dass du kein Dauerbild hast, sondern immer nur 5 Sekunden?

Hi Sven, ich weiß nicht ganz genau was Du meinst.
Aber ich habe bei mir die Refresh time auf 1 sec gestellt und dadurch bekomme ich eigentlich ein dauerhaftes Bild angezeigt.
Gruß

wenn ich über den PC (Browser) auf mein HC gehe, und dann auf die Cam, sehe ich das Bild der Cam für ca. 3 Sekunden (siehe Bild Anhang1), nach den 3 Sekunden (siehe Bild Anhang2)

Cam1.png

Cam2.png

Moin Sven, ja das ist bei mir auch so. Ist für mich aber nicht wichtig, da ich mir das Bild ja nicht über das HC anschaue, sondern ich imperihome nutze bzw. die Fibaro App und da gibt es aller 1er sec ein neues Bild.
Sorry da kann ich dir leider nicht helfen.
Gruß und schönes WE

Also mein Problem wurde durch meine Tochter gelöst und es funktioniert. Ich kann jetzt mit Hilfe von einer Globalen Variable die Kameraüberwachung an- und ausschalten.
Allerdings habe ich nicht alles verstanden, was sie da gemacht hat. Jedenfalls hat sie mit “get” und “post” Befehlen die Informationen aus der API geholt.
Die Zahlen und Buchstaben Kombination nach der IP-Adresse ist jedenfalls die, die auch bei mir als jpeg Eintrag in dem HC2 unter der Netatmo steht. Die zweite Kombination ist durch “get” des VOD entstanden.

das Ergebnis stelle ich gern hier zur Verfügung. Eventuell kann sich dann auch jemand Hilfe von einem Programmierer holen.


--[[
%% properties
%% weather
%% events
Presence
%% globals
Presence
--]]

local startSource = fibaro:getSourceTrigger();
if ( fibaro:getGlobalValue("Presence") == "An" )
then
    fibaro:debug("Netatmo Presence angeschaltet")
   	local http = net.HTTPClient() 
  http:request("https://v0.netatmo.net/restricted/10.255.39.168/4fbXXXXXXXXXXXXXXXXXXXXXXXX290/MTUXXXXXXXXXXXXXXXXXXXXXXXG56mitqlG1G3Aw,,//command/changestatus?status=on", { 
        options = { 
            method = 'GET', 
              headers = {}
    }}) 
elseif(fibaro:getGlobalValue("Presence") == "Aus")
then
   fibaro:debug("Netatmo Presence ausgeschaltet")
   	local http = net.HTTPClient() 
  
      http:request("https://v0.netatmo.net/restricted/10.255.39.168/4fbXXXXXXXXXXXXXXXXXXXXXXXX290/MTUXXXXXXXXXXXXXXXXXXXXXXXG56mitqlG1G3Aw,,//command/changestatus?status=off", { 
        options = { 
            method = 'GET', 
              headers = {}
    }}) 
end

Sven, ich hab das gerade mal getestet, bei mir bleibt das Bild unverändert und wird wie eingestellt immer wieder aktualisiert.
iPad mit Safari, auch auf dem MAC das gleiche.

Hallo secundani,

ich vermute, dass dein Skript nur ein mal funktioniert hat, da der token nur 10800 Sekunden (3 Std) gültig war.
Ich habe das Netatmo-Presence-Skript boomx etwas angepasst. Es wird zuerst ein gültiger Token für die Authentifizierung erstellt.
Dann werden die Daten gezogen, der Status der Cam geprüft ob diese ein- oder ausgeschaltet ist. Je nach Rückmeldung wird die Kamera dann über eine weitere Funktion ein oder ausgeschaltet.

Hier das Skript:

NICHT VERGESSEN EVTL. DEN TRIGGER UND VARIABLEN IN DER “oAuth FUNKTION” ANZUPASSEN

--[[
%% properties
xx value
%% globals
--]]

--- ### Schleifenschutz ### ---
if (fibaro:countScenes() > 1) then
  fibaro:debug("Abbruch - 2.Szene -Schleifenschutz-")
  fibaro:abort()
end

------------------------- 
--- ### Variablen ### --- 
------------------------- 
local vardebug = true
local varextradebug = true
local sourceTrigger = fibaro:getSourceTrigger();

 
-------------------------- 
--- ### FUNKTIONEN ### --- 
--------------------------

--- ### Debug Funktionen ### --- 
function debug(message) 
if (vardebug) then fibaro:debug(string.format('<%s style="color:%s;">%s<!--%s-->', "span", color, message, "span")); end 
end 

function extradebug(color, message)
if (varextradebug) then fibaro:debug(string.format('<%s style="color:%s;">%s<!--%s-->', "span", color, message, "span")); end
end 

--- oAuth Funktion ---
local client_id = 'xxx'
local client_secret = 'xxx'
local username = 'xxx'
local password = 'xxx'
local refresh = 20

local token = ''
local request_body = ''

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

--- getResponseData Funktion ---
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))
 --extradebug("yellowgreen", "Netatmo - Response.Data: " ..response.data .. "");
 end
 })   
end

--- gethomedata Funktion ---
function gethomedata()
   request_body_cam = 'access_token=' ..token.. ''
   getResponseData('https://api.netatmo.com/api/gethomedata', request_body_cam, 
      function(getData)
      
      if (getData.body ~= nil) then
        extradebug("yellowgreen", "API-Call durchgeführt");
        for w, v in pairs(getData.body.homes) do
          for a, b in pairs(v.cameras) do
            status = b.status
              fibaro:debug("Kamera Status: " ..b.status);

            if status == "off" then
              	fibaro:debug("Netatmo Welcome wird angeschaltet")
            	On = (b.vpn_url.."//command/changestatus?status=on");
            	--fibaro:debug(On);
              	switchOnOff(On)
            
           	else
              	fibaro:debug("Netatmo Welcome ausgeschaltet")
            	Off = (b.vpn_url.."//command/changestatus?status=off");
               	--fibaro:debug(Off);
               	switchOnOff(Off)
            end
          end
        end
      else 
        debug("tomato", "API-Call fehlgeschlagen!");
      end
 end
 )
end

--- switch On/Off Funktion ---
function switchOnOff(url)
 local http = net.HTTPClient()
 http:request(url, { 
 options = { 
 method = 'GET', 
 headers = {
 	['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8' },
 },
})
end

--- CODE ---
if tonumber(fibaro:getValue(xxx, "value")) ~= 0 or (sourceTrigger['type'] == 'other') then
  oAuth()
end

PS: Ich habe den code für meine Welcome geschrieben… Ich hoffe das die API Calls für die Presence identisch sind.

Hallo nevv, das sieht ja super aus und ja Du hast recht, mein script lief ganze 3 Stunden. Deshalb haben wir es jetzt auch anders gemacht. Prinzipiell wie Du auch nur entstand weniger Script Text. Wir haben dann noch eine Variable “Presence” angelegt und 2 kleine grafische Scenen gebaut ( eine als Anhang) und ich habe mir es in imperihome eingebunden. Nun kann ich, wenn ich rausgehe, die Kameraüberwachung ausschalten und das Bild bleibt trotzdem auf dem imperihome zu sehen. Nur das eben kein Alarm ausgelöst wird.
Aber natürlich werde ich mir deins auch ansehen und Danke für deine Mühe.


--[[
%% properties
%% weather
%% events
%% globals
Presence
--]]

if (tonumber(fibaro:getGlobalValue("Presence")) == tonumber("1"))
then
    fibaro:debug("Netatmo Presence angeschaltet")
   	local http = net.HTTPClient()   
     http:request("http://192.xxx.xxx.50/4fb4b7c7a7fe2xxxxxxxxxxxxxxxxxxxx/command/changestatus?status=on", {
  		options = { 
            method = 'GET', 
              headers = {}
    }}) 
elseif(tonumber(fibaro:getGlobalValue("Presence")) == tonumber("0"))
then
   fibaro:debug("Netatmo Presence ausgeschaltet")
   	local http = net.HTTPClient()    
      http:request("http://192.xxx.xxx.50/4fb4b7c7a7fe2xxxxxxxxxxxxxxxxxxxx/command/changestatus?status=off", {
	  options = { 
            method = 'GET', 
              headers = {}
    }}) 
end

presence.jpeg

Vielen Dank für die Inspiration hier!

Ich hab’s mit der letzten Version von secundani versucht. Leider komplett ohne Erfolg. Seit zwei Tagen probiere ich alle Kombinationen.

Lokale IP-Adresse passt. Dann habe ich es mit der Client ID versuchst. Dann mit Client secret,dann beides direkt hintereinander und auch nochmal getrennt mit /.

Nichts… Der debug zeugt jedes mal richtig an, die Kamera macht nichts.

Könnt ihr mir vielleicht nochmal helfen?

Am Ende will ich nur über das manuelle starten der jeweils variablenverändernden Szene die LUA Szene auslösen, die dann die Presence aktiviert,bzw. deaktiviert.

Vielen Dank

Moin, Neo_Wob.
nur ein kurzer Hinweis, hinter meiner Ip steht der JPEG-Stream den du sicher schon ausgelesen hast.
Gruß secundani

Hat wer ne Idee wie man den Bewegungsmelder der Kamera als Trigger nutzen kann.
z.B. Person wurde erkannt true oder false das wäre echt geil wenn man das nutzen kann.

Gruss Splinter