跳转到内容

反馈罩盖

feedback 罩盖平台允许你创建具有位置控制的罩盖, 可以选择性地通过传感器反馈来检测完全开启和完全关闭状态(限位开关), 以及通过传感器检测实际运动(开启/关闭)。在所有情况下,当前 位置都是根据罩盖在某一方向上移动的时间来近似的。

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

# 配置示例
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

它是一种灵活的罩盖,可以适应多种 DIY 设置,也可以监控外部控制的罩盖:

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

它是 Time Based 的直接替代。

适用于罩盖一端或两端有限位开关以检测完全开启和完全关闭状态的情况。 当达到任一限位开关时,将读取并更新实际状态,并且罩盖可以 选择性地停止(通过 stop_action)。状态不是假设的。

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

它是 Endstop 的直接替代。

如果存在运动反馈,罩盖将不再以乐观模式运行(假设动作触发后立即开始运动),还可以响应从外部控制发送到罩盖的命令,并仍然 保持状态同步(适用于”智能化”现有罩盖)。

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

它可以用来替代 Current Based,但需要在 yaml 中进行一些修改。请参见 迁移基于电流的罩盖。

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

  • 最大持续时间,防止因故障限位开关导致的损坏
  • 方向变更等待时间,类似于互锁等待时间,防止电机因突然改变方向而损坏
  • 障碍物传感器和回滚,当外部传感器检测到障碍物时可以停止并可选择性地回滚罩盖 (可能是用于检测高电流消耗的传感器,或用于检测路径中障碍物的红外光传感器)。
  • stop_action (必填,Action):当远程请求罩盖关闭或到达限位开关时应执行的 动作。

开启选项:

  • open_action (必填,Action):当远程请求罩盖开启时应执行的 动作。

  • open_duration (必填,Time):罩盖从 完全关闭状态开启所需的时间。

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

  • open_sensor (可选,ID): 罩盖沿开启方向移动时开启的 二进制传感器 的 ID。

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

关闭选项:

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

  • close_duration (必填,Time):罩盖从 完全开启状态关闭所需的时间。

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

  • close_sensor (可选,ID): 罩盖沿关闭方向移动时开启的 二进制传感器 的 ID。

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

其他选项:

  • has_built_in_endstop (可选,布尔值):指示罩盖具有内置的限位 检测器。在此配置下,当开启或关闭 时间完成时不会执行 stop_action,并且如果命令罩盖开启或关闭,相应的动作 将在不检查当前状态的情况下执行。默认为 false。

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

  • assumed_state (可选,布尔值):罩盖的真实状态是否未知。 这将使 Home Assistant 前端为 OPEN 和 CLOSE 动作都显示按钮,而不是 隐藏或禁用其中一个。如果没有传感器可获取 罩盖的真实状态,则默认为 true。

  • max_duration (可选,Time):罩盖开启 或关闭的最大持续时间。用于防止因限位开关故障而导致的损坏。 需要内置、硬件或推断的限位开关。

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

  • acceleration_wait_time (可选,Time):考虑罩盖在发出命令后实际 开始移动所需的等待时间,并在计算罩盖位置时考虑该时间 (适用于惯性较大的重型罩盖)。 目的是在多次部分开启/关闭操作时不累积误差。 开启/关闭持续时间包含一次此延迟,因为它是从 发出命令到到达限位开关的总时间。 默认为 0s。

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

  • obstacle_rollback (可选,百分比):检测到障碍物时罩盖将回滚的百分比。默认为 10%。

  • Cover 中的所有其他选项。

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

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

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

  2. 为了获得与基于电流的罩盖相同的行为,你必须始终将 has_built_in_endstop 和 infer_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:
    - 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: "Malfunction detected. Relay welded."
    #... 其他选项
    # 转换后的故障配置示例
    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: "Malfunction detected. Relay welded."