跳转到内容

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 (必需, 整数): 范围内第一个寄存器的起始地址(可以是十进制或十六进制)。

  • bitmask (可选, 整数): 有时多个值被打包在单个寄存器的响应中。位掩码用于确定结果是真还是假。请参阅 位掩码

  • skip_updates (可选, 整数): 默认情况下,modbus_controller 的所有传感器一起更新。对于不经常变化的数据点,可以跳过更新。值为 5 将仅在每个第 6 次更新周期更新此传感器范围。注意:modbus_controller 按地址范围对组件进行分组以减少事务数量。所有具有相同起始地址的组件将在一个请求中更新。skip_updates 适用于同一范围内的所有组件。

  • register_count (可选, 整数): 此读取请求应在单个命令中跨越或跳过的连续寄存器数量。默认为 1。有关更多详细信息,请参阅 优化 modbus 通信

  • response_size (可选, 整数): 寄存器响应的大小(以字节为单位)。默认为 register_count*2。

  • force_new_range (可选, 布尔值): 如果可能,具有顺序地址的传感器被分组在一起并在一个范围内请求。设置 force_new_range: true 强制在该地址开始新范围。

  • custom_command (可选, 字节列表): modbus 命令的原始字节。这允许使用非标准命令。如果使用 custom_command,则不能使用 addressregister_type。自定义数据必须包含所有必需的字节,包括 modbus 设备地址。CRC 自动计算并附加到命令。请参阅 使用 custom_command 了解如何使用 custom_command

  • lambda (可选, lambda): 每个更新间隔评估的 lambda,以获取传感器的新值。参数:

    • x (布尔值): modbus 数据的解析浮点值
    • data (std::vector<uint8_t>): 包含此传感器完整原始 modbus 响应字节的向量
    • item (指向 ModbusBinarySensor 对象的常量指针): 传感器对象本身。

    lambda 的可能返回值:

    • return true/false; 传感器的新值。
  • offset (可选, 整数): 从起始地址的字节偏移(仅对于不常见的响应编码需要)。如果在一个命令中写入多个寄存器,此值用于查找此数据点相对于起始地址的开始。组件根据偏移和值类型的大小计算范围的大小。偏移值取决于寄存器类型。如果从输入寄存器创建 binary_sensor,偏移以字节为单位。对于线圈和离散输入寄存器,第一个数据字节的 LSB 包含请求中寻址的线圈。其他线圈从此字节向高位端延伸,并在后续字节中从低位向高位延伸。对于寄存器,偏移是相关位的位置。要获取线圈寄存器的值,可以使用 address: 2 / offset: 0address: 0 / offset 2 检索 2。

  • 所有其他选项来自 二进制传感器

binary_sensor:
- platform: modbus_controller
modbus_controller_id: modbus1
name: "错误状态"
register_type: read
address: 0x3200
bitmask: 0x80 #(第 8 位)