esphome / feature-requests

ESPHome Feature Request Tracker
https://esphome.io/
416 stars 26 forks source link

Add support for Sensirion SEN5X (SEN55, SEN54, SEN50) environmental sensors for PM2.5, NOx, and more #1689

Closed sg1888 closed 2 years ago

sg1888 commented 2 years ago

Describe the problem you have/What new integration you would like

I'd like you to add support for the newest line of PM sensors from Sensirion - the SEN5x series.

Please describe your use case for this integration and alternatives you've tried:

Sensirion has released their newest line of air quality sensors, the SEN5x series. These sensors combine the best features of many of their other sensors supported on ESPHome, including the SPS30, SHT30, and more.

These sensors are also cheaper than Sensirion's SPS30 PM sensor (~$34 for the SEN54 vs. $55 for the SPS30 on DigiKey). I suspect most users will ultimately gravitate to the the SEN5x series as it offers more bang for the buck.

Adding this sensor would be a great addition to ESPHome!

Additional context

Relevant Links: SEN55 - (PM, RH/T, VOC, NOx) - https://sensirion.com/products/catalog/SEN55/ SEN54 - (PM, RH/T, VOC) - https://sensirion.com/products/catalog/SEN54/ SEN50 - (PM) - https://sensirion.com/products/catalog/SEN50/

martgras commented 2 years ago

I have a pull request ready to submit but it relies on https://github.com/esphome/esphome/pull/3374 therefore I didn't submit it yet.

The current state of documentation is at https://github.com/martgras/esphome-docs/blob/sen5x/components/sensor/sen5x.rst

Please give this a try to test my code:

external_components:
  - source: github://martgras/esphome@sen5x-support
    components: [ sensirion_common, sen5x]
substitutions:
  updates: 10s

esphome:
  name: test-sen54

esp32:
  board: pico32
  framework:
    type: arduino

logger:
  level: DEBUG

wifi:
  ssid: !secret wifi_sid
  password: !secret wifi_password

api:
  password: !secret api_password
  reboot_timeout: 0s

ota:
  password: !secret ota_password

i2c:
  - id: bus_a
    sda: 25 #32
    scl: 21 #26
    scan: True

sensor:
  - platform: uptime
    name: Uptime Sensor
    id: uptime_sensor
    update_interval: 60s

  - platform: wifi_signal
    name: "WiFi Signal"
    update_interval: ${updates}

  - platform: sen5x
    id: sen54
    temperature:
      name: "Temperature"
      accuracy_decimals: 1
    humidity:
      name: "Humidity"
      accuracy_decimals: 0
    pm_1_0:
      name: " PM <1µm Weight concentration"
      id: pm_1_0
      accuracy_decimals: 1
    pm_2_5:
      name: " PM <2.5µm Weight concentration"
      id: pm_2_5
      accuracy_decimals: 1
    pm_4_0:
      name: " PM <4µm Weight concentration"
      id: pm_4_0
      accuracy_decimals: 1
    pm_10_0:
      name: " PM <10µm Weight concentration"
      id: pm_10_0
      accuracy_decimals: 1
    voc:
      name: "VOC"
      algorithm_tuning:
        index_offset: 100
        learning_time_offset_hours: 12
        learning_time_gain_hours: 12
        gating_max_duration_minutes: 180
        std_initial: 50
        gain_factor: 230
    temperature_compensation:
      offset: 0
      normalized_offset_slope: 0
      time_constant: 0
#    acceleration_mode: low
    store_baseline: true
    address: 0x69
    update_interval: ${updates}

button:
  - platform: template
    name: "Trigger fan cleaning"
    on_press:
      - sen5x.start_autoclean_fan: sen54
web_server: