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 与恒温器对比
Section titled “Bang-bang 与恒温器对比”bang-bang 控制器的行为是在 ESPHome Discord 服务器上出现 过无数次的主题——很多人对它的功能感到困惑。虽然它们相似,但 bang-bang 组件与 thermostat 组件之间有两个关键区别:
- 动作触发的时机
- 控制器如何使用设定点
现在是确保你完全理解 bang-bang 控制器应该如何工作的一个好时机;如果你没有 清晰的理解,请务必查阅 维基百科文章。
双功能系统的问题
Section titled “双功能系统的问题”如果你不需要操作既能加热又能冷却的系统,你很可能会想跳过下面 关于用户界面的部分。
如上所述,一般来说:
- 一旦温度低于较低目标温度,调用
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 服务器上的许多讨论中学到的那样,它 与大多数人似乎预期的方式有所不同。
哪种适合我?
Section titled “哪种适合我?”归结为两点:
-
如果你有一个双功能系统(既能加热又能冷却),你几乎肯定想要使用 thermostat 组件。
-
如果你有一个单功能系统,并且有具体需求或希望手动控制滞后的高下限和上下限,请使用 bang-bang 控制器。
在所有其他情况下,thermostat 组件可能是最好的选择。