Netatmo Weather Station jest to popularna stacja pogodowa, która dostarcza nam informacji takich jak temperatura wewnątrz i zewnątrz, ciśnienie atmosferyczne, poziom CO2, wilgotność itp.
W niniejszym tutorialu chcemy przedstawić integrację z systemem Grenton.
Do integracji jest wymagane uzyskanie tokenu, który pozwoli na autoryzację wysłanego zapytania o pomiary.
W pierwszym korku 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.

1. Uzyskanie tokenu
Instrukcja uzyskania tokenu jest dostępna pod adresem; https://dev.netatmo.com/apidocumentation/oauth
W pierwszym kroku należy utworzyć konto, gdzie znajdziemy client ID oraz client secret, który będzie potrzebne w kolejnych krokach -https://dev.netatmo.com/apps/createanapp#form

Aby pozyskać token należy wysłać Request. Można to wykonać za pomocą przeglądarki lub programu Postman.
Dane które powinien zawierać Request:
Host: https://api.netatmo.com
Path: /oauth2/token
RequestBody:
- client_id - pobrany z App Technical Parameters
- client_secret - pobrany z App Technical Parameters
- grant_type - password
- username - nazwa użytkownika
- password - hasło użytkownika
Poniżej zamieszczamy przykład wysłania Request i odpowiedziw programie Postman:

W odpowiedzi otrzymujemy:
- access token
- refresh token
- czas po jakim token wygaśnie
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żę odpowiedz do cech użytkownika oraz przypisanie go do zdarzenia OnResponse
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
oraz przypisanie go do zdarzenia OnResponse

Po wywołani skryptu (netatmo_initial) wartości cech użytkownika są aktualizowane:

3. Odświeżanie tokenu
Token traci swoją ważność po upływie 10800s, 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ą jako odpowiedź w programie Postman)

oraz cechę, do której bedziemy 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)
