|
本帖最后由 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[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,想法子能控制些啥了
最终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周时间的努力还是搞定了。下次有机会再写写其中遇到的坑了。上个
成品图,个人感觉已经比较完美了,生命不息,折腾不止。
3.23 日更新:
前2日学习C4D 画了机壳, 托朋友3D打印了一个, 今天按上了, 效果还是挺满意的,就是数码显示隔光没做好,有点小遗憾。
|
评分
-
查看全部评分
|