跳转到内容

VBus 组件

VBus 组件提供使用 VBus 协议与太阳能热能集热器控制器的状态读取连接。这些设备主要由 Resol 生产, 通常也以其他品牌名称销售,如 Viessmann、Kioto、Wagner 等。该组件目前原生支持下表中的型号, 但任何设备都可以通过 lambda 添加,只需了解其数据包结构

下表显示了当前支持的 VBus 设备型号。

名称配置值十六进制地址备注
DeltaSol BS Plusdeltasol_bs_plus4221
DeltaSol BS 2009deltasol_bs_2009427BDeltaSol BS Plus V2
DeltaSol BS/2 (DrainBack)deltasol_bs24278
Dux H3214deltasol_bs_2009427B不支持泵 2
DeltaSol Cdeltasol_c4212
DeltaSol CS2deltasol_cs21121
DeltaSol CS Plusdeltasol_cs_plus2211

配置值 应用于 sensorbinary_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: resol

WARNING

如果您使用 日志记录器,请确保不要为其使用相同的引脚, 或者使用 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_plusdeltasol_bs_2009temperature_1temperature_2temperature_3temperature_4pump_speed_1pump_speed_2operating_hours_1operating_hours_2heat_quantitytimeversion
  • 对于 deltasol_bs2temperature_1temperature_2temperature_3temperature_4pump_speed_1pump_speed_2operating_hours_1operating_hours_2heat_quantityversion
  • 对于 deltasol_ctemperature_1temperature_2temperature_3temperature_4pump_speed_1pump_speed_2operating_hours_1operating_hours_2heat_quantitytime
  • 对于 deltasol_cs2temperature_1temperature_2temperature_3temperature_4pump_speedoperating_hoursheat_quantityversion
  • 对于 deltasol_cs_plustemperature_1temperature_2temperature_3temperature_4temperature_5pump_speed_1pump_speed_2operating_hours_1operating_hours_2heat_quantitytimeversionflow_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_plusrelay1relay2sensor1_errorsensor2_errorsensor3_errorsensor4_errorcollector_maxcollector_mincollector_frosttube_collectorrecoolinghqm
    • deltasol_bs_2009sensor1_errorsensor2_errorsensor3_errorsensor4_errorfrost_protection_active
    • deltasol_bs2sensor1_errorsensor2_errorsensor3_errorsensor4_error
    • deltasol_csensor1_errorsensor2_errorsensor3_errorsensor4_error
    • deltasol_cs2sensor1_errorsensor2_errorsensor3_errorsensor4_error
    • deltasol_cs_plussensor1_errorsensor2_errorsensor3_errorsensor4_error
    • custom:见下文。

所有二值传感器都是 可选 的,并支持 二值传感器 的所有其他选项。

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): 从传入数据包中解析值并返回的代码。 数据包在一个名为 xstd::vector<uint8_t> 中。

  • dest (必需): 对应您设备的 DFA 值(见下文)。

  • source (必需): 对应 您的设备型号 的地址(见下文)。

  • command (必需): 对应您设备的 命令(见下文)。

  • binary_sensors (必需): 二值传感器 定义列表,包含用于解码并返回 bool 值的 lambda

  • lambda (必需, lambda): 从传入数据包中解析值并返回的代码。 数据包在一个名为 xstd::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; // 选项 热量测量已启用