跳转到内容

Atlas Scientific 蠕动泵

ezo_pmp 组件允许你使用 Atlas Scientific 蠕动泵与 ESPHome。支持 EZO-PMP(数据手册)和 EZO-PMP-L(数据手册)。要使此传感器工作,需要在配置中设置 I²C 总线。

NOTE

此组件不会自动在 Home Assistant 前端中直接可控制,因为 Home Assistant 不支持泵。为了从前端控制泵,你需要使用模板来提供对你所需操作的访问。请参阅Home Assistant 配置。

ezo_pmp:
id: ezo_pmp
address: 103 # Default Address for the EZO-PMP.
update_interval: 60s
  • id (Required, ID): 指定泵的 ID,以便你可以控制它。
  • address (Optional, int): 指定传感器的 I²C 地址。默认为 103。
  • update_interval (Optional, Time): 检查传感器的间隔。默认为 60s。

由于 EZO-PMP 提供大量的传感器,并且每个传感器都需要单独轮询,因此代码已被 优化为不更新配置中未定义的传感器。如果你需要泵的非常快速的更新(低于 3 秒), 只启用你实际需要的传感器。

此传感器指示在当前运行的或最后运行的加药命令中所投加的体积(以毫升为单位)。

sensor:
- platform: ezo_pmp
current_volume_dosed:
id: current_volume_dosed
name: Current Volume Dosed
  • id (Optional, ID): 设置此传感器的 ID,用于在 lambda 中使用。
  • 来自传感器的所有其他选项。

此传感器指示自上次泵开启以来已投加的总体积(以毫升为单位)。如果泵曾反向运行,则可能为负数。

sensor:
- platform: ezo_pmp
total_volume_dosed:
id: total_volume_dosed
name: Total Volume Dosed
  • id (Optional, ID): 设置此传感器的 ID,用于在 lambda 中使用。
  • 来自传感器的所有其他选项。

此传感器指示自上次泵开启以来已投加的绝对总体积(以毫升为单位)。

sensor:
- platform: ezo_pmp
absolute_total_volume_dosed:
id: absolute_total_volume_dosed
name: Absolute Total Volume Dosed
  • id (Optional, ID): 设置此传感器的 ID,用于在 lambda 中使用。
  • 来自传感器的所有其他选项。

指示正在由加药操作投加的总体积(以毫升为单位)(如果泵已经完成则指示已投加的)。当 使用具有持续时间的加药操作时,传感器将对总体积进行正确的计算。

sensor:
- platform: ezo_pmp
last_volume_requested:
id: last_volume_requested
name: Last Volume Requested
  • id (Optional, ID): 设置此传感器的 ID,用于在 lambda 中使用。
  • 来自传感器的所有其他选项。

泵提供它自己计算的它可以提供的最大流速(以毫升/分钟为单位)。超过此流量的加药请求 将失败。当使用连续加药操作时,这是泵每分钟 将投加的体积。此值在泵校准后会更新(参见ezo_pmp.set_calibration_volume 操作)。

sensor:
- platform: ezo_pmp
max_flow_rate:
id: max_flow_rate
name: Max Flow Rate
  • id (Optional, ID): 设置此传感器的 ID,用于在 lambda 中使用。
  • 来自传感器的所有其他选项。

为泵供电的电源当前的电压。不要与为泵上电子设备供电的电压混淆。

sensor:
- platform: ezo_pmp
pump_voltage:
id: pump_voltage
name: Pump Voltage

指示泵当前是否正在运行。

binary_sensor:
- platform: ezo_pmp
pump_state:
id: pump_state
name: Pump State

指示加药操作当前是否处于暂停状态。

binary_sensor:
- platform: ezo_pmp
is_paused:
id: is_paused
name: Is Paused

指示泵当前运行的加药模式。可以是 Volume、Volume/Time、Constant Flow Rate、Continuous、None 中的任何一个。

text_sensor:
- platform: ezo_pmp
dosing_mode:
id: dosing_mode
name: Dosing Mode

指示泵的校准状态。可以是 Fixed Volume、Volume/Time、Fixed Volume & Volume/Time 或 Uncalibrated。

text_sensor:
- platform: ezo_pmp
calibration_status:
id: calibration_status
name: Calibration Status

在自动化中使用此操作,使蠕动泵以最大流速连续加药。泵将在连续模式下运行 20 天后自动停止。

on_...:
then:
- ezo_pmp.find:
id: ezo_pmp
  • id (Required, ID): 泵的 ID。

在自动化中使用此操作,使蠕动泵以最大流速投加特定体积(以毫升为单位)。如果体积为负数,泵将反向运行。

on_...:
then:
- ezo_pmp.dose_volume:
id: ezo_pmp
volume: 10
# Templated
- ezo_pmp.dose_volume:
id: ezo_pmp
volume: !lambda |-
return id(some_volume_sensor).state;
  • id (Required, ID): 泵的 ID。
  • volume (Required, float, templatable): 要投加的体积(以毫升为单位)。如果为负数,泵将反向运行。

