[사물 인터넷 네트워크와 서비스 구축 강좌] #5-2 메신저 연동 IoT 서비스

강좌 전체보기

.

이번 파트에서 다루는 주제는 꽤나 흥미롭습니다. 바로 메신저를 연동한 IoT 서비스 구축입니다.

사물인터넷 서비스를 구성함에 있어 가장 신경써야 할 부분 중 하나가 사용자와의 접점입니다. 서버에 아무리 고급 데이터가 모이더라도 이걸 사용자에게 효과적으로 보여줄 수 있는 다양한 방법이 필요합니다. 맥/윈도우/리눅스용 어플리케이션, iOS/안드로이드 같은 모바일 앱, 웹 등등 사용자는 다양한 플랫폼을 사용하기 때문에, 이런 플랫폼에서 우리가 만든 서비스를 이용할 수 있는 방법들을 고안해야 합니다. 그리고 우리 서비스를 사용하도록 마케팅을 해야하고 유지보수도 꾸준히 해줘야 합니다.

특히나 이 강좌가 목표로 하는 개인/소규모 팀 단위에서 프로토타이핑을 하는 경우라면, 사용자와의 접점이 되는 다양한 플랫폼을 지원하기 위해 시간과 노력을 들이기란 너무 부담스럽습니다. 이런 경우는 SNS 서비스가 효과적인 대안이 될 수 있습니다. 예를 들어, 보안상 중요하지 않은 데이터를 수신받고 싶을 때 트위터와 연동시키면 여러 플랫폼용 어플리케이션을 개발하지 않아도 트위터 서비스를 UI 로 이용할 수 있습니다. 페이스 북이나 여타 SNS 서비스도 (꽤나 제약이 있긴 하지만) 마찬가지입니다.

여기서는 그 중 텔레그램(Telegram)을 이용하는 방법을 소개하려 합니다. 텔레그램은 챗 봇이라는 대단히 실험적이고 재밌는 서비스를 제공하기 때문에 우리가 만드는 사물인터넷 서버와 궁합이 잘 맞습니다. 특히 텔레그램의 챗 봇은 상용 서비스보다는 Tech DIY 용도 또는 제한된 그룹의 인원들만을 대상으로 서버의 상태를 리포트 하는 경우 대단히 유용합니다.

앞선 파트 [5-1 Node.js 서버 연동] 에서 센서장치가 보내준 데이터를 [nodejs폴더/data/data.txt] 파일에 저장했습니다. 이 파일은 센서장치가 새로운 값을 보내줄 때마다 업데이트 되지요. 이번 파트에서 실습할 내용은 텔레그램 챗 봇을 이용해 data.txt 에 담긴 센서장치 데이터를 텔레그램으로 보여주도록 하겠습니다.

.

.

텔레그램과 봇 파더

챗 봇은 텔레그램이 제공하는 기능 중 하나입니다. 카xx톡 같은 서비스를 사용하다보면 ‘이런 기능이 있었으면 좋겠다’ 라고 생각하신 적 많을 겁니다. 그런걸 개인이 직접 구현할 수 있도록 제공해주는 기능이 챗 봇입니다.

텔레그램 내에서 챗 봇을 생성하면 Bot 기능이 들어간 채팅창이 하나 생깁니다. 그리고 라즈베리파이에서 챗 봇과 연동되는 프로그램을 작성하면, 내가 생성한 채팅창에 메시지를 뿌릴 수 있습니다. 이 채팅창에는 다수의 사람들이 참여할 수 있고, 참가자들이 봇에게 명령어를 전달할 수도 있습니다. 물론 라즈베리파이는 이 명령어를 처리하고 결과를 뿌려줄 코드가 들어가 있어야겠죠.

텔레그램 봇을 이용하기 위해서는 봇을 생성하고 Bot API 를 사용하기 위한 키를 제공 받아야 합니다. 텔레그램에서는 이러한 설정을 편하게 하기 위한 BotFather  채널을 운영하고 있습니다.

BotFather 채널 추가하기

안드로이드 폰의 경우 우측 상단에 있는 돋보기 아이콘을 클릭하고, 아이폰의 경우 Chat 탭에서 리스트를 아래로 스크롤 해 검색창을 열고 @BotFather를 검색해서 추가합니다.

챗 봇 생성

BotFather 채팅창에서 ‘시작’버튼을 누른 후, 새로운 봇을 생성하기 위해 채팅창에 ‘/newbot’이라고 타이핑 하거나 채팅창의 ‘/’ 아이콘을 클릭해 ‘/newbot’을 선택합니다.

봇의 이름과 봇의 ID를 생성합니다. 봇의 이름은 이후 봇 사용시 상단에 보이는 이름이며, 봇 ID는 BotFather 검색해서 연결할 때와 마찬가지로 봇에 접속 또는 검색하기 위해 사용되는 유일한 값입니다.

