DOI QR코드

DOI QR Code

MQTT를 이용한 제품 제어 앱 개발

Development of Product Control Apps using MQTT

  • 신동진 (안양대학교 컴퓨터공학과 ) ;
  • 황승연 (안양대학교 컴퓨터공학과) ;
  • 김정준 (안양대학교 소프트웨어학과 )
  • 투고 : 2023.04.27
  • 심사 : 2023.10.06
  • 발행 : 2023.10.31

초록

스마트홈 이전에 주목받았던 인텔리전스홈과 홈오토메이션은 첨단 기술들을 주택에 적용하는 데 초점을 맞추어 사용자들에게 불편성을 안겨주었고, 실질적인 효율성은 부족하여 대중화에 실패했다. 하지만, 현재 4차 산업 혁명과 더불어 빅데이터, 인공지능, 사물 인터넷과 관련된 기술들을 활용한 다양한 서비스가 증가하고 있으며, 다양한 기술들을 기반으로 가정 내에서 제품들을 조작 및 관리하며, 자동화하는 스마트홈 서비스 구축률이 점차 증가하고 있다. 본 논문에서는 이런 동향 추세에 맞춰 MQTT 서버, Django 웹 프레임워크, WIFI 통신 모듈을 활용하여 제품을 연결하고, 조작 및 관리할 수 있는 프로그램 앱을 구현했다.

Intelligence Home and Home Automation, which attracted attention before Smart Home, caused inconvenience to users by focusing on applying cutting-edge technologies to homes, and failed to popularize them due to lack of unemployment efficiency. However, with the 4th Industrial Revolution, various services using technologies related to big data, artificial intelligence, and the Internet of Things are increasing, and the rate of smart home services that operate, manage, and automate products at home is gradually increasing. In line with this trend, this paper implements a program app that can connect, manipulate, and manage products using MQTT server, Django web framework, and WIFI communication module.

키워드

Ⅰ. 서론

최근 사물 인터넷(Internet of Things)을 이용해 가정에서 사용하는 가전제품(에어컨, 냉장고, 공기청정기, TV 등)을 편리하게 관리하는 스마트홈 서비스 환경 구축이 점차 증가하는 추세이다. 스마트홈 서비스 구축은 가전제품의 에너지 절약과 같은 효율성과 사람이 직접 기기를 조작하지 않아도 편리하게 동작할 수 있는 편리성과 편안함 등의 이점을 가지고 있다[1].

본 논문에서는 이런 동향을 고려하여 프로그램을 구현하였으며, 구현된 프로그램은 사용자들이 외출 중에 와이파이 모듈이 설치되어 있는 전등 같은 제품들의 On/Off를 확인하고 제어할 수 있다. 또한, 개발된 앱에서 제품을 선택해 신호를 보내면 서버에서 신호를 받아 제품을 제어할 수 있으며, 구체적으로 신호는 앱으로부터 서버가 신호를 받아 MQTT(Message Queuing Telemetry Transport) 서버에 전송하면 와이파이 모듈을 가지고 있는 제품에서 MQTT 서버에서 뿌려주는 신호를 받아 동작한다. 본 논문은 1장 서론을 시작으로 2장에서는 관련된 기술과 실제 서비스 되고 있는 유사 시스템을 살펴보고, 3장에서는 구현된 프로그램 앱을 소개한다. 마지막으로 4장에서 결론으로 마무리된다.

Ⅱ. 관련 기술 및 시스템조사

1. 코틀린 (Kotlin)

IntelliJ IDEA의 개발사 JetBrains에서 2011년에 공개한 오픈 소스 프로그래밍 언어. JVM 기반의 언어이며, Java와 유사하지만 더 간결한 문법과 다양한 기능을 추가하였다. Java와의 상호 운용이 100% 지원되며, JVM 바이트코드가 기본이지만, Kotlin/Native 컴파일러를 사용하여 기계어로 컴파일할 수 있다[2].

