Celem niniejszego artykułu jest zaprezentowanie przykładu integracji telewizora Samsung z Systemem Grenton Smart Home z wykorzystaniem Gate Http oraz SmartThings.
Urządzenie, które zostało zastosowane w tym przykładzie to Telewizor Samsung serii Q70
Integracja ta pozwala nam m. in. na:
- Włączenie i wyłączenie urządzenia
- Sterowanie głośnością
- Wybór źródła
- Uruchomienie wybranych aplikacji
Do zrealizowania poniższego przykładu potrzebujemy:
- Gate HTTP
- Telewizor Samsung zgodny ze SmartThings
Przygotowanie
1. Tworzenie tokenu
Korzystając z linku utwórz token. Nie zapomnij go zapisać ponieważ wyświetli się tylko raz.
2. Dodanie urządzenia do SmartThings
Dodaj urządzenie do SmartThings, a następnie upewnij się, że jest ono ONLINE:
3. Skopiuj DeviceID integrowanego urządzenia:
4. Sprawdzenie działania komunikacji:
Kliknij w nazwę urządzenia. W otwartej stronie mamy możliwość sprawdzenia dostępnych komend oraz przetestowania ich.
Przygotowanie konfiguracji
Tworzenie cech użytkownika:
1. Dwukrotnie kliknij w obiekt Gate_HTTP, aby wejść do ustawień modułu:
2. Przejdź do zakładki "Cechy użytkownika" i stwórz potrzebne cechy:
- DeviceID - Wartość początkowa: {DeviceID} Typ: string
- Token - Wartość początkowa: {Token} Typ: string
- TVOnOffStatus - Wartość początkowa: 0 Typ: number
- TVAudioMuteStatus - Wartość początkowa: 0 Typ: number
- TVAudioVolumeStatus - Wartość początkowa: 0 Typ: number
- TVSourceStatus - Wartość początkowa: 0 Typ: string
Do wartości początkowej cechy DeviceID wklej DeviceID integrowanego urządzenia. Do wartości początkowej cechy Token wklej Token.
Tworzenie obiektów
1. Stwórz obiekt HttpRequest o nazwie HttpRequestTVCommand i skonfiguruj go w następujący sposób:
Host: https://api.smartthings.com
Path: /v1/devices/{DeviceId}/commands - zamiast {DeviceId} wpisz DeviceId integrowanego urządzenia
2. Stwórz obiekt HttpRequest o nazwie HttpRequestStatusRefresh i skonfiguruj go w następujący sposób:
Host: https://api.smartthings.com
Path: /v1/devices/{DeviceId}/commands - zamiast {DeviceId} wpisz DeviceId integrowanego urządzenia
3. Stwórz obiekt HttpRequest o nazwie HtttpRequestStatus i skonfiguruj go w następujący sposób:
Host: https://api.smartthings.com
Path: /v1/devices/{DeviceId}/status - zamiast {DeviceId} wpisz DeviceId integrowanego urządzenia
4. Stwórz obiekt Timer o nazwie RefreshTimer i skonfiguruj go w następujący sposób:
Tworzenie skryptów:
1. Stwórz skrypt o nazwie sHttpRequestTVCommandRequest z dwoma parametrami:
W treść skryptu wklej następujący kod:
local reqbody = {}
reqbody.commands = {}
reqbody.commands[1] = {}
reqbody.commands[1]["component"] = "main"
if param == "on" or param == "off" then
reqbody.commands[1]["capability"] = "switch"
reqbody.commands[1]["command"] = param
end
if param == "volumeUp" or param == "volumeDown" then
reqbody.commands[1]["capability"] = "audioVolume"
reqbody.commands[1]["command"] = param
end
if param == "channelUp" or param == "channelDown" then
reqbody.commands[1]["capability"] = "tvChannel"
reqbody.commands[1]["command"] = param
end
if param == "muteSwitch" then
if Gate_HTTP->TVAudioMuteStatus == 1 then
reqbody.commands[1]["capability"] = "audioMute"
reqbody.commands[1]["command"] = "unmute"
else
reqbody.commands[1]["capability"] = "audioMute"
reqbody.commands[1]["command"] = "mute"
end
end
if param == "setVolume" then
reqbody.commands[1]["capability"] = "audioVolume"
reqbody.commands[1]["command"] = param
reqbody.commands[1]["arguments"] = {}
reqbody.commands[1]["arguments"][1] = param2
end
if param == "HDMI3" or param == "HDMI4" then
reqbody.commands[1]["capability"] = "mediaInputSource"
reqbody.commands[1]["command"] = "setInputSource"
reqbody.commands[1]["arguments"] = {}
reqbody.commands[1]["arguments"][1] = param
end
if param == "UP" or param == "DOWN" or param == "LEFT" or param == "RIGHT" or param == "HOME" or param == "MENU" or param == "OK" or param == "BACK" then
reqbody.commands[1]["capability"] = "samsungvd.remoteControl"
reqbody.commands[1]["command"] = "send"
reqbody.commands[1]["arguments"] = {}
reqbody.commands[1]["arguments"][1] = param
end
if param == "pause" or param == "fastForward" or param == "rewind" or param == "play" then
reqbody.commands[1]["capability"] = "mediaPlayback"
reqbody.commands[1]["command"] = param
end
if param == "Netflix" or param == "HBO" or param == "Prime" or param == "YouTube" then
reqbody.commands[1]["capability"] = "custom.launchapp"
reqbody.commands[1]["command"] = "launchApp"
reqbody.commands[1]["arguments"] = {}
if param == "Netflix" then
reqbody.commands[1]["arguments"][1] = "3201907018807"
end
if param == "HBO" then
reqbody.commands[1]["arguments"][1] = "3201601007230"
end
if param == "Prime" then
reqbody.commands[1]["arguments"][1] = "3201910019365"
end
if param == "YouTube" then
reqbody.commands[1]["arguments"][1] = "111299001912"
end
end
Gate_HTTP->HttpRequestTVCommand->SetRequestBody(reqbody)
local key = "Authorization: Bearer "..Gate_HTTP->Token.."\r\n"
Gate_HTTP->HttpRequestTVCommand->SetRequestHeaders(key)
Gate_HTTP->HttpRequestTVCommand->SendRequest()
2. Stwórz skrypt o nazwie sHttpRequestStatus_request:
Treść skryptu:
local key = "Authorization: Bearer "..Gate_HTTP->Token.."\r\n"
Gate_HTTP->HtttpRequestStatus->SetRequestHeaders(key)
Gate_HTTP->HtttpRequestStatus->SendRequest()
3. Stwórz skrypt o nazwie sHttpRequestStatus_response:
local resp = Gate_HTTP->HtttpRequestStatus->ResponseBody
if resp.components.main.switch.switch.value == "on"
then
Gate_HTTP->TVOnOffStatus = 1
else
Gate_HTTP->TVOnOffStatus = 0
end
if resp.components.main.audioMute.mute.value == "muted" then
Gate_HTTP->TVAudioMuteStatus = 1
else
Gate_HTTP->TVAudioMuteStatus = 0
end
Gate_HTTP->TVAudioVolumeStatus = resp.components.main.audioVolume.volume.value
Gate_HTTP->TVSourceStatus = resp.components.main.mediaInputSource.inputSource.value
4.Stwórz skrypt o nazwie sHttpRequestStatusRefresh:
Przypisanie powiązań:
1. Do Zdarzenia OnResponse obiektu HttpRequestTVCommand przypisz wykonanie skryptu sHttpRequestStatusRefresh
2. Do Zdarzenia OnResponse obiektu HtttpRequestStatus przypisz wykonanie skryptu sHttpRequestStatus_response
3. Do Zdarzenia OnResponse obiektu HttpRequestStatusRefresh przypisz wykonanie skryptu sHttpRequestStatus_request
4. Do Zdarzenia OnTimer obiektu RefreshTimer przypisz wykonanie skryptu sHttpRequestStatusRefresh
Tak przygotowaną konfigurację wyślij na moduł Gate Http
Tworzenie interfejsu myGrenton
1. Stwórz widżet HEADER i skonfiguruj go następująco:
2. Stwórz widżet TV_REMOTE_CONTROL i skonfiguruj go następująco:
3. Stwórz widżet HEADER i skonfiguruj go następująco:
4. Stwórz widżet SLIDER i skonfiguruj go następująco:
5. Stwórz widżet HEADER i skonfiguruj go następująco:
6. Stwórz widżet SENE_DOUBLE i skonfiguruj go następująco:
7. Stwórz widżet HEADER i skonfiguruj go następująco:
8. Stwórz widżet SENE_DOUBLE i skonfiguruj go następująco:
Po wysłaniu na telefon, interfejs wygląda następująco.:
Po kliknięciu w widżet Pilot pojawi się okno:
Poniżej film ukazujący działanie integracji