使用esp32连接mqtt服务器,注册home assistant传感器报错 OSError: [Errno 104] ECONNRESET
2条回答 默认 最新
- 语言-逆行者 2023-04-14 21:25关注
基于new Bing的修改:
根据代码和错误信息,似乎连接到 MQTT 服务器时出现了连接重置的错误(ECONNRESET)。这可能是由于网络连接中断或服务器端出现问题导致的。以下是一些修改代码的建议:- 检查网络连接是否可靠,确保 ESP32 正确连接到 Wi-Fi 网络。可以在连接之前打印网络配置信息,并检查是否有任何问题。
- 确保 MQTT 服务器正常工作,并且主题名称和内容正确。可以使用其他 MQTT 客户端(例如 MQTT.fx)测试连接和发布/订阅操作。
- 考虑使用带有重试逻辑的错误处理来处理连接错误。例如,在连接时使用 while 循环,直到连接成功或达到最大重试次数。
以下是修改后的示例代码:
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 次
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录