跳转到内容

通过 BSEC 的 BME680 温度+压力+湿度+气体传感器

bme680_bsec 传感器平台允许您通过 Bosch Sensortec Environmental Cluster (BSEC) 软件库,在 ESPHome 中使用 BME680 (数据手册, Adafruit, Pimoroni)温度、压力和湿度以及气体传感器。Bosch 专有算法的使用提供了空气质量指数 (IAQ) 测量,该测量源自 气体电阻传感器对特定挥发性有机化合物 (VOC) 的响应。BSEC 软件还提供 CO₂ 和呼吸挥发性有机化合物 (b-VOC) 的估计值,使用人类呼出气体中 VOC 和 CO₂ 之间的相关性。

NOTE

  • BSEC 库仅在接受其软件许可协议后才可供使用。启用此组件即 表示您明确同意 BSEC 许可协议 的条款。您不得分发任何包含此组件的 已编译固件二进制文件。

  • 我们建议尽可能使用更新的 bme68x_bsec2 组件。

需要在您的配置中设置 I²C 才能使此传感器正常工作。

BME680 温度、压力、湿度与气体传感器。
# Minimal example configuration with common sensors
i2c:
bme680_bsec:
sensor:
- platform: bme680_bsec
temperature:
name: "BME680 Temperature"
pressure:
name: "BME680 Pressure"
humidity:
name: "BME680 Humidity"
iaq:
name: "BME680 IAQ"
id: iaq
co2_equivalent:
name: "BME680 CO2 Equivalent"
breath_voc_equivalent:
name: "BME680 Breath VOC Equivalent"
text_sensor:
- platform: bme680_bsec
iaq_accuracy:
name: "BME680 IAQ Accuracy"
- platform: template
name: "BME680 IAQ Classification"
icon: "mdi:checkbox-marked-circle-outline"
lambda: |-
if ( int(id(iaq).get_state()) <= 50) {
return {"Excellent"};
}
else if (int(id(iaq).get_state()) >= 51 && int(id(iaq).get_state()) <= 100) {
return {"Good"};
}
else if (int(id(iaq).get_state()) >= 101 && int(id(iaq).get_state()) <= 150) {
return {"Lightly polluted"};
}
else if (int(id(iaq).get_state()) >= 151 && int(id(iaq).get_state()) <= 200) {
return {"Moderately polluted"};
}
else if (int(id(iaq).get_state()) >= 201 && int(id(iaq).get_state()) <= 250) {
return {"Heavily polluted"};
}
else if (int(id(iaq).get_state()) >= 251 && int(id(iaq).get_state()) <= 350) {
return {"Severely polluted"};
}
else if (int(id(iaq).get_state()) >= 351) {
return {"Extremely polluted"};
}
else {
return {"error"};
}

配置变量:

  • address (可选, int): 手动指定传感器的 I²C 地址。默认为 0x76。另一个地址可以是 0x77。

  • temperature_offset (可选, float): 如果设备在外壳中且读数过高,则设置温度偏移。此值从 读数中减去(例如,如果传感器读数比预期高 5°C,请将其设置为 5),并同时校正相对湿度读数。默认为 0。

  • iaq_mode (可选, string): IAQ 计算模式。默认为 static,适用于静态应用(例如固定的室内设备)。 对于移动应用(例如便携式设备),可以设置为 mobile。

  • supply_voltage (可选, string): 传感器的供电电压。默认为 3.3V。 如果您的传感器为 1.8V 供电(例如 Pimoroni PIM357 BME680 Breakout 模块),可以设置为 1.8V。

  • sample_rate (可选, string): 采样率。默认为 lp,低功耗,每 3 秒采样一次。 可以设置为 ulp,超低功耗,每 5 分钟采样一次。 这控制气体相关传感器的采样率,并将决定传感器加热器的工作间隔。 默认情况下,此速率也将用于温度、压力和湿度传感器,但如果需要,可以在每个传感器级别进行覆盖。

  • state_save_interval (可选, Time): 将校准的 BSEC 算法状态保存到 闪存的最小时间间隔,这样设备重启时校准不必从零开始。默认为 6h。

  • id (可选, ID): 手动指定代码生成中使用的 ID。如果您有多个设备,请在传感器部分中使用此 ID 引用于正确的 BME680。此 ID 也将用于引用保存到闪存的校准 BSEC 算法状态。

配置变量:

  • bme680_bsec_id (可选, ID): 设置 bme680_bsec 组件的 ID 以供引用。处理多个设备时很有用。

  • temperature (可选): 温度传感器的信息。

    • sample_rate (可选, string): 此传感器的可选采样率覆盖。可以设置为 lp 低功耗,每 3 秒采样一次,或 ulp 超低功耗,每 5 分钟采样一次。
    • 来自 Sensor 的所有其他选项。
  • pressure (可选): 压力传感器的信息。

    • sample_rate (可选, string): 此传感器的可选采样率覆盖。可以设置为 lp 低功耗,每 3 秒采样一次,或 ulp 超低功耗,每 5 分钟采样一次。
    • 来自 Sensor 的所有其他选项。
  • humidity (可选): 湿度传感器的信息。

    • sample_rate (可选, string): 此传感器的可选采样率覆盖。可以设置为 lp 低功耗,每 3 秒采样一次,或 ulp 超低功耗,每 5 分钟采样一次。
    • 来自 Sensor 的所有其他选项。
  • gas_resistance (可选): 气体传感器的信息。

    • 来自 Sensor 的所有选项。
  • iaq (可选): IAQ 传感器的信息。

    • 来自 Sensor 的所有选项。
  • iaq_accuracy (可选): 数值 IAQ 精度传感器的信息。

    • 来自 Sensor 的所有选项。
  • co2_equivalent (可选): CO₂ 等效传感器的信息。

    • 来自 Sensor 的所有选项。
  • breath_voc_equivalent (可选): 呼吸 VOC 等效传感器的信息。

    • 来自 Sensor 的所有选项。

