Netatmo Weather Station to popularna stacja pogodowa, która dostarcza nam informacji takich jak:
- temperatura wewnątrz,
- temperatura na zewnątrz,
- ciśnienie atmosferyczne,
- poziom CO2,
- wilgotność.
W poniższej instrukcji zaprezentujemy kroki, które umożliwią wykonanie integracji stacji pogodowej z systemem Grenton.
Przygotowanie konta użytkownika
W pierwszym kroku należy zainstalować stację pogodową i założyć konto na stronie.
Gdy konto jest już aktywne i stacja zwraca pomiary jak poniżej, można przejść do kolejnych kroków.
Uzyskanie tokenu autoryzacyjnego, odczyt danych ze stacji pogodowej
Sposób uzyskania access tokenu został opisany na stronie.
1. W pierwszej kolejności należy utworzyć aplikację, gdzie znajdą się parametry client ID oraz client secret potrzebne w kolejnych krokach:
2. Następnie należy utworzyć link składający się z następujących parametrów:
np.:
https://api.netatmo.com/oauth2/authorize?client_id=65c2030017aabd5c1c0bce98&redirect_uri=https://api.netatmo.com/oauth2&scope=read_station
gdzie:
- client_id - parametr client ID we wcześniej utworzonej aplikacji
- redirect_uri - adres przekierowania wprowadzony w aplikacji (https://api.netatmo.com/oauth2)
- scope - zakres uwierzytelniania (read_station)
- state - można pominąć
3. W module Gate HTTP należy utworzyć następujące cechy użytkownika:
gdzie:
- netatmo_client_id - cecha przyjmująca wartość parametru client ID z aplikacji,
- netatmo_client_secret - cecha przyjmująca wartość parametru client secret z aplikacji,
- netatmo_code - cecha przyjmująca wartość parametru code z przeglądarki (ustawiana w punkcie 14),
- netatmo_access_token - cecha, do której zostanie zapisany access token,
- netatmo_refresh_token - cecha, do której zostanie zapisany refresh token,
- netatmo_Status,
- netatmo_StationName,
- netatmo_StationPlace,
- netatmo_Temperature,
- netatmo_CO2,
- netatmo_Humidity,
- netatmo_Noise.
4. Następnie w module CLU należy utworzyć persystentne cechy użytkownika:
gdzie:
- netatmo_access_token_clu - persystentna cecha, do której zostanie zapisany access token,
- netatmo_refresh_token_clu - persystentna cecha, do której zostanie zapisany refresh token.
Uwaga! Persystentne cechy użytkownika obsługiwane są przez CLU z FW 5.12.01-2330 lub wyższym.
5. W kolejnym kroku należy utworzyć obiekt wirtualny HttpRequest o nazwie netatmo_token_request:
gdzie:
- Host: https://api.netatmo.com
- Path: /oauth2/token
- Method: POST
- RequestType: FormData
- ResponseType: JSON
6. Następnie należy utworzyć obiekt wirtualny HttpRequest o nazwie netatmo_getstationsdata_request:
gdzie:
- Host: https://api.netatmo.com
- Path: /api/getstationsdata
- Method: GET
- RequestType: Text
- ResponseType: JSON
7. Kolejno należy utworzyć obiekt wirtualny Timer o nazwie netatmo_token_refresh_timer, który posłuży do odświeżania tokenu:
a jego uruchomienie przypisać do zdarzenia OnInit w module Gate HTTP:
8. Następnie należy utworzyć skrypt o nazwie netatmo_token_get, który pozwoli uzyskać access token oraz refresh token przy pierwszym uruchomieniu:
local body = {"&grant_type=authorization_code&client_id=" .. HTTP->netatmo_client_id .. "&client_secret=" .. HTTP->netatmo_client_secret .. "&code=" .. HTTP->netatmo_code .. "&redirect_uri=https%3A%2F%2Fapi.netatmo.com%2Foauth2&scope=read_station"}
HTTP->netatmo_token_request->SetRequestBody(body)
HTTP->netatmo_token_request->SendRequest()
9. W kolejnym kroku należy utworzyć skrypt o nazwie netatmo_token_response:
if(HTTP->netatmo_token_request->StatusCode==200) then
local resp = HTTP->netatmo_token_request->ResponseBody
HTTP->netatmo_access_token = resp.access_token
HTTP->netatmo_refresh_token = resp.refresh_token
clu.await(CLU->netatmo_access_token_clu = HTTP->netatmo_access_token)
clu.await(CLU->netatmo_refresh_token_clu = HTTP->netatmo_refresh_token)
HTTP->netatmo_token_refresh_timer->Start()
end
a jego wywołanie przypisać do zdarzenia OnResponse w obiekcie netatmo_token_request:
10. W kolejnym kroku należy utworzyć skrypt o nazwie netatmo_token_refresh, który będzie odpowiedzialny za odświeżanie tokenu:
local body = {"&grant_type=refresh_token&refresh_token=" .. CLU->netatmo_refresh_token_clu .. "&client_id=" .. HTTP->netatmo_client_id .. "&client_secret=" .. HTTP->netatmo_client_secret}
HTTP->netatmo_token_request->SetRequestBody(body)
HTTP->netatmo_token_request->SendRequest()
a jego wywołanie przypisać do zdarzenia OnTimer obiektu wirtualnego Timer o nazwie netatmo_token_refresh_timer:
11. W kolejnym kroku należy utworzyć skrypt o nazwie netatmo_getdata_request:
local params = "device_id=70:ee:50:33:3e:36&get_favorites=false"
local key = "Authorization: Bearer " .. CLU->netatmo_access_token_clu .. "\r\n"
HTTP->netatmo_getstationsdata_request->SetQueryStringParams(params)
HTTP->netatmo_getstationsdata_request->SetRequestHeaders(key)
HTTP->netatmo_getstationsdata_request->SendRequest()
gdzie:
- device_id - adres MAC stacji pogodowej zawierający małe litery
a jego wywołanie przypisać do zdarzenia OnStart obiektu wirtualnego Timer o nazwie netatmo_token_refresh_timer:
12. Następnie utworzyć skrypt o nazwie netatmo_getdata_response, który będzie odpowiedzialny za uzyskanie danych na temat pogody:
if(HTTP->netatmo_getstationsdata_request->StatusCode==200) then
local resp = HTTP->netatmo_getstationsdata_request->ResponseBody
HTTP->netatmo_Status=resp.status
HTTP->netatmo_StationName=resp.body.devices[1].station_name
HTTP->netatmo_StationPlace=resp.body.devices[1].place.city
HTTP->netatmo_Temperature=resp.body.devices[1].dashboard_data.Temperature
HTTP->netatmo_CO2=resp.body.devices[1].dashboard_data.CO2
HTTP->netatmo_Humidity=resp.body.devices[1].dashboard_data.Humidity
HTTP->netatmo_Noise=resp.body.devices[1].dashboard_data.Noise
end
a jego wywołanie przypisać do zdarzenia OnResponse obiektu o nazwie netatmo_getstationsdata_request:
13. Należy utworzyć skrypt o nazwie netatmo_init, który automatycznie odświeży access oraz refresh token po przesłaniu konfiguracji:
if(CLU->netatmo_refresh_token_clu~="nil") then
HTTP->netatmo_token_refresh()
end
a jego wywołanie przypisać do zdarzenia OnInit w module Gate HTTP:
14. Przygotowany w punkcie 2 link należy wprowadzić do przeglądarki - w odpowiedzi pojawi się strona:
Po zatwierdzeniu autoryzacji pojawi się okno z nowym parametrem code:
Wartość parametru code należy ustawić jako wartość początkową cechy użytkownika o nazwie w module Gate HTTP:
15. Tak utworzoną konfigurację należy przesłać do modułu Gate oraz CLU.
16. W przypadku pierwszego uruchomienia po utworzeniu konfiguracji należy wywołać skrypt o nazwie netatmo_token_get. Po jego wywołaniu cechy access i refresh token w module Gate oraz CLU powinny przyjąć odpowiednie wartości: