홈파이: 텔레그램 메신저로 제어하는 홈 오토메이션
.
홈파이 (HomePy), 홈 오토메이션
홈 오토메이션 분야는 오래된 미래가 아닌가 싶습니다. 오래전부터 곧 적용될 기술처럼 소개되곤 해왔지만 정작 우리집은 별 변화가 없습니다. 그래서인지 홈 오토메이션은 메이커들의 단골 도전 종목 중 하나입니다.
저도 몇 차례 홈 오토메이션을 구현하기 위해 이런저런 시도들을 해봤지만 그닥 편리하게 사용할만한 결과를 보진 못했습니다. 그러다 텔레그램 CLI 라는, 라즈베리파이에 설치 가능한 텔레그램 어플리케이션을 알게 되어 테스트를 좀 해봤습니다. 텔레그램 CLI는 라즈베리파이같은 리눅스 머신에 설치해서 쓰는 텔레그램 클라이언트인데 외부 프로그램과 연동할 수 있도록 API를 열어뒀습니다.
하지만 외부로 공개된 API 사용법이 만족스럽지 않아 기본 코드만 만들어 두고 상황을 지켜보던 상태였는데 이번에 텔레그램 CLI 가 v1.x 로 업데이트 되면서 원하던 기능들이 추가되었습니다. 이제 텔레그램은 봇이라는 가상 계정을 지원하고 이를 활용할 수 있는 API 도 지원합니다. 게다가 능력자들이 발 빠르게 파이썬 인터페이스도 개발해서 공유하고 있습니다. 이번 업데이트를 보면 “텔레그램 메신저 준비는 다 해둘테니 홈 오토메이션 한번 해 봐라” 하는 느낌입니다.
단순히 하나의 장치를 제어하는걸 목표로 구현하는건 상대적으로 쉽습니다. 하지만 기왕 만드는거 나중에 뭘 만들든 붙여 쓸 수 있는 범용 홈 오토메이션 서버를 이 참에 구축하고 싶었습니다. 그래서 장치 간 동작 시나리오와 프로토콜 스펙을 먼저 만들고, 다양한 장치가 붙을 수 있음을 염두에 두고 제작했습니다. 그 결과물이 홈 오토메이션 서버 홈파이(HomePy) 입니다.
홈파이는 라즈베리파이와 파이카메라, HC-11 통신 모듈, 텔레그램 CLI를 연동해서 만든 홈 오토메이션 서버입니다. 홈파이는 자신의 비서 역할을 하는 텔레그램 봇 계정을 생성하면, 이 계정으로 들어오는 명령어 들을 인식해 해당 작업을 처리하고 결과를 알려줍니다. CCTV on/off, 사진 촬영 및 전송, 집안의 센서 장치들 관리, 제어가 봇과의 텔레그램 채팅으로 가능합니다. 텔레그램이 구동되는 플랫폼이면 핸드폰, PC, 브라우저 등등.. 집 안이든 밖이든 상관없이 연동된 장치들을 제어할 수 있습니다.
홈파이는 응용할 곳이 많습니다. 애완동물을 기르거나 수족관, 홈 가드닝이 취미인 분들을 위한 원격 조종장치로 쓸 수도 있고, 조명이나 가전 기구를 제어하는데 사용할 수도 있습니다. 집안에 각종 센서를 부착해 상태를 모니터링하는 용도로도 쓸 수 있습니다. 이 모든게 공짜이고, 소스코드를 수정해서 사용하셔도 됩니다.
다만 홈파이는 텍스트 기반이라 일부 명령어는 사용법이 좀 복잡하긴 합니다만… 뭐, 몇 번 쓰다보면 금방 익숙해집니다. 불편하시면 직접 여러 기능들 추가/수정해서 쓰세요. 써보시고 코드/기능 개선에 참여해 주신다면 대환영!!
주의!! : 텔레그램 메신저 측 보안이야 두 말 할 필요가 없지만, 라즈베리파이부터 센서 장치까지의 보안은 고려되지 않았습니다. HC-11 통신 모듈은 그런 고차원적인 고려가 없는 오픈된 통신 수단이며 프로토콜에서도 고려되지 않았습니다. 보안이 중요한 장치에는 홈파이 사용에 신중을 기하세요.
.
.
Bot Father 와 Bot 계정
라즈베리파이에 설치할 수 있는 텔레그램 CLI 소스가 정식 버전(v1.x)으로 판올림 되면서 봇(Bot) 기능과 Bot API가 추가되었습니다.
텔레그램 봇(Bot) 이란 텔레그램 메신저 내에서 내 챗을 받아 이런저런 명령을 수행해주는 비서로, 일반 유저처럼 등록되는 가상의 계정입니다. 최신 텔레그램 메신저 앱에서 Bot Father를 통해 나만의 봇을 만들 수 있도록 지원합니다. 봇을 만들면 봇에게 챗으로 명령을 내릴 수 있고, 텔레그램 CLI가 설치된 라즈베리 파이에서는 이 명령을 인식해서 여러가지 작업을 한 뒤 결과를 챗으로 알려줄 수 있습니다.
텔레그램과 봇, 라즈베리 파이의 삼위일체로 다양한 아이디어들을 구현할 수 있습니다.
홈파이(HomePy)에서도 텔레그램 봇을 사용자 인터페이스로 이용합니다. 즉, 봇 계정을 만들고 봇에게 명령을 내리면 라즈베리파이에서 구동하는 홈파이 파이썬 스크립트가 원하는 작업을 처리한 뒤 챗으로 알려줍니다. 홈파이를 이용한 CCTV on/off 기능, 사진 촬영 및 파일 전송 기능, 센서 장치 관리 및 제어, 데이터 수집 기능이 적용되어 있습니다. 이 외에도 실시간 검색어, 뉴스, 날시, 토렌트 제어 등의 기능도 구현이 가능하지만 홈파이는 그보다는 홈 오토메이션을 위한 기능에 계속 집중할 계획입니다.
.
홈파이 사용 방법
홈파이 프로토콜에 맞게 만든 장치들은 홈파이가 자동으로 감지하고 센서데이터를 수집, 제어합니다.
센서 장치들은 주기적으로 홈파이에게 자신의 존재를 알리는 등록 신호를 주기적으로 보내야합니다. HC-11 모듈을 통해 홈파이는 등록 신호를 받아 저장해 둡니다. 텔레그램 챗으로 봇에게 “장치“ 라고 입력하면 감지된 장치들을 모두 보실 수 있습니다.
센서 장치들은 등록 신호를 보낼 때 자신이 처리할 수 있는 4개의 제어 신호 정보도 같이 보내줍니다. “장치 상세 (장치넘버)“ 명령을 통해 각각의 장치가 지원하는 제어신호 정보를 볼 수 있습니다.
사용자는 제어신호 정보를 보고 여기에 맞게 신호를 보내 장치를 원격 조종하는 방식입니다. “제어 (장치넘버) (신호1) …“ 명령을 봇에게 전달하면 장치로 제어 신호가 전달됩니다. 센서 장치가 동작을 제대로 수행했다면 보낸 신호대로 응답을 줍니다.
그리고 홈파이는 센서 장치들이 보내주는 센서 업데이트 값을 받아 저장해둡니다. 예를 들어 온습도 센서가 주기적으로 온습도값을 보내주면 홈파이는 이걸 계속 저장해둡니다. 사용자가 챗을 통해 시간대별 값의 변화를 열람해 볼 수 있습니다. “출력 (장치넘버) (데이터 갯수)“ 명령으로 센서 값의 리스트를 볼 수 있습니다.
하지만 텍스트로 센서값을 보는 것은 가독성이 떨어지기 때문에 그래프로 보여주는 기능도 있습니다. “그래프 (장치넘버) (데이터 갯수)“ 명령을 봇에게 보내면 봇은 해당되는 센서값을 추출해 그래프로 그린 뒤, 이미지 파일로 보내줍니다!!
센서 장치에서 사용자에게 중요한 이벤트가 발생했을 때 봇이 알려줘야할 필요도 있을 것입니다. 이때는 알림 기능을 사용하면 됩니다. “알림 추가 (장치넘버) (조건1) … (조건4)“ 명령을 통해 알림을 추가할 수 있습니다. 센서장치가 보내주는 값이 지정한 조건에 맞으면 봇이 메시지로 알려줍니다. 모든 알림은 “알림” 명령으로 열람할 수 있습니다.
조건에 부합하는 센서 데이터가 업데이트 되면 챗으로 알려줍니다.
매크로 명령으로 매크로를 설정해두면 특정 알림이 실행될 때 챗으로 알려주는 대신 명령어를 실행하도록 할 수 있습니다. “매크로 추가 (알림ID) (명령어)“ ==> 특정 알림 조건을 만족하는 센서 데이터가 들어왔을 때 명령어를 실행합니다.
일정 시간 간격으로 명령어를 실행하도록 설정할 수도 있습니다. 타이머 명령어를 사용하면 됩니다. “타이머 추가 (시간 간격/분) (명령어)“ ==> 일정한 시간 간격(분 단위)으로 명령어를 실행합니다.
특정 시간에 명령어를 실행하도록 설정할 수 있습니다. “타이머 추가 (시간/13:50) (명령어)“ ==> 13:50 시간에 명령어를 실행합니다.
이 외에도 CCTV, 사진 촬영 등의 기본 기능들을 명령어로 제어할 수 있습니다.
홈파이에서 제공하는 명령어 리스트는 아래 링크를 참고하세요.
링크 : 홈파이에서 사용 가능한 명령어 리스트
.
라즈베리파이로 홈파이 서버 만들기
홈파이 서버를 구성하기 위해서는 아래와 같은 준비물이 필요합니다.
- 라즈베리파이 (SD카드 및 USB, HDMI, 랜 케이블 등 포함)
- 파이 카메라
- HC-11 433MHz RF 모듈
라즈베리파이에 홈파이 서버를 구성하기 위해서는 긴 설정 과정을 거쳐야 합니다. 다뤄야 할 양이 꽤 되므로 별도의 문서로 만들었습니다.
링크 : 홈파이 – 라즈베리파이에 설치하기
홈파이 서버만 고독하게 돌아가서는 CCTV, 사진 촬영 정도의 기능 정도만 쓸 수 있을 뿐… 센서 장치도 만들어서 연동해봐야 합니다. 간단하게 온습도 센서와 LED 제어장치를 만들어서 연동해 볼 수 있도록 예제 매뉴얼을 만들어 뒀습니다.
링크 : 홈파이 – 예제 장치 만들기
홈파이 프로토콜
자신이 직접 만든 장치를 홈파이와 연동하고 싶다면 홈파이 프로토콜 문서를 보고 필요한 값 들을 설정해줘야 합니다. 홈파이가 동작하는 세부 시나리오와 프로토콜의 구성, 사용자가 선택해야 할 항목을 정리해 뒀습니다.
링크 : 홈파이 동작 시나리오와 프로토콜
공유와 개선
홈파이는 오픈소스 프로젝트이며 LGPL v3 (GNU LESSER GENERAL PUBLIC LICENSE v3)를 적용하고 있습니다. 소스코드의 업데이트는 아래 공식 배포 페이지를 통해 이루어집니다.
- 홈파이(HomePy) 다운로드 : https://github.com/godstale/HomePy
.
.