esphomeconfig/nodes/d1-mini-scd40-fee158/firmware.yaml

261 lines
6.5 KiB
YAML

---
substitutions:
macsuffix: "fee158"
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"
# 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