MQTT 主题名称设计以处理多个 "same" 事物

MQTT topic name design to handle multiple "same" things

在我目前的物联网项目中。我将使用多个 ESP8266 (3) 发送数据和接收操作。每个 MCU 将负责监控房子周围的不同水族箱。我想像下面这样组织我的主题:

“数据”主题将遵循相同的结构,例如检索温度数据:

esp8266/aquarium/aquarium_id/temperature/dht11

“Action topics”,MCU订阅接收命令的主题,例如:

aquariumcontroller/aquarium_id/action/water

水族馆订阅更新MCU参数的主题:

aquariumcontroller/aquarium/aquarium_id/params

aquariumcontroller是Python写的MQTT客户端。这是将发送操作和处理收到的消息的实体。我有两个问题,我的主题命名和结构是否正确以处理多个水族馆?另外,因为我将有一个控制器,所以最好也有一个数据库,该数据库将包含水族馆信息,例如该特定水族馆的主题和参数,或者如果我坚持主题,我 运行 会遇到问题当我更改水族馆 ID?

谢谢

你说的会起作用。 也可以有大家订阅的共同话题,用JSON格式发送数据。在 JSON 格式中,您可以提及必要的标识符和操作。

{
    "aquarium_id": "xxx",
    "operation": "temperature_read",
    "value": "24.5"
}

对于每个 aquarium_id,您可以有一个单独的主题。这个方案的优点是水族箱控制器只会接收与之关联的消息,但是它们会增加复杂性,您必须在服务器中预先填充 aquarium_id。

{
    "operation": "temperature_read",
    "value": "24.5"
}

理想情况下,您应该有一个数据库来存储 aquarium_id 及其相关属性(类似于主记录)。使用数据库,您还可以存储读数和操作以获取数据的历史视图。您可以使用 postgres 作为 DBMS。