이 페이지에서는 게이트웨이가 MQTT 브리지를 사용해서 Cloud IoT Core와 통신하고 결합된 기기를 대신하여 원격 분석 이벤트를 게시하는 방법을 설명합니다. 시작하기 전에 Cloud IoT Core에서 MQTT 브리지를 사용하는 방법에 대한 일반적인 내용은 MQTT 브리지 사용을 참조하세요.
MQTT 브리지를 통해 게이트웨이 사용
- 게이트웨이를 만들고 구성한 다음에는 MQTT 브리지를 통해 게이트웨이를 Cloud IoT Core에 연결합니다.
- 아직 기기를 만들지 않았으면 기기를 만듭니다.
선택사항: 기기를 게이트웨이에 결합합니다.
MQTT 브리지를 사용하는 경우에는 자체 JWT를 생성할 수 없는 경우에만 기기를 결합하면 됩니다.
선택사항: 시스템 오류 주제를 구독하여 기기 작업의 성공 여부에 대한 피드백을 확인합니다.
게이트웨이를 사용하여 기기 대신 원격 분석, 기기 상태, 구성 메시지를 중계합니다. 방법을 알아보려면 엔드 투 엔드 데모를 사용해보세요.
게이트웨이 메시지
게이트웨이는 MQTT 브리지를 통해 Cloud IoT Core에 연결된 후 세 가지 유형의 메시지를 송수신할 수 있습니다.
- 제어 메시지: 기기를 게이트웨이에 연결하거나 게이트웨이에서 기기를 분리합니다. 이러한 메시지는 게이트웨이와 Cloud IoT Core 사이에 전송됩니다. Cloud IoT Core는 게이트웨이의 제어 메시지만 수락합니다. 다른 유형의 기기가 제어 메시지를 전송하려고 시도하면 Cloud IoT Core가 연결을 종료합니다.
- 게이트웨이 및 기기의 메시지: 기기 대신 게이트웨이에서 중계되거나 게이트웨이 자체에서 직접 전송될 수 있습니다.
- 시스템 오류 메시지: 게이트웨이가 기기 대신 MQTT 시스템 오류 주제에 구독된 경우 기기에 오류가 발생할 때마다 Cloud IoT Core가 게이트웨이에 오류 메시지를 전송합니다.
게이트웨이에 기기 연결
Cloud IoT Core로 게이트웨이의 기기 통신 프록시를 사용 설정하려면 게이트웨이가 MQTT 브리지를 통해 QoS 1 /devices/{device_ID_to_attach}/attach
제어 메시지를 게시하도록 합니다.
기기 JWT를 사용해서 기기를 인증하도록 게이트웨이를 구성한 경우 연결 메시지의 페이로드에 JSON 형식의 토큰({ "authorization" : "{JWT_token}" }
)이 포함되어야 합니다. 그렇지 않으면 Cloud IoT Core가 게이트웨이와 연결을 확인하여 기기를 인증합니다.
성공 응답
기기가 승인되면 Cloud IoT Core가 연결 메시지에 대한 응답으로 PUBACK 메시지를 게이트웨이로 전송합니다. 게이트웨이가 PUBACK 메시지를 수신한 다음에는 기기 대신 원격 분석 또는 구성 메시지와 같은 Cloud IoT Core 주제를 게시 및 구독할 수 있습니다.
게이트웨이가 연결 메시지를 전송할 때 기기가 이미 연결되어 있으면 Cloud IoT Core가 PUBACK 메시지를 전송합니다.
게이트웨이에서 기기 분리
게이트웨이에서 기기를 분리하려면 게이트웨이가 MQTT 브리지를 통해 QoS 1 /devices/{device_ID}/detach
제어 메시지를 게시하도록 합니다. 메시지가 전송될 때 기기가 연결되지 않았으면 Cloud IoT Core가 분리 제어 메시지를 무시하고 PUBACK 메시지를 전송합니다.
문제 해결
기기에 오류가 발생할 때 알림을 받으려면 QoS 수준 0을 사용해서 게이트웨이를 MQTT /devices/{gateway_ID}/errors
주제에 등록합니다.
Go
기기가errors
주제를 구독하는 단계는 아래에 강조표시되어 있습니다.
Java
기기가errors
주제를 구독하는 단계는 아래에 강조표시되어 있습니다.
Node.js
예를 들어 기기가config
주제를 구독하는 단계는 아래에 강조표시되어 있습니다. errors
주제를 구독하려면 /devices/${gateway_ID}/errors
를 지정합니다.
Python
기기가errors
주제를 구독하는 단계는 아래에 강조표시되어 있습니다.
Cloud IoT Core가 QoS 0으로 전송되는 게이트웨이 오류를 최상의 방식으로 전송합니다. 게이트웨이가 /devices/{gateway_ID}/errors
를 구독하지 않으면 Cloud IoT Core에 실패 이벤트가 로깅되더라도 PUBACK 메시지를 전송하지 않습니다.
MQTT 오류의 구조는 다음과 같습니다.
string error_type; // A string description of the error type. string device_id; // The ID of the device that caused the error. string description; // A description of the error.
MQTT 메시지로 오류 메시지가 트리거된 경우 다음 정보도 함께 연결됩니다.
string message_type; // The string MQTT message type. string topic; // The MQTT topic if applicable, otherwise it is empty. int packet_id; // The packet ID of the MQTT message if applicable, otherwise it is zero.
오류 코드 및 오류 처리
오류 코드 | 설명 | 권장 작업 |
---|---|---|
GATEWAY_ATTACHMENT_ERROR | 게이트웨이 연결 요청이 실패했습니다. | 문제를 해결하지 않은 상태로 다시 시도하지 마세요. |
GATEWAY_DEVICE_NOT_FOUND | 게이트웨이가 수신 메시지 처리를 위해 연결된 기기를 찾을 수 없습니다. | 문제를 해결하지 않은 상태로 다시 시도하지 마세요. |
GATEWAY_INVALID_MQTT_TOPIC | 게이트웨이가 지정된 MQTT 주제를 파싱할 수 없습니다. 형식이 잘못되었거나 포함된 기기 ID 또는 이름이 잘못되었습니다. | 문제를 해결하지 않은 상태로 다시 시도하지 마세요. |
GATEWAY_UNEXPECTED_PACKET_ID | 게이트웨이가 패킷 ID를 기준으로 메시지를 처리할 수 없습니다. 예를 들어 PUBACK에 패킷 ID가 있을 수 있지만 응답을 대기 중인 항목이 없습니다. | 문제를 해결하지 않은 상태로 다시 시도하지 마세요. |
GATEWAY_UNEXPECTED_MESSAGE_TYPE | 지원되지 않는 PUBREL, PUBREC 등의 예기치 않은 메시지가 게이트웨이에 수신되었습니다. | 문제를 해결하지 않은 상태로 다시 시도하지 마세요. |
GATEWAY_DETACHMENT_DEVICE_ERROR | 기기 오류로 인해 게이트웨이가 기기를 분리했습니다. | 문제를 해결하지 않은 상태로 다시 시도하지 마세요. |
UNKNOWN | 알 수 없는 오류입니다. | 지수 백오프를 사용하여 다시 시도하세요. |
자세한 내용은 오류 메시지 문서 및 MQTT 버전 3.1.1 사양을 참조하세요.