跳转到内容

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 CS4deltasol_cs41122Citrin Solar CS 1.3
DeltaSol CS Plusdeltasol_cs_plus2211

Config Value 应用于 sensor 和 binary_sensor 条目中的 model 参数。

Hex Address 字段是设备在消息的 from 字段中发送的值。要识别未知 型号,将 logger 级别设置为 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

如果你使用了 Logger,请确保不要使用相同的引脚,否则请使用 baud_rate: 0 选项禁用 UART 日志记录。

  • uart_id (可选, ID): 手动指定用于连接设备的 UART 中心的 ID。

NOTE

传感器的功能取决于设备类型及其控制的水力 系统的方案配置。实际的配置编号可以从设备设置中确定。请 查阅用户手册并评估你的方案以确定每个传感器的功能,并相应地 命名它们。

# 示例配置条目
sensor:
- platform: vbus
model: deltasol_bs_plus
temperature_1:
name: Temperature 1
temperature_2:
name: Temperature 2
temperature_3:
name: Temperature 3
temperature_4:
name: Temperature 4
pump_speed_1:
name: Pump Speed 1
pump_speed_2:
name: Pump Speed 2
operating_hours_1:
name: Operating Hours 1
operating_hours_2:
name: Operating Hours 2
heat_quantity:
name: Heat Quantity
time:
name: Device Time
version:
name: Device firmware version
  • 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_cs4: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。
  • 对于 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。

所有传感器均为 可选,并支持 Sensor 的所有其他选项。

NOTE

每次设备发送数据包时传感器都会更新。某些型号发送数据的频率很高,可能每秒一次。如果你 担心接收数据库的负载,可以为传感器添加 throttle 过滤器。

# 示例配置条目
binary_sensor:
- platform: vbus
model: deltasol_bs_plus
relay1:
name: Relay 1 On
relay2:
name: Relay 2 On
sensor1_error:
name: Sensor 1 Fault
sensor2_error:
name: Sensor 2 Fault
sensor3_error:
name: Sensor 3 Fault
sensor4_error:
name: Sensor 4 Fault
collector_max:
name: Option Collector Max
collector_min:
name: Option Collector Min
collector_frost:
name: Option Collector Frost
tube_collector:
name: Option Tube Collector
recooling:
name: Option Recooling
hqm:
name: Option Heat Quantity Measurement
  • 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_cs4:sensor1_error、sensor2_error、sensor3_error、sensor4_error。
    • deltasol_cs_plus:sensor1_error、sensor2_error、sensor3_error、sensor4_error。
    • custom:见下文。

所有二进制传感器均为 可选,并支持 Binary Sensor 的所有其他选项。

VBus 上的设备由源地址标识。同一总线上可以有多个设备, 每种设备类型都有不同的地址。

sensor:
- platform: vbus
model: custom
dest: 0x10
source: 0x1234
command: 0x100
sensors:
- id: temp1
name: Temp 1
lambda: return ((x[1] << 8) + x[0]) / 10.0;
  • dest (可选): 对应你设备的 DFA 值(见下文)。

  • source (可选): 对应 your device model 的地址(见下文)。

  • command (可选): 对应你设备的 command(见下文)。

  • sensors (可选): 一个 Sensor 定义列表,包含一个 lambda 以进行解码并返回一个 float 值。

  • lambda (必选, lambda): 用于从传入数据包中解析值并返回它的代码。 数据包在一个名为 x 的 std::vector<uint8_t> 中。

  • dest (可选): 对应你设备的 DFA 值(见下文)。

  • source (可选): 对应 your device model 的地址(见下文)。

  • command (可选): 对应你设备的 command(见下文)。

  • binary_sensors (可选): 一个 Binary Sensor 定义列表,包含一个 lambda 以进行解码并返回一个 bool 值。

  • lambda (必选, lambda): 用于从传入数据包中解析值并返回它的代码。 数据包在一个名为 x 的 std::vector<uint8_t> 中。

要确定上述参数的正确值,请访问 数据包定义列表。在 Packets 表的搜索字段中,输入你的设备名称。

要用 lambda 提取值,请通过点击表中的 Bytes 链接查看数据包结构。每个值在数据包中的某个 offset 处放置。 对于 float 值,看看温度示例:值以 16 位值存储在 2 个字节的 little-endian 格式中。由于始终是第二个字节包含上字节,需要将其移位 8 位(乘以 256)(例如 0x34, 0x12 -> 0x1234)。结果需要乘以因子 0.1,以获得正确值:((x[1] << 8) + x[0]) * 0.1f)。方括号中的数字是 [offset]。 对于 binary 值,多个二进制值存储在通过掩码编码的单个数值中。要提取二进制值,只需在对应偏移处的值和表中显示的 mask 之间应用按位与运算符 &。

例如通过 lambda 解码 DeltaSol BS Plus 的一些传感器:

# 示例配置条目
sensor:
- platform: vbus
model: custom
dest: 0x10
source: 0x4221
command: 0x100
sensors:
- id: scheme
name: Arrangement scheme
icon: mdi:pipe-wrench
accuracy_decimals: 0
entity_category: diagnostic
lambda: return x[14]; // 已配置的方案
- id: temp2
name: Temperature DHW
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: Heat Quantity Measurement On
id: bin_hqm
icon: mdi:counter
lambda: return x[15] & 0x20; // 启用热量测量选项