首页 > 解决方案 > 回调以检查特定的 MQTT 主题(不仅仅是检查有效负载)

问题描述

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

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);
    } 
}

标签: arduinomqttpublish-subscribe

解决方案


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

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

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

  • 一旦回调返回,缓冲区就会被重用(因此,如果您存储该指针并稍后引用它,它可能不包含您期望的内容)。
  • 该消息是二进制的,因此如果使用类似的函数(以避免溢出),确保将 a\0添加到末尾很重要。strcmp

看起来您正在使用的库复制了该主题,因此您应该可以按原样使用该库(与其他一些库不同)。


推荐阅读