/newbot 이후 첫 질문이 ‘이름을 뭘로 하겠는가?’, 두 번째 질문이 ‘아이디를 뭘로 하겠는가?’ 입니다. (ID는 반드시 공백없이 Bot 또는 bot 으로 끝나야합니다.) 각각에 대한 답을 채팅창에 적어 보내면 BotFather 가 알아서 처리해줍니다.

봇 ID 까지 생성 완료하면 다음과 같이 API 토큰값이 전달됩니다. 이 키값은 라즈베리파이에서 봇을 제어하기위해 사용됩니다.

이제 채팅창 리스트로 가보면 내가 만든 챗 봇이 내가 설정한 이름으로 보일 것입니다.

.

봇 명령어 처리

이제 라즈베리파이에서 텔레그램 봇을 통해 들어오는 요청을 처리하는 텔레그램 봇 서버 코드를 구현해야 합니다. 파이썬으로 텔레그램 봇 서버를 구현하기 위해 파이썬 모듈 중 ‘telepot’을 이용할 예정입니다.

PIP를 통해 telepot을 다운 받습니다.

  • sudo pip3 install telepot

telepot을 다운로드 받은 후, 파이썬으로 특정 텍스트(status)를 수신했을 때 센서장치 데이터(data.txt)를 채팅창에 전송하도록 구현하겠습니다.

.

#-*- coding: utf-8 -*-
import time
import telepot
from telepot.loop import MessageLoop

def handle(msg):
    content_type, chat_type, chat_id = telepot.glance(msg)

    if content_type == 'text':
        if msg['text'].upper() == 'STATUS':
            f = open("./simple_server_test/data/data.txt", 'r')
            data = f.read()
            bot.sendMessage(chat_id, data)
        elif msg['text'] == '/start':
            pass
        else:
            bot.sendMessage(chat_id, '지원하지 않는 기능입니다')


TOKEN = 'your_telegram_token_here'    # 텔레그램으로부터 받은 Bot API 토큰

bot = telepot.Bot(TOKEN)
MessageLoop(bot, handle).run_as_thread()
print ('Listening ...')

# Keep the program running.
while True:
    time.sleep(1000)

.

파이썬 파일을 라즈베리파이 원하는 위치에 올려두세요. 대신 소스코드에서 data.txt 파일을 읽어올 수 있도록 경로는 자신의 환경에 맞게 수정해야 합니다.

.

f = open("./simple_server_test/data/data.txt", 'r')

.

그리고 앞서 챗 봇을 생성할 때 발급받은 API 토큰 값을 넣어주세요.

.

TOKEN = 'your_telegram_token_here'    # 텔레그램으로부터 받은 Bot API 토큰

.

챗 봇 제어부는 아래와 같습니다.

.

    if content_type == 'text':
        if msg['text'].upper() == 'STATUS':
            f = open("./simple_server_test/data/data.txt", 'r')
            data = f.read()
            bot.sendMessage(chat_id, data)
        elif msg['text'] == '/start':
            pass
        else:
            bot.sendMessage(chat_id, '지원하지 않는 기능입니다')

.

status‘ 라는 텍스트를 누군가 입력하면 센서값이 저장된 data.txt 파일을 열고 데이터를 읽어서 채팅창에 전송해주는 코드입니다.

텔레그램 앱을 실행해서 앞서 생성한 봇 창에 status 를 입력해보세요. 결과가 아래처럼 보일것입니다. 센서장치의 데이터가 사용자에게까지 효율적으로 전달되었지요!

이건 가장 간단한 구현 예일 뿐입니다. 챗 창에 이미지나 파일을 전송할 수도 있고, 더 복잡한 명령어를 받아 센서들을 제어할 수도 있습니다. 심지어는 챗 봇으로 즐기는 게임을 만들 수도 있고 결제를 할 수도 있습니다.

.

.

활용

텔레그램이나 SNS를 내가 기획하는 사물인터넷 서비스와 연동하면 다양한 플랫폼에 대응하는 사용자 UI 앱을 직접 만들지 않아도 된다는 점에서 무척 편리합니다. 비록 상용 서비스를 기획한다면 이 방법은 고려대상이 되기 힘들지만, 소규모-개인 프로젝트라면 이런 방식이 어울리겠지요.

특히 공장이나 센서 값의 이상 유무를 즉시 관련된 사용자 그룹에 알려줘야 하는 서비스의 경우, 이런 챗 어플을 사용한 서비스의 강점이 십분 발휘됩니다.

참고자료

주의!!! [사물 인터넷 네트워크와 서비스 구축 강좌] 시리즈 관련 문서들은 무단으로 내용의 일부 또는 전체를 게시하여서는 안됩니다. 계속 내용이 업데이트 되는 문서이며, 문서에 인용된 자료의 경우 원작자의 라이센스 문제가 있을 수 있습니다.

.

.

강좌 전체보기

.

You may also like...