Netatmo Weather Station to popularna stacja pogodowa, która dostarcza nam informacji takich jak temperatura wewnątrz i na zewnątrz, ciśnienie atmosferyczne, poziom CO2, wilgotność, itp.
W niniejszym tutorialu zaprezentujemy kroki, które umożliwią wykonanie integracji stacji z systemem Grenton. Przebieg będzie następujący:
1. Przygotowanie konta użytkownika
2. Uzyskanie tokenu autoryzacyjnego
3. Konfiguracja modułu Gate HTTP
W pierwszym kroku należy zainstalować stację pogodową i założyć konto na stronie: https://www.netatmo.com/pl-pl
Gdy konto jest już aktywne i stacja zwraca nam pomiary jak poniżej, możemy przejść do kolejnych kroków.
Autoryzacja dostępu
Instrukcja uzyskania tokenu jest dostępna pod adresem: https://dev.netatmo.com/apidocumentation/oauth
W pierwszej kolejności należy utworzyć aplikację, gdzie znajdziemy client ID oraz secret ID, które będą potrzebne w kolejnych krokach - https://dev.netatmo.com/apps/createanapp#form
Przekierowanie użytkownika do platformy uwierzytelnienia
Utwórz link składający się z następujących parametrów:
https://api.netatmo.com/oauth2/authorize?client_id=5fbf9bad3ef0f64c4859b2e6&redirect_uri=https://api.netatmo.com/oauth2&scope=read_station
client_id - sprawdź swoje client ID w aplikacji, którą utworzyłeś: https://dev.netatmo.com/apps/createanapp#form
redirect_uri - adres przekierowania, który podałeś w aplikacji: https://api.netatmo.com/oauth2
scope - zakres uwierzytelniania - w naszym przypadku będziemy pobierać dane (read_station)
state - można pominąć
Tak przygotowany link możesz wprowadzić do przeglądarki. W odpowiedzi pojawi się strona:
Po zatwierdzeniu autoryzacji pojawi się okno z nowym parametrem (code):
Po uzyskaniu parametru code należy wysłać request:
grant_type - authorization_code
client_id - sprawdź swoje client ID w aplikacji, którą utworzyłeś: https://dev.netatmo.com/apps/createanapp#form
client_secret - sprawdź swoje client secret w aplikacji, którą utworzyłeś: https://dev.netatmo.com/apps/createanapp#form
code - parametr uzyskany w poprzednim kroku
redirect_uri - adres przekierowania, który podałeś w aplikacji: https://api.netatmo.com/oauth2
scope - zakres uwierzytelniania - w naszym przypadku będziemy pobierać dane (read_station)
Zapytanie można wysłać za pomocą programu Postman. Poniżej zamieszczamy przykład wysłania zapytania oraz odpowiedzi.
W odpowiedzi otrzymujemy:
- access token
- refresh token
- czas po jakim token wygaśnie (wyrażony w sekundach)
Otrzymane wartości access_token oraz refresh_token wprowadź jako wartości początkowe cech użytkownika na module Gate_HTTP (access_ token oraz refresh_token_netatmo) - patrz punkt 3.
2. Pobieranie danych
Po uzyskaniu tokenu możemy przejść do utworzenia konfiguracji na module Gate HTTP.
W pierwszym kroku tworzymy obiekt wirtualny HttpRequest
Następnie należy przygotować skrypt (netatmo_initial), który wykona metodę SendRequest z podaniem MAC adresu stacji i aktualnego tokenu
local params="device_id=70%3AEG%3A52%3A33%3A8F%3A73&get_favorites=false"
local key="Authorization: Bearer **************|***************** \r\n"
Gate_HTTP->NetAtmo_Request_StationData->SetQueryStringParams(params)
Gate_HTTP->NetAtmo_Request_StationData->SetRequestHeaders(key)
Gate_HTTP->NetAtmo_Request_StationData->SendRequest()
Nasz MAC adres to 70:EG:52:33:8F:73 i znajduje się w tej linijce:
local params="device_id=70%3AEG%3A52%3A33%3A8F%3A73&get_favorites=false"
znak ":" został zastąpiony %3A
Token należy wkleić do:
local key="Authorization: Bearer twój token \r\n"
Teraz należy przygotować cechy użytkownika, do których będziemy zapisywać odpowiedzi:
Ostatni krok to utworzenie skryptu (netatmo_stationdata_response), który przekaże odpowiedź do cech użytkownika.
local resp = Gate_HTTP->NetAtmo_Request_StationData->ResponseBody
Gate_HTTP->netatmo_Status=resp.status
Gate_HTTP->netatmo_StationName=resp.body.devices[1].station_name
Gate_HTTP->netatmo_StationPlace=resp.body.devices[1].place.city
Gate_HTTP->netatmo_Temperature=resp.body.devices[1].dashboard_data.Temperature
Gate_HTTP->netatmo_CO2=resp.body.devices[1].dashboard_data.CO2
Gate_HTTP->netatmo_Humidity=resp.body.devices[1].dashboard_data.Humidity
Gate_HTTP->netatmo_Noise=resp.body.devices[1].dashboard_data.Noise
A następnie przypisanie go do zdarzenia OnResponse
Po wywołaniu skryptu (netatmo_initial) wartości cech użytkownika są aktualizowane:
3. Odświeżanie tokenu
Token traci swoją ważność po upływie 10800 s, więc należy go cyklicznie aktualizować. W tym celu warto przygotować mechanizm, który będzie to robił.
Poniżej przykład jak można to wykonać.
Tworzymy cechę użytkownika, której wartość początkowa to refresh_token (znajdziemy ją w odpowiedzi w programie Postman):
oraz cechę, do której będziemy przekazywać aktualny token:
Następnie należy przygotować skrypt (netatmo_refresh_token), gdzie podamy client_id oraz client_secret
local content = "&grant_type=refresh_token&refresh_token=" .. Gate_HTTP->refresh_token_netatmo .. "&client_id=5f7f9bea3ef0f64cf48t9n2em&client_secret=Z0qFJmY8ZUenN8iNle3mBt6u4oRvmGoT9b2JbjaFdv6"
Gate_HTTP->NetAtmo_Request_Token->SetRequestBody(content)
Gate_HTTP->NetAtmo_Request_Token->SendRequest()
W kolejnym kroku musimy utworzyć obiekt wirtualny HttpRequest
Pozostało nam tylko jeszcze przypisać zmodyfikowany skrypt (netatmo_initial) do zdarzenia OnResponse :
Zmieniony skrypt (netatmo_initial ):
local resp = Gate_HTTP->NetAtmo_Request_Token->ResponseBody
Gate_HTTP->access_token=resp.access_token
local params="device_id=70%3AEG%3A52%3A33%3A8F%3A73&get_favorites=false"
local key="Authorization: Bearer ".. Gate_HTTP->access_token.." \r\n"
Gate_HTTP->NetAtmo_Request_StationData->SetQueryStringParams(params)
Gate_HTTP->NetAtmo_Request_StationData->SetRequestHeaders(key)
Gate_HTTP->NetAtmo_Request_StationData->SendRequest()
Do stałego aktualizowania tokenu warto utworzyć obiekt wirtualny Timer, który będzie cyklicznie uruchamiał skrypt (netatmo_refresh_token).