Przejdź do treści
Polski
  • Brak sugerowanych wyników, ponieważ pole wyszukiwania jest puste.

Integracja z Google Kalendarzem w celu powiadamiania świetlnego oraz za pomocą PUSH.

Przykład podany dla domyślnego kalendarza (primary) oraz Polskiej strefy czasowej UTC (+1:00). Powiadomienia będą na około 30 minut przed wydarzeniem.

1. W pierwszej kolejności skonfiguruj obiekty wirtualne na Gate HTTP.

1.1 Obiekt HTTPRequest: gcal_TokenRefresh

Parametr

Wartość

Nazwa

gcal_TokenRefresh

Host

https://oauth2.googleapis.com

Path

/token

Method

POST

Timeout

8

RequestType

FormData

ResponseType

JSON

1.2 Obiekt HTTPRequest: gcal_GetEvents

Parametr

Wartość

Nazwa

gcal_GetEvents

Host

https://www.googleapis.com

Path

/calendar/v3/calendars/primary/events

Method

GET

Timeout

8

RequestType

None

ResponseType

JSON

1.3 Timer: timer_gcal_Poll

Parametr

Wartość

Nazwa

timer_gcal_Poll

Time

300000 (5 minut)

Mode

1 (Interval)

1.4 Timer: timer_gcal_Blink

Parametr

Wartość

Nazwa

timer_gcal_Blink

Time

800

Mode

1 (Interval)

1.5 Timer: timer_gcal_BlinkStop

Parametr

Wartość

Nazwa

timer_gcal_BlinkStop

Time

10000 (10 sekund mrugania)

Mode

0 (Countdown)

2. Tworzymy obiek wirtualny PUSH o nazwie „gcal_push” na CLU

3. Tworzymy cechy użytkownika oraz skrypty na GATE HTTP i przypisujemy do wskazanych zdarzeń:

3.1. CECHY UŻYTKOWNIKA:

3.2. Nazwa: “script_gcal_StartCycle” Przypisać do: timer_gcal_Poll → OnTimer

local CLIENT_ID = "CLIENT ID UZYSKANE Z GOOGLE API"
local CLIENT_SECRET = "CLIENT SECRET UZYSKANY Z GOOGLE API"
local REFRESH_TOKEN = "REFRESH TOKEN UZYSKANY Z GOOGLE API"

local body = "client_id=" .. CLIENT_ID
  .. "&client_secret=" .. CLIENT_SECRET
  .. "&refresh_token=" .. REFRESH_TOKEN
  .. "&grant_type=refresh_token"

GATE->gcal_TokenRefresh->SetRequestBody(body)
GATE->gcal_TokenRefresh->SendRequest()

 

 

 

3.3. Nazwa: „script_gcal_EventReceived” przypisać do gcal_GetEvents → OnResponse:

