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

标题: 大金空气传感器esphome外部组件版 [打印本页]

作者: avrilclc    时间: 2025-2-23 03:35
标题: 大金空气传感器esphome外部组件版
本帖最后由 avrilclc 于 2025-2-23 16:50 编辑

最新的esphome不支持自定义组件了,需要转化为外部组件。

求助了各种AI,deepseek,qwen2.5max, chatgpt O3 mini,全部都是报错,有的编译时报错,有的直接yaml里面就报错

最后用grok 3一次搞定,神奇啊

下面讲使用方法


  1.   includes:
  2.     - "cm1106.h"
  3.     # - "pm2105.h"  #根据PM2.5传感器型号选择
  4.     - "pm2105i2c.h"
复制代码
替换为:
  1. external_components:
  2.   - source:
  3.       type: local
  4.       path: components
复制代码
然后

  1. sensor:
  2. - platform: cm1106
  3.   update_interval: 15s
  4.   uart_id: cm1106_uart
  5.   name: "CM1106 CO₂ Sensor"
  6.   id: co2sensor
  7.   device_class: carbon_dioxide
  8.   state_class: measurement
  9.   unit_of_measurement: "ppm"

  10. - platform: pm2105
  11.   i2c_id: pm25_bus
  12.   address: 0x28
  13.   update_interval: 15s
  14.   pm2_5:
  15.     name: "PM2005 PM2.5"
  16.     id: pm25sensor
  17.   pm10:
  18.     name: "PM2005 PM10"
  19.     id: pm10sensor
复制代码
  1. switch:
  2. - platform: cm1106
  3.   uart_id: cm1106_uart
  4.   name: "CM1106 Calibrate"
  5.   id: calibration
复制代码



然后把我发的文件解压后放到esphome根目录下,然后去编译,搞定

ps:并不是首发,有大佬两天前就已经在esphome的github上请求pull了,不过我看了代码,跟我这个AI写的完全不一样,可能过段时间esphome官方就支持了


作者: sorrypqa    时间: 2025-2-23 10:11
谢谢大佬!因为这类问题,估计要一年半载后才敢更新ESPHome了
作者: avrilclc    时间: 2025-2-23 13:25
sorrypqa 发表于 2025-2-23 10:11
谢谢大佬!因为这类问题,估计要一年半载后才敢更新ESPHome了

现在AI很强了 我这个完全是grok写的 我测试了完全正常
作者: sorrypqa    时间: 2025-2-23 14:54
avrilclc 发表于 2025-2-23 13:25
现在AI很强了 我这个完全是grok写的 我测试了完全正常

grok有这么牛?是使用的人牛吧?下面是ESPHome官网的uart_to_text_sensor自定义组件内容,您能让这个grok转换为可以正常使用的外部组件我就信了。

  1. #include "esphome.h"

  2. class UartReadLineSensor : public Component, public UARTDevice, public TextSensor {
  3. public:
  4.   UartReadLineSensor(UARTComponent *parent) : UARTDevice(parent) {}

  5.   void setup() override {
  6.     // nothing to do here
  7.   }

  8.   int readline(int readch, char *buffer, int len)
  9.   {
  10.     static int pos = 0;
  11.     int rpos;

  12.     if (readch > 0) {
  13.       switch (readch) {
  14.         case '\n': // Ignore new-lines
  15.           break;
  16.         case '\r': // Return on CR
  17.           rpos = pos;
  18.           pos = 0;  // Reset position index ready for next time
  19.           return rpos;
  20.         default:
  21.           if (pos < len-1) {
  22.             buffer[pos++] = readch;
  23.             buffer[pos] = 0;
  24.           }
  25.       }
  26.     }
  27.     // No end of line has been found, so return -1.
  28.     return -1;
  29.   }

  30.   void loop() override {
  31.     const int max_line_length = 80;
  32.     static char buffer[max_line_length];
  33.     while (available()) {
  34.       if(readline(read(), buffer, max_line_length) > 0) {
  35.         publish_state(buffer);
  36.       }
  37.     }
  38.   }
  39. };
复制代码



作者: avrilclc    时间: 2025-2-23 16:48
sorrypqa 发表于 2025-2-23 14:54
grok有这么牛?是使用的人牛吧?下面是ESPHome官网的uart_to_text_sensor自定义组件内容,您能让这个grok ...