안드로이드에서는 클래스로 컴포넌트를 개발하며 액티비티, 서비스, 컨텐츠 프로바이더, 브로드캐스트 리시버 등 4가지 종류로 나누어 개발된다. 코틀린 언어의 특징은 자바코드와 비교 했을 때 훨씬 간결하다는 점과 자바코드와 코틀린 코드를 같이 사용해도 문제가 생기지 않는 상호 운용 가능하다는 특징이 있다. 또한 코틀린에서는 코루틴을 통해 비동기 프로그래밍을 간소화할 수 있다[3].

2. Django (Python)

Django는 2005년부터 시작된 Python의 오픈 소스 웹 프레임워크이자 풀 스택 프레임워크이다. Django는 Python 기반 웹 프레임워크 중에 가장 많이 사용되고 있으며, 또 다른 하나는 Flask를 사용한다. Flask는 Django 보다 간단한 웹 프레임워크 형태를 가지고 있어 좀 더 직관적으로 사용할 수 있다. Django는 기본적으로 Model에 해당하는 DBMS는 SQLite를 사용하게 되어있으며, Django Admin 기능을 통해 쉽게 조회/편집이 가능하다[4].

3. MQTT

MQTT는 ISO 표준 발행ㆍ구독 기반의 메시지 프로토콜이다. IoT 기술에 사용돼 낮은 전력, 낮은 대역폭 환경에서도 원격 위치와의 연결을 위해 설계되어 있으며 발행ㆍ구독 메시지 패턴은 메시지 브로커가 필요하다[5].

MQTT 프로토콜은 메시지를 발행하고, 주제를 구독하는 것을 기본 원칙으로 하여 Publisher와 Subscriber는 모두 브로커에 대한 클라이언트로 작동한다. Publisher는 토픽을 발행하기 위한 목적으로 사용되고, Subscriber는 토픽을 구독하기 위한 목적으로 Broker 서버에 연결한다. 하나 이상의 Publisher와 Subscriber가 브로커에 연결해서 토픽을 발행하거나 구독할 수 있다. 또한 다수의 클라이언트가 하나의 주제를 구독하는 것도 가능하다[6,7].

4. 유사 시스템 조사

스마트싱스(SmartThings)는 스마트홈을 만들기 위한 사물인터넷(IoT) 플랫폼으로, 가전제품을 비롯한 사물인터넷 기기를 다양한 종류의 통신 네트워크로 연결하고 클라우드 및 로컬 서버에서 중계 및 제어하는 방식으로 유기적인 명령을 수행하도록 하여, 완전 자동화를 건설하기 위한 오픈 플랫폼이다. 작동원리는 유저가 자신의 라이프스타일과 목적에 맞춰서 IoT 제품과 스마트 디바이스가 스스로 움직이도록 설정할 수 있는 '자동화'가 실행될 수 있도록 하는 여러 조건을 직접 추가하면, IoT 제품 주변 환경의 물리적인 변화에 따라 조건이 충족되어 자동화가 실행되고, 스마트싱스에 연결되어 있는 IoT 제품과 스마트 디바이스들을 자동화의 조건에 맞게 스스로 움직인다[8,9].

IP, Wi-Fi, 매터(Matter), Zigbee, Z-wave, BLE, UWB, 블루투스 등 IoT에 필요한 대부분의 무선통신 규격과 프로토콜을 사용하고 있다. 주요 사용처는 개인, 기업(공공, 제조, 금융, 교육, 건설, 유통/운송, 의료, 호텔 등), 공공주택(주택, 아파트, 오피스텔, 주거단지 등), 스마트시티 등에서 사용되고 있다. 현재 삼성전자의 스마트홈 플랫폼 스마트싱스(SmartThings)에는 2022년 기준 1000 만대의 가전이 연결되어 있으며, 2023년 12월에는 3000 만대가 예상되며, 2025년엔 5000 만대 넘는 가전이 연결될 것으로 예상된다. 현재 전 세계 스마트싱스 가입자는 2억 명이 넘으며, 국내 이용자는 1300 만 명에 달한다[10].

Ⅲ. 시스템 소개

1. 아키텍쳐

