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

标题: 能率燃气热水器协议破解完美接入HA(3.23更新) [打印本页]

作者: hzcoolwind    时间: 2024-2-25 19:01
标题: 能率燃气热水器协议破解完美接入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状态信号输入图,下图所示相关二个测试点,借用下大神的图
[attach]56227[/attach]
接上示波器:
[attach]56226[/attach]
根据采集到波形数据,仔细分析,基本确定是2400波特率的,通讯数据6个字节长度, 经过几晚熬夜到2点采集到了大量相关的通讯数据, 又经过几昼夜的冥思苦想、汇总分析,基本确定了 开关机、温度、水量设定以及相关状态数据的
协议解析,下面就是考虑采用8266 模拟读取和模拟写入指令测试了,考虑到双mcu控制信号接入对载波芯片的SCTL端的电平会受到干扰,为即不影响线控器的按键操作又能通过8266指令写入,需要对2路控制线控适当隔离,同时又要
考虑电路简洁,通过简单设计,设计了以下电路, 只需要3根线接到 线控器就应该能完成所需要求,电路如下:
[attach]56228[/attach]
需要在线控器上加装一二极管,并切断一条线路,切断位置如图所示:
[attach]56219[/attach]

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


写一个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[0]==0xFF && bytes[1]==0xEF && bytes[2]==0xFF) {
            if (bytes[3]==0xFE){
              id(power_on).publish_state(true);
            }
            if (bytes[3]==0xFF){
              id(power_on).publish_state(false);
            }
          }

          if (bytes[0]==0xFF && bytes[1]==0xEF && bytes[2]==0x2F) {
            if (bytes[3]==0xFF && bytes[4]==0xFF){
              id(burning).publish_state(false);
            }
            if (bytes[3]==0xCE && bytes[4]==0xFF){
              id(burning).publish_state(true);
            }
          }


binary_sensor:
  - platform: template
    name: "ower 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,想法子能控制些啥了
[attach]56225[/attach]

最终HA中传感器的样子:
[attach]56224[/attach]


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


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

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

[attach]56635[/attach]


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


作者: cjnt007    时间: 2024-2-25 19:46
牛B,有技术就是不一样!
作者: george65    时间: 2024-2-25 21:11
什麼都好  就是盒子大了點
作者: hzcoolwind    时间: 2024-2-25 23:30
george65 发表于 2024-2-25 21:11
什麼都好  就是盒子大了點

随便找了个零食盒子,这个面板有点大,比86盒子大得多,见笑了
作者: 隔壁的王叔叔    时间: 2024-2-26 09:53
牛逼,有技术就是好
作者: hxck    时间: 2024-2-26 10:15
大佬示波器不会使用,应该怎么学,
作者: hzcoolwind    时间: 2024-2-26 23:25
hxck 发表于 2024-2-26 10:15
大佬示波器不会使用,应该怎么学,

多看示波器的使用说明
作者: laogong888    时间: 2024-2-27 08:47
牛逼,有技术就是好
作者: hxck    时间: 2024-2-27 16:43
hzcoolwind 发表于 2024-2-26 23:25
多看示波器的使用说明

主要不经常用可能也记不住
作者: manymuch    时间: 2024-2-28 12:29
硬核!  我家也是这个能率面板,然而自己硬件能力不过关,学不来,期待一个更加成熟的方案,另外有没有可能8266直接和mcu共用电源?
作者: invincible    时间: 2024-2-28 15:02
牛逼 我看都看不懂
作者: hzcoolwind    时间: 2024-2-28 16:56
manymuch 发表于 2024-2-28 12:29
硬核!  我家也是这个能率面板,然而自己硬件能力不过关,学不来,期待一个更加成熟的方案,另外有没有可能8 ...

应该不行,估计8266消耗电能比较厉害,接上线控的5V电源,线控就没反应了
作者: zsxiaojz    时间: 2024-2-29 20:12
本帖最后由 zsxiaojz 于 2024-2-29 20:15 编辑

楼主牛B,问个问题群友们电热式万和热水器插电是通电是待机显示每次要人手按启动点灯才可以烧水的有没有办法通电启动点火烧水。想接个智能插座定开机烧水(面板开关键是轻触的开关)。
作者: xjol    时间: 2024-3-1 21:50
太厉害了大佬
作者: Philipshot    时间: 2024-3-4 11:45

