Mosquitto动态安全客户端CRUD操作

问题描述 投票:0回答:1
  • 您好,我正在开发一个智能家居物联网大学项目,我有一系列有关术语和解决方案的问题,我的项目步骤如下:

    1. 前端界面,他可以在其中查看设备值并关闭/打开设备。 (完成)

    2. 与前端交互的 CRUD API。 (完成)

    3. 通过云上的 Websocket 进行 Docker 化 Mosquitto 代理。 (半完成)

    4. API 到 SUB/PUB + 创建用户/角色/组并与代理交互。 (半成品)

    5. RaspberryPi设置为家庭网关,它是家庭ID,通过蓝牙扫描设备,根据用户需求连接并获取值/关闭/打开设备。 ( 0 条想法 )

  • 步骤 3 4 的术语:

    • 我的计划是托管我的 docker 容器,其中包含 mosquitto 服务及其配置,然后在另一台服务器上托管 Render.com 上的 Rest-Api,并希望从发送 POST/GET 的 Web 浏览器与 docker 容器进行交互API,我考虑过这种方法,因为我不知道任何其他方法,我不知道是否可以在一个容器下托管 API 和 mosquitto 服务。 PS:我是码头工人的新手。
  • 进展与问题:

    1. 第 1 步完成。

    2. 第 2 步完成。

    3. 第3步:我已经使用动态安全性设置了我的mosquitto,并完成了让它在docker中工作所需的所有conf,并且它正在工作,我可以使用Mqtt-NodeJs-Client通过Websocket:9001发布和订阅现在的问题是寻找免费的托管服务来托管我的 docker 容器。 考虑 (步骤 3 4 的术语)。

    4. 第 4 步:在尝试制作与代理交互的 Rest-Api 时,我注意到我无法从 Mqtt-NodeJs-Client 制作角色/组/用户,我做了一些研究并根据 Mosquitto-动态安全文档:

      publishClientSend:

      $CONTROL/dynamic-security/#
      - 这允许客户端控制动态安全插件。

      初始安装后对插件的所有控制均通过

      $CONTROL/dynamic-security/v1
      处的 MQTT 主题 API 进行。这允许构建集成,但并不是人们直接使用的最佳选择。 Mosquitto 提供的
      mosquitto_ctrl
      命令实现了对动态安全插件 API 的支持,如下所述。其他选项包括 Cedalo-MMC,它是一个基于网络的开源工具,用于控制插件和其他功能。管理中心不是 Mosquitto 项目的一部分。

      如上所述,我们可以发布到

      $CONTROL/dynamic-security/#
      我想过从API中这样做来创建用户/组/角色并将用户添加到组中,但我失败了,缺乏文档,在进一步的研究中“纠正我,如果我“我错了,我缺乏 docker 经验”,但我认为我们可以在容器上创建一些 SH/BASH 脚本,使用
      mosquitto_ctrl
      作为动态安全插件来按需创建用户/组和角色,我认为我可以制作 API以某种方式告诉托管的 docker 容器执行这些脚本,但我认为询问比参与更好。

    5. 我根本没有接触过这部分,我想我可以在RasberryPi和经纪人之间进行通信,就像我通过Websockets与Web界面和经纪人进行通信一样。

请提供任何信息、业务术语,甚至是关于事情应该如何进行的工作流程,此外,我目前的主要问题是使这个 API 工作,并能够使用户、组、角色以及从网络浏览器将用户添加到组中,而不是从 CLI。

docker api iot libmosquitto mqtt.js
1个回答
0
投票

关于 MQTT 动态安全插件 API 控制 - 使用发布/订阅命令进行客户端/角色/组管理,本主题解决了它

MQTT 动态安全插件 API 控制 - 使用发布/订阅命令进行客户端/角色/组管理

我的示例代码:

client.on('connect', () => {
console.log('Connected to MQTT broker');
const publishOptions = {
    qos: 0,
    retain: false,
    dup: false,
};
const subscribeOptions = {
    qos: 0,
};
clientSubscribe('$CONTROL/dynamic-security/v1/#', subscribeOptions);
clientPublish(
    '$CONTROL/dynamic-security/v1',
    '{"commands": [{"command": "listClients"}]}',
    publishOptions,
);
}); 



function clientSubscribe(topic, subscribeOptions) {
client.subscribe(topic, subscribeOptions, (err, granted) => {
    if (err) {
        console.error('Error subscribing to topic:', err);
    } else if (granted) {
        console.log(`Subscribed to: ${JSON.stringify(granted)}`);
    }
 });
}



function clientPublish(topic, message, publishOptions) {
client.publish(topic, message, publishOptions, (err) => {
    if (err) {
        console.error('Error publishing message:', err);
    } else {
        console.log(`Published ${message} on topic: ${topic}`);
    }
 });
}

但我仍然想了解术语和工作流程。

© www.soinside.com 2019 - 2024. All rights reserved.