背景
入冬后室温经常低于 15 ℃,开空调时发现控制器过于老旧,温控也很不准确,于是打算直接换个智能型的并接入 Home Assistant。
将温控器拆下来研究后发现是旋钮的轴老化了,连着的双金属片盘有点松动导致温控失灵。
根据内侧贴着的原理图,接线十分简单粗暴:一条火线输入,三条输出分别对应制热、制冷、风扇。
用万用表确认之后给线都贴上标签,顺便量一下墙上的螺丝孔间距约 60 mm,符合 86 型开关盒标准。
在 Home Assistant 论坛和 reddit 调研后发现大部分支持接入 Home Assistant 的空调控制器都只是红外遥控器,而这种硬接线的只能继续使用温控器(thermostat)了。而大部分温控器都是用于控制暖气的热水阀,支持制热+制冷的挺少。逛了一圈找到一个基于 Tuya ESP、有 Tasmota 支持的 BAC-002
系列,从 AliExpress 以 €31.29 包邮购入。
背面接线口:
该温控适用于控制两线水阀(2-wire auto return ball valve),冷热水阀分别有“open”和“close”两条线,对我的空调来说只需要控制通断“open”线即可控制运作;风扇控制支持三档风速,任选一档接通即可。
由于智能温控器自身运行需要供电,而原本的温控器并不需要所以没有接零线。但墙里还有两条之前没有用到的线:一条黄绿色的地线接了地,和另一条黑色的线,可惜量了一下发现它并没有接入总零线。于是打开空调内机所在的吊顶隔板,找到这条黑线的另一头把它接上零线即可。
外面这一大块神秘电路板没有任何连接,或许是没用到的电源?
接好线后测试了一下这款温控器可以正常控制空调制冷制热,就准备给它刷上 Tasmota 固件进行去云化了。
硬件
拆开后直接给显眼的 Wi-Fi 模块连上需要的线,通过 web installer 开始刷 Tasmota,可是一直提示无法找到设备,用 esptool.py 也无法读到芯片信息。一番折腾最后在一个 GitHub issue 中发现 Tuya 从 2020 年开始大规模推广新的产品线——物理规格和引脚与 ESP 相同但内部是基于 Beken BK7231 系列 ARM SoC 的模块。搜索这个模块上印着的型号 “WB3S” 后可以确认它也是。
而这类不使用 ESP 的模块也就无法刷 Tasmota 等第三方固件,由于缺乏文档,针对 BK7231 系列的研究也进展缓慢,目前最成功的也只实现了部分 MQTT 功能,而且开发流程看着挺麻烦。
Beken 官方开源的 SDK 支持 AliOS Things,似乎环境稍微好些(但我也不想去碰
既然不是 ESP,那就只好把它变成 ESP。由于模块的物理规格和引脚与 ESP12 系列完全一致,可以把它拆下来然后换上真的。
解焊时还是得用热风枪,烙铁+刀片撬的后果就是不小心把几个焊盘扯下来了:
拆掉 Wi-Fi 模块后开始研究电路,控制器 PCB 背面全貌:
右上角最大的 IC “YL1621” 是显示屏 LCD 驱动,右下角 “SC05B” 是触摸按钮驱动。
温控器的主要功能由中间的 “ME32S003K6T6” (ARM) MCU 实现,和 Wi-Fi 模块间通过 UART 通讯。
右下方有一颗 “ACE1117H” 稳压器,给温控器连上电源后量一下可以发现与排线有连接的 Vin 脚上有 +12 V,可以将此处作为调试时的电源输入。
另外由于掉了几个焊盘,需要找一下合适的焊接位置准备飞线。
软件
期间发现了 ESPHome 这个十分优雅的东西,试用后一瞬抛弃了 Tasmota。
根据 klausahrenberg/WThermostatBeca,Wi-Fi 模块与主控间通过串口进行某种协议的通讯,这类主控在 ESPHome 中被称为 Tuya MCU
。
焊上需要的线后,准备一片 ESP-12F,刷上 ESPHome 固件之后与控制器连接(由于 Vcc 焊盘也略受损比较脆弱,模块暂时使用独立供电),开始测试。
根据 klausahrenberg/WThermostatBeca 提供的参数,这款温控器的 datapoint 映射为:
datapoint | 类型 | 数据 |
---|---|---|
1 | switch | 电源状态 |
2 | int | 设定温度 |
3 | int | 实际温度 |
4 | enum | 定时模式 |
5 | switch | 节能模式 |
6 | switch | 锁定状态 |
102 | enum | 空调模式(0:制冷,1:制热,2:通风) |
103 | enum | 风扇模式(0:自动,1:高,2:中,3:低) |
104 | raw | 定时参数(ESPHome 暂不支持) |
据此设置 ESPHome Tuya Climate 组件所需的参数 switch_datapoint
、target_temperature_datapoint
、current_temperature_datapoint
;另外根据温度数据系数为 2.0(Tuya MCU 通讯协议只支持整数类型,如 51
实际表示 25.5 ℃
),将 temperature_multiplier
设为 0.5
。配置示例:
substitutions:
device_name: '空调温控器'
esphome:
name: thermostat
comment: '空调温控器'
esp8266:
board: esp12e
restore_from_flash: false
preferences:
flash_write_interval: 24h
logger:
level: WARN
baud_rate: 0 # 禁用默认 UART 端口日志,以避免占用
wifi:
fast_connect: true
networks:
- ssid: !secret wifi_ssid
bssid: !secret wifi_bssid
password: !secret wifi_password
domain: !secret domain_name
api:
ota:
password: !secret ota_password
button:
# 硬重启
- platform: restart
id: restart_button
name: '重启 ${device_name}'
entity_category: diagnostic
# 从 HASS 获取时间
time:
- platform: homeassistant
id: hass_time
timezone: Europe/Madrid # 修改时区
# 用 UART0 与 tuya MCU 通信
uart:
tx_pin: 1
rx_pin: 3
baud_rate: 9600
# 启用 tuya MCU 组件
tuya:
time_id: hass_time # 使用 HASS 的时间
climate:
- platform: tuya
id: hvac
name: '空调'
supports_heat: true
supports_cool: true
switch_datapoint: 1
target_temperature_datapoint: 2
current_temperature_datapoint: 3
temperature_multiplier: 0.5
eco_datapoint: 5
visual:
min_temperature: 5.0
max_temperature: 35.0
temperature_step: 0.5
给控制器通电后可以看到 ESPHome 日志成功输出 Tuya MCU 通讯信息:
Home Assistant 随后会提示已自动发现新的 ESPHome 设备,绑定后可以直接添加一个温控器卡片到 lovelace:
测试各项功能正常后给另一片 ESP-12F 刷上固件后焊到控制器上,然后给位于受损焊盘的几个引脚飞线,GPIO15 为了省事直接在模块上焊一个下拉电阻省去飞线。最后完成效果如图:
0 Comments