hzcoolwind 发表于 2024-2-25 19:01:54

能率燃气热水器协议破解完美接入HA(3.23更新)

本帖最后由 hzcoolwind 于 2024-3-23 22:10 编辑

当前实现的方案是: 能率热水器一般都支持外接二线的线控器, 买个线控器接能率热水器的外接线控端, 然后对这个外接的线控器进行改装,加装8266 Wifi控制, 对原机不破坏不改动。

春节期间我的能率冷凝机抽风了,经常发生放水中途熄火,闪烁提示29,几次挨冻之后,痛定思痛,先打400来修了下热水器,判断可能是冷凝水脏污,影响冷凝水的排放引起的,清洗了下冷凝水中和器和传感器,暂时熄火不出现了。 怕以后再挨冻考虑无线接入能率,上网查询了下有线控器,但需要预先布线,再搜hass,有大神硬核接入了能率,链接如下,在此感谢:

https://bbs.hassbian.com/thread-18491-1-1.html
仔细研究了下,大神采用的是硬接入模式,esp直接接在了开关和led 两端,靠短接开关和判断led控制线来判断能率开机与否,功能比较有限。 根据大神的简化电路初步判断是mcu键控显示芯片与下面的载波芯片的uart通讯,
如果读取到载波芯片的数据输出,判断能率的开关机、燃烧、温度等状态信息,然后能对载波芯片写入开关机、温度控制、水量控制等指令就比较完美了,这就涉及到mcu控制芯片与载波芯片的通讯协议破解了。
说干就干,先下单买了一个线控器,春节后卖家才发货,到货后先接上线试了能用,拆出电路板,跟大神帖子中的板子是一样的,这样就简单了,少了很多摸索的时间,接上示波器、逻辑分析仪开始工作,
示波器接mcu控制信号输出端,逻辑分析仪接mcu状态信号输入图,下图所示相关二个测试点,借用下大神的图

接上示波器:

根据采集到波形数据,仔细分析,基本确定是2400波特率的,通讯数据6个字节长度, 经过几晚熬夜到2点采集到了大量相关的通讯数据, 又经过几昼夜的冥思苦想、汇总分析,基本确定了 开关机、温度、水量设定以及相关状态数据的
协议解析,下面就是考虑采用8266 模拟读取和模拟写入指令测试了,考虑到双mcu控制信号接入对载波芯片的SCTL端的电平会受到干扰,为即不影响线控器的按键操作又能通过8266指令写入,需要对2路控制线控适当隔离,同时又要
考虑电路简洁,通过简单设计,设计了以下电路, 只需要3根线接到 线控器就应该能完成所需要求,电路如下:

需要在线控器上加装一二极管,并切断一条线路,切断位置如图所示:


电路原理相当于并联了一个MCU到线控器,8266 这端搞成下图这个样子,二极管翻箱倒柜没找到合适的,只找到20年前的2个整流二极管,难看是难看了点,但是能用:



写一个esphome代码进行测试,基本符合预期,线控器、8266都能控制热水器了, 测试代码如下:

esphome:
name: noritzcontroller
friendly_name: noritzcontroller

esp8266:
board: nodemcuv2

# Enable logging
logger:
hardware_uart: UART1

# Enable Home Assistant API
api:
encryption:
    key: "hJJG5fifc0sF****"


ota:
password: "be8b962509e*****"

wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password

# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
    ssid: "Noritzcontroller"
    password: !secret wifi_password

captive_portal:

web_server:
port: 80

uart:
- id: master
    baud_rate: 2400
    rx_pin:
      number: GPIO13
      inverted: false
      mode:
      input: true
      pullup: true
    tx_pin:
      number: GPIO15
      inverted: false
      mode:
      output: true
    debug:
      direction: BOTH
      dummy_receiver: true
      after:
      bytes: 6
      sequence:
      - lambda: |-
          if (bytes.size() != 6)
            return;

          if (bytes==0xFF && bytes==0xEF && bytes==0xFF) {
            if (bytes==0xFE){
            id(power_on).publish_state(true);
            }
            if (bytes==0xFF){
            id(power_on).publish_state(false);
            }
          }

          if (bytes==0xFF && bytes==0xEF && bytes==0x2F) {
            if (bytes==0xFF && bytes==0xFF){
            id(burning).publish_state(false);
            }
            if (bytes==0xCE && bytes==0xFF){
            id(burning).publish_state(true);
            }
          }