그림 1은 구현된 앱의 시스템 아키텍처 모습을 보여준다. 앱은 회원 관리, 제품 제어, WIFI 기능을 모듈로 구성되어 있으며, 서버는 회원 관리, 제품 On/Off, MQTT 통신 모듈, MQTT 서버는 MQTT 모듈, 제품은 WIFI 모듈과 MQTT 모듈로 이루어져 있다.

OTNBBE_2023_v23n5_77_f0001.png 이미지

그림 1. 제품 제어 앱의 시스템 아키텍쳐

Fig. 1. System architecture for product control apps

가. 앱 (Android)

(1) 로그인 기능

그림 2는 사용자가 해당 앱을 실행하고 처음으로 접할 수 있는 화면의 모습을 보여준다. 사용자는 해당 화면에서 회원가입 페이지에서 회원가입 후 로그인이 가능하다. 회원가입 페이지에는 간단하게 사용자의 아이디, 패스워드, 이름을 통해 가입이 가능하다. 회원가입 버튼을 선택하면, 구성되어 있는 데이터베이스로 정보들이 저장이 되고, 회원가입이 완료된 사용자는 정상적으로 로그인이 가능하며, 로그인 후 구현된 기능들을 조작할 수 있다.

OTNBBE_2023_v23n5_77_f0002.png 이미지

그림 2. 로그인 캡쳐 화면

Fig. 2. login screen capture

(2) 제품 선택 및 제어화면

그림 3은 MQTT 서버를 이용한 제품 제어가 가능한 앱의 핵심 기능 모습을 보여준다. 우측 상단의 설정 기능에서 통신이 가능한 와이파이 선택할 수 있고, 제품을 등록하면, 그림 3에서 보이는 제어화면을 통해 제품을 켜고 끌 수 있다. 하단의 버튼은 MQTT 서버의 연결을 의미하고 등록하는 제품에 따라 액티비티에서 제어할 수 있는 객체의 수가 증가한다. 제품은 회원의 계정별로 데이터베이스에 저장된다.

OTNBBE_2023_v23n5_77_f0003.png 이미지

그림 3. 제품 선택 및 제어화면

Fig. 3. Product Selection and Control Screen

(4) 앱 설정

그림 4는 와이파이 모듈을 포함한 제품의 설정을 할 수 있는 화면 모습을 보여준다. 제품 선택 및 제어화면에서 우측 상단의 톱니바퀴 모양의 버튼을 클릭하면 이동할 수 있는 제품의 설정 페이지다. 해당 화면에서 와이파이 설정을 클릭해 와이파이 모듈을 포함한 제품의 정보를 가져올 수 있다. 와이파이 설정 페이지에서는 장치 재검색을 통해 와이파이 제품을 재검색 할 수 있다. 원하는 제품을 클릭 후 다음 단계를 클릭하면 제품의 등록이 가능하며, 제품에서 지원하는 스위치 모듈의 버튼 개수(2버튼, 4버튼, 6버튼)에 따라 각각 메뉴를 제작하여 동작하도록 구성하였다.

OTNBBE_2023_v23n5_77_f0004.png 이미지

그림 4. 와이파이 모듈을 포함한 제품 설정

Fig. 4. Product settings, including Wi-Fi modules

나. 데이터베이스

표 1은 Django 서버에서 사용하는 데이터베이스의 테이블을 보여준다. 사용자의 개인정보와 사용자별 제품을 관리할 수 있는 테이블과 MQTT 서버에서 구독을 위해 사용할 테이블을 구성하였다. member_user 테이블은 회원들의 개인정보를 저장하고 저장된 데이터는 앱에서 로그인에 사용된다. member_user와 member_product 테이블은 서로 외래키를 통해 연결되어 있기 때문에 회원별로 제품을 따로 관리할 수 있다. mqtt_token 테이블은 통신에 사용되는 MQTT 서버의 토큰을 저장하고 관리하는 테이블로 토큰은 AES 256 방식으로 암호화해서 테이블에 저장된다.

표 1. 데이터베이스 테이블 구성

OTNBBE_2023_v23n5_77_t0001.png 이미지

Table 1. database table configuration

다. 서버 (Django)

