如何在Python的MQTT主题中使用树莓派主机名?
解决MQTT主题中加入主机名的问题
你直接写"host/data/humidity_rel"是把host作为固定字符串,而非引用变量值,所以无效。以下是几种可行的实现方式:
字符串拼接法
import socket import paho.mqtt.client as mqtt host = socket.gethostname() # 拼接主机名与主题后缀 topic = host + "/data/humidity_rel" client.publish(topic, "%.2f" % humidity)f-string格式化(Python 3.6+推荐)
这种方式更简洁直观:import socket import paho.mqtt.client as mqtt host = socket.gethostname() # 直接在字符串中嵌入变量 client.publish(f"{host}/data/humidity_rel", "%.2f" % humidity)旧式字符串格式化
兼容Python 2.x及更早版本:import socket import paho.mqtt.client as mqtt host = socket.gethostname() # 用%s占位符替换变量 topic = "%s/data/humidity_rel" % host client.publish(topic, "%.2f" % humidity)
额外注意:
- 先通过
print(host)确认主机名获取正确,避免因主机名异常导致主题无效 - MQTT主题不允许包含
+、#、空格等特殊字符,若你的主机名有这类字符,需先替换(比如用host.replace(" ", "_")处理空格)
内容的提问来源于stack exchange,提问作者Staegg
相关产品推荐
相关产品推荐

