Add d1-mini-scd40-27afc1

This commit is contained in:
clerie 2024-09-19 21:52:14 +02:00
parent 334169533e
commit 979f9c0ae1
2 changed files with 252 additions and 0 deletions

5
nodes/d1-mini-scd40-27afc1/.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
# Gitignore settings for ESPHome
# This is an example and may include too much for your use-case.
# You can modify this file to suit your needs.
/.esphome/
/secrets.yaml

View File

@ -0,0 +1,247 @@
---
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.5'
- id: bright
type: float
initial_value: '1.0'
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:
# Average outdoor value for March 2023
# https://www.co2.earth/daily-co2
value: 421
id: scd40
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