我正在使用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
这似乎是一种容易出错的处理方式。有没有其他方法,甚至可以直接传输数组?
答案 0 :(得分:0)
如何打包/序列化数据完全取决于您,并且取决于多种因素,包括(但不仅限于):
一些示例选项包括:
还有很多其他选项,但是它们主要是上述3个选项的变体。您选择哪种方式至少取决于列出的因素以及实施时希望获得的最低水平。
答案 1 :(得分:0)
我建议使用“浇水/ frontLawn /信息”主题,并将消息作为字符串发送,这样在另一侧就很容易解析。
发布者:
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])