跳转到内容

Bang Bang 温控器

bang_bang 温控平台允许您使用 bang-bang 控制器(也称为滞回控制器)来调节某个值。

NOTE

thermostat 组件的行为更像普通温控器;它本质上是两个 bang-bang 控制器合二为一。如果您不确定哪个更适合您的应用,请参阅下面的 Bang-bang 与温控器对比 部分。

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

控制器将尝试使观测值保持在的范围内可以通过前端的 target_temperature_lowtarget_temperature_high 值来控制(见下面的截图)。一旦观测温度低于或高于此范围,它将激活定义的动作之一:cool_actionheat_actionidle_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 (必填, float): 控制算法的默认较低目标温度。稍后可以在前端动态设置。

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

  • idle_action (必填, 动作): 当温控设备想要进入空闲模式时调用的动作。

  • heat_action (可选, 动作): 当温控设备想要进入加热模式并增加当前温度时调用的动作。heat_actioncool_action 中至少必须指定一个。

  • cool_action (可选, 动作): 当温控设备想要进入制冷模式并降低当前温度时调用的动作。

  • Climate 的所有其他选项。

高级选项:

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

    • default_target_temperature_low (必填, float): 离家模式下控制算法的默认较低目标温度。

    • default_target_temperature_high (必填, float): 离家模式下控制算法的默认较高目标温度。

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,则在温度 19.5 °C 时调用 heat_action,在 20.5 °C 时调用 idle_action。如果制冷,由 target_temperature_high 定义为 22 °C,则在 22.5 °C 时调用 cool_action,在 21.5 °C 时调用 idle_action。同样,它本质上是两个 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 组件可能是最好的选择。