MQTT msg.payload 个有趣的字符
MQTT msg.payload funny characters
我有一个温度传感器通过 ESP32 控制器上的 MQTT 连接到树莓派,它在 Arduino IDE 串行监视器中正确显示温度,也在 Home Assistant 网页中显示。
我试图用 python 3 脚本让它显示在 Raspberry Pi 控制台上。它显示值但添加字符 --> b' 22.71'
我尝试从特定位置去除字符或显示值,但没有成功。我只需要导出它的温度值。
剧本是
import paho.mqtt.client as mqtt
def on_connect(client, userdata, rc, *extra_params):
client.subscribe("ha/temperature")
def on_message(client, userdata, msg):
if msg.topic == 'ha/temperature':
print(msg.payload)
client = mqtt.Client("test")
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set(username="username",password="password")
client.connect("192.168.0.100", 1883, 60)
client.loop_forever()
结果是:
pi@raspberrypi:~ $ sudo python3 BasicMQTT.py
b' 22.71'
b' 22.71'
b' 22.71'
b' 22.71'
如何从输出中去除 "b" "'" 和 space 个字符?
提前致谢
这是因为 python3 paho 库返回的是字节数组,而不是有效负载字节数组的字符串表示形式。
您可以修复更改 on_message
回调,如下所示:
def on_message(client, userdata, msg):
if msg.topic == 'ha/temperature':
print(msg.payload.decode("utf-8") )
我有一个温度传感器通过 ESP32 控制器上的 MQTT 连接到树莓派,它在 Arduino IDE 串行监视器中正确显示温度,也在 Home Assistant 网页中显示。 我试图用 python 3 脚本让它显示在 Raspberry Pi 控制台上。它显示值但添加字符 --> b' 22.71'
我尝试从特定位置去除字符或显示值,但没有成功。我只需要导出它的温度值。
剧本是
import paho.mqtt.client as mqtt
def on_connect(client, userdata, rc, *extra_params):
client.subscribe("ha/temperature")
def on_message(client, userdata, msg):
if msg.topic == 'ha/temperature':
print(msg.payload)
client = mqtt.Client("test")
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set(username="username",password="password")
client.connect("192.168.0.100", 1883, 60)
client.loop_forever()
结果是:
pi@raspberrypi:~ $ sudo python3 BasicMQTT.py
b' 22.71'
b' 22.71'
b' 22.71'
b' 22.71'
如何从输出中去除 "b" "'" 和 space 个字符?
提前致谢
这是因为 python3 paho 库返回的是字节数组,而不是有效负载字节数组的字符串表示形式。
您可以修复更改 on_message
回调,如下所示:
def on_message(client, userdata, msg):
if msg.topic == 'ha/temperature':
print(msg.payload.decode("utf-8") )