홈파이: 텔레그램으로 제어하는 홈 오토메이션 (라즈베리파이에 설치)
텔레그램으로 제어하는 홈 오토메이션 프로젝트 – 홈파이
- 홈파이: 텔레그램 메신저로 제어하는 홈 오토메이션 프로젝트
- 홈파이 : 라즈베리 파이에 설치하는 방법
- 홈파이 : 예제 센서 장치 만드는 방법
- 홈파이 : 동작 시나리오와 프로토콜
- 홈파이 : 명령어 리스트
- 홈파이 : 일회용 컵을 재활용한 스마트 화분 연동하기
.
홈파이 서버를 만들기 위해서는 아래와 같은 구성품들이 기본으로 필요합니다.
- 라즈베리파이 (SD카드 및 USB, HDMI 케이블 등 포함)
- 파이 카메라
- HC-11 433MHz RF 모듈
먼저 라즈베리 파이에 HC-11 통신 모듈을 아래 순서로 연결합니다.
- HC-11 VCC –> 라즈베리파이 3.3V 핀
- HC-11 GND –> 라즈베리파이 GND 핀
- HC-11 TX –> 라즈베리파이 RX 핀 (TX, RX 를 엇갈리게 연결)
- HC-11 RX –> 라즈베리파이 TX 핀
준비가 되면 이제 라즈베리파이를 본격적으로 개조합니다.
알림!!! 시작에 앞서… 만약 라즈베리파이, 리눅스에 대해 순수하리만큼 기본 지식이 없다면 링크를 통해 기본적인 사용법을 익혀두는 것이 큰 도움이 됩니다. 리눅스를 다루는 방법 뿐 아니라 따라하면서 문제가 발생했을 경우 최소한의 대처 방법을 얻을 수 있습니다.
.
라즈베리파이를 처음 구매한 상태에서는 필수 패키지들을 설치하고 기본적인 설정을 해줘야 합니다. 아래 링크의 내용을 따라 라즈베리파이를 설정해주세요.
링크 : https://www.hardcopyworld.com/?p=1731
홈파이 서버는 파이썬 스크립트로 제작되어 있습니다. 아마도 라즈베리파이에 설치한 최신 라즈비안 OS에는 파이썬이 기본으로 포함되어 있을겁니다. 하지만 파이썬 버전이 2.7.10 미만인 경우 파이썬 스크립트와 텔레그램을 중개해주는 pyTelegramBotAPI 소스코드가 경고 메시지를 출력합니다. 따라서 미리 파이썬 버전을 2.7.10으로 맞춰주는 것이 좋습니다. 링크를 통해 해당 작업을 할 수 있습니다.
기본적인 설정이 완료되면 라즈베리파이로 다양한 작업을 할 준비는 된 상태입니다. 이제 통신 모듈(HC-11)을 제어할 수 있도록 Serial 장치를 설정하고 Python 에서 제어할 수 있도록 pyserial 모듈을 설치해야 합니다.
링크 : 라즈베리파이 Serial 설정 및 사용방법 (Python)
.
라즈베리 파이에 카메라 모듈을 설치하는 것만으로도 많은 것이 가능해집니다.
여기서 말하는 카메라 모듈은 PC에 사용하는 USB 캠이 아니라 (실제로는 비슷할 수도 있지만) 라즈베리 파이 전용으로 나온 Pi Camera 모듈입니다. 아래와 같이 라즈베리 파이 이더넷 소켓쪽에 있는 카메라용 케이블 소켓에 끼워주면 됩니다.
카메라 장착 한 뒤, 카메라를 사용 가능하도록 설정하고 python으로 제어할 수 있도록 picamera 모듈을 설치해야 합니다. 아래 링크의 내용을 따라서 하세요.
링크 : 라즈베리파이 Pi Camera 설정
카메라를 달았으면 CCTV 처럼 활용도 해보고 싶으실 겁니다. MMAL-Motion 솔루션과 MJPG Streamer 를 사용할 수 있는데, 최신 라즈비안 이미지 JESSIE v8.0에서는 MMAL-Motion 설치에 문제가 발생합니다. MJPG Streamer를 이용하시길 권장합니다.
링크 : 파이카메라 MMAL Motion JPEG 스트리밍
.
홈파이를 위한 하드웨어 장치들의 준비는 모두 마친 셈입니다. 이제 텔레그램과 파이썬 인터페이스를 설치해서 홈파이와 연동될 수 있도록 준비해야 합니다.
텔레그램 CLI 를 설치하고 설정하는 것이 우선입니다. 주의하실 점은 텔레그램을 설치할 때 pi 계정의 HOME 경로 안에 (/home/pi/tg) 디렉터리에 설치하는 것이 좋습니다. 홈파이의 기본 디렉터리(/home/pi/tg/bot/)에 설치되서 돌아가는 것을 default로 가정하기 때문입니다.
아래 링크의 순서대로 텔레그램 CLI를 설치하세요. 문서 말미에 있는 텔레그램 데몬 실행 및 서비스 등록 방법도 꼭 해두시길 권장합니다.
링크 : 라즈베리파이 Telegram CLI 설치 및 설정
텔레그램 CLI 가 설치되면 이제 파이썬과 텔레그램 CLI를 연동해줄 파이썬 인터페이스를 설치해야 합니다. pyTelegramBotAPI 를 설치하는 과정입니다.
링크 : 텔레그램 CLI를 파이썬으로 제어하기 (pyTelegramBoatAPI)
위 링크에 자세히 적으것처럼 pyTelegramBotAPI 가 동작하기 위해서는 텔레그램 봇 TOKEN 이 필요합니다. 아직 TOKEN을 받아서 테스트 해보지 않은 분은 아래 내용을 따라해보세요. 자신만의 봇을 만들고 TOKEN 을 얻을 수 있습니다.
https://core.telegram.org/bots#botfather
.
홈파이 서버는 주변의 센서 장치 데이터를 모두 MySQL DB에 저장하도록 만들어져 있습니다. 따라서 MySQL을 설치하고 홈파이가 사용할 DB를 설정해줘야 합니다.
링크 : 라즈베리파이에 MySQL DB 설치, 파이썬 연동
홈파이 서버는 수집한 센서 데이터를 그래프로 그려주는 기능이 있습니다. 그래프를 그리고 파일로 저장하기 위해서 CairoPlot 라이브러리를 사용합니다.
링크 : CairoPlot 그래프 이미지 생성 라이브러리 설치하기
.
길었던…… 사전 설정은 완료된 상태입니다. 이제 홈파이를 설치하고 테스트 해보면 됩니다. 홈파이는 오픈소스이며 아래 사이트를 통해 다운로드 받을 수 있습니다.
HomePy 공식 배포처 : https://github.com/godstale/HomePy
자료들을 모두 다운로드 받아서 [src/tg/bot] 디렉터리에 있는 소스들을 모두 라즈베리파이의 [/home/pi/tg/bot/] 경로안에 올려줍니다.
테스트를 해보기 전에 자신의 설정에 맞도록 HomePy.ini 파일의 환경 변수를 변경해줘야 합니다.
- $ cd ~/tg/bot
- $ nano HomePy.ini
[GlobalParam] language = en [PrivateParam] api_token = use_your_bot_token mysql_user = pi mysql_db = pidb mysql_pass = use_your_db_password [SystemParam] cctv_url = cctv_port = 8891 cctv_start_cmd = /home/pi/tg/bot/start_mjpg.sh cctv_stop_cmd = /home/pi/tg/bot/stop_mjpg.sh photo_cmd = sudo /usr/bin/raspistill -w 640 -h 480 -o picture_dir = /home/pi/tg/bot/picture/ graph_dir = /home/pi/tg/bot/graph/
API_TOKEN, MYSQL_PASS 항목은 필수로 바꿔줘야 합니다.
- API_TOKEN : 텔레그램 설정 과정에서 Bot Father 를 통해 획득한 TOKEN 입니다.
- MYSQL_USER : MySQL 설치, 설정과정을 진행하면서 생성한 유저 이름. 아마 pi 로 해뒀을겁니다.
- MYSQL_DB : MySQL 설치, 설정과정을 진행하면서 생성한 Database. 가이드대로 했다면 pidb 일 겁니다.
- MYSQL_PASS : 설치 때 설정한 계정의 패스워드
- cctv_url : 외부에서 접근 때 쓰는 자신의 URL(혹은 공유기 IP 주소)입니다. 고정된 URL 주소가 없다면 그냥 비워두세요. 홈파이에서 자동으로 찾아서 설정합니다. 하지만 동작시 오류가 있을 수는 있습니다. 오류가 발생하면 CCTV 볼 수 있는 주소를 제대로 알려주지 못합니다.
- cctv_port : CCTV 화면을 볼 수 있는 포트는 8081 포트입니다. 하지만 외부에서 공유기를 통해 라즈베리 파이로 가기 위해서는 공유기에 포트포워딩 설정을 해줘야 합니다. 여기에 공유기의 포트 포워딩 설정된 포트를 적습니다.
- 나머지 항목들 : 나머지 항목들은 CCTV, 사진, 그래프 기능을 위한 경로 설정입니다. 여기 설정된 경로와 다르게 적용되어 있다면 경로를 수정해주세요.
주의!!! cctv를 외부에서 웹으로 보기 위해서는 포트 포워딩 설정을 해줘야합니다. 공유기 IP:8891 포트로(혹은 임의로 다른 포트 선택) 요청이 들어오면 MJPG 스트리밍을 해주는 8081 포트(혹은 자신이 설정한 포트)가 연결되도록 공유기의 포트 포워딩 설정을 해주세요. 구글링 하시면 포트 포워딩 방법은 알 수 있습니다. 설정이 완료되면 cctv_port 의 포트 넘버가 맞는지 확인합니다.
.
cctv 실행하는 파일에 권한을 설정하고… (xxx_motion 파일들은 MMAL Motion 용. xxx_mjpg 파일들은 MJPG Streamer 용.)
$ chmod 755 start_motion $ chmod 755 stop_motion $ chmod 755 start_mjpg.sh $ chmod 755 stop_mjpg.sh
홈파이 서버가 동작하기 위해서는 텔레그램 CLI 가 실행된 상태여야 합니다. 텔레그램을 CLI를 실행하고 아래 명령으로 home.py 스크립트를 실행합니다.
$ cd ~ $ cd tg/bot $ python home.py
에러없이 실행되면 휴대폰이나 PC의 텔레그램에서 자신의 봇에게 [하이] 라고 말을 걸어보세요. 봇이 응답을 제대로 한다면… 정상적으로 홈파이가 설치되어 동작하는 것입니다!!!
.
홈파이를 필요할 때만 실행해서 사용해도 되지만 가급적 항상 서버 기능으로 동작할 수 있도록 데몬으로 띄우고 서비스 등록해두면 좋습니다. 설정하기 편하도록 미리 스크립트를 만들어 뒀습니다.
tg/bot 패스안에 있는 hp.sh 파일에 실행 권한을 부여해주세요. 홈파이 서버를 실행, 중단해주는 스크립트입니다. 그리고 테스트를 해봅니다.
- $ cd ~/tg/bot
- $ chmod 755 hp.sh
- $ ./hp.sh chk
데몬의 실행 상태가 표시되면 OK.
tg/bot 패스안에는 hpwatcher.sh 파일도 있습니다. 이 파일은 홈파이 프로세스가 예기치않게 중단되는 경우 프로세스를 다시 실행해주는 역할을 합니다. 마찬가지로 hpwatcher.sh 파일에도 실행 권한을 부여해주세요. 그리고 테스트를 해봅니다.
- $ chmod 755 hpwatcher.sh
- $ ./hpwatcher.sh chk
프로세스 실행 상태가 표시되면 정상입니다. 이제 홈파이를 서비스로 등록해 줄 차례입니다. 아래 명령으로 파일을 넣어주고 테스트 해봅니다.
- $ sudo cp homepyd /etc/init.d/
- $ sudo chmod 755 /etc/init.d/homepyd
- $ sudo service homepyd start
- ……
- $ sudo service homepyd stop
- ……
정상적으로 실행된다면 부팅시 홈파이 서버가 실행되도록 설정해줍니다.
- $ sudo apt-get install chkconfig
- $ sudo chkconfig –add homepyd
- $ sudo chkconfig –list homepyd
아래처럼 나오면 성공입니다.
- homepyd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
주의!!! 라즈비안 JESSIE v8.0 이미지를 사용하는 경우 service 명령어가 더이상 먹히질 않습니다. v8.0 부터는 systemd 방식이 기존의 init(System V Init)을 대체합니다. 아래와 같은 방법을 사용하면 서비스 등록이 가능할 것입니다.
- $ sudo cp homepyd /etc/init.d/
- $ sudo chmod 755 /etc/init.d/homepyd
- $ sudo systemctl enable homepyd.service
- $ sudo systemctl start homepyd.service
- $ sudo systemctl status homepyd.service
- …… 서비스 상태 확인 ……
- $ sudo reboot
- 이후 서비스 실행되어 있는지 확인 $ ps -aux
라즈베리파이 재부팅 후 확인해보면 홈파이가 실행되어 있을겁니다. 만약 문제가 생긴다면 homepyd, hp.sh 스크립트를 자신의 환경에 맞게 수정하세요.
여기까지 완료되면 홈파이는 항상 봇을 통해 당신의 명령을 기다릴 것입니다. 수 일 동안 돌려본 결과 별 문제없이 잘 동작해주네요.
.