145 lines
3.2 KiB
YAML
145 lines
3.2 KiB
YAML
esphome:
|
|
name: office-sensor
|
|
friendly_name: Office Sensor
|
|
|
|
# Boot sequence - start with WiFi connecting effect
|
|
on_boot:
|
|
- priority: 600
|
|
then:
|
|
- logger.log: "Device booting, starting WiFi connection"
|
|
- light.turn_on:
|
|
id: status_led
|
|
effect: "wifi_connecting"
|
|
|
|
esp32:
|
|
board: esp32-s3-devkitc-1
|
|
framework:
|
|
type: esp-idf
|
|
sdkconfig_options:
|
|
CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240: "y"
|
|
CONFIG_ESP32S3_DATA_CACHE_64KB: "y"
|
|
CONFIG_ESP32S3_DATA_CACHE_LINE_64B: "y"
|
|
CONFIG_AUDIO_BOARD_CUSTOM: "y"
|
|
|
|
psram:
|
|
mode: octal
|
|
speed: 80MHz
|
|
|
|
# Enable logging
|
|
logger:
|
|
|
|
# I2C configuration for sensors
|
|
i2c:
|
|
sda: GPIO4
|
|
scl: GPIO5
|
|
scan: true
|
|
id: scd40_bus
|
|
|
|
# Enable Home Assistant API
|
|
api:
|
|
encryption:
|
|
key: "ZGLTCJYjvXIJA0LIP8o/k9Vp+Tia9AhHgXZ/WHCQ1gQ="
|
|
|
|
# API connection event handlers
|
|
on_client_connected:
|
|
- logger.log: "Home Assistant API connected"
|
|
- light.turn_off: status_led
|
|
|
|
on_client_disconnected:
|
|
- logger.log: "Home Assistant API disconnected"
|
|
- light.turn_on:
|
|
id: status_led
|
|
effect: "ha_connecting"
|
|
|
|
actions:
|
|
- action: calibrate_co2_value
|
|
variables:
|
|
co2_ppm: int
|
|
then:
|
|
- scd4x.perform_forced_calibration:
|
|
value: !lambda "return co2_ppm;"
|
|
id: scd40_sensor
|
|
- action: factory_reset_co2_sensor
|
|
then:
|
|
- scd4x.factory_reset: scd40_sensor
|
|
|
|
# Allow Over-The-Air updates
|
|
ota:
|
|
- platform: esphome
|
|
password: !secret ota_password
|
|
|
|
wifi:
|
|
ssid: !secret wifi_ssid
|
|
password: !secret wifi_password
|
|
|
|
# WiFi connection event handlers
|
|
on_connect:
|
|
- logger.log: "WiFi connected, attempting Home Assistant connection"
|
|
- light.turn_on:
|
|
id: status_led
|
|
effect: "ha_connecting"
|
|
|
|
on_disconnect:
|
|
- logger.log: "WiFi disconnected"
|
|
- light.turn_on:
|
|
id: status_led
|
|
effect: "wifi_connecting"
|
|
|
|
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
|
ap:
|
|
ssid: "Living-Room-Sensor Hotspot"
|
|
password: !secret ota_password
|
|
|
|
# Status LED configuration
|
|
light:
|
|
- platform: esp32_rmt_led_strip
|
|
id: status_led
|
|
name: "Status LED"
|
|
pin: GPIO48
|
|
num_leds: 1
|
|
chipset: ws2812
|
|
rgb_order: GRB
|
|
effects:
|
|
# Yellow blinking during WiFi connection
|
|
- strobe:
|
|
name: "wifi_connecting"
|
|
colors:
|
|
- state: true
|
|
brightness: 80%
|
|
red: 100%
|
|
green: 100%
|
|
blue: 0%
|
|
duration: 500ms
|
|
- state: false
|
|
duration: 500ms
|
|
# Orange blinking during Home Assistant connection
|
|
- strobe:
|
|
name: "ha_connecting"
|
|
colors:
|
|
- state: true
|
|
brightness: 80%
|
|
red: 100%
|
|
green: 65%
|
|
blue: 0%
|
|
duration: 300ms
|
|
- state: false
|
|
duration: 300ms
|
|
|
|
# SCD40 CO2, Temperature, and Humidity Sensor
|
|
sensor:
|
|
- platform: scd4x
|
|
id: scd40_sensor
|
|
co2:
|
|
name: "Office CO2"
|
|
temperature:
|
|
name: "Office Temperature"
|
|
humidity:
|
|
name: "Office Humidity"
|
|
measurement_mode: low_power_periodic
|
|
update_interval: 30s
|
|
|
|
button:
|
|
- platform: restart
|
|
name: "Restart Sensor"
|
|
id: restart_button
|