Uwaga! Poniższa instrukcja przeznaczona jest dla modułu Gate HTTP drugiej generacji!
Poniższa instrukcja integracji z zamkiem Tedee została przygotowana w oparciu o informacje umieszczone na stronie:
https://tedee-tedee-api-doc.readthedocs-hosted.com/en/latest/index.html
Chcąc dokonać integracji z zamkiem Tedee należy wykonać opisane poniżej kroki:
1. W cechach użytkownika modułu Gate tworzymy następujące zmienne:
Uwaga! Wartość cechy tedee_lock_sn to numer seryjny posiadanego zamka. Wspomniana informacja jest dostępna w dedykowanej aplikacji: lista urządzeń -> zamek -> ustawienia -> informacje.
2. Następnie tworzymy obiekt wirtualny HttpRequest:
3. Ustawienia obiektu wirtualnego TedeeLock_AuthorizationKey, który pozwoli nam uzyskać podstawowe informacje (m.in. klucz dostępu) wyglądają następująco:
gdzie:
Host: https://tedee.b2clogin.com
Path: /tedee.onmicrosoft.com/B2C_1_SignIn_Ropc/oauth2/v2.0/token
QueryStringParams: \z
4. Następnie tworzymy skrypt Tedee_AuthorizationKey_req:
Uwaga! Znak @ w adresie email należy zamienić na %40.
Uwaga! W miejscu username oraz password należy podać dane, którymi logujemy się do dedykowanej aplikacji (zgodnie z URL encoding).
local get_key = {"&grant_type=password&client_id=02106b82-0524-4fd3-ac57-af774f340979&scope=openid+02106b82-0524-4fd3-ac57-af774f340979&response_type=token&username=MAIL&password=PASSWORD"}
Gate_HTTP->TedeeLock_AuthorizationKey->SetRequestBody(get_key)
Gate_HTTP->TedeeLock_AuthorizationKey->SendRequest()
5. Dalej tworzymy skrypt Tedee_AuthorizationKey_resp:
if(Gate_HTTP->TedeeLock_AuthorizationKey->StatusCode==200) then
local resp = Gate_HTTP->TedeeLock_AuthorizationKey->ResponseBody
Gate_HTTP->tedee_access_token = resp.access_token
Gate_HTTP->tedee_token_type = resp.token_type
Gate_HTTP->tedee_token_expires = resp.expires_in
end
6. Skrypt ten należy przypisać do zdarzenia OnResponse obiektu wirtualnego TedeeLock_AuthorizationKey:
7. Wysyłając konfigurację do CLU oraz wywołując skrypt Tedee_AuthorizationKey_req zmienne użytkownika w module Gate powinny przyjąć odpowiednie wartości:
8. Następnie tworzymy kolejny obiekt wirtualny HttpRequest. Ustawienia obiektu wirtualnego TedeeLock_DeviceID, który pozwoli nam uzyskać ID zamka wyglądają następująco:
gdzie:
Host: https://api.tedee.com
Path: /api/v1.15/my/lock
QueryStringParams: \z
9. Następnie tworzymy skrypt Tedee_DeviceID_req:
local key = "Authorization: Bearer " .. Gate_HTTP->tedee_access_token .. "\r\n"
Gate_HTTP->TedeeLock_DeviceID->SetRequestHeaders(key)
Gate_HTTP->TedeeLock_DeviceID->SendRequest()
10. Dalej tworzymy skrypt Tedee_DeviceID_resp:
if(Gate_HTTP->TedeeLock_DeviceID->StatusCode==200) then
local resp = Gate_HTTP->TedeeLock_DeviceID->ResponseBody
Gate_HTTP->tedee_lock_sn_get=resp.result[num].serialNumber
if(Gate_HTTP->tedee_lock_sn==Gate_HTTP->tedee_lock_sn_get) then
Gate_HTTP->tedee_lock_id = resp.result[num].id
else
Gate_HTTP->Tedee_DeviceID_resp(num+1)
end
end
gdzie zmienna num jest parametrem wspomnianego skryptu:
Uwaga! W przedstawionym przykładzie wykorzystywany był jeden Bridge oraz jeden zamek Tedee.
11. Skrypt ten z wartością parametru num równą 1 należy przypisać do zdarzenia OnResponse obiektu wirtualnego TedeeLock_DeviceID:
12. Wysyłając konfigurację do CLU oraz wywołując skrypty Tedee_AuthorizationKey_req, a następnie Tedee_DeviceID_req zmienne użytkownika w module Gate powinny przyjąć odpowiednie wartości:
13. Następnie tworzymy kolejny obiekt wirtualny HttpRequest. Ustawienia obiektu wirtualnego TedeeLock_LockID, który pozwoli nam uzyskać informacje na temat zamka (m.in. stan urządzenia, poziom naładowania baterii) wyglądają następująco:
gdzie:
Host: https://api.tedee.com
Path: /api/v1.15/my/lock/
QueryStringParams: \z
14. Następnie tworzymy skrypt Tedee_LockID_req:
local path_1 = "/api/v1.15/my/lock/" .. Gate_HTTP->tedee_lock_id .. "/sync"
Gate_HTTP->TedeeLock_LockID->SetPath(path_1)
local key = "Authorization: Bearer " .. Gate_HTTP->tedee_access_token .. "\r\n"
Gate_HTTP->TedeeLock_LockID->SetRequestHeaders(key)
Gate_HTTP->TedeeLock_LockID->SendRequest()
15. Dalej tworzymy skrypt Tedee_LockID_resp:
if(Gate_HTTP->TedeeLock_LockID->StatusCode==200) then
local resp = Gate_HTTP->TedeeLock_LockID->ResponseBody
Gate_HTTP->tedee_lock_state = resp.result.lockProperties.state
Gate_HTTP->tedee_lock_charging = resp.result.lockProperties.isCharging
Gate_HTTP->tedee_lock_battery = resp.result.lockProperties.batteryLevel
end
16. Skrypt ten należy przypisać do zdarzenia OnResponse obiektu wirtualnego TedeeLock_ LockID:
17. Wysyłając konfigurację do CLU oraz wywołując skrypty Tedee_AuthorizationKey_req, Tedee_DeviceID_req, a następnie Tedee_LockID_req zmienne użytkownika w module Gate powinny przyjąć odpowiednie wartości:
18. Następnie tworzymy kolejny obiekt wirtualny HttpRequest. Ustawienia obiektu wirtualnego TedeeLock_Open, który pozwoli nam na otwarcie zamka wyglądają następująco:
gdzie:
Host: https://api.tedee.com
Path: /api/v1.15/my/lock/open
QueryStringParams: \z
19. Następnie tworzymy skrypt Tedee_Open_req, którego wywołanie po przesłaniu konfiguracji spowoduje otwarcie zamka:
local body_1 = {deviceId = Gate_HTTP->tedee_lock_id}
Gate_HTTP->TedeeLock_Open->SetRequestBody(body_1)
local key = "Authorization: Bearer " .. Gate_HTTP->tedee_access_token .. "\r\n"
Gate_HTTP->TedeeLock_Open->SetRequestHeaders(key)
Gate_HTTP->TedeeLock_Open->SendRequest()
20. W kolejnym kroku tworzymy obiekt wirtualny HttpRequest do zamykania zamka. Ustawienia obiektu wirtualnego TedeeLock_Close wyglądają następująco:
gdzie:
Host: https://api.tedee.com
Path: /api/v1.15/my/lock/close
QueryStringParams: \z
21. Następnie tworzymy skrypt Tedee_Close_req, którego wywołanie po przesłaniu konfiguracji spowoduje zamknięcie zamka:
local body_1 = {deviceId = Gate_HTTP->tedee_lock_id}
Gate_HTTP->TedeeLock_Close->SetRequestBody(body_1)
local key = "Authorization: Bearer " .. Gate_HTTP->tedee_access_token .. "\r\n"
Gate_HTTP->TedeeLock_Close->SetRequestHeaders(key)
Gate_HTTP->TedeeLock_Close->SendRequest()
22. Analogicznie można utworzyć obiekt wirtualny HttpRequest do odciągnięcia zapadki. Ustawienia obiektu wirtualnego TedeeLock_PullSpring wyglądają następująco:
gdzie:
Host: https://api.tedee.com
Path: /api/v1.15/my/lock/pull-spring
QueryStringParams: \z
23. Następnie tworzymy skrypt Tedee_PullSpring_req, którego wywołanie po przesłaniu konfiguracji spowoduje odciągnięcie zapadki przy otwartych drzwiach:
local body_1 = {deviceId = Gate_HTTP->tedee_lock_id}
Gate_HTTP->TedeeLock_PullSpring->SetRequestBody(body_1)
local key = "Authorization: Bearer " .. Gate_HTTP->tedee_access_token .. "\r\n"
Gate_HTTP->TedeeLock_PullSpring->SetRequestHeaders(key)
Gate_HTTP->TedeeLock_PullSpring->SendRequest()
24. Na końcu wywołanie skryptu Tedee_AuthorizationKey_req przypisujemy do zdarzenia OnInit w module Gate Http:
Uwaga! Token traci ważność po określonym czasie (cecha tedee_token_expires), dlatego skrypt Tedee_AuthorizationKey_req należy wywoływać cyklicznie, np. za pomocą obiektu wirtualnego Calendar.
25. Wywołanie skryptu Tedee_DeviceID_req umieszczamy w skrypcie Tedee_AuthorizationKey_resp:
26. Analogicznie – wywołanie skryptu Tedee_LockID_req umieszczamy w skrypcie Tedee_DeviceID_resp:
27. Tak utworzoną konfigurację wysyłamy do modułu Gate HTTP.
Sposób sterowania zamkiem Tedee za pomocą aplikacji myGrenton został przedstawiony w poniższym artykule: