找回密码
 立即注册

微信扫码登录

搜索
查看: 1288|回复: 18

[进阶教程] 【开源】¥30 的 ESP32 顶替原厂模块,松下新风(全热交换器)全本地接入 HA + HomeKit

[复制链接]

1

主题

10

回帖

210

积分

论坛技术达人

积分
210
金钱
194
HASS币
20
发表于 2026-6-29 04:42:48 | 显示全部楼层 |阅读模式
本帖最后由 ShadowZZP 于 2026-6-29 05:25 编辑

一句话: 把松下新风(全热交换器 / ERV)的原厂 Wi-Fi 模块拆了,换上一块 ~¥30 的 ESP32(跑 ESPHome),逆向了它跟主板之间那条私有串口 CN12,现在完全本地接进 Home Assistant 和苹果 HomeKit:开关、模式、风速,状态双向同步。不碰松下云、不用 App,也不需要 RS485 模块 + Modbus 网关。

demo.gif
松下这些新风,原厂想远程控制只有两条路:① Wi-Fi 模块 + 松下 App + 云;② RS485 模块,接进楼宇 / Modbus 系统。这两个模块都插在主板上同一个 4 针小口——丝印 CN12。所以只要能讲这个口的“话”,就能把模块整个拔掉,直接跟机器对话。问题是这协议没有任何公开文档,于是我拿逻辑分析仪把它啃了出来,做成了一个 ESPHome 组件。
本帖前半是怎么上手(想直接用看这就够);后半是协议 + 逆向细节(想给别的型号 DIY、或纯好奇的往下翻)。
✨ 能实现什么
  • 开关、模式(热交换 / 内循环 / 外循环)、风速(1 / 2 / 3)
  • 状态双向:在墙面板上改,HA 里约 1 秒就跟上
  • 原生 HomeKit:在苹果家庭里就是一个带三档风速 + 模式预设的风扇
  • 能封盖里长期跑:OTA 远程升级、safe-mode 远程恢复、命令去抖(防 HomeKit 滑杆把慢总线刷爆)
💸 为什么这套最划算[td]
方案
额外硬件
能控什么
智能继电器(Shelly / Z-Wave)一两个继电器只有开关 + 增压
RS485 模块 + Modbus/TCP 网关(如有人 USR)原厂模块 + 一个网关功能全,但多两个盒子
本方案(CN12 + ESPHome)就一块 ~¥30 的 ESP32原生全控 开关 / 模式 / 风速
CN12 两根数据线在主板侧都是 3.3V,ESP 直连即可,不用电平转换。
🛒 需要什么(全部物料)
  • 1 块 ESP32-S3 开发板(~¥30,示例用 esp32-s3-devkitc-1)
  • 几根杜邦线(母对母最好插)
  • 一根 USB 线(只第一次烧录用)
  • 一台装了 ESPHome 的电脑(或直接用 HA 的 ESPHome 加载项)
没了。不要松下模块、不要网关、不要账号订阅。
home-assistant.jpg
🧪 兼容哪些机型
我在 FY-25ZDP1C(家用薄型)上端到端实测通过。原厂同一个模块覆盖一大票松下 FY-* 新风,所以下面这些理论上都能用(只有 FY-25ZDP1C 真机测过,其余按“理论可用、未实测”看待;不同机型可选模式略有差异):
[td]
类别
机型
家用薄型FY-15ZDP1C、FY-25ZDP1C ✅、FY-35ZDP1C、FY-50ZDP1C、FY-15/25/35/50GZD1、FY-RZ18/28/38DP1
家用薄型·寒冷地FY-15/25/35ZDP1CX
直流马达FY-15/25/35ZJD2C、FY-15/25/35GZJP2、FY-15/25/35ZJP2C
商用FY-15/25/35/50/65/80ZY1C、FY-1KZY1C、FY-1HZY1C、FY-2KZY1C
柜式FY-50ZR1C、FY-70ZR1C
📦 手把手安装(小白细看) 工程附件_esphome-panasonic-erv.zip (23.62 KB, 下载次数: 12)
第 0 步 · 装 ESPHome(二选一):
  • 图形界面(推荐小白):Home Assistant → 加载项商店,装 “ESPHome Device Builder”,之后全程网页点点点。
  • 命令行:电脑装好 Python,运行 pip install esphome。
另外,国内的 ESP32 板子接电脑可能认不出串口,要先装 USB 转串口驱动:板上芯片是 CH340 就装 CH340 驱动、是 CP2102 就装 CP2102 驱动(Windows 必装;Linux/Mac 一般免驱)。ESP32-S3 用板载 USB 口的话通常免驱。
第 1 步 · 拿文件:解压本帖附件,得到 panasonic-erv.yaml(设备配置)和 secrets.yaml.example(密钥模板)。
第 2 步 · 填 WiFi 账号密码(最关键的一步!)
设备要连你家 WiFi。账号密码这些敏感信息单独放在一个叫 secrets.yaml 的文件里,配置文件用 !secret xxx 去引用它(好处:配置能公开分享,密码不外泄)。做法:
  • 把 secrets.yaml.example 复制一份、改名成 secrets.yaml,跟 panasonic-erv.yaml 放同一个文件夹
  • 用文本编辑器打开 secrets.yaml,改成你自己的:
wifi_ssid: "你家WiFi名字"wifi_password: "你家WiFi密码"fallback_ap_password: "随便设个8位以上的密码"   # 连不上WiFi时设备会自己开热点,用这个密码panasonic_erv_api_key: "填下面生成的第1串"panasonic_erv_ota_password: "填下面生成的第2串"
最后两个密钥要生成——终端里把这条运行两次,各复制一串(每串 43 位、末尾带 = 的乱码):
openssl rand -base64 32
(Windows 没 openssl 的话:用 ESPHome 图形界面新建设备时,API key 会自动生成;OTA 密码随便敲一长串字母数字也行。)
提示:配置里那行 external_components: github://... 会在编译时自动联网拉取组件代码,你不用手动下载。如果你接的引脚跟下面不一样,在 panasonic-erv.yaml 里把 rx_pin / tx_pin 改成你接的脚即可。
第 3 步 · 接线(先给新风断电、拔掉原厂模块。两根线都是 3.3V,直连,不用电平转换):
  松下新风主板 CN12              ESP32-S3  +---------------+           +--------------+  | 线A(主板TX)--+---------->| GPIO18 (rx)  |  | 线B(主板RX)<-+-----------| GPIO17 (tx)  |  | GND ----------+-----------| GND          |  | 5V -----------+--(可选)-->| 5V (排针)    |  +---------------+           +--------------+
⚠️ 原厂模块和 ESP 绝不能同时插在 CN12 上。 调试期可只接线A(只读旁听)。正式装可从 CN12 取 5V 喂 ESP 的 5V 排针(就是原厂模块用的同一条轨),省掉 USB 线。
第 4 步 · 烧录
  • 第一次必须用 USB 线刷。 命令行:esphome run panasonic-erv.yaml --device /dev/ttyACM0(Linux 板载USB口一般是 ttyACM0;CH340 芯片是 /dev/ttyUSB0;Windows 是 COM3 这种,在“设备管理器→端口”里看)。图形界面:把配置贴进新建的设备,点“安装 → 通过 USB(Plug into this computer)”。
  • 之后改配置都走 WiFi 空中刷(OTA),不用再插线、不用开盖:esphome run panasonic-erv.yaml --device 设备IP(IP 在路由器后台看,或首刷成功后日志里会打印)。
