首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过MQTT发布多个号码?

如何通过MQTT发布多个号码?
EN

Stack Overflow用户
提问于 2019-07-19 18:51:03
回答 2查看 3K关注 0票数 1

我正在通过智能手机远程控制浇水系统,使用MQTT来控制连接到覆盆子派上的阀门。到目前为止,我让树莓派订阅了多个主题(‘浇水/前草坪’,‘浇水/后草坪’),并将有效负载解释为浇水持续时间。现在我想添加一种安排浇水的方法,它需要在浇水应该发生的时候额外发送时间。因此需要针对特定主题发送startTimeduration。像wateringInfo = [1563532789, 300] # in the form [startTime, duration]这样的东西

有没有像这样传输信息的推荐方式?

到目前为止,我唯一的想法是将这两个数字结合起来:

代码语言:javascript
运行
复制
startTime*1000+duration # assuming duration is maxed at 999

使用以下命令发送和检索它们:

代码语言:javascript
运行
复制
retrievedStartTime = int(msg.payload) / 1000
retrievedDuration = int(msg.payload) % 1000

这似乎是一种容易出错的处理方式。有没有不同的方法,甚至可以直接传输数组?

EN

回答 2

Stack Overflow用户

发布于 2019-07-19 21:06:19

如何打包/序列化数据完全取决于您,并将取决于多种因素,包括(但不是唯一的):

  1. 生成数据的系统类型(是不是功能非常有限的传感器)?
  2. 什么在消耗数据(请参见上文)?
  3. 数据需要人类可读吗?
  4. 您是否关心消息有多大(是否按字节付费)?

一些示例选项包括:

  1. 、JSON/XML这两种标记语言都允许您在值的同时包含大量的结构和上下文。但它们也是人类的readable.
  2. CSV (逗号分隔变量)这是人类可读的,但你需要知道列表中每个变量的位置映射到什么。,

  1. ,Protobuf,这允许你包含结构,但在二进制级别,所以不是人类的固定宽度字段,你只需说每个值都将适合于固定字节数所能表示的范围。例如,-128到+ 128 (或0到255)可以由单个字节表示,您只需预定义每个字段的字节数及其顺序即可。这基本上是CSV,但是没有分隔符,并且使用最小的空间来传递信息。

还有更多的其他选项,但它们主要是上述3个选项的变体。你选择哪一个将取决于至少列出的因素,以及你在实现它时希望获得的低级别。

票数 2
EN

Stack Overflow用户

发布于 2019-07-21 18:47:37

我建议使用"watering/frontLawn/info“主题,并以字符串的形式发送消息,这样在另一边就可以很容易地进行解析。

出版商:

代码语言:javascript
运行
复制
client.publish(topic="watering/frontLawn/info", 
               payload=str(start)+","+str(end), qos=1, retain=False)

订阅者:

代码语言:javascript
运行
复制
client.subscribe(topic="watering/frontLawn/info", qos=1)

解析部分:

代码语言:javascript
运行
复制
info = message.payload.split(",")

现在您的列表如下所示:

代码语言:javascript
运行
复制
 info = ["start", "end"]

要获取信息:

代码语言:javascript
运行
复制
start = int(info[0])
end = int(info[1])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57110925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档