표 2는 Django 서버에서 필요한 기능별로 구현한 모듈을 보여준다. 서버는 파이썬 웹 프레임워크인 Django를 사용해 MQTT의 기능을 구현하였으며, 서버에서는 코틀린 앱에서의 회원 관리와 MQTT 서버 구독, 제품의 조명 관리를 위한 기능을 구현하였다. 코틀린 앱에서 retrofit을 통해 주소별로 해당하는 url의 매핑에 접근해 각각의 함수에서 원하는 값을 JsonResponse 함수를 통해 받아 앱에서 필요한 데이터를 받아올 수 있다.

표 2. Django 서버 기능 구현

OTNBBE_2023_v23n5_77_t0002.png 이미지

Table 2. Implementing Django server features

2. 시스템 구현

가. 서버 연결을 위한 retrofit 구성

표 3은 gradle에 추가한 retrofit 관련 라이브러리를 보여준다. 코틀린 앱에서 설정한 retrofit은 앱에서 원하는 데이터를 서버에서 받아올 수 있도록 설정됐다. 해당 프로젝트에서는 코틀린의 retrofit을 이용해 회원가입, 로그인, MQTT 서버 토큰 수신, 회원별로 저장된 전등의 상태를 제어하기 위해 구현되었다.

표 3. module 수준의 gradle 추가한 라이브러리

OTNBBE_2023_v23n5_77_t0003.png 이미지

Table 3. Library added to gradle at module level​​​​​​​

나. 토큰 복호화 및 MQTT 서버 구독

표 4는 MQTT 서버에서 관리하는 토큰과 관련된 함수의 목록을 보여준다. 앱에서 로그인을 완료하면 서버로부터 AES 256 방식으로 암호화된 코드를 받아 올 수 있다. 데이터를 정상적으로 받아왔을 때 미리 정의해 둔 decyptCBC 함수를 호출해 토큰을 복호화한다. 복호화된 코드를 토큰으로 사용해 해당 MQTT 서버에 구독할 수 있으며, 연결된 뒤에 등록된 제품의 전구 모양을 클릭하면 MQTT 서버로 메시지를 전송한다. 메시지가 정상적일 때 messageArrived, deliveryComplete 함수가 동작하며, 정상적으로 호출되면 Django 서버에 신호를 보내 데이터베이스에서 제품의 상태를 변경한다. 만약 MQTT 서버와 연결이 끊어졌을 경우 connectionLost 함수가 호출되어 MQTT서버와 연결을 재시도할 수 있다.

표 4. 토큰 복호화 및 MQTT 서버 구독을 위한 함수

OTNBBE_2023_v23n5_77_t0004.png 이미지

Table 4. Functions for token decryption and MQTT Server subscription​​​​​​​

표 5는 코틀린 앱에서 3가지의 클래스를 이용해 리사이클러뷰의 모습을 보여준다. 앱에서 사용할 기본적인 리사이클러뷰는 ViewHolder, LayoutManager, Adapter로 구성하였다. 설정한 리사이클러뷰는 앱에서 WIFI 설정 페이지에 와이파이 리스트를 보여주기 위해 구현되었다.

표 5. 리사이클러뷰 주요 클래스

OTNBBE_2023_v23n5_77_t0005.png 이미지

Table 5. RecyclerView main class​​​​​​​

표 6은 WIFI 설정 페이지에서 동작하는 함수의 목록을 보여준다. WIFI 설정 페이지에서 와이파이 스캔을 통해 사용자별로 와이파이 제품을 등록할 수 있다. 페이지로 이동하거나 장치 재검색 버튼을 누르면 onRceive 함수가 호출되고 주변의 와이파이 모듈을 가지고 있는 장치를 검색할 수 있다. 와이파이 스캔을 성공하였을 때 scanSuccess 함수를 호출하여 미리 구성해 두었던 리사이클러뷰에 리스트를 업데이트한다. 스캔을 실패하였을 때는 scanFailure 함수를 호출해 오류의 내용을 확인할 수 있다.

표 6. 와이파이 스캔 함수