第 5 步 · 上电接管:把 ESP 接到新风 CN12、上电。示例默认 tx_enable_at_boot: true,开机自动注册,面板 F02 消失 = 接管成功。
第 6 步 · 进 Home Assistant:设备联网后,HA 会自动发现这个 ESPHome 设备(设置 → 设备与服务,会有“发现”提示),点添加、把 secrets.yaml 里那串 panasonic_erv_api_key 粘进去即可,马上出现 开关 / 模式 / 风速 实体。
第 7 步 · 接 HomeKit:把附件里的 panasonic_erv.yaml 拷到 HA 的 config/packages/ 目录(文件名一定保留下划线——带连字符 HA 会静默忽略,这是个坑),configuration.yaml 里加上:
homeassistant:  packages: !include_dir_named packages
重载一下,它会把开关 + 两个选择器合成一个 fan.panasonic_erv,经 HomeKit Bridge 变成苹果家庭里带三档风速 + 模式预设的风扇。
🎛️ 装好后 HA 里有哪些
  • switch.panasonic_erv_power —— 开关
  • select.panasonic_erv_mode —— 模式(热交换 / 内循环 / 外循环)
  • select.panasonic_erv_fan —— 风速(1 / 2 / 3)
  • fan.panasonic_erv —— 合成的统一风扇(给 HomeKit)
  • 一堆诊断/配置实体:TX 总闸、自动保活、远程重启、Safe Mode 恢复、Send Registration(重发注册)、Raw TX(注入任意帧)、校验基值、WiFi 信号、运行时长、收发帧计数
    install.jpg
🛠️ 常见问题
  • 面板报 F02:主板没看到已注册的模块。确认 tx_enable_at_boot: true、原厂模块已拔、TX/RX 没接反;按一下 Send Registration
  • 关机状态下改风速/模式没反应:正常,主板关机时不接受这俩。先开机(HomeKit 那个风扇会自动先开机)。
  • 总线上收不到状态:确认共地,且 rx_pin 接在线A(主板 TX)。
  • 连发很多命令后面板白屏:瞬态,断电重来或按面板键即可;固件里的命令去抖就是防这个的。

⬆️ 到这儿,想直接用已经够了。⬇️ 下面是协议 + 逆向细节,想给别的型号 DIY、或者纯好奇的往下看。

🔍 工作原理
原厂模块和主板在 CN12 上以 A5 A5 5A 5A 帧头、9600 8N1 通信。本组件顶替模块的位置、扮演它:
  • 注册:开机重放模块的上电握手,再用 ~2s 一次的轮询 + ~6s 一次的心跳保活。不这么做面板报 F02。
  • 读状态:解析主板的状态帧(03 0B … RUN MODE FAN),所以墙面板上的改动也同步到 HA。
  • 发命令:构造带正确校验的 66 字节命令帧(02 0B),掩码写——只改一个字段不动其它。
