检查特定 MQTT 主题的回调(不仅仅是检查负载)

callback to check specific MQTT topic (not just check the payload)

我目前使用下面的回调来检查传入 MQTT 消息的 PAYLOAD,但是有谁知道我如何才能继续这样做,同时还能找到来自特定 TOPIC 的消息?

void callback(char * topic, byte * payload, unsigned int length) {
    char p[length + 1];
    memcpy(p, payload, length);
    p[length] = NULL;

    if (!strcmp(p, "home")) {
        Particle.publish(DEVICE_NAME, HOME_MSSG, 60, PRIVATE);
    } else if (!strcmp(p, "chome")) {
        Particle.publish(DEVICE_NAME, CHOME_MSSG, 60, PRIVATE);
    } 
}

主题的处理方式与有效载荷几乎相同;例如

if (!strcmp(topic, "thisIsATopic")) {
        // do something
}

请注意,复制有效载荷有两个原因:

  • buffer 在回调 returns 后被重用(因此,如果您存储该指针并稍后引用它,它可能不包含您期望的内容)。
  • 消息是二进制的,因此如果使用 strcmp 之类的函数(以避免溢出),确保在末尾添加 [=11=] 很重要。

看起来您正在使用的库 copies the topic so you should be fine using that as-is (unlike with some other libraries)。