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:

Graphical user interface, text, application, email

Description automatically generated



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:
https://support.grenton.pl/pl/support/solutions/articles/35000170627-sterowanie-zamkiem-tedee