在自动化中使用此操作,使蠕动泵在提供的 duration(以分钟为单位)内投加特定 volume(以毫升为单位)。在时间段结束时,泵将已投加指定的 volume。如果体积为负数,泵将反向运行。

on_...:
then:
- ezo_pmp.dose_volume_over_time:
id: ezo_pmp
volume: 23.4
duration: 2
# Templated
- ezo_pmp.dose_volume_over_time:
id: ezo_pmp
volume: !lambda |-
return id(some_volume_sensor).state;
duration: !lambda |-
return id(some_duration_sensor).state;
  • id (Required, ID): 泵的 ID。
  • volume (Required, float, templatable): 要投加的体积(以毫升为单位)。如果为负数,泵将反向运行。
  • duration (Required, int, templatable): 泵投加请求体积所需的时间(以分钟为单位)。

ezo_pmp.dose_with_constant_flow_rate 操作

Section titled “ezo_pmp.dose_with_constant_flow_rate 操作”

在自动化中使用此操作,使蠕动泵在提供的 duration(以分钟为单位)内每分钟投加特定 volume(以毫升为单位)。在时间段结束时,泵将已投加指定的 volume 乘以 duration。如果体积为负数,泵将反向运行。

on_...:
then:
- ezo_pmp.dose_with_constant_flow_rate:
id: ezo_pmp
volume_per_minute: 10.2
duration: 2
# Templated
- ezo_pmp.dose_with_constant_flow_rate:
id: ezo_pmp
volume_per_minute: !lambda |-
return id(some_volume_sensor).state;
duration: !lambda |-
return id(some_duration_sensor).state;
  • id (Required, ID): 泵的 ID。
  • volume_per_minute (Required, float, templatable): 每分钟要投加的体积(以毫升为单位)。如果为负数,泵将反向运行。
  • duration (Required, int, templatable): 泵每分钟投加请求体积的时间(以分钟为单位)。

使用此操作暂停之前发出的加药命令。要确定加药是否暂停,你可以使用是否暂停传感器。如果泵当前处于暂停状态,则再次发出此操作将取消暂停。

on_...:
then:
- ezo_pmp.pause_dosing:
id: ezo_pmp
  • id (Required, ID): 泵的 ID。

使用此操作停止当前的加药命令。

on_...:
then:
- ezo_pmp.stop_dosing:
id: ezo_pmp
  • id (Required, ID): 泵的 ID。

清除当前已投加体积、已投加总体积和绝对已投加总体积传感器的值。

on_...:
then:
- ezo_pmp.clear_total_volume_dosed:
id: ezo_pmp
  • id (Required, ID): 泵的 ID。

使用此操作校准蠕动泵。EZO-PMP 需要两种形式的校准:绝对体积和随时间变化的体积。你可以使用校准状态传感器检查校准状态。有关校准泵的操作流程,请检查数据手册。

on_...:
then:
- ezo_pmp.set_calibration_volume:
id: ezo_pmp
volume: 10.01
# Templated
- ezo_pmp.set_calibration_volume:
id: ezo_pmp
volume: !lambda |-
return id(some_volume_sensor).state;
  • id (Required, ID): 泵的 ID。
  • volume (Required, float, templatable): 在校准过程中测量到的体积。

清除泵中存储的校准值。你可以使用校准状态传感器检查校准状态。

on_...:
then:
- ezo_pmp.clear_calibration:
id: ezo_pmp
  • id (Required, ID): 泵的 ID。

使用此操作使泵控制板上的 LED 闪烁一分钟。在 LED 闪烁期间,泵不会响应任何其他操作。

on_...:
then:
- ezo_pmp.find:
id: ezo_pmp
  • id (Required, ID): 泵的 ID。

将泵的 i2c 地址更改为提供的值。地址更改后,你必须上传带有更新后 I2C 地址的 ESPHome 固件新版本,泵才能工作。

on_...:
then:
- ezo_pmp.change_i2c_address:
id: ezo_pmp
address: 100
  • id (Required, ID): 泵的 ID。
  • address (Required, int, templatable): 泵的新 I2C 地址。

为了能够从 home assistant 前端控制泵,重要的是将操作暴露为具有 UI 渲染的组件。这可以使用 ESPHome 中的模板来实现。以下是一个使用 Template Button 和 Template Number 在一定时间内投加特定体积的示例。

i2c:
ezo_pmp:
id: ezo_pmp
number:
- platform: template
id: volume
name: "Volume"
optimistic: true
min_value: 0
max_value: 100
step: 0.01
- platform: template
id: duration
name: "Duration"
optimistic: true
min_value: 0
max_value: 100
step: 1
button:
- platform: template
name: "Dose Over Time"
on_press:
- ezo_pmp.dose_volume_over_time:
id: ezo_pump
volume: !lambda |-
return id(volume).state;
duration: !lambda |-
return id(duration).state;

从 lambda 中,你也可以访问蠕动泵上的操作来做一些高级的事情(更多信息参见完整的 API 参考)。函数的名称与 YAML 配置中操作的名称相同。