【自用】无法通过ESP32创建HomeAssistant实体问题解决(MQTT对ESP32创建实体请求无应答)

一、问题描述

1.使用 MQTTX 测试客户端能够创建实体

当通过 MQTTX 发送注册实体请求的时候,实体能够在 MQTT 服务器中注册成功。

【自用】无法通过ESP32创建HomeAssistant实体问题解决(MQTT对ESP32创建实体请求无应答)_第1张图片

2.使用 ESP32 无法创建实体

在ESP32中通过 publish() 函数发送注册请求的时候,并不会报任何错误,但 MQTT 服务器就是对此毫无反应。

【自用】无法通过ESP32创建HomeAssistant实体问题解决(MQTT对ESP32创建实体请求无应答)_第2张图片

二、问题原因

1.注册实体请求的 JSON 字符串过长,发送给 MQTT 服务器时被截断

该问题困扰了我两天的时间,百思不得其解,因为一点儿报错都没有。
最终打开了 MQTT 日志监测,并逐行查阅日志文件,发现日志中 MQTT 接收到的 JSON 格式请求被拦腰截断,变成了不完整的请求。
原因不明,因为 JSON 字符串的长度,在 MQTTX 客户端 和 ESP32 中是一样的。有可能是没有给线程上锁的原因,但此种可能性较小,因为当我只发送一次 publish() 请求时,该问题依然存在。

【自用】无法通过ESP32创建HomeAssistant实体问题解决(MQTT对ESP32创建实体请求无应答)_第3张图片

三、解决办法

1.减少 发送的注册实体请求 的 JSON 字符串的长度

我去掉了一些不必要的参数如“icon”,并且将制造商从中文字符改为了英文(中文转码后太长)
问题因此成功解决。

你可能感兴趣的:(ESP32-S3,ESP32,嵌入式硬件,MQTT)