Wir haben uns mal wieder ausführlich mit der API von netatmo beschäftigt. Dabei haben wir herausgefunden, wie das Kamerabild von der netatmo welcome im Fibaro HomeCenter angezeigt werden kann.
Vor etwa einem Jahr haben wir euch gezeigt, wie Ihr die Daten der Gesichtserkennung der welcome Kamera in eurem Fibaro HomeCenter 2 nutzen könnt. Den Artikel zu dem Thema findet Ihr hier. Jetzt haben wir uns, wie bereits erwähnt, mit der Einbindung des Kamerabildes von der welcome befasst.
Die netatmo welcome Kamera kann derzeit zum Beispiel für 169,00 € über Amazon.de käuflich erworben werden.
Ermittlung der netatmo welcome URL
Um sich den Stream im HomeCenter anzeigen zu lassen, muss der jpg-Stream der Kamera ermittelt werden. Manuell ist dieser Vorgang allerdings recht kompliziert, weshalb wir euch eine kleine Szene programmiert haben, die dies automatisch mit der netatmo API durchführt.
Diesmal haben wir uns auch die Mühe gemacht und in der Szene die Debug-Ausgaben in deutscher und in englischer Ausgabe eingefügt. Dazu könnt Ihr in der Zeile 12 die Sprache über die lokale Variable "language" (Werte: german/english) festlegen. Standardmäßig ist hier Deutsch voreingestellt.
1 |
local language = 'german' -- german/english |
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 = '563a7XXX69f74027aXXXX' local client_secret = 'OmHqQ551M6WXXXbTgGMWNYfiT1lZxHXXXXX' 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 welcome cam finder v1.0b') 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_camera access_camera' 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.
Alle angezeigten Streams werden aber dann direkt über das lokale WLAN über die netatmo welcome abgerufen.
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.
Die Kamera könnte natürlich auch im Fibaro HomeCenter Light eingebunden werden. Hier müsste allerdings die Ermittlung der benötigten URL händisch durchgeführt werden. Die Infos dazu erhaltet Ihr in der API von netatmo.
Sofern demnächst die netatmo presence verfügbar ist, werden wir das Skript natürlich auch mit dieser Kamera testen. Sollte dies genauso seitens netatmo umgesetzt sein, dann sollte das auch mit der presence Kamera funktionieren.
Viel Spass beim Umsetzen :)
du bist der knaller ;-) klappt alles, vielen dank!
das vorschaubild lädt extrem schnell... wieso dauert es immer einige sekunden, bis bei den foscam kameras ein bild angezeigt wird? netatmo wird wirklich sofort ein bild gezeigt... bei foscam dauert es immer eine zeit...
Lieber Daniel,
das hat super geklappt. Falls man die Netatmo im Wlan eingebunden hat, kann es sein, dass die IP nicht aufgelöst wird. So war es bei mir. Ich habe sie dann mit dem Lan verbunden und alles lief wie hier beschrieben. Danke für die tolle Arbeit. Die nicht eingebundene Welcome war mir schon lange ein Dorn im Auge.....
Hi,
ist mir bisher so nicht aufgefallen. Hab sie auch über WLAN verbunden. Was nicht funktioniert hat, ist die Suche über die Remote-Server von Fibaro. Aber danke für den Hinweis :)
Gruß
Hallo,
wo finde ich die Client-ID? Nach der "alten" Anleitung über dev.netatmo.com finde ich sie nicht.
Gruß.
Hi,
daran hat sich eigentlich nichts geändert. Findest du unter der erstellten App unter https://dev.netatmo.com/dev/myaccount.
Gruß
Schon jemand im Besitz der presence und konnte die Kamera testen ob diese auch funktioniert?
Hi,
funktioniert theoretisch ebenfalls. Skript muss allerdings ein wenig angepasst werden. Dies können wir erst testen, wenn wir eine Kamera zum Testen haben.
Gruß
I have a Netatmo Presence, and i tried to run the script in HC2 (4.110). I have created an empty app at the Netatmo website to get the client ID and secret key. I have created the scene with these credentials and the login/pass. The scene/script runs, but it stops at below message, and doesn't output the IP and stream url.
[DEBUG] 09:25:07: API-Call was done.
Am i missing a step?
Hi,
you have to change the request_body to
request_body = 'grant_type=password&client_id=' .. client_id .. '&client_secret=' .. client_secret .. '&username=' .. username .. '&password=' .. password .. '&scope=read_presence access_presence'
With the presence you need other permissions at the API of netatmo.
Greetz
Danke, I have changed it in line 44 and now it is working fine.
Leider kenn ich mich nicht mit der Skriptsprache aus. Gibt es da eventuell etwas für PHP? Das wäre echt super von dir.
Hi,
auf der Developer-Seite von netatmo gibt es genügend Beispiele, wie die API mit PHP angesprochen werden kann. Solltest du ein HC2 nutzen, dann ist dies die einfachste Lösung.
Gruß
Danke, leider komme ich nicht zurecht mit der API, klar key home id hab ich alles und auch die php Beispiele von github geprüft. Dachte du könntest mir vielleicht helfen.
https://www.symcon.de/forum/threads/30711-Netatmo-Welcome-Kamera
Damit funktionierte es.
Hallo zusammen,
die Netatmo Presence funktioniert mit dem Script auch. Soeben erfolgreich eingebunden.
Beim starten der LUA-Szene kommt
[DEBUG] 19:53:23: netatmo welcome cam finder v1.0b
[DEBUG] 19:53:23: Debug: german
[DEBUG] 19:53:24: API-Call durchgeführt
Das wars.
OK Danke
Zeile 45 getauscht durch:
request_body = 'grant_type=password&client_id=' .. client_id .. '&client_secret=' .. client_secret .. '&username=' .. username .. '&password=' .. password .. '&scope=read_presence access_presence'
Klappt Perfekt. Danke
Hallo Zusammen
Ich habe eine Netatmo Prescence Kamera in Betrieb genommen und möchte sie in meinem Fibaro System integrieren.
Habe das LUA Script erstellt. Habe eine Netatmo App auf dev.netatmo.com erstellt damit ich die Client Id und Secret Key bekomme.
Habe wie angegeben auf Zeile 45 die entsprechende Zeile ersetzt:
request_body = 'grant_type=password&client_id=' .. client_id .. '&client_secret=' .. client_secret .. '&username=' .. username .. '&password=' .. password .. '&scope=read_presence access_presence'
Bekomme den folgenden Log:
[DEBUG] 09:31:24: netatmo welcome cam finder v1.0b
[DEBUG] 09:31:24: Debug: german
[DEBUG] 09:31:24: oAuth-API-Call konnte nicht durchgeführt werden! oAuth 2.0 lieferte keinen Wert zurück
Kann mir jemand einen Hinweis geben, was ich angepasst werden müsste?
Hi,
dazu haben wir bereits einen Artikel veröffentlicht:
https://www.siio.de/so-bindest-du-das-kamerabild-der-netatmo-presence-in-das-fibaro-homecenter-ein/
Gruß
Ich bekomme folgende Meldung ( ist per WLAN angebunden )
[DEBUG] 08:39:57: netatmo welcome cam finder v1.0b
[DEBUG] 08:39:57: Debug: german
[DEBUG] 08:39:58: API-Call durchgeführt.
[DEBUG] 08:39:58: Lokale IP der Kamera NICHT gefunden
Kann es am WLAN liegen?!
Hallo
super erklärt, nur wenn ich die Kamera einbinde habe ich kurz ein Bild und das wird mir wieder keins angezeigt erst wenn ich die Seite das Modul anklicke bekomme ich wieder kurz einbild angezeigt.
Es gibt einen wesentlich einfacheren Weg: einloggen via Safari bei my.netatmo.com, auf die Security Seite gehen, via Developer Menu in Safari auf den Web Inspector gehen, auf "Console" und dort findet sich der URL für das Kamerabild. Den Teil mit der IP und dem langen Code und /live/ kopieren, hinten dran snapshot_720.jpg setzen. In Fibaro kopieren. Fertig. Kein Script notwendig.