You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python MQTT脚本输出含b''及空格,如何提取纯净温度值?

解决MQTT接收温度值时的bytes格式问题

这个问题其实很常见啦——你看到的b' 22.71'是Python里bytes类型的默认显示格式,因为paho-mqtt客户端返回的msg.payload本质是二进制数据,不是直接可用的字符串或数值。下面给你几种简单可靠的处理方法,轻松拿到纯净的温度值:

方法一:解码+去空格+转数值(推荐)

直接在on_message函数里对收到的payload做三步处理:

  1. 用decode('utf-8')把二进制bytes转成UTF-8编码的字符串
  2. 用strip()去除字符串前后的空格(包括换行、制表符这类空白字符)
  3. 转成float类型,方便后续导出或计算

修改后的完整脚本如下:

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':
        # 处理payload,拿到纯净温度值
        temp_str = msg.payload.decode('utf-8').strip()
        temp_value = float(temp_str)
        print(temp_value)  # 输出纯净的数值,比如22.71

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()

方法二:简化写法(适合格式固定的场景)

如果你确定消息格式只会是b' 数字'这种固定样式,也可以用一行代码直接处理:

print(float(msg.payload.decode('utf-8').strip()))

为什么之前的尝试没成功?

你之前直接截取字符或去除符号没用,是因为你操作的对象是bytes类型,不是字符串。必须先把bytes转成字符串,才能对其中的字符(比如空格)进行处理哦。

内容的提问来源于stack exchange,提问作者dannisis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:12:53