마지막 학기에 임베디드 시스템 설계라는 과목을 들었다.
그동안 관심있던 라즈베리파이를 사용한다는 강의계획서를 보고 바로 신청하게 되었는데 과목 이름만 보면 하드웨어도 엄청 다뤄야할 것 같은 과목이지만 특이하게 라즈베리파이르 사용해서 챗봇을 만들게 되었다.
사실 페이스북 메세지와 라즈베리파이를 사용해 챗봇을 개발해본 경험이 있어 손쉽게날로먹으려고 개발할 수 있겠다 싶었다.
개발 과정
Slack Bot User
슬랙 봇을 사용하는 방법은 아주 간단하다.
링크에 들어가면 봇 이름을 적으면 끝!
그러면 다음과 같이 토큰을 발급해 주는데 이 토큰으로 API를 사용할 수 있다.
python-rtmbot
Real Time Messaging API 를 사용하기 위해 python-rtmbot
라이브러리를 사용했다.
사용방법은 Github페이지에 매우 자세하고도 간단하게 나와있다.
아래 그림처럼 플러그인을 추가하면 봇을 사용할 수 있다.1
2
3
4
5
6
7
8
9
10class Jarvis(plugin):
def process_message(self, data):
try:
self.send_message(data)
except Exception as e:
text = ":shit: Error : " + str(e)
slack.slack_client.api_call(
"chat.postMessage",
channel=data.get("channel"), text=text, as_user=True
)
개발 중 에러가 발생하면 로그에 에러메세지가 뜨지만 슬랙에서는 아무런 반응이 없어서 이것이 오래 걸리는 작업이라 그런건지 에러가 난건지 알 수 없었다. 그래서 에러가 발생하면 에러 메세지를 슬랙으로 전송해 개발 효율을 높일수 있었다.
Django
봇 기능중에 온습도를 측정하는 기능이 있었는데 센서에서 값을 실시간으로 불러오면 시간이 조금 걸렸다.
그래서 어딘가에 주기적으로 기록하고 그 값을 가져오야 겠다 싶기도 했고, 옵습도 값 변화를 한눈에 보면 좋겠다싶어 웹 서버 하나를 만들어 그래프를 만들었다.
그래서 웹서버로 Django를 사용했다.
Django-crontab
온습도 값을 센서에서 읽어와 데이터베이스에 저장하는 스크립트를 crontab으로 하려했는데 찾아보니 Django-crontab이란것을 발견했다.
이것의 장점은 Django의 ORM기능을 그대로 사용할 수 있다는 것이다.
덕분에 아래와 같이 코드량이 매우 감소해 개발시간을 줄일 수 있었다.
Django-crontab 역시 Github에 문서화가 잘 되어있어 사용법을 참고하면 된다.
1 | import Adafruit_DHT |
기능
온습도 조회
날씨 검색
사실 기능이 더 있지만 궁금하신 분은 슬라이드를…(거의 없겠지만)
그리고
이 프로젝트를 진행하고 있던 학기 중에는 몰랐지만 이 글을 쓰고 있는 시점에 갑자기 저커버그가 실제로 자비스를 개발했다고 기사가 나왔다.
그 기사를 보는 순간 내가 한 프로젝트가 초라해지기 시작해서 이 글도 올리지 말아야겠다 하고 있었는데, 뭐 어짜피 보는 사람도 별로 없는 블로그이므로 그냥 올려보기로 했다. ㅠ.ㅠ