local items = GATE->gcal_GetEvents->ResponseBody.items
print("ilosc items: " .. tostring(#items))
if not items or #items == 0 then
print("[GCalendar] Brak zdarzeń w oknie 30 minut")
return
end
local title = ""
local etag1 = items[1].etag

if etag1 ~= GATE->Last_Event then
GATE->Last_Event = etag1
title = items[1].summary or ""
print("[GCalendar] Zdarzenie za ~30 min: " .. title)
elseif #items > 1 and items[2].etag ~= GATE->Last_Event2 then
GATE->Last_Event2 = items[2].etag
title = items[2].summary or ""
print("[GCalendar] Zdarzenie za ~30 min: " .. title)
else
print("[GCalendar] Zdarzenia zostały już przypomniane")
end

if title ~= "" then
GATE->timer_gcal_Blink->Stop()
GATE->timer_gcal_BlinkStop->Stop()
GATE->timer_gcal_Blink->Start()
GATE->timer_gcal_BlinkStop->Start()

local message = "za około 30 minut masz wydarzenie o nazwie: " .. title
print(message)
GATE->mes = message
CLU->gcal_push->SetTitle("Przypomnienie kalendarza")
CLU-> gcal_push ->SetMessage(GATE->mes)
SYSTEM.Wait(500)
CLU-> gcal_push ->Send()
End

 

3.4. Nazwa: script_gcal_TokenReceived przypisać do gcal_TokenRefresh → OnResponse:

local resp = GATE->gcal_TokenRefresh->ResponseBody
local token = resp.access_token

GATE->AccessToken = token
print(GATE->AccessToken)

if not token then
print("[GCalendar] Brak access_token w odpowiedzi!")
return
end


-- Ustaw nagłówek autoryzacji dla żądania kalendarza

local header = "Authorization: Bearer " .. token .. "\r\n"
GATE->gcal_GetEvents->SetRequestHeaders(header)

-- Okno czasowe: zdarzenia zaczynające się między now+28min a now+33min
-- Dzięki temu przy odpytaniu co 5 min zawsze "złapiemy" granicę 30 minut
local now = GATE->Time
local date = GATE->Date
local tMin = date .. "T" .. now .. "+01:32"
local tMax = date .. "T" .. now .. "+01:27"

-- Kodowanie URL: dwukropek → %3A (wymagane w query string)
tMin = string.gsub(tMin, ":", "%%3A")
tMax = string.gsub(tMax, ":", "%%3A")
tMin = string.gsub(tMin, "+", "%%2B")
tMax = string.gsub(tMax, "+", "%%2B")

local params = "timeMin=" .. tMin
.. "&timeMax=" .. tMax
.. "&maxResults=5"

GATE->gcal_GetEvents->SetQueryStringParams(params)
GATE->gcal_GetEvents->SendRequest()

3.5. Nazwa: “script_gcal_BlinkTick” przypisać do timer_gcal_Blink → OnTimer:

if CLU->DOUT->Value == 1 then
CLU->DOUT->SwitchOff(0)
else
CLU->DOUT->SwitchOn(0)
End

 

3.6. Nazwa: “script_gcal_StopBlink” przypisać do timer_gcal_BlinkStop → OnTimer:

GATE->timer_gcal_Blink->Stop()
print("[GCalendar] Koniec powiadomienia świetlnego")

4. Zweryfikować powiązanie zdarzeń:

Obiekt źródłowy

Zdarzenie

Akcja

CLU (embedded)

OnInit

timer_gcal_Poll → Start()

timer_gcal_Poll

OnTimer

script_gcal_StartCycle

gcal_TokenRefresh

OnResponse

script_gcal_TokenReceived

gcal_GetEvents

OnResponse

script_gcal_EventsReceived

timer_gcal_Blink

OnTimer

script_gcal_BlinkTick

timer_gcal_BlinkStop

OnTimer

script_gcal_StopBlink

 

5. Utworzenie i uzyskanie kluczy oraz tokenów z Google API:

1. Wejdź na stronę: https://console.cloud.google.com i wyszukaj „calendar”. Następnie wybierz i uruchom: „Google Calendar API”.

2. Przejdź do zakładki „Dane logowania” po lewej stronie i „utwórz dane logowania”

Następnie „Klucz interfejsu API”. Nadaj wybraną nazwę, wybierz ograniczenia interfejsu API i wyszukaj „Google Calendar API”.

Utwórz Interfejs.

3. Przejdź do zakładki „ekran zgody OAuth” i rozpocznij konfigurację.

4. Po zakończonej konfiguracji przejdź do zakładki „Dostęp do danych” i dodaj zakres https://www.googleapis.com/auth/calendar.readonly

5. Następnie w zakładce „Klienty” utwórz klienta jako aplikację internetową oraz dodaj do „Autoryzowane identyfikatory URL przekierowania” link: „ https://developers.google.com/oauthplayground „.

Skopiuj i zapisz: Identyfikator klienta oraz tajny klucz klienta.

6. W zakładce „Odbiorcy” dodaj swój adres e-mail, jako użytkownika testowego. Będzie on konieczny do autoryzacji aplikacji.

7. Autoryzuj aplikację:

7.1. Otwórz „https://developers.google.com/oauthplayground”.

7.2. Kliknij ikonę koła zębatego (górny prawy róg) → zaznacz "Use your own OAuth credentials".

7.3. Wpisz swoje Client ID i Client Secret.

7.4. W panelu po lewej wyszukaj „https://www.googleapis.com/auth/calendar.readonly „.

Zaznacz ten zakres.

7.5. Kliknij Authorize APIs → zaloguj się na swoje konto Google → zezwól na dostęp.

7.6. Kliknij “Exchange authorization code for tokens”.

7.7. Skopiuj i zachowaj bezpiecznie wartość refresh_token — będzie potrzebna raz.

 

8. Uzupełnij brakujące dane w skrypcie: script_gcal_StartCycle

local CLIENT_ID = “”
local CLIENT_SECRET = “”
local REFRESH_TOKEN = “”