binary_sensor:
- platform: template
    name: "Power state"
    id: "power_on"
    icon: "mdi:power"
- platform: template
    name: "Burning state"
    id: "burning"
    icon: "mdi:fire"

button:      
- platform: uart
    uart_id: master
    name: power_on_45
    data: [0xDF,0xEF,0xFF,0xFE,0xD8,0xF2]

- platform: uart
    uart_id: master
    name: power_off_45
    data: [0xDF,0xEF,0xFF,0xFF,0xD8,0xF3]


最后就是装盒子,连HA,想法子能控制些啥了


最终HA中传感器的样子:



初步考虑可以调温,浴缸放水到设置水量语音提示关水,如果搞得大一点就来个电磁阀控制关水,还有就是检测到水流短时开启比如小于2秒开启循环泵,虽然现在循环泵有语音控制还有手机控制和按钮控制。
有空先写个water heater组件吧。


-----------------------------------------------------------------------------
2024.3.8 更新:
经过半个多月的折腾, homeassistant下的集成搞定了,通过添加集成,自动搜索esphome 集成下的能率控制器设备,丝滑添加。 集成了热水器、水量调节、各种传感器。
其中的心酸泪就不细说了,包括homeassistant开发环境的搭建, 特别是集成的编写还是第一次, 一边摸索一般写,总算搞定了。
还写了几个自动化, 水量快达到浴缸水量时语音提醒还有2分钟放满, 水量到达时语音提醒浴缸已满, 水量超出时微信通知告警、语音告警 。
短暂开启两次热水龙头,并2次开启关闭间隔小于3秒,自动开启热水循环泵,并语音提醒,有效防止误开启。

其中开发环境的搭建坑不少,另外开贴分享了
https://bbs.hassbian.com/thread-24452-1-1.html

homeassistant上组件开发完了,几天前想不如esphome直接提供热水器组件更直接简便,也更高效。 翻了下资料较少,例子更少。按官网的简单提示下载开发环境做了,
发觉比homeassistant的更难一些,参考的东西太少了,而且无法在线联调,麻烦得很。 好在经过1周时间的努力还是搞定了。下次有机会再写写其中遇到的坑了。上个
成品图,个人感觉已经比较完美了,生命不息,折腾不止。 :lol




3.23 日更新:
前2日学习C4D 画了机壳, 托朋友3D打印了一个, 今天按上了, 效果还是挺满意的,就是数码显示隔光没做好,有点小遗憾。 :lol


cjnt007 发表于 2024-2-25 19:46:49

牛B,有技术就是不一样!

george65 发表于 2024-2-25 21:11:59

什麼都好就是盒子大了點;P

hzcoolwind 发表于 2024-2-25 23:30:09

george65 发表于 2024-2-25 21:11
什麼都好就是盒子大了點

随便找了个零食盒子,这个面板有点大,比86盒子大得多,见笑了:lol

隔壁的王叔叔 发表于 2024-2-26 09:53:00

牛逼,有技术就是好

hxck 发表于 2024-2-26 10:15:08

大佬示波器不会使用,应该怎么学,

hzcoolwind 发表于 2024-2-26 23:25:43

hxck 发表于 2024-2-26 10:15
大佬示波器不会使用,应该怎么学,

多看示波器的使用说明:lol

laogong888 发表于 2024-2-27 08:47:33

牛逼,有技术就是好

hxck 发表于 2024-2-27 16:43:16

hzcoolwind 发表于 2024-2-26 23:25
多看示波器的使用说明

主要不经常用可能也记不住

manymuch 发表于 2024-2-28 12:29:04

硬核!我家也是这个能率面板,然而自己硬件能力不过关,学不来,期待一个更加成熟的方案,另外有没有可能8266直接和mcu共用电源?
页: [1] 2 3 4
查看完整版本: 能率燃气热水器协议破解完美接入HA(3.23更新)