임베디드 프로그래밍 Lecture #10 2017. 12. 04
목 차 MQTT Protocol 개요 MQTT Protocol 테스트 MQTT 기반 IoT Service 구현
MQTT Protocol (1) MQTT Protocol 개요 a lightweight Publish/Subscribe(Pub/Sub) protocol for IoT or M2M messaging IoT를 위해 낮은 전력, 낮은 대역폭 환경에서도 사용할 수 있도록 설계 Open spec, standard Lightweight : minimal overhead, efficient format, tiny client Reliable : QoS for reliability on unreliable networks Simple : 43-page spec, connect-publish-subscribe
MQTT Protocol (2) MQTT Protocol 개요 : 응용 저전력, 신뢰할 수 없는 네트워크, No TCP/IP 기반에서 운용 가능 소형 기기의 제어와 센서 정보 수집에 유리
MQTT Protocol (3) MQTT Protocol 개요 : 응용 센서(Sensor) 정보 수집 제어 가전기기, 빌딩, 도시, 산업, 개인 등 다양한 영역에서의 센서 정보를 수집 LAN(가정/소규모 오피스), PAN(개인 네트워크), BAN(빌딩 네트워크), MAN(도시 영 역 네트워크)등에서 사용 가능 제어 센서로부터 받은 데이터를 토대로 기기들을 제어 각 기기에 MQTT broker를 설치하거나 혹은 중앙에 있는 MQTT broker에 bind 할 수 있어야 한다 Message Push Server 모바일 애플리케이션을 위한 메시지 Push 서버로 사용 가능 MQTT의 특징을 살려서 낮은 전력에서 작동하는 Push 서비스를 만들 수 있다 페이스북의 경우 MQTT를 이용해서 메시지를 push 서비스 제공
MQTT Protocol (4) MQTT Message 전송 방식 bi-directional, async “push” communication Connect-publish-subscribe
MQTT Protocol (5) MQTT Message 전송 방식 : Pub-Sub 구조 pub/sub decouples senders from receivers
MQTT Protocol (6) MQTT Message 전송 방식 : Pub-Sub 구조 Publisher과 Subscriber은 Broker에 대한 클라이언트로 동작 토픽(topic)을 통해 메시지 전송 Publisher는 토픽을 발행 / Subscriber은 토픽을 구독 하나 이상의 Pub와 Sub가 브로커에 연결해서 토픽을 발행하거나 구독 다수의 Sub가 하나의 토픽을 구독 가능
MQTT Protocol (7) MQTT Message 전송 방식 : 통신 단계 Step 1. 연결 단계
MQTT Protocol (8) MQTT Message 전송 방식 : Topic Publisher과 Subscriber 사이의 메시지 전송 채널(Channel) 슬래시(/)를 이용하여 계층적으로 구성 대량의 센서 기기들을 효율적으로 관리 가능
MQTT Protocol (9) MQTT Message 전송 방식 : Topic wildcard subscriptions 허용
variable header를 포함한 전체 메시지의 크기를 계산 MQTT Protocol (10) MQTT Message 포맷 작은 헤드 크기 – publish 2 bytes, connect 14 bytes Fixed Header (2 bytes) variable header를 포함한 전체 메시지의 크기를 계산
MQTT Protocol (11) MQTT Message 포맷 Message type
MQTT Protocol (12) MQTT Message 포맷 Variable header 어떤 MQTT 명령들은 가변(variable) 헤더 요소를 포함 protocol name MQTT CONNECT메시지에서 사용 UTF-8 인코딩된 프로토콜 이름이 사용 Protocol version MQTT CONNECT메시지와 함께 사용 8-bit unsigned 값을 이용해서 프로토콜 버전을 설정 현재 프로토콜 버전은 3(0x03) Topic name MQTT PUBLISH 메시지에 포함 payload에 포함된 데이터를 published 할 때 사용하는 채널 이름 UTF-8 인코딩된 값을 사용, 32,767의 길이 제한
MQTT Protocol (13) MQTT QoS(Quality of Service) 신뢰성 있는 메시지 전송 지원
MQTT Protocol (14) MQTT QoS(Quality of Service) QoS 2 레벨의 제어 패킷 송수신
MQTT Protocol (15) MQTT Message Payload agnostic payload for flexible delivery
MQTT Protocol (16) MQTT Message Caching retained messages for last value caching
MQTT Protocol (17) MQTT Security
MQTT Protocol 테스트 (1) MQTT Protocol 라이브러리 Californium Java-based COAP protocol library 이클립스 재단 Californium-core, element-connector
MQTT Protocol 테스트 (1) MQTT Broker 프로그램 ActiveMQ, RabbitMQ 등
MQTT Protocol 테스트 (2) MQTT Broker: ActiveMQ 아파치 재단에서 JMS(Java Message Service) 구현체로 시작 JMS 호환 프로토콜인 OpenWire 외에 Stomp, AMQP, MQTT 등을 지원 EIP(Enterprise Integration Pattern)에 따라 여러 메시지 프로토콜을 기반 으로 시스템을 쉽게 통합할 수 있는 메시지 기반 미들웨어 MOM(Message-oriented Middleware) http://activemq.apache.org/
MQTT Protocol 테스트 (3) MQTT Broker: ActiveMQ ActiveMQ 실행 #> ${설치 디렉토리}/bin/activemq start ActiveMQ 종료 #> ${설치 디렉토리}/bin/activemq stop 실행 확인: #> sudo netstat –a | grep 1883
MQTT Protocol 테스트 (4) MQTT Protocol Java Library Paho 이클립스 재단에서 사물인터넷을 위한 프로젝트 중에 하나 http://www.eclipse.org/paho/ MQTT 프로토콜에 대한 클라이언트 라이브러리 제공 org.eclipse.paho.client.mqtt3 패키지
MQTT Protocol 테스트 (5) MQTT Protocol Java Library org.eclipse.paho.client.mqtt3 클래스 관계 테스트 프로그램 Simple MQTT Publisher Client Simple MQTT Subscriber Client
MQTT Protocol 테스트 (6) MQTT Protocol 개발 지원 프로그램 현재 상용 또는 오픈 소스 형태로 다양한 개발 지원 프로그램이 존재 Paho.mqtt-spy https://github.com/eclipse/paho.mqtt-spy/wiki/Downloads 실행: #> java –jar mqtt-spy-1.0.0.jar
MQTT Protocol 테스트 (7) Simple MQTT Publisher Program
MQTT Protocol 테스트 (8) Simple MQTT Subscriber Program