【问题标题】:How to send a message containing different data types over mqtt?如何通过 mqtt 发送包含不同数据类型的消息?
【发布时间】:2020-02-13 14:09:45
【问题描述】:

我正在尝试通过 websocket 向代理发送消息。该消息包含表示传感器数据的数字,因此该消息可以是整数和浮点数的混合。当我运行代码时,我得到TypeError: payload must be a string, bytearray, int, float or None. 如何更改代码以发送包含整数和浮点数的消息?我使用 CloudMQTT 作为代理。

完整代码:

import paho.mqtt.client as mqtt
import time

client = mqtt.Client()
client.username_pw_set("User", "Password")
client.connect("Server", "Port")

num_one = 5.83
num_two = -12.46
num_three = 2

message = (num_one, num_two, num_three)

while True:
    client.publish("topic", message)
    time.sleep(1)

【问题讨论】:

    标签: python-3.x mqtt


    【解决方案1】:

    看起来您的问题是您发送的消息是一个元组。你可能想要

    message = (num_one, num_two, num_three)
    message = ''.join([str(x) for x in message])
    

    这会将每个数字转换为一个字符串,然后将它们连接成一个字符串。

    【讨论】:

    • 这会将所有号码合并为一个,但我仍然希望经纪人接收每个号码。
    • '' 替换为',',您应该会收到一条CSV 消息
    【解决方案2】:

    为您的消息选择适当的二进制或基于文本的格式,并以该格式对您的结构进行编码。然后它将是一个字节数组或字符串。

    除非有充分的理由推出您自己的格式,否则我建议使用SenML,因为它几乎不比大多数非标准 JSON 格式复杂,但足够标准化,您至少可以说您正在尝试成为与其他应用程序兼容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 2020-09-21
      • 2018-07-16
      • 2016-09-16
      相关资源
      最近更新 更多