没什么信不信的,我没空帮你测试,提问肯定有技巧,越详细越好,你自己实操一下就知道了,你要给他自定义组件的yaml里面的代码以及你上面的代码,还要把esphome关于自定义组件取消的说明https://esphome.io/guides/contri ... t-custom-components 里面的内容一起喂给它,把需要的文件结构也给他
作者: sorrypqa    时间: 2025-2-23 17:29
avrilclc 发表于 2025-2-23 16:48
没什么信不信的,我没空帮你测试,提问肯定有技巧,越详细越好,你自己实操一下就知道了,你要给他自定义 ...

果然不简单,有那功夫我还不如直接找现成的https://github.com/eigger/espcomponents
作者: avrilclc    时间: 2025-2-23 18:02
sorrypqa 发表于 2025-2-23 17:29
果然不简单,有那功夫我还不如直接找现成的https://github.com/eigger/espcomponents ...

确实,等别人喂嘴里最简单
作者: sorrypqa    时间: 2025-2-23 18:15
avrilclc 发表于 2025-2-23 18:02
确实,等别人喂嘴里最简单

这叫重复造轮子,你会用到的,别人也许早就用到并分享出来了,比如大金这个传感器的外部组件,我在几个月前就找到有人分享出来了,不必找那个回答起来语无伦次的AI逐个测试
作者: avrilclc    时间: 2025-2-23 18:20
sorrypqa 发表于 2025-2-23 18:15
这叫重复造轮子,你会用到的,别人也许早就用到并分享出来了,比如大金这个传感器的外部组件,我在几个月 ...

哈哈哈哈 笑死,回答起来语无伦次,那可能你用的都是降智AI。没错,哪天你遇到某个小众问题的时候,希望你也可以找到别人的轮子。自己利用AI解决问题本身就是乐趣。
作者: sorrypqa    时间: 2025-2-23 18:29
avrilclc 发表于 2025-2-23 18:20
哈哈哈哈 笑死,回答起来语无伦次,那可能你用的都是降智AI。没错,哪天你遇到某个小众问题的时候,希望 ...

你自己都说了:求助了各种AI,deepseek,qwen2.5max, chatgpt O3 mini,全部都是报错..........
我们使用的ESPHome和AI等就是那些大神做的轮子,要不然个个全靠手搓C+,哪来的简便
作者: luckfly    时间: 2025-3-4 08:53
把原来的头文件.h分成了.h和.cpp?
作者: mimikiki    时间: 2025-3-4 11:48
昨天试着做了净水器的tds传感器的外部组件,没基础真的是太难了,最后靠vscode+copilot艰难搞定
这个项目你是怎么问grok的?我试了一下,给它gihub项目地址,让它转换以适应最新版的esphome,结果只是简单改了下yaml,而且还是继续用的自定组件
作者: avrilclc    时间: 2025-3-9 21:36
mimikiki 发表于 2025-3-4 11:48
昨天试着做了净水器的tds传感器的外部组件,没基础真的是太难了,最后靠vscode+copilot艰难搞定
这个项目你 ...

看我上面的回复 要详细
作者: avrilclc    时间: 2025-3-9 21:37
luckfly 发表于 2025-3-4 08:53
把原来的头文件.h分成了.h和.cpp?

没这么简单 还需要写sensor.py里面的东西
作者: bmabob    时间: 2025-7-6 07:14
感谢LZ,还好我引擎搜索了下,到你这儿了。折腾大半个晚上,虽然你提供的文件跟我的版本不一样,我的大金空气盒子是AB版,头文件用的是2005,你是2105,我自己手动调整了下,我也用你的思路,让它依你2105的模板,喂给copilot让它给我画瓢,还好一共七八次总算编译完成。比我自己第一次看到自定义组件的错误,喂给copilot的效果,好太多了,可能还是你这个Ai更加牛逼一些
作者: bmabob    时间: 2025-7-6 15:31
本帖最后由 bmabob 于 2025-7-6 16:50 编辑
bmabob 发表于 2025-7-6 07:14
感谢LZ,还好我引擎搜索了下,到你这儿了。折腾大半个晚上,虽然你提供的文件跟我的版本不一样,我的大金空 ...

又来回复一下,结果我弄错了,2105AB版,LZ才是正确的,我马上再试试




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