Das Kamerabild der netatmo welcome haben wir ja bereits in das Fibaro HomeCenter 2 eingebunden. An dieser Stelle hat allerdings noch die netatmo presence gefehlt. Mit diesem Artikel liefern wir euch auch diese Integration, wie das genau funktioniert erfahrt hier in diesem Artikel.
In den Kommentaren zu dem oben erwähnten Artikel zu der netatmo welcome Integration in das Fibaro HomeCenter 2 sind wir bereits kurz darauf eingegangen, dass das vorgestellte Skript nicht mehr der API, also der Programmierschnittstelle, von der netatmo presence kompatibel ist. Wir haben den LUA-Code mal angepasst, dass dieser auch kompatibel mit der netatmo presence ist. Mit diesem Code könnt Ihr den lokalen JPG-Stream der Kamera ermitteln, damit dieser dann als Stream im Fibaro HomeCenter 2 angezeigt werden kann.
Die netatmo presence Outdoor-Kamera kann derzeit zum Beispiel für 279,00 € über Amazon.de käuflich erworben werden.
Ermittlung der netatmo presence URL
Wie auch bei der welcome-Kamera muss die lokale Stream-URL ermittelt werden. Bei der presence-Kamera sind allerdings andere Berechtigungen bei der API notwendig, weshalb das alte Skript an dieser Stelle nicht funktioniert. Dies haben wir jetzt nachgeholt und Ihr könnt das Skript mit der netatmo presence nutzen.
Um die Szene auszuführen, legt Ihr euch einfach eine neue LUA-Szene an und kopiert den Code auf euer HC2. Ihr müsst dann nur eure Daten (Client ID, Client Secret, Username & Passwort) für die Anbindung an die netatmo API anpassen. Den gesamten Code findet Ihr hier:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
--[[ %% properties %% globals --]] -- DIESE DATEN ANPASSEN local client_id = '563a791369f740xxx' local client_secret = 'OmHqQ551M6xxx' local username = 'boomx@siio.de' local password = 'xxx' local language = 'german' -- german/english -- 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 presence cam finder v1.5') if (language == 'german' or language == 'english') then DebugError( "green", "Debug: " ..language) else DebugError( "red", "Please choose a language for debug") fibaro:abort(); end 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_presence access_presence' getResponseData('https://api.netatmo.net/oauth2/token', request_body, function(data) if (data.access_token ~= nil) then token = data.access_token gethomedata() else if (language == 'german') then DebugError( "red", "oAuth-API-Call konnte nicht durchgeführt werden! oAuth 2.0 lieferte keinen Wert zurück") elseif (language == 'english') then DebugError( "red", "oAuth-API-Call Error. oAuth 2.0 returns nothing.") end end end ) 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) --fibaro:debug(request_body_cam) if (getData.body ~= nil) then if (language == 'german') then DebugError( "green", "API-Call durchgeführt.") elseif (language == 'english') then DebugError( "green", "API-Call was done.") end for w, v in pairs(getData.body.homes) do for a, b in pairs(v.cameras) do if (b.is_local) then if (language == 'german') then DebugError( "green", "Lokale IP der Kamera gefunden.") elseif (language == 'english') then DebugError( "green", "Local IP of cam was found.") end findLocalWelcome(b.vpn_url) else if (language == 'german') then DebugError( "green", "Lokale IP der Kamera NICHT gefunden.") elseif (language == 'english') then DebugError( "green", "Local cam NOT found.") end end end end else if (language == 'german') then DebugError( "red", "API-Call fehlgeschlagen") elseif (language == 'english') then DebugError( "red", "API-Call Error") end end end ) end function findLocalWelcome(url) local selfhttp = net.HTTPClient({timeout=2000}) url = url..'/command/ping' selfhttp:request(url, { options={ headers = selfhttp.controlHeaders, method = 'GET', timeout = 5000 }, success = function(status) if status.status == 200 then if status.data ~= nil then --print(json.decode(status.data)) for k,v in pairs(json.decode(status.data)) do if (k == 'local_url') then local cam_url = v local url_new = string.sub(cam_url, 8, #cam_url) one, two = url_new:match("([^,]+)/([^,]+)") fibaro:debug('Cam-IP: '..one) fibaro:debug('JPG-Stream: /'..two.. '/live/snapshot_720.jpg') DebugError( "green", "coded 4 siio.de/siio.com") end end end else print ("failed") print(status.data) end end, error = function(error) print "ERROR" print(error) end }) end oAuth() |
Die Szene startet nur bei manueller Ausführung und muss auch nur einmalig gestartet werden. Es wird damit nur der benötigte Pfad für die Kamera-Einstellung ermittelt. Dies funktioniert leider nur über die API von netatmo, eine Ermittlung der URL über den lokalen Zugriff ist nicht möglich.
Um den Stream jetzt im HomeCenter anzeigen zu lassen, müsst Ihr eine neue Kamera hinzufügen und dort die Werte (IP, JPG path, MJPG stream path) aus dem Debug-Fenster eintragen. Der JPG- und der MJPG-Stream müssen jeweils mit der gleichen URL ausgefüllt werden. Nach dem Speichern sollte dann das Bild angezeigt werden.
Anders als bei der welcome können andere Funktionen der presence nicht mit dem Fibaro HomeCenter 2 nicht genutzt werden.