跳转到内容

反馈 Cover

feedback Cover 平台允许您创建具有位置控制的 Cover,可以选择从传感器获取反馈以检测完全打开和完全关闭状态(限位开关),以及从传感器获取反馈以检测实际移动(打开/关闭)。在所有情况下,当前位置都是根据 Cover 在一个方向上移动的时间来近似的。

它支持打开关闭停止切换动作。不支持倾斜控制。

# 示例配置条目
cover:
- platform: feedback
name: "Gate"
open_action:
- switch.turn_on: open_cover_switch
open_duration: 2.1min
open_endstop: open_endstop_binary_sensor
open_sensor: open_movement_binary_sensor
close_action:
- switch.turn_on: close_cover_switch
close_duration: 2min
close_endstop: close_endstop_binary_sensor
close_sensor: close_movement_binary_sensor
stop_action:
- switch.turn_off: open_cover_switch
- switch.turn_off: close_cover_switch

这是一个多功能的 Cover,可以适应多种 DIY 设置,或监视外部控制的 Cover:

最简单的情况,当没有可用传感器时。因此状态是假设的。

它是 基于时间 的直接替代品。

对于在 Cover 一端或两端有限位开关以检测完全打开和完全关闭状态的情况。 当达到任何这些限位开关时,读取并更新实际状态,Cover 可选地停止(通过 stop_action)。状态不是假设的。

该扩展还处理 Cover 具有内置限位开关的情况,这些限位开关独立于组件的逻辑停止移动。在这种情况下,当 Cover 完全关闭(无论是基于时间还是基于传感器)时,不会触发 stop_action

它是 限位开关 的直接替代品。

如果有移动反馈可用,Cover 不再以乐观模式运行(假设动作触发后立即开始移动),并且还可以对从外部控制发出给 Cover 的命令做出反应,同时保持状态同步(对于现有 Cover 的”智能化”很有用)。

当没有特定的限位开关传感器,并且如果 Cover 具有内置限位开关且没有外部控制逻辑时,这些移动传感器可以选择用于推断限位开关状态。 当移动停止(没有请求停止动作)时,假设这是由内置限位开关引起的,因此达到了关闭/打开状态(根据当前方向)。此功能通过将 infer_endstop 设置为 True 来激活。

它可以用于替换 基于电流 的 Cover,但需要对 YAML 进行一些修改。请参阅 从基于电流的 Cover 迁移

为了保护 Cover 硬件免受损坏,提供了一些安全选项:

  • 最大持续时间,用于保护故障限位开关
  • 方向更改等待时间,类似于互锁等待时间,用于保护电机免受突然的方向更改
  • 障碍物传感器回滚,当某些外部传感器检测到障碍物时可以停止并可选地回滚 Cover(可能是用于高电流消耗的传感器或检测路径中有障碍物的红外光)。
  • stop_action (必填, 动作): 当远程请求关闭 Cover 或达到限位开关时应执行的动作。

打开选项:

  • open_action (必填, 动作): 当远程请求打开 Cover 时应执行的动作。

  • open_duration (必填, 时间): Cover 从完全关闭状态打开所需的时间量。

  • open_endstop (可选, ID): 当达到打开位置时开启的 二进制传感器 的 ID。

  • open_sensor (可选, ID): 当 Cover 正在打开方向移动时开启的 二进制传感器 的 ID。

  • open_obstacle_sensor (可选, ID): 当检测到阻塞打开方向的障碍物时开启的 二进制传感器 的 ID。

关闭选项:

  • close_action (必填, 动作): 当远程请求关闭 Cover 时应执行的动作。

  • close_duration (*必填, 时间): Cover 从完全打开状态关闭所需的时间量。

  • close_endstop (可选, ID): 当达到关闭位置时开启的 二进制传感器 的 ID。

  • close_sensor (可选, ID): 当 Cover 正在关闭方向移动时开启的 二进制传感器 的 ID。

  • close_obstacle_sensor (可选, ID): 当检测到阻塞关闭方向的障碍物时开启的 二进制传感器 的 ID。