厉害了,有技术就是好
作者: scorpioxy    时间: 2024-3-6 14:32
快马加鞭,赶来向老大学习成功经验
作者: colthe    时间: 2024-3-12 19:05
太牛逼了,同型号热水器路过,我只是搞了个手指机器人操作开关热水循环,哈哈
作者: billcho2916603    时间: 2024-3-14 14:35
太牛逼了 ,向大神学习
作者: kylin_fedora    时间: 2024-3-15 14:39
大佬修改版配置啥时候公开
作者: ciasdmxhxjjpd@c    时间: 2024-3-23 21:41
uart 模拟按键操作。不能调节水温?

https://bbs.hassbian.com/thread-17445-1-1.html
作者: hzcoolwind    时间: 2024-3-23 21:51
本帖最后由 hzcoolwind 于 2024-3-23 21:56 编辑
ciasdmxhxjjpd@c 发表于 2024-3-23 21:41
uart 模拟按键操作。不能调节水温?

https://bbs.hassbian.com/thread-17445-1-1.html
应该也可以, 就是连线就多了,用通讯协议最直接方便, 还能设置按键设置不了的温度, 看到更多的信息的
作者: ciasdmxhxjjpd@c    时间: 2024-3-23 21:56
hzcoolwind 发表于 2024-3-23 21:51
你能知道调到几度了吗

没用过能率,不清楚。
作者: hzcoolwind    时间: 2024-3-23 22:00
ciasdmxhxjjpd@c 发表于 2024-3-23 21:56
没用过能率,不清楚。

你的贴子之前没收到, 思路其实差不多, 3根线最方便,想做啥都可以,也能得到想得到的所有信息
作者: ciasdmxhxjjpd@c    时间: 2024-3-23 22:05
hzcoolwind 发表于 2024-3-23 22:00
你的贴子之前没收到, 思路其实差不多, 3根线最方便,想做啥都可以,也能得到想得到的所有信息  ...

嗯,我没有做查询命令,返回值的解析。

信息太少,协议也没有破解。
作者: yinglively    时间: 2024-3-25 14:50
牛叉,支持一下,学习学习。
作者: cccq    时间: 2024-3-25 15:08
这完全超出我的能力范围了 ,手把手都教不会的那种
作者: aiy1925    时间: 2024-3-27 21:16
太高科技了 看不懂 卖成品吗 我需要一个 现在就是放了个手指机器人
作者: aiy1925    时间: 2024-4-1 09:32
是的,我的是带内置循环泵的GQ-16D2AFEXQ
作者: appleman    时间: 2024-4-7 14:59
请问大佬,这个有没有成品售卖?
作者: hzcoolwind    时间: 2024-4-7 15:41
目前没有做成品出售, 盒子打印的,薄膜面板是买的能率线控上剪下来的, 而且薄膜面板品相也不好, 做成品成本有点高
作者: appleman    时间: 2024-4-7 17:07
hzcoolwind 发表于 2024-4-7 15:41
目前没有做成品出售, 盒子打印的,薄膜面板是买的能率线控上剪下来的, 而且薄膜面板品相也不好, 做成品 ...

我准备就搞个明装底盒放这个8266板子就行,不搞你这种漂亮的,你做的这个8266板子能不能出售,我回家接几根线,这样行不行?
作者: kylin_fedora    时间: 2024-4-25 16:19
大佬什么时候更新,按照方案做了一个,但是最近貌似出问题了,五一查下问题的情况
作者: kylin_fedora    时间: 2024-6-8 10:39
大佬最近又更新吗?还在等大佬提供更多的功能
作者: hemukai    时间: 2024-10-10 13:41
牛逼,林内热水器是不是也可以?
作者: aska    时间: 2024-11-10 09:43
牛B,有技术就是不一样!本来也想搞得,没能力,公卫离热水器近还可以拉线搞控制器,主卫就干瞪眼了。
作者: aiy1925    时间: 2024-11-29 13:23
内置循环泵的怎么办呢
作者: llb608    时间: 2025-3-12 10:59
牛b plus+++
作者: sx3132    时间: 2025-7-31 11:54
太赞了,膜拜大神
作者: BBGPPR    时间: 2025-8-19 16:00
家里用的能率G31,自带wifi功能,却可惜只支持傻猫精灵,也想改,恳请楼主开发出成品板子,让我等解解馋!!!
作者: aska    时间: 2025-9-26 05:13
本帖最后由 aska 于 2025-9-26 05:15 编辑

脱光后才发现热水器开关没开的场景经历过几次 ,我家就简单粗暴了,在张大妈上看到有人加了分控,直接拉线到公卫里实现双控,主卫就没办法放弃了!




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