Skip to content

About

VRF 中央空调网关 Home Assistant 集成:串口(USB/RS232)/TCP/UDP 直连,自动发现内机并生成空调实体,支持中弘/德姆瑞/硕创

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

VRF 中央空调网关(Home Assistant 自定义集成)

HACS Custom Home Assistant License: MIT

用 USB-RS485 转换器(或 RS232 串口 / 局域网 TCP、UDP 透传模块)直连 VRF 中央空调室外机, Home Assistant 自动发现每一台内机,并为每台内机生成一个可控制的空调实体。

  • 无需 ESPHome、无需中间网关固件,Home Assistant 主机直连 485 总线
  • 支持 中弘 / 德姆瑞 / 硕创 三套协议,可「自动探测」
  • 一台网关 = 一个配置项 = 一台 VRF;可同时添加多台、多品牌
  • 每台内机一个独立实体,唯一 ID 稳定,不会重复生成
  • 支持重新配置、删除/恢复不需要的内机实体
  • 总线通信在工作线程完成,不阻塞 Home Assistant 事件循环,长期运行不占 CPU、不写硬盘

目录


功能特性

能力 说明
串口连接 USB-RS485 转换器、主板 RS232(/dev/ttyUSB*、/dev/ttyS*)
网络连接 局域网 TCP / UDP 串口透传模块
自动发现 上电后自动扫描内机列表,新接入的内机也会自动出现
实体 每台内机一个 climate 实体,含模式 / 风速 / 目标温度 / 室温
多网关 可同时添加任意数量的 VRF 网关,互不干扰
实体管理 可禁用、删除、恢复单个内机实体;可自动清理掉线内机
稳定性 通信在独立工作线程;断线自动重连;不做任何本地磁盘写入

支持的品牌与协议

品牌(协议) 帧格式 校验 备注
中弘 [地址][功能码][功能值][数量][记录…][校验和] 字节和低 8 位 使用「外机地址 + 内机地址」复合地址
德姆瑞 固定 10 字节 字节和低 8 位 内机列表为 32 位位图
硕创 固定 12 字节 Modbus CRC16 查询内机数量 + 单台参数

配置向导里选择「自动探测」即可:集成会依次尝试三种协议的发现报文,识别成功后锁定该协议。 也可以手工指定品牌,跳过探测过程。


硬件与接线

USB-RS485 直连(最常见)

VRF 室外机 / 网关            USB-RS485 转换器           Home Assistant 主机
   A  ────────────────────────  A
   B  ────────────────────────  B
   GND ───────────────────────  GND
                                    USB ──────────────────  USB 口
  1. 选一个自动收发方向的 USB-RS485 转换器(推荐带光耦隔离、5V 供电);
  2. 转换器插入 Home Assistant 主机(HA OS 用 USB 扩展口,Docker 需映射 /dev/ttyUSB0);
  3. A/B 两根线接室外机的 485 端子,A/B 接反只会不通讯,不会损坏设备;
  4. 确认主机上出现 /dev/ttyUSB0(Linux)或 /dev/tty.usbserial-*(macOS)。

RS232 直连

部分 VRF 网关提供 RS232 接口,按网关手册接线即可,配置时把串口设备改成 /dev/ttyS0 等。

实测要点(现场踩坑)

  • 串口必须是 8N1(1 个停止位)。改成 2 个停止位后,设备会完全不应答,表现为「添加成功但一台内机都没有」。配置向导里已提供「停止位」选项,默认 1。
  • 这类网关连续收帧会锁死:短时间内密集发几帧后,它就不再回包,需要断电重启网关恢复。因此集成每轮只查一台内机,并在连续失败时自动冷却 15 秒。
  • 485 线路偶发丢字节,回包可能被截断;集成会丢弃残帧并重试,不会把半截数据当成状态。
  • 中弘网关执行指令后约 2 秒才更新状态,期间不做回读,避免界面被旧值覆盖。

局域网 TCP / UDP 透传

把「串口转网络模块」接在 485 总线上(模块的 RS485 端接 A/B,模块网口接交换机), 然后在配置向导里选择 TCP 或 UDP 并填写模块 IP 与端口。

权限

Linux 下串口通常属于 dialout 组:

sudo usermod -aG dialout homeassistant
# 重新登录或重启 HA 生效

Docker 部署时记得把设备映射进去:

services:
  - name: homeassistant
    image: ghcr.io/home-assistant/home-assistant:stable
    devices:
      - /dev/ttyUSB0:/dev/ttyUSB0
    volumes:
      - ./config:/config

安装

HACS(推荐)

  1. HACS → 右上角菜单 → 自定义仓库;
  2. 仓库地址填 https://github.com/symi-daguo/ha-vrf-bridge,类别选 集成;
  3. 下载 VRF 中央空调网关;
  4. 重启 Home Assistant。

手动安装

把 custom_components/vrf_bridge 整个目录复制到 Home Assistant 的 config/custom_components/ 下,然后重启。


添加网关(配置向导)

设置 → 设备与服务 → 添加集成 → 搜索「VRF 中央空调网关」,按向导操作:

  1. 选择连接方式
    • 串口(USB / RS232):转换器直插主机
    • TCP(局域网) / UDP(局域网):串口转网络模块
  2. 填写参数
    • 品牌:不确定就选「自动探测」
    • 串口设备:/dev/ttyUSB0 等(下拉框里是本机实际检测到的串口,也可手动输入)
    • 波特率:与网关通讯参数一致,中弘/德姆瑞/硕创常见 9600
    • 从机地址:网关在总线上的地址,多数为 1
    • TCP/UDP 还需填写 主机地址 与 端口
  3. 集成会立即发一条发现报文验证链路。能连通但暂时没有内机也不会报错,网关稍后通电或 线路接好后会自己出现内机实体。