其他选项:

  • has_built_in_endstop (可选, boolean): 表示 Cover 具有内置限位开关检测器。在此配置中,当打开或关闭时间完成时不执行 stop_action,并且如果命令 Cover 打开或关闭,将执行相应的动作而不检查当前状态。默认为 false

  • infer_endstop_from_movement (可选, boolean): 是否从移动传感器推断限位开关状态。需要设置移动传感器,没有限位开关传感器,并且具有内置限位开关。默认为 false

  • assumed_state (可选, boolean): Cover 的真实状态是否未知。这将使 Home Assistant 前端显示打开和关闭两个动作的按钮,而不是隐藏或禁用其中一个。如果没有可用的传感器来了解 Cover 的实际状态,默认为 true

  • max_duration (可选, 时间): Cover 应打开或关闭的最大持续时间。用于保护功能异常的限位开关。需要内部、内置或推断的限位开关。

  • direction_change_wait_time (可选, 时间): 停止 Cover 并在方向更改之间强制等待时间,并在计算 Cover 位置时考虑(用于保护电机)。设置此选项后(即使为 0s),如果在 Cover 向相反方向移动时调用打开/关闭动作,则会调用中间停止动作来产生延迟。

  • acceleration_wait_time (可选, 时间): 考虑 Cover 发出命令后实际开始移动所需的等待时间,并在计算 Cover 位置时考虑(对于具有大惯性的重型 Cover 很有用)。旨在在进行多次部分打开/关闭动作时不累积误差)。打开/关闭持续时间包括此延迟的一个实例,因为它是从发出命令到达到限位开关的总时间。默认为 0s

  • update_interval (可选, 时间): 在 Cover 移动时向 UI 发布更新位置信息的间隔。默认为 1s

  • obstacle_rollback (可选, percentage): 移动过程中检测到障碍物时 Cover 将执行的回滚百分比。默认为 10%

  • Cover 的所有其他选项。

大多数选项可以保持不变,但需要进行一些修改:

  1. 所有与电流检测相关的选项必须移动到辅助 模拟阈值,使用相应的阈值和延迟将电流读数转换为二进制传感器。

    如果定义了任何打开/关闭障碍物电流阈值,应使用该阈值定义单独的二进制传感器。选项 start_sensing_delay 应直接替换为移动传感器中的 delayed_off 滤波器,或者可以使用滞回选项来减少噪声。

  2. 要获得基于电流的 Cover 中隐含的相同行为,必须始终将 has_built_in_endstopinfer_endstop_from_movement 设置为 True。

    # 原始传感器配置示例
    cover:
    - platform: current_based
    name: "Current Based Cover"
    open_sensor: open_current_sensor
    open_moving_current_threshold: 0.5
    open_obstacle_current_threshold: 0.8
    start_sensing_delay: 0.8s
    # ...其余选项
    # 转换后的传感器配置示例
    binary_sensor:
    - platform: analog_threshold
    id: open_binary_sensor
    sensor_id: open_current_sensor
    threshold: 0.5
    filters:
    - delayed_off: 0.8s
    - platform: analog_threshold
    id: open_obstacle_binary_sensor
    sensor_id: open_current_sensor
    threshold: 0.8
    # ... 对关闭传感器重复
    cover:
    - platform: feedback
    name: "Feedback Based Cover"
    has_built_in_endstop: true
    infer_endstop_from_movement: true
    open_sensor: open_binary_sensor
    open_obstacle_sensor: open_obstacle_binary_sensor
    #... 其余选项
  3. 反馈 Cover 不直接支持故障检测,因为故障定义非常狭窄,仅适用于特定用例(而在其他硬件配置中,相同的情况是完全有效的)。

    故障检测特别在请求操作的相反方向有电流时发出警报(可能是由于继电器焊接)。这种检测仍然可以通过将逻辑直接放在开关中来实现(或根据您的特定用例做任何需要的操作)。

    # 原始故障配置示例
    cover:
    - platform: current_based
    close_sensor: close_current
    close_action:
    - switch.turn_on: open_relay
    open_sensor: open_current
    open_action:
    - switch.turn_on: open_relay
    malfunction_detection: true
    malfunction_action:
    - logger.log: "检测到故障。继电器焊接。"
    #... 其余选项
    # 转换后的故障配置示例
    switch:
    - platform: gpio
    id: open_relay
    #... 其余选项
    on_turn_off:
    - delay: 200ms # 允许切换时间和任何放电
    - if:
    condition:
    binary_sensor.is_on: open_binary_sensor
    # 替代方案可以直接检查
    # on sensor.in_range open_current
    then:
    - logger.log: "检测到故障。继电器焊接。"