타이젠 IoT를 활용한 텔레그램 스마트 CCTV 만들기 타이젠 Tizen 2019.09.17 23:23

타이젠 IoT를 이용해서 움직임을 감지하고, 텔레그램으로 Push Notification을 전달하는 스마트 CCTV를 만드는 방법에 대해서 소개해 본다. 가끔 자는 둘째를 집에 두고 첫째를 데리러 가야 할 때가 있다. 10 ~ 20분 자리를 비우는 것이고, 일어나도 별일 없을 것이지만 여간 신경쓰이는 것이 아니다. 밖에 나가도 집에 무슨일이 없나 확인하고 싶을때, 카메라 영상을 분석해서 움직임 감지 알림을 받고 싶을때 적절한 간단한 IoT 기기를 만들어 보았다. HW구성은 라즈베리 파이에 USB 카메라가 전부이지만, SW는 타이젠 IoT 위에 타이젠 Application을 설치해야 한다. 코드가 간단하지는 않지만...무료! 오픈소스!

프로젝트 소개

타이젠 IoT를 소개하는 글들이 별로 없는 것 같은데, 기사는 꽤 있는 것 같다.ㅎ 타이젠 IoT를 이용하면 타이젠 API와 Application FW을 모두 사용할 수 있으며, 여느 타이젠 어플리케이션처럼 타이젠 스튜디오로 앱을 만들어서 실행시킬 수 있다. 차마 쉽다는 말은 못...ㅠ.ㅠ

타이젠 플랫폼을 IoT 디바이스에 사용할 수 있도록 만들어진 것이 타이젠 IoT! 라즈베리파이에서 타이젠을!

타이젠 IoT 위에 간단한 Application. 앱!을 만들어서 실행시킴으로 본 프로젝트를 구성이된다. Application 구현에 대한 자세한 내용은 아래 링크에 자세히 나와있다! 나는 내용만 소개 할란다.ㅋ

Television - Smart Surveillance Camera with Telegram

간단하게 설명하자면, 카메라로 들어오는 이미지를 분석해서 움직임이 있으면 텔레그램으로 그 이미지랑 움직임 정보를 보내주는 것이다. 별거 없다 그냥 바로 설치해서 쓰면 된다. 움직임 민감도나 텔레그램 메세지 간격 (너무 자주 보내면 문자 폭탄 들어오니깤ㅋㅋ), 본인의 텔레그램 봇 아이디와 토큰, 대화방 정보 정도만 입력해서 실행하면 된다.

장점

  1. 싸다. 집에 뒹구는 라즈베리파이와 USB 카메라로 만들수 있다.
  2. 믿을 수 있다. 텔레그램 서버만 사용하고, 외부에서 접속은 안된다.

IoT 기기 좀 쪼물락 거리는 개발자라면 부담없이 할 수 있는 소소한 구성이다. 다양한 시나리오로 자유롭게 변경이 가능하다.

단점

  1. 비싸다. 집에 뒹구는 라즈베리파이와 USB 카메라가 없다면 지출이 발생한다.
  2. 번거롭다. 개발자가 아닌 이상 불가능에 가깝다.

개발자가 아니라면, 그냥 바로 쓰고 싶은 사람이라면 아마존으로 갈 것.

만드는 방법

우선 라즈베리파이3 B와 PL2303(시리얼 통신 모듈), USB 카메라를 준비하고 아래 순서대로 차근 차근 설치한다.

라즈베리 파이에 타이젠 OS를 설치

타이젠 OS를 라즈베리 파이에 설치하고 앱 개발을 준비하기 위한 과정은 아래 링크를 보고 차근 차근 진행하면 된다.

Getting started with Raspberry PI3

이 과정을 마치면 타이젠 라즈베리 파이가 본인의 AP에 접속이 되어 있는 상태가 되어있어야 한다!

CCTV 소스코드 다운로드

타이젠 Git Repo에서 소스 코드를 다운 받는다. 이때 -b 옵션을 사용하여 television 브랜치로 체크아웃 한다.

git clone git://git.tizen.org/apps/native/smart-surveillance-camera -b television

스마트 CCTV Application 설치

타이젠 스튜디오에서 Smart-Surveillance-Camera 프로젝트를 import 한 다음 빌드해본다.

파일 - import - Tizen Prject - 다운받은 폴더 선택

타이젠 라즈베리파이에 USB 카메라를 연결하고, sdb를 통해서 개발 PC와 연결한다.

sdb connect {라즈베리파이IP}

타이젠 스튜디오에서 Run As를 통해 설치 & 실행시킨다.

