Modbus 控制器二进制传感器
modbus_controller 二进制传感器平台根据 modbus_controller 组件创建一个二进制传感器,
并要求配置 Modbus 控制器。
-
register_type(必选):modbus 寄存器的类型。
coil: 线圈是 1 位寄存器(ON/OFF 值),用于控制离散输出。可读和写。将使用 Modbus 功能码 1(读取线圈状态)。discrete_input: 离散输入寄存器(只读线圈)类似于线圈,但只能读取。将使用 Modbus 功能码 2(读取输入状态)。holding: 保持寄存器——保持寄存器是最通用的 16 位寄存器。可读和写。将使用 Modbus 功能码 3(读取保持寄存器)。read: 读取输入寄存器——寄存器是用于输入的 16 位寄存器,且只能读取。将使用 Modbus 功能码 4(读取输入寄存器)。
-
address(必选,int):范围内第一个寄存器的起始地址(可以是十进制或十六进制)。
-
bitmask(可选,int):有时多个值打包在单个寄存器的响应中。位掩码用于确定结果是 true 还是 false。参见 位掩码。
-
skip_updates(可选,int):默认情况下,modbus_controller 的所有传感器一起更新。对于变化不频繁的数据点,可以跳过更新。值为 5 将只在此传感器范围的每第 6 次更新周期中更新一次。注意:modbus_controller 按地址范围对组件进行分组,以减少事务数量。具有相同起始地址的所有组件将在一个请求中更新。
skip_updates适用于同一范围内的所有组件。 -
register_count(可选,int):此读取请求应在单个命令中跨越或跳过的连续寄存器数量。默认为 1。更多详细信息参见 优化 modbus 通信。
-
response_size(可选,int):寄存器响应的字节大小。默认为 register_count*2。
-
force_new_range(可选,boolean):如果可能,具有顺序地址的传感器会组合在一起并在一个范围内请求。设置
force_new_range: true强制在该地址开始新范围。 -
custom_command(可选,字节列表):modbus 命令的原始字节。这允许使用非标准命令。如果使用
custom_command,则不能使用address和register_type。 自定义数据必须包含所有必需的字节,包括 modbus 设备地址。CRC 会自动计算并附加到命令。 参见 使用custom_command了解如何使用custom_command。 -
lambda(可选,lambda): 每个更新间隔求值一次以获取传感器新值的 Lambda。参数:
- x(bool):modbus 数据的解析浮点值
- data(
std::vector<uint8_t>):包含此传感器完整原始 modbus 响应字节的向量 - item(指向 ModbusBinarySensor 对象的 const 指针):传感器对象本身。
lambda 的可能返回值:
return true/false;传感器的新值。
-
offset(可选,int):距起始地址的字节偏移量(仅对不常见的响应编码需要)。如果一个命令中写入了多个寄存器,则使用此值来查找相对于起始地址的数据点起始位置。组件根据偏移量和值类型的大小计算范围大小。偏移量的值取决于寄存器类型。如果二进制传感器从输入寄存器创建,则偏移量以字节为单位。对于线圈和离散输入寄存器,第一个数据字节的最低有效位包含请求中寻址的线圈。其他线圈向该字节的高有效端以及后续字节从低有效到高有效的方向继续。对于寄存器,偏移量是相关位的位置。要获取线圈寄存器的值,可以通过
address: 2/offset: 0或address: 0/offset 2获取 2。 -
来自 Binary Sensor 的所有其他选项。
binary_sensor:- platform: modbus_controller modbus_controller_id: modbus1 name: "Error status" register_type: read address: 0x3200 bitmask: 0x80 #(bit 8)