添加成功后,集成会自动扫描内机,每台内机生成一个实体,例如:

climate.vrf_zhong_hong_dev_ttyusb0_nei_ji_1    内机 1(制冷 24℃)
climate.vrf_zhong_hong_dev_ttyusb0_nei_ji_2    内机 2

(实体 ID 由「设备名 + 实体名」生成,实际以 Home Assistant 中显示的为准。)


连接方式详解

方式 适用场景 填写内容 说明
串口 USB-RS485 / RS232 直连主机 串口路径、波特率 最稳定,推荐
TCP 串口转网络模块 主机 IP、端口 长连接,延迟略高
UDP 串口转网络模块 主机 IP、端口 无连接,丢包时自动重试下一轮

三种方式的协议层完全一致,切换连接方式只需在「重新配置」里改一次。


实体说明

每个内机对应一个 climate 实体:

属性 说明
状态 关机 / 制冷 / 制热 / 除湿 / 送风
当前温度 内机室温(协议不上报时留空)
目标温度 16 – 30 ℃,步长 1 ℃
风速 自动 / 低 / 中 / 高
开关机 支持 climate.turn_on / climate.turn_off;开机自动恢复上次使用的模式

不会出现重复实体:实体唯一 ID 由「配置项 ID + 外机地址 + 内机地址」组成, 同一台内机重复扫描只更新状态,不会新建实体。

实体管理(三种方式,按需选择):

  1. 禁用/删除单个实体:在实体卡片上点「⋯」→「禁用」或「删除」,Home Assistant 原生能力;
  2. 服务移除:vrf_bridge.remove_unit 会删除实体并把该内机加入忽略列表,之后不会再自动生成;
  3. 服务恢复:vrf_bridge.restore_unit 取消忽略,下次扫描重新生成实体。

选项说明

在「设备与服务 → VRF 中央空调网关 → 配置」中可调整:

选项 默认 说明
轮询间隔 2 秒 每轮读取一台内机状态的间隔。VRF 网关连续收帧会锁死(彻底不应答),所以刻意放慢、每轮只查一台
重新发现内机的间隔 60 秒 扫描内机列表的间隔,新接入的内机最多等这么久就会出现
允许制热 是 关闭后不提供制热模式,制热请求会被降级为制冷(部分工程机只支持制冷)
自动清理已下线的内机 否 开启后,内机连续两次扫描不再上报时自动移除其实体

服务说明

服务 参数 作用
vrf_bridge.rescan 可选 device_id 立即重新扫描内机(不等待下一个发现周期)
vrf_bridge.remove_unit 必填 address,可选 device_id 移除指定地址内机的实体,并加入忽略列表
vrf_bridge.restore_unit 必填 address,可选 device_id 恢复被移除的内机实体

在「开发者工具 → 动作」里可以直接调用,例如:

action: vrf_bridge.rescan
target:
  device_id: <VRF 网关设备 ID>
action: vrf_bridge.remove_unit
data:
  address: 3

多网关 / 多品牌

  • 每台 VRF 对应一个配置项,在「设备与服务」里可以重复添加多台;
  • 不同网关的实体唯一 ID 含各自的配置项 ID,不会互相覆盖或重复;
  • 不同品牌可以共存:中弘走串口、德姆瑞走 TCP、硕创走 UDP 都可以,各自独立轮询;
  • 每条总线各自占用一个连接,互不干扰。

常见问题排查

添加时提示「无法打开该链路」

  • 串口路径不对:用 ls /dev/ttyUSB* /dev/ttyS* 或 dmesg | tail 确认设备名;
  • 权限不足:把 HA 用户加入 dialout 组;
  • 端口被占用:其它程序(串口助手、Modbus 工具)占用了同一端口;
  • Docker 部署未映射设备。

能添加但一直没有内机

  • A/B 是否接反(接反只会不通讯);
  • 波特率、从机地址是否与网关一致;
  • 485 总线是否需要终端电阻(长线两端各一个 120Ω);
  • 部分中弘机型需要在网关 Web 后台把「RS485 校验」改为「无校验」;
  • 用「自动探测」再试一次,或手工指定品牌。

内机状态不刷新

  • 检查轮询间隔是否过大;
  • 总线冲突:同一总线上不能有两个主站同时发报文,集成已保证单线程串行发送;
  • 部分机型在内机控制后 2 秒内不响应查询,属于设备特性,状态会在下一轮补齐。

日志里出现「VRF 总线异常,将重连」

  • 链路被拔断或设备重启,集成会自动重连;
  • 若持续出现,检查接线与供电。

开发与测试

# 单元测试(协议编解码 + 总线收发,使用内置模拟器)
python -m pytest tests -v

# 代码检查
ruff check .
ruff format --check .
mypy custom_components/vrf_bridge

测试不需要真实设备:tests/support/simulator/ 内置了三套设备端模拟器, 用伪终端(PTY)与总线通信做端到端对拍,覆盖发现、查询、控制、噪声与分片报文。


已知边界

  • 只支持 VRF 室外机/网关的 485 透传协议,不支持厂家云端或私有 App 协议;
  • 室温依赖设备上报,未上报时该属性为空;
  • 目标温度范围按设备常用区间限制为 16–30 ℃;
  • 中弘协议的「外机地址 + 内机地址」复合地址已支持,同一内机地址挂多台外机不会冲突;
  • 内机掉线后实体不会自动变为「不可用」,可通过开启「自动清理已下线的内机」让其消失。

许可证

MIT

About

VRF 中央空调网关 Home Assistant 集成:串口(USB/RS232)/TCP/UDP 直连,自动发现内机并生成空调实体,支持中弘/德姆瑞/硕创

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages