SERVICE

MQTT Engine

Cams 기기 전체를 위한 MQTT. MQTT Engine은 EMQX 뒤에서 동작하는 백엔드 컨슈머로, 공유 출퇴근 및 접속 상태 토픽을 구독하고, 이벤트를 HTTP 및 TCP 전송 방식과 동일한 출퇴근 파이프라인으로 전달하며, 서버에서 기기로 가는 명령 엔벨로프를 발행합니다.

개요

EMQX 브로커를 통해 출퇴근 이벤트를 수집하고 기기 명령을 푸시하는 MQTT 전송 엔진으로, 대규모 연결 기기 환경에 맞게 설계되었습니다.

MQTT Engine은 Cams 엔진 제품군에서 HTTP 및 영구 TCP와 짝을 이루는 MQTT 전송 엔진입니다. EMQX 브로커 뒤에서 백엔드 컨슈머로 실행되며, api/mqtt/v1/{sn}/ 아래의 공유 출퇴근 및 접속 상태 토픽을 구독하고, 각 이벤트를 공유 파이프라인으로 전달하며, 서버에서 기기로 가는 명령을 명령 토픽에 상위 호환 JSON 엔벨로프로 발행합니다. EMQX가 기기의 TLS 세션, 인증, QoS, last-will을 처리하며, 대규모 기기 환경에서는 여러 엔진 인스턴스가 EMQX 공유 구독을 통해 부하를 분산합니다.

SERVICEMQTTEMQXTLSJSONC++
MQTT 토픽 구조 (EMQX)
# device -> server (attendance)
api/mqtt/v1/{sn}/evt   { "user_id":"1001", "att_time":"...", "att_state":1 }
# device -> server (presence / LWT)
api/mqtt/v1/{sn}/st    { "online": true }
# server -> device (command)
api/mqtt/v1/{sn}/cmd   { "id":"c1", "op":"sync_user", "data":{} }

기능

할 수 있는 일

MQTT를 통한 수집

공유 이벤트 토픽을 구독하고 각 출퇴근 이벤트를 HTTP 및 TCP와 동일한 저장 및 푸시 파이프라인으로 전달합니다.

접속 상태 추적

접속 상태 토픽과 last-will을 처리하여 브로커가 감지한 연결 끊김을 기기 오프라인으로 표시합니다.

명령 푸시

대기열에 있는 서버에서 기기로의 명령을 기기별 명령 토픽에 QoS 1의 JSON 엔벨로프로 발행합니다.

수평 확장

EMQX 공유 구독이 대규모 기기 환경을 위해 여러 엔진 인스턴스에 출퇴근 데이터를 부하 분산합니다.

주요 기능

모두 포함

  • HTTP 및 기본 TCP 엔진과 동등한, 출퇴근을 위한 MQTT 전송 프런트엔드
  • 앱 및 EMQX ACL과 일치하는 토픽 구조 api/mqtt/v1/{sn}/{evt|cmd|st}
  • EMQX 뒤의 백엔드 컨슈머: 공유 구독으로 N개 인스턴스에 부하 분산
  • HTTP punch 본문과 동일한 페이로드의 출퇴근 이벤트를 공유 파이프라인으로 수집
  • 상태 토픽을 통한 접속 상태와 last-will로 연결 끊김을 기기 오프라인으로 표시
  • QoS 1의 상위 호환 {id, op, data} JSON 엔벨로프로 서버에서 기기로 명령 푸시
  • CA 검증을 포함한 브로커 TLS 연결, 엔진은 기기 시리얼이 아닌 백엔드 계정을 사용
  • Eclipse Paho C++ 기반의 크로스 플랫폼 빌드(Linux 및 Windows)

MQTT Engine으로 개발하기

키를 발급받고, 문서를 읽고, 배포하세요. 첫 연동은 저희 팀이 도와드립니다.

FAQ

자주 묻는 질문

MQTT Engine과 EMQX는 어떤 관계인가요?

EMQX는 기기의 TLS 세션, 인증, QoS, last-will을 처리하는 브로커로 그대로 유지됩니다. MQTT Engine은 공유 토픽을 구독해 출퇴근 데이터를 수집하고 기기에 명령을 발행하는 백엔드 컨슈머입니다.

MQTT Engine 인스턴스를 여러 개 실행할 수 있나요?

네. EMQX 공유 구독이 실행 중인 모든 인스턴스에 출퇴근 및 접속 상태 토픽을 부하 분산하므로, 인스턴스를 추가해 확장할 수 있습니다.

서버에서 기기로 보내는 명령 형식은 무엇인가요?

QoS 1의 명령 토픽에 보내는 JSON 엔벨로프 {id, op, data}이며, op만 필수 필드입니다. 알 수 없는 op는 상위 호환을 위해 이전 버전 기기에서 무시됩니다.

관련 항목

플랫폼 더 둘러보기