使用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 次
引用chatGPT作答,该错误通常表示在尝试连接到MQTT服务器时发生了连接重置错误。这可能是由于网络连接不稳定、MQTT服务器故障或防火墙/路由器配置等原因引起的。
以下是一些可能的解决方案:
1.检查网络连接稳定性:确保您的ESP32连接到可靠的网络,并且网络连接不断断续续。
2.检查MQTT服务器:确保您的MQTT服务器正在运行,并且没有故障或维护计划。您可以尝试使用其他MQTT客户端(如MQTT.fx)连接到MQTT服务器,以验证服务器是否可用。
3.检查防火墙/路由器配置:如果您在连接到MQTT服务器时使用了防火墙或路由器,请确保它们正确配置以允许ESP32连接到MQTT服务器。您可以尝试暂时禁用防火墙以验证此问题是否导致连接问题。
4.调整MQTT客户端连接参数:您可以尝试更改MQTT客户端连接参数(如keepalive、QoS等),以查看是否可以解决连接问题。例如,您可以尝试设置keepalive参数的值较高(例如120秒),以确保ESP32保持与MQTT服务器的连接。
5.更新ESP32软件:如果您的ESP32正在使用旧版本的软件,请考虑更新到最新版本,以确保您的设备具有最新的功能和修复程序。
希望这些解决方案可以帮助您解决问题。如果问题仍然存在,请尝试提供更多的信息和错误消息,以便更好地理解和解决问题。