스마트 소켓 Orvibo S 20 을 라즈베리 파이 로 텔레 그램 과 연동 하 기 - Haruair 
 Page 대충 번역 센터 
 터미널 에서 사용 하 는 도구 소개 
 JavaScript 제대로 배우 기 
 JavaScript 라이브러리 모음 
 AngularJS 공부 하 기 
 FRP in Elm 강의 노트 
 전체 포스트 목록 
 스마트 소켓 Orvibo S 20 을 라즈베리 파이 로 텔레 그램 과 연동 하 기 
 By haruair 
 반 년 전 에 Orvibo S 20 이 라는 스마트 소켓 을 구입 했 다 . 스마트 소켓 은 스위치 를 제어 할 수 있 도록 Wifi 모듈 이 내장 되 어 있 다 . 스마트폰 앱 을 사용 해서 이 소켓 의 전원 을 올렸 다 내렸 다 할 수 있 는데 집 에 있 는 거실 스탠드 와 안방 스탠드 에 연결 해서 사용 하 고 있 었 다 . Orvibo 에서 는 WiMo 라는 앱 을 제공 하 는 데 앱 이 상당히 부실 하 고 연결 이 오락가락 하 는 문제점 이 있 었 다 . 또한 같 은 wifi 네트워크 내 에서 만 동작 하 기 때문 에 집 을 나서 면 불 을 켜 고 나왔 는지 확인 할 방법 이 없 었 다 . 이렇게 생각 보다 활용 도 가 많이 떨어져서 제대로 쓰 지 않 고 방치 하 고 있 었 다 . 
 어느 날 거실 에서 방 을 들어가 는데 불 을 끄 고 스마트폰 을 손전등 처럼 쓰 는 내 모습 을 보 고 는 왜 사놓 고 제대로 못 쓰 고 있 나 생각 이 확 들 었 다 . 그래서 간단 하 게라도 만들 어 보 기 로 했 다 . 
 Orvibo 에서 는 딱히 개발 을 위한 API 를 공개 하 지 않 았 지만 S 20 인터페이스 를 리버 싱 해서 어떤 방식 으로 제어 할 수 있 는지 분석 한 사람 들 이 오픈 소스 라이브러리 로 내놓 기 시작 했 다 . 마침 집 에서 방치 하 고 있 던 라즈베리 파이 가 있 었 고 최근 부지런히 사용 하 고 있 는 텔레 그램 과 연동 해서 아주 간단 하 게 외부 에서 제어 가능 한 환경 을 만들 수 있 었 다 . 
 사용 한 라이브러리 
 텔레 그램 봇 을 만들 수 있 는 파이썬 패키지 는 엄청 많 다 . python - telegram - bot 같 은 멋진 라이브러리 도 있 지만 간단 하 게 데코레이터 문법 으로 작성 할 수 있 는 pyTelegramBotAPI 을 골랐 다 . 이 패키지 는 간단 한 기능 만 제공 하 고 있 어서 텔레 그램 의 고급 기능 을 사용 하 려면 다른 패키지 를 고르 는 것 이 낫 다 . 
 S 20 을 제어 하 는 패키지 는 happyleavesaoc / python - orvibo 를 사용 했 다 . S 20 자체 에 도 타이머 나 추가 적 인 설정 이 가능 하 지만 이 패키지 는 그 기능 을 지원 하 지 않 는다 . 그래도 자체 기능 보다 는 프로그램 쪽 에서 제어 하 는 게 편해서 제대로 켜 고 끌 수 만 있 기 만 하 면 되 서 이 패키지 를 사용 하 게 되 었 다 . 
 라우터 설정 
 라우터 에서 설정 할 부분 은 크 게 없 었 다 . 텔레 그램 봇 은 네트워크 내 에서 polling 해 오 는 방식 이 라서 별도 로 포트 를 포워딩 해 외부 접근 을 허용 하 거나 할 필요 가 전혀 없 었 다 . 대신 편의 를 위해서 S 20 의 IP 를 수동 으로 할당 해 내부 에서 고정 IP 로 접근 할 수 있 도록 변경 했 다 . 
 텔레 그램 봇 설정 
 봇 은 예전 에 만든 봇 을 그대로 사용 했 다 . 만드 는 방법 은 MS PowerShell 에서 텔레 그램 메시지 전송 하 기 에서 확인 할 수 있 다 . 
 멋지 진 않 지만 그래도 동작 하 는 코드 를 아래 처럼 작성 했 다 . 
 from orvibo . s 20 import S 20 
 from telebot import Telebot 
 def change _ switch ( s 20 , mode ) : 
 return status _ message ( s 20 ) 
 def status _ message ( s 20 ) : 
 return "% s room light is % s " % ( s 20 [ 0 ] , flag ) 
 def living _ room _ on ( message ) : 
 bot . send _ message ( message . chat . id , msg ) 
 def living _ room _ off ( message ) : 
 def bed _ room _ on ( message ) : 
 def bed _ room _ off ( message ) : 
 def all _ statuses ( message ) : 
 bot . send _ message ( message . chat . id , living _ msg ) 
 bot . send _ message ( message . chat . id , bed _ msg ) 
 라즈베리 파이 설정 
 봇 에 문제 가 생겨도 다시 실행 되 도록 Supervisor 를 사용 했 다 . pip 을 사용 해서 설치 하 려 했 는데 python 3 환경 에선 사용 하 지 못한다고 나왔 다 . 대신 systemd 를 추천 받 아서 설치 하 려는데 라즈비 안 엔 없 어서 고민 했 는데 apt - get 에 Supervisor 가 올라와 있 어서 쉽 게 해결 할 수 있 었 다 . 
 supervisord . conf 를 간단 하 게 작성 하 고 실행 했 다 . 전체 경로 로 지정 하 고 싶 지 않 다면 PATH 를 추가 해도 된다 . 
 $ supervisord - c / home / pi / bot / supervisord . conf 
 이제 봇 에 말 을 걸 어 보 면 동작 하 는 것 을 확인 할 수 있 다 . 
 S 20 이 종종 연결 이 끊 어 지 는 문제 가 있 는데 S 20 으로부터 응답 이 없 으면 코드 에 별도 의 에러 핸들링 이 없 어서 봇 이 재 시작 되 었 다 . 이 경우 에 는 시간 이 지나 면 알 아서 S 20 이 다시 붙 거나 아니 면 S 20 을 뽑 았 다 다시 끼워야 한다 . 연결 에 실패 한 것 이 라도 확인 할 수 있 도록 코드 를 조금 수정 했 다 . 
 def wrong _ message ( s 20 ) : 
 return "% s room light is something wrong " % s 20 [ 0 ] 
 return wrong _ message ( s 20 ) 
 실제로 사용 해 보 니 생각 보다 조작 을 많이 해야 해서 타이머 를 이용 해 일종 의 오토메이션 명령어 를 추가 했 다 . 
 def go _ to _ bed ( message ) : 
 bed _ room _ on ( message ) 
 bot . send _ message ( message . chat . id , " Living room light will turn off 15 secs after . ") 
 living _ room _ off ( message ) 
 얼마 전 iOS 10 업데이트 를 하 면서 Home 앱 이 기본 적 으로 들어왔 는데 애플 의 HomeKit 과 연동 이 가능 하 면 사용 할 수 있 다고 한다 . 이 프로토콜 을 사용 할 수 있 도록 구현 한 패키지 가 nodejs 에 존재 하 는데 HAP - NodeJS 와 homebridge 다 . 이 도구 와 연동 하 면 Siri 를 이용 해서 켜 고 끌 수 있 다는 장점 이 있 어서 여기 서 작성 한 코드 를 조만간 연동 가능 하 게 만들 어 볼 생각 이 다 . 
 각 장비 에서 직접 API 를 제공 하 거나 API 를 사용 해서 제어 할 수 있 는 방식 에서 마이크 로 서비스 아키텍처 의 향기 가 난다 . 대부분 의 홈 오토메이션 장비 가 게이트웨이 를 필요 로 한다 . 이 글 에서 는 라즈베리 파이 를 썼 고 애플 의 HomeKit 에서 는 애플 TV 가 그런 역할 을 한다 . 마치 MSA 의 API Gateway 와 같 은 방식 으로 말 이 다 . 앞 으로 어떤 도구 들 이 재미있 는 API 를 들 고 나올지 기대 된다 . 
 Share this : F a c e b o o k T w i t terTumblrPocketPrintEmail haruair 
 Category : 개발 이야기 
 Tags : iot , orvibo s 20 , raspberry pi 
 더 읽 을 거리 	 오픈 소스 쓰 셨 던 데 그러 고 도 개발자 입니까 ? 	 다른 프레임워크 와 vue . js 비교 	 tmux 입 문자 시리즈 요약 	 안녕 하 세요 : ) 	 IT 개발자 , 호주 에서 일 하 기 	 상하 이 푸 동국 제 공항 경유 및 스탑 오버 경험 기 	 당신 이 PHP 개발 자 라면 2016 년 놓치 지 말 고 해야 할 것 들 	 ECMAScript 6 를 위한 Babel 기본 사용법 	 ssh 인증 키 생 성 및 서버 에 등록 하 기 	 PHP 의존 성 관리 도구 - Composer 시작 하 기 	 혹시 . .. IT 개발자 가 바글바글 한 이상 한 모임 에 대해 들 어 보 셨 나요 ? 
 저작 권 에 관한 글 에서 언급 한 내용 을 제외 하 고 , 이 웹 사이트 의 저작물 은 크리에이티브 커 먼즈 저작 자 표시 4 . 0 국제 라이선스 에 따라 이용 할 수 있 습니다 .