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_reqTedee_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:

 

 

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.