MQTT

MQTT 프로토콜을 사용하여 장치 데이터와 커맨드를 발행할 수 있습니다.


연결 설정

항목설명
Hostyour-serverIOTOWN 서버 주소
Port8883MQTT TLS 포트
Username{group_id}그룹 UUID
Password{api_key}그룹 API 키

보안을 위해 TLS(8883 포트)만 지원합니다. 평문 연결(1883)은 비활성화되어 있습니다.

Group ID와 API Key 확인 방법

계정 레벨Group ID / API Key 위치
관리자그룹 페이지에서 각 그룹의 인증 정보
매니저헤더 우측의 프로필 메뉴 > 내 그룹 인증 정보

토픽 구조

토픽방향용도
iotown/{group_id}/{device_id}/data장치 → 서버데이터 전송
iotown/{group_id}/{device_id}/command/request서버 → 장치커맨드 전송
iotown/{group_id}/{device_id}/command서버 → 장치커맨드 수신

데이터 전송

장치에서 서버로 데이터를 발행합니다.

데이터 전송 토픽

MQTT Topic
iotown/{group_id}/{device_id}/data

데이터 전송 페이로드

JSON 형식으로 데이터를 전송합니다.

JSON
{
  "temperature": 25.5,
  "humidity": 60,
  "status": "normal"
}

HTTP API와 달리 MQTT 페이로드는 데이터 필드 자체이며 deviceIddata 래핑이 없습니다 — deviceId/groupId는 토픽에서 추출되기 때문입니다. 또한 MQTT는 JSON만 지원하므로 파일 첨부가 필요하면 REST API의 multipart 전송을 사용하세요.

장치 타임스탬프 (_timestamp)

데이터 측정(생성) 시간과 서버 수신 시간이 다를 경우에 사용합니다. 오랜 시간이 경과한 데이터를 측정 시간에 맞도록 서버에 저장할 수 있습니다. 페이로드에 _timestamp 필드를 포함하면 서버 수신 시간 대신 장치가 보고하는 측정 시간을 사용할 수 있습니다.

JSON
{
  "temperature": 25.5,
  "humidity": 60,
  "_timestamp": "2025-01-08T12:00:00.000Z"
}
  • ISO 8601 형식 (예: 2025-01-08T12:00:00.000Z) 또는 Unix 밀리초 타임스탬프 (예: 1736337600000) 지원
  • _timestamp를 생략하면 서버 수신 시간이 사용됩니다
  • _timestamp는 시스템 예약 필드이므로 데이터에 포함되지 않고 타임스탬프로만 사용됩니다

deviceId가 존재하지 않으면 자동으로 장치가 생성됩니다.

커맨드 전송

서버에서 장치로 커맨드를 발행합니다.

커맨드 전송 토픽

MQTT Topic
iotown/{group_id}/{device_id}/command/request

커맨드 전송 페이로드

커맨드는 문자열로 전송됩니다. 형식은 자유롭게 정의할 수 있습니다.

텍스트 명령
set_interval 30
JSON 명령
{"action": "reboot", "delay": 5}

커맨드 수신

장치에서 서버로부터 전송된 커맨드를 수신합니다.

커맨드 수신 토픽

MQTT Topic
iotown/{group_id}/{device_id}/command

장치는 이 토픽을 구독(subscribe)하여 서버로부터 커맨드를 수신합니다.

커맨드 수신 페이로드

커맨드는 문자열로 수신됩니다. 전송 시 사용한 형식 그대로 전달됩니다.

텍스트 명령
set_interval 30
JSON 명령
{"action": "reboot", "delay": 5}

command/request 토픽으로 전송된 커맨드는 IOTOWN 서버가 command 토픽으로 릴레이합니다.


Rate Limit

제한 대상제한
데이터 발행60회/분 (장치당)
커맨드 발행60회/분 (장치당)

Rate Limit 초과 시 메시지는 무시됩니다 (MQTT 특성상 별도 응답 없음).


다음 단계