🔬 逆向实录
没有文档,全靠逻辑分析仪一点点抠:
1. 找总线。 拔了原厂模块,面板报 F02(设备连接异常)——说明模块↔主板这条线就是控制命脉,CN12 就是它。主板那根发送线 3.3V,可只接收、旁听,安全。
2. 定帧。 先量准位宽再信解码(我一开始波特率搞错,采到一堆“像样的乱码”白忙)。量准 = 9600 8N1,每帧 A5 A5 5A 5A 开头,后跟 2 字节字段 + 2 字节报文类型 + 负载。
3. 认报文。 盯稳态流量分帧:主板每 ~2s 发状态帧(03 0B);模块发轮询(01 0B)、保活(EC 03);上电有注册握手;主板周期发 hello;模块还推网络对时帧。照节奏回放,F02 才消。
4. 认字段。 按面板开关/模式/风速,盯哪个字节变,定位出负载里的 RUN/MODE/FAN。命令是掩码写:FF=不改该字段。
5. 破校验(最难)。 命令里有个 16 位字段,踩两坑:① 以为跟松下空调(CN-CNT)一样“全字节和为零”,不对;② 这字段每次开机都变、同条命令三次抓包全不同,像没法复现的 nonce。顿悟:总线上有两个这种字段——每次开机变的是“主板状态帧”自己的序列号,只读、无视;真正的“命令校验”是确定性的。最后一坑:早期抓包截断了,抓全 66 字节后公式蹦出:
命令校验 = (Σ负载 + 0xC0BA) & 0xFFFF   小端
三条抓包全对上。手搓一条开机命令发出去,机器当场启动——成了。
reverse-engineering.jpg
📡 CN12 协议规格
物理层:9600 8N1,无校验位。两根单向线(全双工):线A=主板 TX(空闲 ≈3.4V→主板 3.3V 逻辑);线B=模块 TX(空闲 ≈4.8V→原厂模块 5V)。拔模块后线B 只是主板 RX 输入,吃 3.3V 没问题,所以 ESP 直连。
帧格式:A5 A5 5A 5A | b5 b6 | op obj | 负载…(前导码 / 序列或校验 / 报文类型 / 负载)。命令帧与状态帧都是 66 字节
报文类型:
[td]
op obj
方向
含义
负载(示例)
03 0B主板→模块状态上报36 00 00 00 [RUN][MODE][FAN] …
02 0B模块→主板命令(设置)同上,FF=不改
01 0B模块→主板轮询/保活00 00 00 00
04 0B模块→主板注册(报到)
05 0B主板→模块注册(应答)02 00 00 00 02 02
EC 03模块→主板模块周期帧
EE 03模块→主板网络对时年/秒/分/时/周/日/月
ED 03主板→模块hello9D C1 ED 03 …
状态/命令字段(负载 36 00 00 00 [RUN][MODE][FAN]):RUN 00关/01开;MODE 00热交换/02内循环/05外循环;FAN 01弱/02中/03强。命令掩码写,FF=不改。
注:0x05 随机型不同——家用薄型(○)是外循环,寒冷地(△)是严寒模式,商用(□)则是普通(0x01)。本组件按家用薄型实现。
稳态节奏:轮询 B9 C0 01 0B … /2s、A4 C1 EC 03 … /6s、网络对时 /30s。主板每 ~2s 回一帧状态。主板还每 ~30s 发 hello 9D C1 ED 03(正常期一分钟 8~10 次,不是掉线)。
📋 官方 Modbus 寄存器表(来自 RS485 模块说明书,交叉参考)
RS485 模块跟 Wi-Fi 模块是同一条 CN12 上的兄弟,它把这些寄存器对外暴露成 Modbus。本项目走 CN12 原始协议、不走 Modbus,但这表是“硬件还能干啥”的好参考(热交换 0x00、内循环 0x02、风速 1/2/3 都与 CN12 抓包对得上)。
控制寄存器(读写):
地址
功能
R/W
取值
0x0001运转状态(开关)R/W0关 / 1开
0x0002运转模式R/W0热交换 / 1普通 / 2内循环 / 5外循环(○)或严寒(△)
0x0003风量R/W1弱 / 2中 / 3强
0x000EOA 滤网更换周期R/W60/90/120/150/180 日
0x0011–0x0013定时开 / 取消 / 定时关R/W时 0–23、分 0–59,0x7F无效
0x0014–0x0017网络时间(年/秒/分时/周日月)W0xFF/0xFFFF=跳过
监视寄存器(只读):
地址
功能
取值
0x0004运转模式状态热交换 / 内循环 / 严寒
0x0005风量状态停 / 弱 / 中 / 强
0x0007RA 湿度0–100%
0x0008OA / RA 温度−30 ~ +50 ℃
0x0009寒冷地控制状态无 / 防结露 / 防结冰
0x000B / 0x000DOA 滤网清扫 / 更换剩余0–720h / 0–2880h
0x000F异常状态电机 / 本体回路 / 传感器 / 风阀等故障码
(适用范围随机型不同,说明书用 △寒冷地薄型 / ○家用薄型 / □商用 标注。家用薄型主要是开关/模式/风速这块;温湿度、故障寄存器多属更大机型。)
⚡ 一点工程细节
  • 滑杆洪水:拖 HomeKit 风速滑杆会瞬间打一串命令,固件合并只发最终值,慢总线和面板不受罪。
  • 省流同步:ESPHome 的 select 不去重,直接轮询会狂刷 HA;这里改成乐观 + 仅变化时推送,空闲几乎零流量、墙面板改动 ~1s 同步、还不闪。日志默认 INFO,逐帧 hex 编译期裁掉,封盖设备需要时翻 DEBUG 再 OTA 也能远程深挖。

