如何为 MQTT 主题添加后缀

问题描述 投票:0回答:1

我使用的是 Polar H10 心率传感器,它连接一个名为 Polar 传感器数据记录器的手机应用程序。我正在使用这个应用程序通过 MQTT 协议发布数据。发布 3 个主题的传感器读数,即 XXX/ecg、XXX/hr、XXX/acc。其中前缀 XXX 被视为用户输入。 有没有一种方法可以为到达代理的所有消息的主题添加后缀? 简而言之,经纪商应该将主题转换为 XXX/ecg/YYY 、 XXX/hr/YYY 、 XXX/acc/YYY 。

我尝试搜索这个主题,我能找到的最接近的回复是使用代理桥,但据我所知,它只允许您添加前缀而不是后缀

mqtt mosquitto
1个回答
0
投票

您可以编写一个自定义 mosquitto 插件来调整发布消息的主题。

GitHub 上的 2.1.x 开发分支中有一个示例:

https://github.com/eclipse/mosquitto/tree/develop/plugins/examples/topic-modification

该示例从主题中删除了一个部分,但相同的模式将用于添加额外的部分。

static int callback_message_in(int event, void *event_data, void *userdata)
{
    struct mosquitto_evt_message *ed = event_data;
    bool result;

    UNUSED(event);
    UNUSED(userdata);

    /* This simply removes "/uplink" from the end of every matching topic. You
     * can of course do much more complicated message processing if needed. */

    mosquitto_topic_matches_sub("device/+/data/uplink", ed->topic, &result);

    if(result){
        ed->topic[strlen(ed->topic) - strlen("/uplink")] = '\0';
    }

    return MOSQ_ERR_SUCCESS;
}
© www.soinside.com 2019 - 2024. All rights reserved.