跳转到内容

Bang Bang 气候控制器

bang_bang 气候平台允许你使用 bang-bang 控制器(也称为滞后控制器)来调节一个值。

NOTE

thermostat 组件的行为更接近常见的恒温器;它 本质上是一个控制器中集成了两个 bang-bang 控制器。如果你不确定哪种适合你的应用,请参见下面的 Bang-bang 与恒温器对比 部分。

bang-bang 控制器的工作原理相当简单。首先,你指定一个可观测的 值(例如房间温度)。控制器将尝试将该观测值 保持在定义的范围内。为此,控制器可以激活如加热单元等对象来改变 观测值。

控制器将尝试保持观测值所在的范围,可以通过 前端中的 target_temperature_low 和 target_temperature_high 值来控制(见下方截图)。 一旦观测温度低于或高于此范围,它就会激活 定义的动作之一 cool_action、heat_action 和 idle_action。

此平台可以表示三种类型的 bang bang 控制器:

  • 加热器:用于只能升高观测温度的设备。

    • 一旦温度降至较低目标温度以下,将调用 heat_action。
    • 当温度升至较高温度以上时,将调用 idle_action。
    • 如果你更改运行模式(手动模式),且温度介于高低温之间。它不会等待温度降至低温,而是开始工作直到温度达到高温。
  • 冷却器:用于只能降低观测温度的设备。

    • 一旦温度升至较高目标温度以上,将调用 cool_action。
    • 当温度降至较低温度以下时,将调用 idle_action。
    • 如果你更改运行模式(手动模式),且温度介于高低温之间。它不会等待温度升至高温,而是开始工作直到温度降至低温。
  • 加热+冷却器:用于既可以主动升温也可以降温的设备。

    • 当当前温度低于较低目标温度时,调用 heat_action。
    • 当当前温度在目标温度范围内时,调用 idle_action。
    • 当当前温度高于较高目标温度时,调用 cool_action。

请注意,只有当当前温度离开目标温度范围时才会调用动作。

# 配置示例
climate:
- platform: bang_bang
name: "Bang Bang Climate Controller"
sensor: my_temperature_sensor
default_target_temperature_low: 20 °C
default_target_temperature_high: 22 °C
heat_action:
- switch.turn_on: heater
idle_action:
- switch.turn_off: heater
  • sensor (必填,ID):用于测量当前温度的传感器。

  • humidity_sensor (可选,ID):如果指定,此传感器用于测量当前湿度。 此信息仅供参考,不影响温度控制。

  • default_target_temperature_low (必填,浮点数):控制算法的默认较低目标温度。 后续可以在前端动态设置。

  • default_target_temperature_high (必填,浮点数):控制算法的默认较高目标温度。 后续可以在前端动态设置。

  • idle_action (必填,Action):当 气候设备希望进入空闲模式时调用的动作。

  • heat_action (可选,Action):当 气候设备希望进入加热模式并提高当前温度时调用的动作。必须 指定 heat_action 和 cool_action 中的至少一个。

  • cool_action (可选,Action):当 气候设备希望进入冷却模式并降低当前温度时调用的动作。

  • Climate 中的所有其他选项。

高级选项:

  • away_config (可选):额外指定外出模式的目标温度范围设置。 外出模式可用于设置第二组目标温度(例如在用户 外出或夜间时)

    • default_target_temperature_low (必填,浮点数):外出模式下控制算法的默认较低目标温度。

    • default_target_temperature_high (必填,浮点数):外出模式下控制算法的默认较高目标温度。

NOTE

虽然此平台在所有地方都使用”温度”这一术语,但它也可以用于其他值。 例如,此平台也可以用于控制湿度。

bang-bang 控制器的行为是在 ESPHome Discord 服务器上出现 过无数次的主题——很多人对它的功能感到困惑。虽然它们相似,但 bang-bang 组件与 thermostat 组件之间有两个关键区别:

  • 动作触发的时机
  • 控制器如何使用设定点

