您好,我正在开发一个智能家居物联网大学项目,我有一系列有关术语和解决方案的问题,我的项目步骤如下:
前端界面,他可以在其中查看设备值并关闭/打开设备。 (完成)
与前端交互的 CRUD API。 (完成)
通过云上的 Websocket 进行 Docker 化 Mosquitto 代理。 (半完成)
API 到 SUB/PUB + 创建用户/角色/组并与代理交互。 (半成品)
RaspberryPi设置为家庭网关,它是家庭ID,通过蓝牙扫描设备,根据用户需求连接并获取值/关闭/打开设备。 ( 0 条想法 )
步骤 3 4 的术语:
进展与问题:
第 1 步完成。
第 2 步完成。
第3步:我已经使用动态安全性设置了我的mosquitto,并完成了让它在docker中工作所需的所有conf,并且它正在工作,我可以使用Mqtt-NodeJs-Client通过Websocket:9001发布和订阅现在的问题是寻找免费的托管服务来托管我的 docker 容器。 考虑 (步骤 3 4 的术语)。
第 4 步:在尝试制作与代理交互的 Rest-Api 时,我注意到我无法从 Mqtt-NodeJs-Client 制作角色/组/用户,我做了一些研究并根据 Mosquitto-动态安全文档:
publishClientSend:
- 这允许客户端控制动态安全插件。$CONTROL/dynamic-security/#
初始安装后对插件的所有控制均通过
处的 MQTT 主题 API 进行。这允许构建集成,但并不是人们直接使用的最佳选择。 Mosquitto 提供的$CONTROL/dynamic-security/v1
命令实现了对动态安全插件 API 的支持,如下所述。其他选项包括 Cedalo-MMC,它是一个基于网络的开源工具,用于控制插件和其他功能。管理中心不是 Mosquitto 项目的一部分。mosquitto_ctrl
如上所述,我们可以发布到
$CONTROL/dynamic-security/#
我想过从API中这样做来创建用户/组/角色并将用户添加到组中,但我失败了,缺乏文档,在进一步的研究中“纠正我,如果我“我错了,我缺乏 docker 经验”,但我认为我们可以在容器上创建一些 SH/BASH 脚本,使用 mosquitto_ctrl
作为动态安全插件来按需创建用户/组和角色,我认为我可以制作 API以某种方式告诉托管的 docker 容器执行这些脚本,但我认为询问比参与更好。
我根本没有接触过这部分,我想我可以在RasberryPi和经纪人之间进行通信,就像我通过Websockets与Web界面和经纪人进行通信一样。
请提供任何信息、业务术语,甚至是关于事情应该如何进行的工作流程,此外,我目前的主要问题是使这个 API 工作,并能够使用户、组、角色以及从网络浏览器将用户添加到组中,而不是从 CLI。
关于 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}`);
}
});
}
但我仍然想了解术语和工作流程。