『瀚思彼岸』» 智能家居技术论坛

标题: 不能被HA识别,config部分该怎么写 [打印本页]

作者: nomi    时间: 2023-9-6 16:18
标题: 不能被HA识别,config部分该怎么写
  1. // 发送设备配置信息到HA的TOPIC_CONFIG
  2. void sendConfigToHA() {
  3.   // 创建一个JSON对象
  4.   StaticJsonDocument<256> jsonDoc;

  5.   // 填充JSON对象的属性
  6.   jsonDoc["name"] = "ESP8266 Switch"; // 设备名称
  7.   jsonDoc["unique_id"] = "esp8266_switch"; // 设备唯一ID
  8.   jsonDoc["state_topic"] = TOPIC_STATE; // 状态主题
  9.   jsonDoc["command_topic"] = TOPIC_COMMAND; // 控制主题
  10.   jsonDoc["availability_topic"] = TOPIC_ONLINE; // 在线状态主题

  11.   // 将JSON对象序列化为字符串
  12.   String jsonStr;
  13.   serializeJson(jsonDoc, jsonStr);

  14.   // 发送配置信息到HA的TOPIC_CONFIG
  15.   if (client.connected()) {
  16.     client.publish(TOPIC_CONFIG, jsonStr.c_str());

  17.     // 打印发送的配置信息到串口监视器
  18.     Serial.println("Sent configuration to Home Assistant:");
  19.     Serial.println(jsonStr);
  20.   } else {
  21.     Serial.println("MQTT not connected. Cannot send configuration.");
  22.   }
  23. }

  24. // 初始化函数
  25. void setup() {
  26.   Serial.begin(115200);
  27.   delay(20);
  28.   // 配置静态IP
  29.   WiFi.config(staticIP, gateway, subnet, dns);
  30.   // 连接Wi-Fi网络
  31.   reconnectwifi();
  32.   pinMode(LAMP5, OUTPUT); // 配置LAMP5为输出,用于控制开关
  33.   client.setServer(mqtt_server, mqtt_port); // 设置MQTT服务器
  34.   client.setCallback(callback); // 设置MQTT消息回调函数
  35.   // 连接MQTT服务器
  36.   reconnectmqtt();

  37.   // 发送设备配置信息到HA的TOPIC_CONFIG
  38.   sendConfigToHA();
  39. }
复制代码
不能被HA识别,求助这个config订阅内容要怎么写,用的Arduino IDE,想试着用8266写个开关,能在ha上控制。
折腾了一天了,只成功了联网和MQTT

作者: XCray    时间: 2023-9-6 17:04
既然自己会写程序,那么看文档应该也不是问题吧?
https://www.home-assistant.io/integrations/mqtt#mqtt-discovery
作者: nomi    时间: 2023-9-6 18:28
XCray 发表于 2023-9-6 17:04
既然自己会写程序,那么看文档应该也不是问题吧?
https://www.home-assistant.io/integrations/mqtt#mqtt- ...

不会写,这个是chatgpt帮我写的,每行注释了才勉强看懂
作者: nomi    时间: 2023-9-6 18:39
XCray 发表于 2023-9-6 17:04
既然自己会写程序,那么看文档应该也不是问题吧?
https://www.home-assistant.io/integrations/mqtt#mqtt- ...

谢谢,识别到了
作者: nomi    时间: 2023-9-6 23:33
XCray 发表于 2023-9-6 17:04
既然自己会写程序,那么看文档应该也不是问题吧?
https://www.home-assistant.io/integrations/mqtt#mqtt- ...

超版,可以帮我找找失败的源头吗?一晚上了还是没搞定,按文档成功的连上的信息写的是感应器,改成开关后一直没能成功,mqttx上能收到8266发出来的config消息,ha确总是识别不到,是不是少了什么参数,显示的内容是
Topic: homeassistant/ESP-01/home/configQoS: 0
{"name":"水泵开关","unique_id":"HA-ESP8266-03","command_topic":"home/bedroom/switch1/set","state_topic":"home/bedroom/switch1","qos":0,"payload_on":"ON","payload_off":"OFF","retain":false}

