--- substitutions: macsuffix: "27afc1" wifi: power_save_mode: LIGHT improv_serial: globals: # Configure CO2 indicator thresholds - id: threshold1 type: float initial_value: '750' - id: threshold2 type: float initial_value: '1200' - id: threshold3 type: float initial_value: '1500' - id: threshold4 type: float initial_value: '1750' - id: threshold5 type: float initial_value: '2000' # Configure the brightness values for the LED indicator - id: dim type: float initial_value: '0.35' - id: bright type: float initial_value: '0.5' esphome: name: "d1-mini-scd40-${macsuffix}" project: name: "cccda.d1-mini-scd40" version: "2023052001" comment: "https://git.darmstadt.ccc.de/cda/co2-sensor-workshop/" on_boot: then: - light.turn_on: id: indicator red: 0 green: 0.2 blue: 1.0 effect: "None" brightness: 30% esp8266: board: d1_mini captive_portal: logger: level: DEBUG logs: light: INFO sensor: INFO web_server: port: 80 api: reboot_timeout: 0s # Enable either SNTP or Home Assistant as a time source time: # https://esphome.io/components/time/sntp.html - platform: sntp id: time_source timezone: "Europe/Berlin" servers: - 10.152.0.1 # Disable LED indicator during nighttime # https://esphome.io/components/time/index.html#on-time-trigger on_time: - hours: 8 minutes: 0 seconds: 0 then: - light.turn_on: # cold white id: indicator red: 0.9 green: 0.9 blue: 0.9 effect: "None" brightness: !lambda |- return id(dim); - logger.log: "Leaving night mode via on_time, enabling LED indicator." - hours: 22 minutes: 0 seconds: 0 then: - light.turn_off: indicator - logger.log: "Entering night mode via on_time, disabling LED indicator." on_time_sync: then: - if: condition: lambda: | return (id(time_source).now().hour < 8 || id(time_source).now().hour >= 22); then: - light.turn_off: indicator - logger.log: "Entering night mode via on_time_sync, disabling LED indicator." i2c: scl: GPIO5 sda: GPIO4 scan: false sensor: - platform: scd4x id: scd40 # low power mode measurement_mode: low_power_periodic update_interval: 30s # Apply a temperature correction offset, that gets substracted # from the measured temperature, defaults to 4.0 #temperature_offset: 1.5 co2: name: "${macsuffix} CO2" on_value: then: - if: condition: and: - lambda: return (x < id(threshold1)); - light.is_on: indicator then: - light.turn_on: # cold white id: indicator red: 0.9 green: 0.9 blue: 0.9 effect: "None" brightness: !lambda |- return id(dim); - if: condition: and: - lambda: return (x > id(threshold1) and x < id(threshold2)); - light.is_on: indicator then: - light.turn_on: # neutral white id: indicator red: 1.0 green: 0.84 blue: 0.54 effect: "None" brightness: !lambda |- return id(bright); - if: condition: and: - lambda: return (x > id(threshold2) and x < id(threshold3)); - light.is_on: indicator then: - light.turn_on: # warmwhite id: indicator red: 1.0 green: 0.75 blue: 0.0 effect: "None" brightness: !lambda |- return id(bright); - if: condition: and: - lambda: return (x > id(threshold3) and x < id(threshold4)); - light.is_on: indicator then: - light.turn_on: # orange id: indicator red: 1.0 green: 0.5 blue: 0.0 effect: "None" brightness: !lambda |- return id(bright); - if: condition: and: - lambda: return (x > id(threshold4) and x < id(threshold5)); - light.is_on: indicator then: - light.turn_on: # red id: indicator red: 1.0 green: 0.0 blue: 0.0 effect: "None" brightness: !lambda |- return id(bright); - if: condition: - lambda: return (x > id(threshold5)); - light.is_on: indicator then: - light.turn_on: # red pulse id: indicator red: 1.0 green: 0.0 blue: 0.0 effect: "Fast Pulse" brightness: !lambda |- return id(bright); humidity: name: "${macsuffix} Humidity" temperature: name: "${macsuffix} Temperature" button: - platform: template name: "${macsuffix} Force CO2 Sensor Calibration" icon: "mdi:restart" on_press: then: - scd4x.perform_forced_calibration: value: !lambda |- return id(co2_sensor_calibration_normal).state; id: scd40 number: - platform: template id: co2_sensor_calibration_normal name: "${macsuffix} C02 Sensor Calibration Normal" mode: "box" optimistic: true unit_of_measurement: "ppm" # Average outdoor value for March 2023 # https://www.co2.earth/daily-co2 initial_value: 421 min_value: 0 max_value: 1000000 step: 1 light: - platform: neopixelbus id: indicator name: "${macsuffix} CO2 Level Indicator" type: GRB variant: WS2812 pin: GPIO0 num_leds: 3 effects: - pulse: name: "Fast Pulse" transition_length: 0.5s update_interval: 0.5s