VBus 组件
VBus 组件提供使用 VBus 协议与太阳能热能集热器控制器的状态读取连接。这些设备主要由 Resol 生产,
通常也以其他品牌名称销售,如 Viessmann、Kioto、Wagner 等。该组件目前原生支持下表中的型号,
但任何设备都可以通过 lambda 添加,只需了解其数据包结构。
下表显示了当前支持的 VBus 设备型号。
| 名称 | 配置值 | 十六进制地址 | 备注 |
|---|---|---|---|
| DeltaSol BS Plus | deltasol_bs_plus | 4221 | |
| DeltaSol BS 2009 | deltasol_bs_2009 | 427B | DeltaSol BS Plus V2 |
| DeltaSol BS/2 (DrainBack) | deltasol_bs2 | 4278 | |
| Dux H3214 | deltasol_bs_2009 | 427B | 不支持泵 2 |
| DeltaSol C | deltasol_c | 4212 | |
| DeltaSol CS2 | deltasol_cs2 | 1121 | |
| DeltaSol CS Plus | deltasol_cs_plus | 2211 |
配置值 应用于 sensor 和 binary_sensor 条目中的 model 参数。
十六进制地址 字段是设备在消息的 from 字段中发送的值。要识别未知型号,
请将日志级别设置为 VERBOSE,并在日志输出中查找类似以下的行:
[10:53:48][V][vbus:068]: P1 C0500 427b->0000: 0000 0000 (0)
-> 符号之前的值是设备源地址。如果它与上表中的某个条目匹配,
则该型号应该适用于您的设备。
设备必须通过支持接收线路的 UART 总线 连接。UART 总线必须配置为与模块相同的速度, 默认为 9600bps。控制器每秒输出一次数据。
要连接并从总线读取数据,需要进行电平转换,因为电压约为 8V(直接连接会损坏 MCU)。 对于我们只读的目的,使用如下电路将电平适当调整为 3.3V 即可:
使用光耦的电隔离版本:
另一种方法,带有可制造的 PCB 设计,可在此找到。
WARNING
请勿将模块的 GND 引脚与 Resol 设备的地线连接,否则可能损坏其输出端口。 设备的输出是对称的,这意味着信号不是以地为参考,而是两线之间的差分信号。 但是,MCU 以地为参考信号,因此两个地不应相互连接,如上图电路所示。
# 示例配置条目vbus: uart_id: resolWARNING
如果您使用 日志记录器,请确保不要为其使用相同的引脚,
或者使用 baud_rate: 0 选项禁用 UART 日志记录。
- uart_id (可选, ID): 手动指定用于连接设备的 UART 集线器 ID。
NOTE
传感器的功能取决于设备类型及其控制的液压系统方案布置。 实际设置的布置编号可以从设备的设置中确定。请查看用户手册并评估您的布置, 以确定每个传感器的功能并相应地命名。
# 示例配置条目sensor: - platform: vbus model: deltasol_bs_plus temperature_1: name: 温度 1 temperature_2: name: 温度 2 temperature_3: name: 温度 3 temperature_4: name: 温度 4 pump_speed_1: name: 泵速 1 pump_speed_2: name: 泵速 2 operating_hours_1: name: 运行小时 1 operating_hours_2: name: 运行小时 2 heat_quantity: name: 热量 time: name: 设备时间 version: name: 设备固件版本- model (必需): 指定连接控制器的型号。从上述支持型号表中选择一个配置值。
支持的传感器:
- 对于 deltasol_bs_plus 和 deltasol_bs_2009:
temperature_1、temperature_2、temperature_3、temperature_4、pump_speed_1、pump_speed_2、operating_hours_1、operating_hours_2、heat_quantity、time、version。 - 对于 deltasol_bs2:
temperature_1、temperature_2、temperature_3、temperature_4、pump_speed_1、pump_speed_2、operating_hours_1、operating_hours_2、heat_quantity、version。 - 对于 deltasol_c:
temperature_1、temperature_2、temperature_3、temperature_4、pump_speed_1、pump_speed_2、operating_hours_1、operating_hours_2、heat_quantity、time。 - 对于 deltasol_cs2:
temperature_1、temperature_2、temperature_3、temperature_4、pump_speed、operating_hours、heat_quantity、version。 - 对于 deltasol_cs_plus:
temperature_1、temperature_2、temperature_3、temperature_4、temperature_5、pump_speed_1、pump_speed_2、operating_hours_1、operating_hours_2、heat_quantity、time、version、flow_rate。
所有传感器都是 可选 的,并支持 传感器 的所有其他选项。
NOTE
传感器在设备发送数据包时更新。某些型号发送数据非常频繁,可能每秒一次。
如果您担心接收数据库的负载,可以为传感器添加 throttle 过滤器。
# 示例配置条目binary_sensor: - platform: vbus model: deltasol_bs_plus relay1: name: 继电器 1 开启 relay2: name: 继电器 2 开启 sensor1_error: name: 传感器 1 故障 sensor2_error: name: 传感器 2 故障 sensor3_error: name: 传感器 3 故障 sensor4_error: name: 传感器 4 故障 collector_max: name: 选项 集热器最大值 collector_min: name: 选项 集热器最小值 collector_frost: name: 选项 集热器防冻 tube_collector: name: 选项 真空管集热器 recooling: name: 选项 再冷却 hqm: name: 选项 热量测量-
model (必需): 指定连接控制器的型号。从上述支持型号表中选择一个配置值。
支持的型号:
deltasol_bs_plus:relay1、relay2、sensor1_error、sensor2_error、sensor3_error、sensor4_error、collector_max、collector_min、collector_frost、tube_collector、recooling、hqm。deltasol_bs_2009:sensor1_error、sensor2_error、sensor3_error、sensor4_error、frost_protection_active。deltasol_bs2:sensor1_error、sensor2_error、sensor3_error、sensor4_error。deltasol_c:sensor1_error、sensor2_error、sensor3_error、sensor4_error。deltasol_cs2:sensor1_error、sensor2_error、sensor3_error、sensor4_error。deltasol_cs_plus:sensor1_error、sensor2_error、sensor3_error、sensor4_error。custom:见下文。
所有二值传感器都是 可选 的,并支持 二值传感器 的所有其他选项。
custom VBus 传感器
Section titled “custom VBus 传感器”VBus 上的设备通过源地址进行识别。同一总线上可以有多个设备,每种设备类型有不同的地址。
sensor: - platform: vbus model: custom dest: 0x10 source: 0x1234 command: 0x100 sensors: - id: temp1 name: 温度 1 lambda: return ((x[1] << 8) + x[0]) / 10.0;-
dest (必需): 对应您设备的
DFA值(见下文)。 -
source (必需): 对应
您的设备型号的地址(见下文)。 -
command (必需): 对应您设备的
命令(见下文)。 -
sensors (必需): 传感器 定义列表,包含用于解码并返回
float值的lambda。 -
lambda (必需, lambda): 从传入数据包中解析值并返回的代码。 数据包在一个名为
x的std::vector<uint8_t>中。
custom VBus 二值传感器
Section titled “custom VBus 二值传感器”-
dest (必需): 对应您设备的
DFA值(见下文)。 -
source (必需): 对应
您的设备型号的地址(见下文)。 -
command (必需): 对应您设备的
命令(见下文)。 -
binary_sensors (必需): 二值传感器 定义列表,包含用于解码并返回
bool值的lambda。 -
lambda (必需, lambda): 从传入数据包中解析值并返回的代码。 数据包在一个名为
x的std::vector<uint8_t>中。
要确定上述参数的正确值,请访问 数据包定义列表。 在 Packets 表格的搜索字段中,输入您的设备名称。
要使用 lambda 提取值,请点击表格中的 Bytes 链接查看数据包结构。
每个值都放置在数据包内的一个 偏移量 处。
对于 float 值,让我们看一个温度示例:该值以 16 位值存储,采用 2 字节小端格式。
由于第二个字节始终包含高字节,因此需要将其移位 8 位(乘以 256)(例如 0x34, 0x12 -> 0x1234)。
结果需要乘以因子 0.1 以获得正确的值:((x[1] << 8) + x[0]) * 0.1f)。方括号内的数字是 [偏移量]。
对于 二进制 值,多个二进制值存储在用位掩码编码的单个数值中。要提取二进制值,
只需在相应偏移量的值与表中显示的 掩码 之间应用 按位与 运算符 &。
例如,通过 lambda 解码 DeltaSol BS Plus 的某些传感器:
# 示例配置条目sensor: - platform: vbus model: custom dest: 0x10 source: 0x4221 command: 0x100 sensors: - id: scheme name: 布置方案 icon: mdi:pipe-wrench accuracy_decimals: 0 entity_category: diagnostic lambda: return x[14]; // 配置的布置方案 - id: temp2 name: 生活热水温度 state_class: measurement unit_of_measurement: "°C" lambda: return ((x[3] << 8) + x[2]) * 0.1f; // 温度 2
binary_sensor: - platform: vbus model: custom dest: 0x10 source: 0x4221 command: 0x100 binary_sensors: - name: 热量测量开启 id: bin_hqm icon: mdi:counter lambda: return x[15] & 0x20; // 选项 热量测量已启用