라즈베리파이로 슬랙 봇 개발(a.k.a JARVIS)

마지막 학기에 임베디드 시스템 설계라는 과목을 들었다.

그동안 관심있던 라즈베리파이를 사용한다는 강의계획서를 보고 바로 신청하게 되었는데 과목 이름만 보면 하드웨어도 엄청 다뤄야할 것 같은 과목이지만 특이하게 라즈베리파이르 사용해서 챗봇을 만들게 되었다.

사실 페이스북 메세지와 라즈베리파이를 사용해 챗봇을 개발해본 경험이 있어 손쉽게날로먹으려고 개발할 수 있겠다 싶었다.

개발 과정

Slack Bot User

슬랙 봇을 사용하는 방법은 아주 간단하다.
링크에 들어가면 봇 이름을 적으면 끝!
jarvis

그러면 다음과 같이 토큰을 발급해 주는데 이 토큰으로 API를 사용할 수 있다.

jarvis

python-rtmbot

Real Time Messaging API 를 사용하기 위해 python-rtmbot라이브러리를 사용했다.
사용방법은 Github페이지에 매우 자세하고도 간단하게 나와있다.
아래 그림처럼 플러그인을 추가하면 봇을 사용할 수 있다.

1
2
3
4
5
6
7
8
9
10
class 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
)

개발 중 에러가 발생하면 로그에 에러메세지가 뜨지만 슬랙에서는 아무런 반응이 없어서 이것이 오래 걸리는 작업이라 그런건지 에러가 난건지 알 수 없었다. 그래서 에러가 발생하면 에러 메세지를 슬랙으로 전송해 개발 효율을 높일수 있었다.

jarvis

Django

봇 기능중에 온습도를 측정하는 기능이 있었는데 센서에서 값을 실시간으로 불러오면 시간이 조금 걸렸다.
그래서 어딘가에 주기적으로 기록하고 그 값을 가져오야 겠다 싶기도 했고, 옵습도 값 변화를 한눈에 보면 좋겠다싶어 웹 서버 하나를 만들어 그래프를 만들었다.
그래서 웹서버로 Django를 사용했다.

Django-crontab

온습도 값을 센서에서 읽어와 데이터베이스에 저장하는 스크립트를 crontab으로 하려했는데 찾아보니 Django-crontab이란것을 발견했다.
이것의 장점은 Django의 ORM기능을 그대로 사용할 수 있다는 것이다.
덕분에 아래와 같이 코드량이 매우 감소해 개발시간을 줄일 수 있었다.
Django-crontab 역시 Github에 문서화가 잘 되어있어 사용법을 참고하면 된다.

1
2
3
4
5
6
7
8
9
10
import Adafruit_DHT
from common import models
from datetime import datetime

def add_dht():
sensor = Adafruit_DHT.DHT11
pin = 4
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
dht = models.DHT(humidity=humidity, temperature=temperature, created_at=datetime.now())
dht.save()

기능

온습도 조회

jarvis

날씨 검색

jarvis

사실 기능이 더 있지만 궁금하신 분은 슬라이드를…(거의 없겠지만)

그리고

이 프로젝트를 진행하고 있던 학기 중에는 몰랐지만 이 글을 쓰고 있는 시점에 갑자기 저커버그가 실제로 자비스를 개발했다고 기사가 나왔다.

그 기사를 보는 순간 내가 한 프로젝트가 초라해지기 시작해서 이 글도 올리지 말아야겠다 하고 있었는데, 뭐 어짜피 보는 사람도 별로 없는 블로그이므로 그냥 올려보기로 했다. ㅠ.ㅠ

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×