Modbus 控制器开关
modbus_controller 开关平台从 modbus_controller 组件创建开关,需要配置 Modbus 控制器。
-
register_type(必填):modbus 寄存器的类型。
coil:线圈是 1 位寄存器(开/关值),用于控制离散输出。它们可以被读取和/或写入。将使用 Modbus 功能码 1(读取线圈状态)。discrete_input:离散输入寄存器(只读线圈)类似于线圈,但只能被读取。将使用 Modbus 功能码 2(读取输入状态)。holding:保持寄存器 - 保持寄存器是最通用的 16 位寄存器。它们可以被读取和/或写入。将使用 Modbus 功能码 3(读取保持寄存器)。read:读取输入寄存器 - 寄存器是用于输入的 16 位寄存器,只能被读取。将使用 Modbus 功能码 4(读取输入寄存器)。
-
address(必填,整数):范围内第一个寄存器的起始地址(可以是十进制或十六进制)。
-
assumed_state(可选 布尔值):禁用此寄存器的更新(定期读取命令)。默认为
false。 -
skip_updates(可选,整数):默认情况下,modbus_controller 的所有传感器会一起更新。对于不经常更改的数据点,可以跳过更新。值为 5 表示仅在每 5 个更新周期中更新此传感器范围。注意:modbus_controller 按地址范围对组件进行分组以减少事务数量。所有具有相同起始地址的组件将在一个请求中更新。
skip_updates适用于同一范围内的所有组件。 -
register_count(可选,整数):单个命令中此读取请求应跨越或跳过的连续寄存器数量。默认为 1。有关更多详细信息,请参阅优化 modbus 通信。
-
use_write_multiple(可选,布尔值):默认情况下,如果只设置一个寄存器,则使用 Modbus 命令 功能码 6(预置单个寄存器) 来设置保持寄存器。如果您的设备只支持 功能码 16(预置多个寄存器),请将此选项设置为
true。 -
bitmask(可选,整数):某些值被打包在响应中。位掩码用于确定结果是 true 还是 false。请参阅位掩码。
-
lambda(可选,lambda): 每个更新间隔评估一次的 lambda,用于读取开关的状态。
-
write_lambda(可选,lambda):发送前调用的 lambda。 Lambda 在创建 modbus 写入命令之前被评估。
传递给 lambda 的参数
-
x(浮点数):要发送到 modbus 设备的浮点值
-
payload(
std::vector<uint8_t> &payload):用于载荷的空向量。如果在 lambda 中设置了载荷,它将作为自定义命令发送,必须包含 modbus 请求所需的所有字节 注意: 由于响应包含同一范围内所有寄存器的数据,您必须使用data[item->offset]获取传感器的第一个响应字节。 -
item(指向 Switch 派生对象的常量指针):传感器对象本身。
lambda 的可能返回值:
return true;或return false;传感器的新值。return <anything>;并用数据填充载荷,如果从 lambda 添加了载荷,则这些字节将被发送。return {};在 lambda 自行处理值发送的情况下。
-
-
custom_command(可选,字节列表):modbus 命令的原始字节。这允许使用非标准命令。如果使用
custom_command,则不能使用address和register_type。 自定义数据必须包含所有必需的字节,包括 modbus 设备地址。CRC 会自动计算并附加到命令中。 请参阅使用custom_command了解如何使用custom_command -
offset(可选,整数):从起始地址的字节偏移量(仅用于不常见的响应编码)。如果在一个命令中写入多个寄存器,此值用于查找此数据点相对于起始地址的开始位置。组件根据偏移量和值类型的大小计算范围的大小。偏移量的值取决于寄存器类型。对于保持输入寄存器,偏移量以字节为单位。对于线圈和离散输入寄存器,第一个数据字节的 LSB 包含请求中寻址的线圈。其他线圈从此字节的高端延续,并从低到高延续到后续字节。对于寄存器,偏移量是相关位的位置。要获取线圈寄存器的值,可以使用
address: 2/offset: 0或address: 0/offset 2来获取值 2。 -
restore_mode(可选):请参阅 Switch,因为此配置变量是继承的。此设置的默认值为
DISABLED(推荐)。DISABLED将初始状态留给硬件:通常状态存在于设备中,ESPHome 不需要记住它。开关前端界面将显示不确定状态,直到在下次刷新时从设备获取真实状态。如果您的 ESPHome 设备重启与 modbus 设备重启相关联,请使用任何其他设置。
switch:- platform: modbus_controller modbus_controller_id: epever id: enable_load_test register_type: coil address: 2 name: "enable load test mode" bitmask: 1switch: - platform: modbus_controller modbus_controller_id: epever id: enable_load_test register_type: coil address: 2 name: "enable load test mode" write_lambda: |- ESP_LOGD("main","Modbus Switch incoming state = %f",x); // return false ; // 使用此选项仅更改值 payload.push_back(0x1); // 设备地址 payload.push_back(0x5); // 强制单个线圈 payload.push_back(0x00); // 线圈地址高字节 payload.push_back(0x6); // 线圈地址低字节 payload.push_back(0xFF); // ON = 0xFF00 OFF=0000 payload.push_back(0x00); return true;由于偏移量不为零,读取命令是范围的一部分,将在范围更新时被解析。 要构造的写入命令使用功能码来确定写入命令。对于线圈,它是写入单个线圈。 因为写入命令只涉及一个寄存器,start_address 和 offset 必须被修正。 最终命令将是 write_single_coil 功能码 5 地址(start_address+offset)值 1 或 0
对于保持寄存器,写入命令将是 write_single_register(功能码 6(预置单个寄存器))。因为保持寄存器的偏移量以字节为单位,而寄存器的大小是 16 字节,start_address 计算为 start_address + offset/2
switch:- platform: modbus_controller modbus_controller_id: ventilation_system name: "enable turn off" register_type: holding address: 25 bitmask: 1 entity_category: config icon: "mdi:toggle-switch"