检查特定 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)。
我目前使用下面的回调来检查传入 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)。