精度可以文本格式报告。

配置变量:

  • bme680_bsec_id (可选, ID): 设置 bme680_bsec 组件的 ID 以供引用。处理多个设备时很有用。

  • iaq_accuracy (可选): IAQ 精度传感器的信息。显示:稳定中、不确定、校准中、已校准。

以下配置展示了组件的所有可用传感器和可选设置。它还包含一个过滤示例,用于防范 异常值、限制发送到 Home Assistant 的更新数量,并减少其他系统(如用于存储历史数据的 influxdb)中的存储需求。

对于每个传感器,来自 Sensor 和 TextSensor 的所有其他选项也可用于过滤、自动化等。

bme680_bsec:
id: bme680_internal
address: 0x76
temperature_offset: 0
iaq_mode: static
supply_voltage: 3.3V
sample_rate: ulp
state_save_interval: 6h
sensor:
- platform: bme680_bsec
bme680_bsec_id: bme680_internal
temperature:
name: "BME680 Temperature"
sample_rate: lp
filters:
- median
pressure:
name: "BME680 Pressure"
sample_rate: lp
filters:
- median
humidity:
name: "BME680 Humidity"
sample_rate: lp
filters:
- median
gas_resistance:
name: "BME680 Gas Resistance"
filters:
- median
iaq:
name: "BME680 IAQ"
filters:
- median
iaq_accuracy:
name: "BME680 Numeric IAQ Accuracy"
co2_equivalent:
name: "BME680 CO2 Equivalent"
filters:
- median
breath_voc_equivalent:
name: "BME680 Breath VOC Equivalent"
filters:
- median
text_sensor:
- platform: bme680_bsec
iaq_accuracy:
name: "BME680 IAQ Accuracy"

以下配置展示了如何设置多个 BME680 设备。它们可以配置为使用相同的 I²C 总线或不同的总线,但请记住 BME680 只能设置为在 I²C 地址 0x76 或 0x77 上运行。对 BME680 设备的数量没有限制。

# I2C bus for the BME680 devices
i2c:
- id: "i2cbus_bme"
sda: GPIO18
scl: GPIO19
scan: true
# BME680 devices using BSEC library
bme680_bsec:
- id: bme680_internal
i2c_id: "i2cbus_bme"
address: 0x76
- id: bme680_external
i2c_id: "i2cbus_bme"
address: 0x77
sensor:
- platform: bme680_bsec
bme680_bsec_id: bme680_internal
temperature:
name: "IN_Temp"
pressure:
name: "IN_Press"
humidity:
name: "IN_RH"
iaq:
name: "IN_IAQ"
co2_equivalent:
name: "IN_CO2eq"
breath_voc_equivalent:
name: "IN_VOCeq"
- platform: bme680_bsec
bme680_bsec_id: bme680_external
temperature:
name: "OUT_Temperatura"
pressure:
name: "OUT_Pressione"
humidity:
name: "OUT_RH"
iaq:
name: "OUT_IAQ"
co2_equivalent:
name: "OUT_CO2eq"
breath_voc_equivalent:
name: "OUT_VOCeq"
text_sensor:
- platform: bme680_bsec
bme680_bsec_id: bme680_internal
iaq_accuracy:
name: "IN_IAQaccuracy"
- platform: bme680_bsec
bme680_bsec_id: bme680_external
iaq_accuracy:
name: "OUT_IAQaccuracy"

测量值使用 0 到 500 的指数刻度表示。该指数本身是通过使用乙醇气体 以及健康人类呼出气体中重要的 VOC 进行测试推导出来的。VOC 值本身源自几篇关于呼吸分析研究的出版物。BSEC 软件库定义级别如下:

IAQ 指数空气质量
0 - 50优秀
51 - 100良好
101 - 150轻度污染
151 - 200中度污染
201 - 250重度污染
251 - 350严重污染
> 351极度污染

所选的 b-VOC 气体如下:

化合物摩尔分数
乙烷5 ppm
异戊二烯10 ppm
乙醇10 ppm
丙酮50 ppm
一氧化碳15 ppm

BSEC 软件在后台自动校准以提供一致的 IAQ 性能。校准 过程考虑最近的测量历史,使得 50 的值对应”典型良好” 水平,200 的值对应”典型污染”水平。IAQ 精度传感器将给出以下值之一:

  • Stabilizing : 设备刚刚启动,传感器正在稳定(通常持续 5 分钟)

  • Uncertain : BSEC 的背景历史不确定。这通常意味着气体传感器数据过于 稳定,BSEC 无法明确定义其参考。

  • Calibrating : BSEC 发现了新的校准数据,目前正在校准。

  • Calibrated : BSEC 校准成功。

每隔一个 state_save_interval,或者在全校准达到后尽快,当前算法状态会保存到闪存 中,这样设备重启时不需要从零开始。