现在是确保你完全理解 bang-bang 控制器应该如何工作的一个好时机;如果你没有 清晰的理解,请务必查阅 维基百科文章。

如果你不需要操作既能加热又能冷却的系统,你很可能会想跳过下面 关于用户界面的部分。

如上所述,一般来说:

  • 一旦温度低于较低目标温度,调用 heat_action 以启动加热。
  • 加热将持续进行,直到温度达到较高目标温度,此时调用 idle_action 以停止加热。
  • 一旦温度高于较高目标温度,调用 cool_action 以启动冷却。
  • 冷却将持续进行,直到温度回到较低目标温度,此时调用 idle_action 以停止冷却。

单一的 bang-bang 控制器对于只加热或只冷却的系统可能工作得很好;然而,将其应用于 既能加热又能冷却的系统时,问题就开始出现了。这仅仅是因为两个动作都与两个设定点关联——也就是说,停止加热的点同时也是开始冷却的点。反之亦然:停止冷却的点同时也是开始加热的点。让我们看一个例子:

考虑一个既能加热又能冷却的系统。target_temperature_low 设定点为 20 °C,而 target_temperature_high 设定点为 22 °C。传感器报告温度为 19.75 °C,因此控制器 调用 heat_action 以启动加热。加热将持续进行,直到温度达到 target_temperature_high (在本例中为 22 °C)。达到此温度后,调用 idle_action 以停止加热。然而,如果 温度甚至稍微超过 target_temperature_high——即使只高了几分之一度、持续几分之一秒——控制器也会调用 cool_action 以开始冷却。现在,冷却将持续进行,直到 再次达到 target_temperature_low,但同样地,如果温度稍微低于 target_temperature_low,即使是几分之一秒,heat_action 也将被再次调用,循环将 重复。它将在两个设定点之间”乒乓”,可能永远不停。在滞后窗口的”边缘”出现振荡,或者越过任一设定点,都是应该预料的;例如,加热元件在达到其设定点后关闭。加热元件仍将保持热态(可能相当长一段时间), 因此将继续加热空气,直到元件完全冷却至与环境空气/室温匹配。

thermostat 组件的不同之处在于,它围绕每个设定点都具有滞后。例如, 如果 target_temperature_low 设定点为 20 °C,并使用(默认)滞后值 0.5 °C, heat_action 将在 19.5 °C 时调用,idle_action 将在 20.5 °C 时调用。如果由 target_temperature_high 定义的冷却设为 22 °C,cool_action 将在 22.5 °C 时调用,idle_action 将在 21.5 °C 时调用。同样,它本质上是一个控制器中集成了两个 bang-bang 控制器。

除了行为差异外,这两个组件之间还有另一个重要区别:用户界面。

通过 Home Assistant 用户界面与此组件的交互方式也与大多数 常见家用恒温器上所见到的不同。一般来说,大多数恒温器允许设置一个或两个设定点——其中一个 与加热关联,另一个与冷却关联,而这正是 thermostat 组件使用它们的方式。如果你将”加热”设定点设为 20 °C,大多数人会认为这意味着加热系统会 尽量将温度保持在接近 20 °C。较高的设定点也是如此,对于冷却:如果你设置 22 °C,大多数人会认为冷却系统会尽量将温度保持在接近 22 °C。

bang-bang 控制器并非这样使用设定点。如果你将较低设定点设为 20 °C,并将 较高设定点设为 22 °C,那么温度将升至最高 22 °C,但不会降至 20 °C 以下。

这种行为并不难以理解,但是,正如我们从 Discord 服务器上的许多讨论中学到的那样,它 与大多数人似乎预期的方式有所不同。

归结为两点:

  • 如果你有一个双功能系统(既能加热又能冷却),你几乎肯定想要使用 thermostat 组件。

  • 如果你有一个单功能系统,并且有具体需求或希望手动控制滞后的高下限和上下限,请使用 bang-bang 控制器。

在所有其他情况下,thermostat 组件可能是最好的选择。