我正在通过智能手机远程控制浇水系统,使用MQTT来控制连接到覆盆子派上的阀门。到目前为止,我让树莓派订阅了多个主题(‘浇水/前草坪’,‘浇水/后草坪’),并将有效负载解释为浇水持续时间。现在我想添加一种安排浇水的方法,它需要在浇水应该发生的时候额外发送时间。因此需要针对特定主题发送startTime和duration。像wateringInfo = [1563532789, 300] # in the form [startTime, duration]这样的东西
有没有像这样传输信息的推荐方式?
到目前为止,我唯一的想法是将这两个数字结合起来:
startTime*1000+duration # assuming duration is maxed at 999使用以下命令发送和检索它们:
retrievedStartTime = int(msg.payload) / 1000
retrievedDuration = int(msg.payload) % 1000这似乎是一种容易出错的处理方式。有没有不同的方法,甚至可以直接传输数组?
发布于 2019-07-19 21:06:19
如何打包/序列化数据完全取决于您,并将取决于多种因素,包括(但不是唯一的):
一些示例选项包括:
、
,
还有更多的其他选项,但它们主要是上述3个选项的变体。你选择哪一个将取决于至少列出的因素,以及你在实现它时希望获得的低级别。
发布于 2019-07-21 18:47:37
我建议使用"watering/frontLawn/info“主题,并以字符串的形式发送消息,这样在另一边就可以很容易地进行解析。
出版商:
client.publish(topic="watering/frontLawn/info",
payload=str(start)+","+str(end), qos=1, retain=False)订阅者:
client.subscribe(topic="watering/frontLawn/info", qos=1)解析部分:
info = message.payload.split(",")现在您的列表如下所示:
info = ["start", "end"]要获取信息:
start = int(info[0])
end = int(info[1])https://stackoverflow.com/questions/57110925
复制相似问题