对应的代码是:
  1. // TOPIC_CONFIG配置
  2. void sendConfigToHA() {
  3.   // 创建一个JSON对象
  4.   StaticJsonDocument<256> jsonDoc;

  5.   // 设置开关的配置信息
  6.   jsonDoc["name"] = switchName;
  7.   jsonDoc["unique_id"] = switchUniqueId;
  8.   jsonDoc["command_topic"] = TOPIC_COMMAND; // 控制开关的命令主题,请更改为您的命令主题
  9.   jsonDoc["state_topic"] = TOPIC_STATE; // 设置状态主题
  10.   jsonDoc["qos"] = 0; // 设置QoS级别,可以根据需要进行更改
  11.   jsonDoc["payload_on"] = "ON"; // 设置开启状态的payload
  12.   jsonDoc["payload_off"] = "OFF"; // 设置关闭状态的payload
  13.   jsonDoc["retain"] = false; // 设置是否保留最后一个消息

  14.   // 将JSON对象序列化为字符串
  15.   String jsonStr;
  16.   serializeJson(jsonDoc, jsonStr);

  17.   // 发送配置信息到HA的TOPIC_CONFIG
  18.   if (client.connected()) {
  19.     client.publish(TOPIC_CONFIG, jsonStr.c_str());

  20.   // 打印发送的配置信息到串口监视器
  21.     Serial.println("Sent configuration to Home Assistant:");
  22.     Serial.println(jsonStr);
  23.   } else {
  24.     Serial.println("MQTT not connected. Cannot send configuration.");
  25.   }
  26. }
复制代码

作者: XCray    时间: 2023-9-7 07:49
nomi 发表于 2023-9-6 23:33
超版,可以帮我找找失败的源头吗?一晚上了还是没搞定,按文档成功的连上的信息写的是感应器,改成开关后 ...

名字不要用中文,其他的多看文档、找个示例代码学习。我自己没这么玩过,mqtt也好久不用了,帮不上太多。
作者: DDDear    时间: 2023-9-7 08:52
把config的topic改成  homeassistant/switch/bedroom/config 试试
作者: nomi    时间: 2023-9-7 09:51
DDDear 发表于 2023-9-7 08:52
把config的topic改成  homeassistant/switch/bedroom/config 试试

试了,还是失败
作者: nomi    时间: 2023-9-7 09:52
XCray 发表于 2023-9-7 07:49
名字不要用中文,其他的多看文档、找个示例代码学习。我自己没这么玩过,mqtt也好久不用了,帮不上太多。 ...

换成了英文还是失败,文档里没有相同环境的示例,我再找一找看
作者: DDDear    时间: 2023-9-7 11:46
nomi 发表于 2023-9-7 09:51
试了,还是失败

我用mqtt客户端试了下可以的,只修改了配置主题
[attach]51359[/attach][attach]51360[/attach][attach]51361[/attach]


作者: nomi    时间: 2023-9-7 12:54
DDDear 发表于 2023-9-7 11:46
我用mqtt客户端试了下可以的,只修改了配置主题

谢谢,成功了,之前我config路径里面switch拼错了,homeassistant/switch/这个路径下可以识别,HA找了。就是出来的按钮和你的不一样,是两个可点击区域,一个开一个关,还不能区分是否打开[attach]51363[/attach]

作者: nomi    时间: 2023-9-7 13:07
DDDear 发表于 2023-9-7 11:46
我用mqtt客户端试了下可以的,只修改了配置主题

谢谢,找到原因了
  1.   jsonDoc["payload_on"] = "1"; // 设置开启状态的payload
  2.   jsonDoc["payload_off"] = "0"; // 设置关闭状态的payload
复制代码

8266在返回状态的时候用的是on和off,我给HA定义了0和1,双方没接上头。
都改成0和1,成功




欢迎光临 『瀚思彼岸』» 智能家居技术论坛 (https://bbs.hassbian.com/) Powered by Discuz! X3.5