Smartthings를 이용한 PC ON/OFF

준비물

  1. Samsung Smartthings
  2. Event Ghost
  3. ON/OFF 시킬 PC
  4. Core or WebCoRe
  5. 라즈베리파이(Optional)

진행순서

1. Smartthings의  가상 스위치 & WebCoRe & WOL을 이용한 PC On

* 선행작업 *

첫번째 순서를 진행하려면 자신의 Smartthings에 WebCoRe 설정을 해야 한다. WebCoRe 설치는 링크로 대체한다.(http://jiyino.tistory.com/entry/%EC%84%A4%EC%B9%98-SmartThings-WebCoRE)

그리고 PC의 WOL(Wake On Lan)을 미리 설정하고, 공유기에서 WOL기능을 이용하여 PC가 정상적으로 켜지는지 테스트하고 진행한다. 이를 진행하지 않았을 경우 WOL 설정이 정상이 아니어서 안켜지는 건지, Smartthings 설정을 잘못해서 안켜지는 건지 확인할 방법이 없기 때문이다.


WOL 설정은 각자의 PC마다 옵션명이나 방법이 다 다르다(어떤건 메인보드 옵션과, 랜카드 옵션 두가지 모두를 켜야 되는것도 아니고, 메인보드 옵션이 아얘 없는것도 있고 다양하다). 일단 WOL 설정법은 링크로 대체한다(http://adariman.tistory.com/289). 설정 후 공유기의 WOL메뉴에서 정상적으로 PC가 켜지는지 확인하고 다음으로 넘어간다.


작업1: Smartthings IDE로 이동 하여 가상 스위치를 생성한다.

Name: 원하는 스위치 명

Device Network ID: 다른 장치들과 겹쳐지지 않는 유니크한 아이디(아무거나 입력)

Type: Virtual Switch


를 선택한다.


작업 2: WebCoRe Dashboard로 들어가 위에서 만든 Virtual Switch가 ON이 되었을때 WOL을 이용해서 PC를 켜도록 하는 피스톤을 만든다.


do Wake LAN device at address xxx에는 WOL을 이용하여 켜고자 하는 PC의 맥어드레스를 입력해 주면 된다.



위와 같이 작업한 후 Smartthings APP에서 PC Switch를 on시키면 WOL을 이용하여 PC를 실행시킬수 있다.



2. Host Pinger를 이용한 PC의 현재상태를 Switch에 반영하기

Host Pinger를 이용하여 현재 PC의 상태가 ON/OFF인지 알아내고, 이를  위에서 만든 Virtual Switch에 상태를 반영할 수 있다.
링크에서도 보듯이 host pinger는 다양한 옵션(exe파일, python 스크립트, bash 스크립트)으로 실행 시킬수 있다. 이 host pinger는 주기적으로 상태를 체크하고자 하는 pc에 ping을 보내 pong이 오는지 체크하여 ON/OFF 상태를 체크한다. 따라서 계속 켜져있는 상태의 서버에 설치하는것이 좋다. 필자는 이미 라즈베리파이를 가지고 있기 때문에 여기에다가 bash script를 설치하여 PC의 상태를 체크하였다.


작업 1: Smartthings IDE에 Host Pinger SmartAPP과 Device Type을 설치한다.


이미지와 같이 github Repository를 등록한 후 My SmartApp -> Update From Repo -> STHostPinger 선택 -> SmartApp 설치 하고 DTH도 My Device Type에 들어가 동일하게 선택해 준다.


그다음 My SmartApp의 Host Pinger에 Edit Properties 버튼을 누르고 OAuth -> Enable OAuth In Smart App를 선택하여 OAuth 인증을 활성화 한다.



작업 2: Host Pinger 스크립트에서 사용할 OAuth Access Token을 발급 받는다.


Smartthings 스마트폰 앱에서 Automation -> SmartApps -> +Add a SmartApp을 통해 방금 설치한 Host Pinger app을 설치한다. 설치한 스마트앱하단에 보면 ADVANCED 섹션에 "Endpoint Setup Details" 를 선택하면, API URL과 OAuth AccessToken을 얻을 수 있다.


  • API URL : https://graph-na04-useast2.api.smartthings.com:443/api/smartapps/installations/15695c64-b5ec-47fe-a8a0-xxxx
  • Access Token: 2dd50311-xxxxxxx-xxxxxxxx

작업 3: 스마트 폰의 Smarttings앱 내 Host Pinger앱에서 Host를 추가 한다.


Name: 아무 이름이나

IP, Host or URL : 부팅하고자 하는 PC의 아이피

Turn This Device On/Off with Status : 위에서 만들어준 Virtual Switch를 지정






작업 4: 실제로 PC에 ping을 보낼 Host pinger 스크립트를 라즈베리파이에서 실행시킨다.


https://community.smartthings.com/t/release-host-pinger-ip-based-online-state-presence/61435/177 의 코드를 복사하여 몇가지 정보만 수정한다.







IDE : 작업 2-API URL중 도메인 부분, :443까지 붙여줘야 함

ACCESS_TOKEN : 작업 2- Access Token

APP_ID: 작업 2- API URL의 맨 뒤 빨간 부분

3번째 박스 : ping(상태를 체크하고자 하는 PC)을 보내고자 하는 곳의 IP

PING_INTERVAL: 몇초 단위로 상태를 체크할것인지


위의 정보를 수정하여 라즈베리파이에 복사 한 후 아래와 같은 명령어로 해당 스크립트를 수행시킨다.


$ chmod +x host_pinger.sh

$ ./host_pinger.sh


수행하면 loop를 돌면서 계속 PC의 상태를 체크한다. 만약 화면에 "Unable to reach SmartThings Endpoint."라는 로그가 찍히면 정상적으로 설정이 안된것임으로 스크립트에 수정해야할 데이터를 제대로 수정했는지 해본다.


마지막으로 정상적으로 스크립트가 수행이 된다면 아래의 명령어로 백그라운드에서 동작하도록 한다.


$ nohup ./host_pinger.sh > /dev/null 2>&1 &



3. Event Ghost를 이용한 PC shutdown

---준비중---


TAGS.