📁 更多代码 / 接线图 / 协议文档/ HA package / 解码工具:在 GitHub —— https://github.com/ShadowZZP/esphome-panasonic-erv

开源(MIT),欢迎反馈、提问、PR。要是帮你省了事,点个赞 / star 都行。有问题楼下问我 🙌

评分

参与人数 6金钱 +87 HASS币 +20 收起 理由
chenquanhao + 12 论坛有你更精彩!
花落花空 + 20 高手,这是高手!
jensun + 5 高手,这是高手!
admin + 20 + 20 牛而逼之!
adamjensen + 10 感谢楼主分享!
sorrypqa + 20 感谢楼主分享!

查看全部评分

回复

使用道具 举报

0

主题

11

回帖

94

积分

注册会员

积分
94
金钱
83
HASS币
0
发表于 2026-6-29 10:00:06 | 显示全部楼层
直接分析协议,牛X
回复

使用道具 举报

17

主题

637

回帖

3687

积分

论坛元老

积分
3687
金钱
3033
HASS币
0
发表于 2026-6-29 10:22:13 | 显示全部楼层
大佬牛批中的牛批
回复

使用道具 举报

200

主题

3257

回帖

1万

积分

元老级技术达人

积分
10752
金钱
7280
HASS币
80
发表于 2026-6-29 10:54:38 | 显示全部楼层
这样的思路,是不是很多电器都可以这样操作了,
回复

使用道具 举报

0

主题

34

回帖

287

积分

中级会员

积分
287
金钱
253
HASS币
0
发表于 2026-6-29 11:20:14 | 显示全部楼层
全干货,先点赞再细看。
回复

使用道具 举报

7

主题

378

回帖

1442

积分

金牌会员

积分
1442
金钱
1057
HASS币
0
发表于 2026-6-29 22:14:42 | 显示全部楼层
手搓大佬啊
回复

使用道具 举报

24

主题

93

回帖

1067

积分

论坛分享达人

积分
1067
金钱
950
HASS币
10
发表于 2026-6-29 22:14:44 | 显示全部楼层
这个很干,点赞学习
回复

使用道具 举报

7

主题

411

回帖

3174

积分

论坛元老

积分
3174
金钱
2756
HASS币
0
发表于 2026-6-30 17:46:42 | 显示全部楼层
这个学习不来,牛
回复

使用道具 举报

1

主题

10

回帖

210

积分

论坛技术达人

积分
210
金钱
194
HASS币
20
 楼主| 发表于 2026-7-1 09:42:00 来自手机 | 显示全部楼层
如果有什么问题和反馈欢迎评论 如果你的型号可以用 麻烦反馈下我会标注进文档 帮助更多人
回复

使用道具 举报

1

主题

10

回帖

210

积分

论坛技术达人

积分
210
金钱
194
HASS币
20
 楼主| 发表于 2026-7-2 08:20:38 | 显示全部楼层
bugensui 发表于 2026-6-29 10:54
这样的思路,是不是很多电器都可以这样操作了,

对的,这套路的通用性比想象的大。很多家电的"智能模块"本质就是插在主板串口上的一块小板,主板和模块之间就是裸 UART,顶多帧格式各家自定义。满足两个条
件基本都能干:①模块是选配件(说明拔了它机器也照跑,协议自洽,甚至很多些内部也有通信不需要带选购模块);②总线没加密(家电里我还没见过加密的,顶多一个校验和)。
流程无非:拆开找模块插座 → USB 转串口/逻辑分析仪旁听(先只接主板 TX 那根,只读不发,绝对安全)→ 对着面板按键看哪个字节变 → ESP32
照着回放。松下空调那个 CN-CNT 口早有人做成熟了。像壁挂炉/热水器的 WiFi 棒、净水器、电动晾衣架这类"模块选配"的,理论上都是同一个配方。
唯一要留神的是电压:主板侧不一定是 3.3V,先拿万用表量一下再接防止烧掉
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian ( 晋ICP备17001384号-1 )|网站地图

GMT+8, 2026-7-17 18:03 , Processed in 0.330441 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表