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

一、问题描述

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

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

在这里插入图片描述

2.使用 ESP32 无法创建实体

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

在这里插入图片描述

二、问题原因

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

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

在这里插入图片描述

三、解决办法

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

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

猜你喜欢

转载自blog.csdn.net/qq_43768851/article/details/132449946