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 = “”