OTNBBE_2023_v23n5_77_t0006.png 이미지

Table 6. Wi-Fi scan function​​​​​​​

Ⅳ. 결론

본 논문에서는 스마트홈 서비스 구축의 환경이 증가하는 추세에 맞춰 MQTT와 Django 서버를 활용하여 데이터들을 송/수신받고, 코틀린 앱을 통해 구현된 제품의 조작을 할 수 있는 프로그램 앱을 구현했다. 스마트홈 서비스 구축은 스마트폰의 도입률이 증가하면서 모바일 앱을 통해 편리하게 제품들을 조작할 수 있다. 또한, 가정뿐만 아니라 쇼핑과 의료, 교육, 교통 등 다양한 서비스가 개발돼 새로운 비즈니스 생태계를 구축할 수 있을 것으로 예상된다. 현재 구현된 프로그램은 전등만 연결하여 관리 및 조작할 수 있고, 통신하는 센서는 WIFI를 활용하지만, 향후 다양한 가전제품도 조작할 수 있으며, WIFI 뿐만 아니라 블루투스와 Zigbee, Z-wave와 같은 다양한 통신 센서 융합까지 구현할 예정이다.

참고문헌

  1. Minzheong Song, "A Study on Business Types of IoT-based Smarthome: Based on the Theory of Platform Typology", The Journal of The Institute of Internet, Broadcasting and Communication (IIBC), Vol. 16, No. 2, pp. 27-40, Apr 2016. DOI: http://dx.doi.org/10.7236/JIIBC.2016.16.2.27 
  2. Kotlin Official Guide Documentation, https://kotlinlang.org/docs/home.html 
  3. Bruno Gois Mateus, Matias Martinezm "An empirical study on quality of Android applications written in Kotlin language", Empirical Software Engineering, Vol. 24, pp. 3356-3393, June 2019. DOI: https://doi.org/10.1007/s10664-019-09727-4 
  4. Puneet V, Venkatsh P, Ravi Kiran K, Surendra P, Osman Khan, Ch. Nanda Krishna, "A Django Web Application to Promote Local Service Providers", 2022 6th International Conference on Computing Methodologies and Communication (ICCMC), pp. 1517-1521, March 2022. DOI: https://doi.org/10.1109/ICCMC53470.2022.9754099 
  5. In-Hwan Jung, "A Real Time Location Based IoT Messaging System using MQTT," The Journal of The Institute of Internet, Broadcasting and Communication (IIBC), Vol, 18, No, 4, pp. 27-36, Aug 2018. DOI: https://doi.org/10.7236/JIIBC.2018.18.4.27 
  6. Joo-Sang Youn, Ji-Yeon Hong, "MQTT Protocol based GPS Information Push Notification Service APP", Proceedings of the Korean Society of Computer Information Conference, pp. 129-130, Jan 2018. 
  7. U-Zo Kim, Jin-Ku Choi, "Implementation of IoT Home System based on MQTT", The Journal of The Institute of Internet, Broadcasting and Communication (IIBC), Vol. 20, No. 1, pp. 231-237, 2020. DOI: https://doi.org/10.7236/JIIBC.2020.20.1.231 
  8. Tariq Rahaman, "Smart Things are Getting Smarter: An Introduction to the Internet of Behavior", Medical Reference Services Quarterly, Vol. 41, No. 1, pp. 110-116, Feb 2022. DOI: https://doi.org/10.1080/02763869.2022.2021046 
  9. Jamal Bzai, Furqan Alam, Arwa Dhafer, Miroslav Bojovic, Saleh M. Altowaijri, Imran Khan Niazi, Rashid Mehmood, "Machine Learning-Enabled Internet of Things (IoT): Data, Applications, and Industry Perspective", Electronics, Vol. 11, No. 17. pp. 2676, Aug 2022. DOI: https://doi.org/10.3390/electronics11172676 
  10. GyeongWan Guk, "Major technologies and market trends of domestic and foreign smart homes (Trend Report)", Korea Institute for defense analyses, Nov 2021. DOI: https://doi.org/10.22800/kisti.kosenexpert.2021.778