Sterowanie telewizorem Samsung poprzez SmartThings

Celem niniejszego artykułu jest zaprezentowanie przykładu integracji telewizora Samsung z Systemem Grenton Smart Home z wykorzystaniem Gate Http oraz SmartThings.


Example banner

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