使用esp32连接mqtt服务器,注册home assistant传感器报错 OSError: [Errno 104] ECONNRESET



使用esp32连接mqtt服务器,注册home assistant传感器报错 OSError: [Errno 104] ECONNRESET



基于new Bing的修改:
根据代码和错误信息,似乎连接到 MQTT 服务器时出现了连接重置的错误(ECONNRESET)。这可能是由于网络连接中断或服务器端出现问题导致的。以下是一些修改代码的建议:
以下是修改后的示例代码:
import time
import network
import ujson
from umqttsimple import MQTTClient
# Home Assistant 设备配置信息
device_name = "ESP32-04"
sensor_name = "1"
sensor_type = "Temp"
config_topic = "homeassistant/sensor/HA/HA-%s-%s/config" % (device_name, sensor_name)
config_content = {
"unique_id": "HA-%s-%s" % (device_name, sensor_name),
"name": sensor_type,
"icon": "mdi:thermometer",
"state_topic": "HA-%s/%s/state" % (device_name, sensor_name),
"json_attributes_topic": "HA-%s/%s/attributes" % (device_name, sensor_name),
"device": {
"identifiers": device_name,
"manufacturer": "WT有限公司",
"model": "HA",
"name": device_name,
"sw_version": "1.0",
},
}
state_topic = "HA-%s/%s/state" % (device_name, sensor_name)
def do_connect():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('connecting to network...')
wlan.connect('WT2', '12345678')
i = 1
while not wlan.isconnected() and i <= 10:
print("正在连接...(第%d次)" % i)
i += 1
time.sleep(1)
if wlan.isconnected():
print('network config:', wlan.ifconfig())
else:
print("连接失败")
def sub_cb(topic, msg):
print(topic, msg)
def main():
do_connect()
c = MQTTClient(device_name, "mqtt_server")
c.set_callback(sub_cb)
c.connect()
c.subscribe(b"my-esp32")
time.sleep(1)
send_content = ujson.dumps(config_content)
c.publish(config_topic.encode(), send_content.encode())
for i in range(100):
time.sleep(0.5)
c.publish(state_topic.encode(), str(i).encode())
print("esp32...%d" % i)
c.disconnect()
if __name__ == "__main__":
main()
此代码将尝试连接名为 mqtt_server 的 MQTT 服务器,并在连接成功后订阅 my-esp32 主题。然后,它将发布传感器的配置信息和状态信息。如果连接失败,则在尝试最多 10 次