MQTT 接入

针对实时行要求高的智能硬件, 格物云IoT平台定义了一套 MQTT 接入的协议, 该协议实现了对设备进行实时请求和反馈, 也包含的实时数据的收集,和属性的反馈。

接入方案

初始化MQTT客户端

client.connect("You device ID", product_key, device_token);
  • product_key 为产品的 key
  • device_token 为每个设备唯一的 token

MQTT 请求

每个请求都有唯一的消息 ID, 通过订阅 /request/+ 来获取消息, 并发布 /response/:reqid 来完成一个请求。

首先订阅 /request/+

client.subscribe("/request/+");

反馈结果 /response/:reqid

void onMqttMessage(const char* topic, uint8_t * payload, unsigned int length) {
    const size_t len = strlen(topic);
    char new_topic[len + 2];

    // remove "/request/"
    char reqid[len - 9];

    size_t i;

    for (i = 9; i < len; i ++) {
        reqid[i - 9] = topic[i];
    }

    sprintf(new_topic, "/response/%s", reqid);

    client.publish(topic, "{ \"key\": \"value\" }");
}

发布实时数据

通过发布 /telemetry 的消息来汇报实时数据,数据为 JSON 格式

client.publish("/telemetry", "{ \"temperature\": 30.5 }");

发布实时属性

通过发布 /attributes 的消息来汇报实时属性,数据为 JSON 格式

client.publish("/attributes", "{ \"switch_1_state\": 1 }");