Chris hatte euch vor 2 Tagen den neuen netatmo Windmesser vorgestellt. Wie Ihr diesen nun in euer Fibaro HomeCenter 2 integriert, zeigen wir euch jetzt.
Wie wir ja leider alle wissen, dauert die Integration von neuen Geräten bei Fibaro immer ein wenig länger. Von daher haben wir uns nach dem Erhalt des netatmo Windmesser gedacht, warum warten… Wir programmieren es einfach selbst. Dank der offenen Schnittstelle von Netatmo auch kein Problem. Das Ergebnis findet Ihr hier in diesem Artikel.
Um den Windmesser auslesen zu können, muss dieser mit eurer netatmo Wetterstation verbunden sein. Solltet Ihr das Plugin des Fibaro HomeCenter 2 bereits nutzen, dann besitzt Ihr schon einen Developer-Account auf der netatmo-Seite.
Die Einrichtung der Windmesser Szene
Kommen wir nun zu der eigentlichen Integration. Diese besteht zum einen aus einer Szene, welche die API-Calls auf die netatmo-Schnittstelle ausführt und die Daten in globale Variablen schreibt und zum anderen aus einem Virtuellen Device, welches euch die Werte anzeigt. Jetzt fragt Ihr euch sicherlich, warum dann nicht gleich ein Virtuelles Devices? Berechtigte Frage, aber leider können mit einem Virtuellen Device keine https-Verbindungen aufgebaut werden. Dies funktioniert bisher nur in Szenen und auch nur mit der Firmware-Version 4 des Fibaro HomeCenters 2. Also, erstellt euch eine neue Szene und kopiert nachfolgenden Code in eure Szene:
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 |
--[[ %% properties %% autostart %% globals --]] -- DIESE DATEN ANPASSEN local client_id = 'xxxxxxxxxxxxxxxxxxxxxxxx' local client_secret = 'xxxxxxxxxxxxxxxxxxxxxxxx' local username = 'mail@mail.de' local password = 'xxxx' local refresh = 300 local vd_ID = 178 -- AB HIER NICHTS MEHR ANPASSEN local token = '' local request_body = '' fibaro:debug('netatmo-Windsensor Integration v.1.0 gestartet.') 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_station' getResponseData('https://api.netatmo.net/oauth2/token', request_body, function(data) token = data.access_token fibaro:debug('netatmo-oAuth durchgeführt...') getDevices() 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 getDevices() getResponseData('https://api.netatmo.net/api/devicelist','access_token='..token, function(data) fibaro:debug('Windsensor wird gesucht...') for _, v in pairs(data.body.modules) do if (v.data_type[1] == 'Rain') then rain_id = v._id --fibaro:debug('Regensensor ' .. rain_id .. ' erkannt') --rain_bat = calcBat(v.battery_vp, true) elseif (v.data_type[1] == 'Temperature') then extern_id = v._id --fibaro:debug('Aussensensor ' .. extern_id .. ' erkannt') elseif (v.data_type[1] == 'Wind') then wind_id = v._id fibaro:debug('Windsensor ' .. wind_id .. ' erkannt!') getmeasureWind() end int_id = data.body.devices[1]._id end end ) end function getmeasureWind() request_body_wind = 'access_token='..token..'&device_id='..int_id..'&module_id='..wind_id..'&scale=max&type=WindStrength,WindAngle,GustStrength,GustAngle&date_end=last' getResponseData('https://api.netatmo.net/api/getmeasure', request_body_wind, function(getData) fibaro:debug('Windsensor auslesen') WindStrength = getData.body[1].value[1][1] WindAngle = getData.body[1].value[1][2] GustStrength = getData.body[1].value[1][3] GustAngle= getData.body[1].value[1][4] fibaro:debug('Windgeschwindigkeit: ' .. WindStrength .. ' km/h') fibaro:setGlobal('windstaerke', WindStrength) fibaro:debug('Windrichtung: ' .. WindAngle .. ' °') fibaro:setGlobal('windrichtung', WindAngle) fibaro:debug('Windböen: ' .. GustStrength .. ' km/h') fibaro:setGlobal('boenstaerke', GustStrength) fibaro:debug('Windböenrichtung: ' .. GustAngle .. ' °') fibaro:setGlobal('boenrichtung', GustAngle) fibaro:call(vd_ID, "pressButton", "5"); fibaro:debug('Windsensor auslesen beendet. Warte 5 min.') end ) end if (sourceTrigger["type"] == "autostart") then oAuth(); end |
Hier müssen diesmal nicht viele Änderungen vorgenommen werden. Es müssen lediglich eure Daten der freigegebenen App auf der Seite dev.netatmo.com (siehe Bild; Variablen sind nach client_id (Skript) = Client id (netatmo), client_secret = Client secret benannt) plus die User/Passwort-Kombination eures Accounts in den Zeilen 8-12 eingetragen werden.
Dann müsst Ihr euch noch unter dem Reiter "Panels", "Variablen Panel" über die Schaltfläche "Add" vier Variablen hinzufügen. Diese müssen heißen:
- windstaerke
- windrichtung
- boenstaerke
- boenrichtung
Wenn Ihr alles richtig eingerichtet habt, dann sollte das Skript starten und alle 5 min die Werte aktualisieren. Folgendes sollte dann bei euch im Debug-Fenster erscheinen (Sollte dies nicht der Fall sein und Ihr erhaltet eine Fehlermeldung, dann habt Ihr einen Fehler bei euren Zugangsdaten gemacht):
Das Virtuelle Device für den Windmesser
Mit dem Virtuellen Devices für den Windmesser könnt Ihr euch über die Weboberfläche des HomeCenters 2 die derzeitigen Windgeschwindigkeiten und Windrichtungen ansehen. Die Datei für den Import könnt Ihr euch hier herunterladen. Nachdem Ihr die Datei heruntergeladen und über "Add/Remove device" importiert habt, müsst Ihr in dem oben geposteten Skript noch die ID des Virtuellen Devices anpassen. Dies könnt Ihr in Zeile 14 durchführen. Hier muss die ID des gerade importierten Devices eingetragen werden. Solltet Ihr diese ID nicht kennen, so könnt Ihr einfach in den Bearbeitungsmodus des devices wechseln. Dann findet Ihr die ID oben in der Browserzeile. Dadurch wird auch das VD aktualisiert und so sind dann immer die aktuellen Werte enthalten. Mit der Einrichtung seid Ihr jetzt fertig.
Wir haben natürlich auch wieder an die Icons für die Fibaro Werboberfläche gedacht:
Und nun viel Spass beim Windmessen ;) Wir freuen uns über eure Kommentare/Fragen/Anregungen.
Update:
Solltet Ihr nach der Einrichtung der Szene auf einmal viele Mails bezüglich Anmeldungen von IP XXX.XXX.XXX.XXX direkt von netatmo erhalten, so könnt Ihr diese auch deaktivieren. Loggt euch dazu mit euren Daten auf der Seite netatmo.com ein. Dann könnt Ihr rechts oben auf das mittlere Icon klicken (siehe Bild):
In dem neuen Fenster müsst Ihr runterscrollen und auf den Einstellungspunkt "E-Mail-Präferenzen" klicken. Jetzt öffnet sich das Einstellungsmenü für den Mail-Versand eures Accounts. Wenn Ihr dies so einrichtet wie auf dem folgenden Bild, dann erhaltet Ihr keine Mails mehr.