jawtech123/Home-assistant-AC-Infinity-ESP32-CC1101-
GitHub: jawtech123/Home-assistant-AC-Infinity-ESP32-CC1101-
利用 ESP32 和 CC1101 逆向 AC Infinity 风扇的 433MHz 遥控协议,通过 MQTT 将风扇接入 Home Assistant 实现原生控制和自动化。
Stars: 1 | Forks: 0
# AC Infinity 风扇 → Home Assistant (ESP32 + CC1101)
使用 ESP32 和 CC1101 无线模块从 Home Assistant 控制 AC Infinity 433 MHz 风扇。遥控器的协议是完全从零开始逆向工程得出的。
Home Assistant 会获得一个**原生的 OFF/1–10 下拉菜单**,以及一个用于语音和自动化的标准风扇实体。无需自定义组件,无需 YAML。
## 功能说明
- 完全替代手持遥控器 —— 可直接设置任意风速,无需逐步调节
- 通过 MQTT discovery 自动创建的原生 HA 风扇实体
- 两个实体:一个简洁的 OFF/1-10 下拉菜单,以及一个用于语音和自动化的标准风扇实体
- 兼容自动化、场景、仪表盘和语音控制
- 完整的协议文档,方便你将其移植到任何平台
## 硬件说明
只需一块 ESP32 开发板和一个 CC1101 433 MHz 模块。仅此而已。
| CC1101 | ESP32 |
|---|---|
| VCC | 3V3 — **仅限 3.3 V,5 V 会损坏 CC1101** |
| GND | GND |
| GDO0 | GPIO4 |
| CSN | GPIO5 |
| SCK | GPIO18 |
| MISO | GPIO19 |
| MOSI | GPIO23 |
| GDO2 | 不连接 |
需要连接天线 —— 在 433 MHz 频率下,17.3 厘米的导线即可正常工作。
## 快速开始
```
git clone https://github.com/jawtech123/Home-assistant-AC-Infinity-ESP32-CC1101-
cd Home-assistant-AC-Infinity-ESP32-CC1101-/fan_remote_ha
cp config.h.example config.h # add your WiFi + MQTT details
```
如果你还没有安装,请在 Home Assistant 中安装 **Mosquitto broker** 插件
(*Settings → Add-ons → Add-on Store*),然后烧录:
```
FQBN="esp32:esp32:esp32:PSRAM=disabled,PartitionScheme=default,FlashMode=dio"
arduino-cli compile --fqbn "$FQBN" --output-dir build .
arduino-cli upload -p /dev/ttyUSB0 --fqbn "$FQBN" --input-dir build .
```
风扇会出现在 *Settings → Devices & Services → MQTT* 下。完整说明
请见 [`fan_remote_ha/README.md`](fan_remote_ha/README.md)。
**库:** [PubSubClient](https://github.com/knolleary/pubsubclient) 和
[mfurga/cc1101](https://github.com/mfurga/cc1101)。
## 仓库结构
| 路径 | 用途 |
|---|---|
| `fan_remote_ha/` | **Home Assistant 桥接器** —— WiFi + MQTT。从这里开始 |
| `fan_remote/` | 独立发射器,由串口控制。适合测试 |
| `rx_packet/` | 接收器 —— 捕获并解码真实遥控器的信号 |
| `rx_capture/` | 硬件诊断(引脚/寄存器探测) |
| `tools/decode_capture.py` | 离线解码器。`--table`、`--selftest` 无需硬件即可运行 |
| `tools/monitor.py` | 串口日志记录器 |
| `captures/` | 推导协议所用的参考捕获记录 |
| [`AC_INFINITY_REMOTE_SPEC.md`](AC_INFINITY_REMOTE_SPEC.md) | **协议规范** —— 移植从这里开始 |
| [`protocol.md`](protocol.md) | 工作笔记,观察值与推导值对比 |
## 协议简述
| 属性 | 参数 |
|---|---|
| 频率 | 433.92 MHz |
| 调制 | **2-FSK**,约 35 kHz 频偏 |
| 比特率 | 4.8 kBaud |
| 编码 | PWM —— 固定 mark,可变 space |
| 数据帧 | 16 bits,MSB 优先,重复 8 次 |
| Payload | `[addr:4][speed:4][checksum:8]` |
| 安全性 | 无 —— 静态编码,完全可重放 |
checksum 是在 GF(2⁸) 中的乘法运算,而不是 CRC:
```
checksum(speed) = 0x43 ⊗ speed # poly 0x131, speeds 1-9
checksum(0) = 0xAC, checksum(10) = 0x82
```
完整细节(包括 DIP 开关的地址处理)请见
[`AC_INFINITY_REMOTE_SPEC.md`](AC_INFINITY_REMOTE_SPEC.md)。
### 编码表(地址 0)
| 风速 | Payload | | 风速 | Payload |
|---|---|---|---|---|
| OFF | `0x00AC` | | 6 | `0x06BB` |
| 1 | `0x0143` | | 7 | `0x07F8` |
| 2 | `0x0286` | | 8 | `0x087A` |
| 3 | `0x03C5` | | 9 | `0x0939` |
| 4 | `0x043D` | | MAX | `0x0A82` |
| 5 | `0x057E` | | | |
所有这十一个编码都在无线电波中观测到了。其中三个(`2`、`5`、`9`)在被捕获之前就已经通过 GF(2⁸) 规则*预测*出来了,随后得到了精确证实 —— 这让我们确信该规则是真实的算法,而不是简单的曲线拟合。
## 兼容性
本项目基于带有十个风速 LED 灯的单按键 AC Infinity 遥控器(CTR63A 类型)开发。其他 433 MHz 的 AC Infinity 遥控器很可能使用相同的协议,但尚未经过测试。
地址由遥控器的 DIP 开关设置;目前已捕获了 0、1、2、4、6 和 7。请查看规范了解地址规则及其一个已知的例外情况。
如果你在其他硬件上尝试此项目,欢迎提交 issue 或 PR 报告测试结果 —— 尤其是关于地址 3 或 5 的捕获记录。
## 已知限制
- **状态是乐观更新的。** 风扇不会返回任何反馈,因此桥接器报告的是其最后下发的风速。如果在 HA 下发下一条指令之前使用了物理遥控器,HA 的状态将会失去同步。
- **地址 7 打破了 checksum 规则**,属于根据测量值特殊处理的情况。
- **风速 0 不遵循任何已知的地址规则**,使用的是查表法。
- 地址 3 和 5 是预测出来的,未经实际测量。
## 安全提示
此协议没有滚动码、加密或身份验证。无线电覆盖范围内的任何人都可无限次记录并重放任何传输信号。
这在廉价的 433 MHz 家电遥控器中很常见,对风扇来说也没什么问题 —— 但如果涉及未经授权的控制会带来严重影响,请不要依赖它。
## 免责声明
本项目是在 AI 协助下构建的(协议分析、代码编写和文档撰写)。按“原样”提供,不提供任何保证。在将其烧录到你自己的硬件上之前,请先检查代码,并自行承担使用风险 —— 对于因使用此项目而导致的任何损坏、故障或其他后果,我不承担任何责任或义务。
## 许可证
GPL-3.0 —— 见 [LICENSE](LICENSE)。
本项目不附属于 AC Infinity,也未获得其认可。协议细节是通过对本人拥有的硬件发射的无线电信号进行观察而得出的,旨在实现互操作性。
如果这个项目为你节省了时间:
☕ **请我喝杯咖啡:** https://paypal.me/ESP32CC1101/5
标签:ESP32, Home Assistant, 云资产清单, 无线电控制, 智能家居, 物联网, 逆向工具, 逆向工程