sdb를 통해서 정상적으로 동작하고 있는지 로그를 확인한다.

sdb dlog SIV
# SIV는 Smart-Surveillance-Camera을 log tag이며, log.h 에서 변경 가능하다.
# #define LOG_TAG "SIV"

IoTjs 웹서버 Application 설치

CCTV가 제대로 동작하고 있는지 화면을 눈으로 확인해 보기 위해서 IoTjs 웹서버를 설치해보자. IoTjs 웹서버에서는 Web Socket을 사용하고 있는데, Web Socket을 사용하기 위해서는 별도로 빌드된 IoTjs 패키지를 설치해 주어야 한다.

IoT.js 공식 사이트에 방문하면 해당 패키지를 빌드하는 방법이 나와있으니 직접 빌드해서 사용해도 좋다.

첨부된 rpm 파일을 다운로드 받아서 아래 커맨드로 설치해주면 된다.

iotjs-1.0.0-99.armv7l.rpm
0.33MB

$sdb root on
$sdb push ./RPMS/IoTjs/iotjs-1.0.0-99.armv7l.rpm /tmp
$sdb shell 'mount -o remount,rw /'
$sdb shell 'rpm -ivh --force /tmp/iotjs-1.0.0-99.armv7l.rpm'

이제 다운 받은 소스코드에서 dashboard라는 프로젝트를 하나 더 import 한 다음 빌드해본다. 이것이 웹서버 어플리케이션 프로젝트다.

파일 - import - Tizen Prject - 다운받은 폴더 - dashboard 선택

마찬가지로 타이젠 스튜디오에서 Run As를 통해 설치 & 실행시킨다.

정상적으로 설치 & 실행 되었다면 브라우저를 통해서 접근해 보자.

{라즈베리파이IP}:9090 을 브라우저에 입력하자. 9090포트로 구동되도록 되어있다. sever.js 파일에서 포트를 변경 가능.

브라우저에서 카메라 화면이 잘 나오는 지 확인한다.ㅎㅎ

텔레그램봇과 연결하기

텔레그램 봇과 연결하려면 당연히 봇을 만들어야 하는데, 봇을 만드는 법은 인터넷에 널렸으므로 생략하겠다.ㅋ

중요한 것은 봇 id 와 토큰, 채팅방 id를 확인해서 코드에 하드코딩해야 한다. 봇 id와 토큰은 텔레그램 앱을 통해서 받을 수 있고, 채팅방 아이디는 getUpdates API를 사용해서 확인 할 수 있다. 내가 원하는 봇, 내가 원하는 채팅방에 메세지를 보내도록 고정하는 것이다.

controller_telegram.c 파일에서 아래 부분을 채워서 빌드하고 다시 설치해보자.

//https://api.telegram.org/{YOUR_BOT_ID}:{YOUR_BOT_TOKEN}/sendMessage?text={TEXT_MSG}&chat_id={CHATROOM_ID}
//https://api.telegram.org/{YOUR_BOT_ID}:{YOUR_BOT_TOKEN}/sendPhoto?chat_id={CHATROOM_ID}

#define TELEGRAM_BOT_INFO "{YOUR_BOT_ID}:{YOUR_BOT_TOKEN}"
#define TELEGRAM_CHATROOM_INFO "{CHATROOM_ID}"

#define TELEGRAM_API_HOST_URL "https://api.telegram.org/"
#define TELEGRAM_BOT_SEND_MSG_URL "/sendMessage?text=[Tizen] "
#define TELEGRAM_BOT_SEND_PHOTO_URL "/sendPhoto"

이미지와 움직임 정보가 잘 들어오는지 확인한다.

controller.c에서 아래 시간 값을 변경해서 움직임에 대한 민감도가 텔레그램 문자가 들어오는 시간을 조정할 수 있다. 나는 텔레그램 문자 간격을 최소 10초로 조정하였다.

#define THRESHOLD_VALID_EVENT_COUNT 5
#define VALID_EVENT_INTERVAL_MS 200
#define TELEGRAM_EVENT_INTERVAL_MS (1000 * 10)

후기

솔직히 쉬운 일은 아닌데, 그렇다고 딱히 어려운 일도 아닌데, 애매하고 쉽게 손이 안 갈 수도 있을 것 같다. 하지만 타이젠과 IoT에 관심이 있다면, 직접 원하는 목적에 맞는 장치를 만들어 보고 싶다면 한번쯤 해볼 만하다. 개발자라면 필요한 대로, 마음대로 고치고 확장해서 쓸 수 있다는 것이 가장 큰 장점이다!