substitutions: name: "sleepingroom" friendly_name: "Luftqualität Schlafzimmer" esphome: name: ${name} friendly_name: ${friendly_name} name_add_mac_suffix: false project: name: sensor.${name} version: "1.0" min_version: 2021.9.0 on_boot: then: - light.turn_on: id: co2_light red: 0% green: 100% blue: 9% - delay: 1.5s - light.turn_on: id: co2_light red: 100% green: 75% blue: 0% - delay: 1.5s - light.turn_on: id: co2_light red: 100% green: 0% blue: 0% - delay: 1.5s - light.turn_on: id: co2_light red: 100% green: 75% blue: 0% - delay: 1.5s - light.turn_on: id: co2_light red: 0% green: 100% blue: 9% - text_sensor.template.publish: id: co2_warn state: "grün" - text_sensor.template.publish: id: pm25_warn state: "grün" esp32: board: nodemcu-32s framework: type: arduino wifi: ssid: "Voltage-legacy" password: !secret voltage_legacy_psk use_address: ${name}.home power_save_mode: high fast_connect: on # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Schlafzimmer Fallback Hotspot" password: !secret fallback_psk captive_portal: # Enable logging logger: level: DEBUG # Enable Home Assistant API api: encryption: key: !secret apikey # Enable over-the-air updates ota: password: !secret ota # Initialize I²C i2c: - id: bus_a sda: 13 scl: 16 scan: true # Initialize LEDC GPIOs output: - platform: ledc pin: GPIO17 id: led_red - platform: ledc pin: GPIO18 id: led_green max_power: 50% - platform: ledc pin: GPIO19 id: led_blue # Define RGB mode for LED light: - platform: rgb id: co2_light name: "CO2 Status LED" red: led_red green: led_green blue: led_blue internal: true # Initialize UART for Vindriktning sensor uart: rx_pin: GPIO26 baud_rate: 9600 # Create text sensor to represent CO2 LED warn state (somewhat redundant) text_sensor: - platform: template name: "Schlafzimmer CO2 Warnstufe" id: co2_warn - platform: template name: "Schlafzimmer Feinstaub Warnstufe" id: pm25_warn sensor: # WiFi signal strength - platform: wifi_signal name: "WiFi Signalstärke" update_interval: 60s # SCD30 CO2 + temperature + humidity sensor # * air quality category 0: LED is purple, sensor needs calibration (<380ppm) # • air quality category 1: LED is green (380-800ppm) # • air quality category 2: LED is yellow (900-1200ppm) # • air quality category 3: LED is orange/amber (1200 bis 1600ppm) # • air quality category 4: LED is red (1600-2000ppm) - platform: scd30 i2c_id: bus_a co2: name: "Schlafzimmer CO2" id: co2_value accuracy_decimals: 1 on_value_range: - below: 380 then: - text_sensor.template.publish: id: co2_warn state: "Kalibrierung nötig" - light.turn_on: id: co2_light red: 75% green: 0% blue: 100% - above: 380 below: 800 then: - text_sensor.template.publish: id: co2_warn state: "grün" - light.turn_on: id: co2_light red: 0% green: 100% blue: 0% - above: 800 below: 1200 then: - text_sensor.template.publish: id: co2_warn state: "gelb" - light.turn_on: id: co2_light red: 100% green: 100% blue: 0% - above: 1200 below: 1600 then: - text_sensor.template.publish: id: co2_warn state: "orange" - light.turn_on: id: co2_light red: 100% green: 75% blue: 0% - above: 1600 then: - text_sensor.template.publish: id: co2_warn state: "rot" - light.turn_on: id: co2_light red: 100% green: 0% blue: 0% temperature: name: "Schlafzimmer Temperatur" accuracy_decimals: 2 filters: - offset: -2.5 humidity: name: "Schlafzimmer Luftfeuchtigkeit" accuracy_decimals: 1 # SCD30 temp sensor is a bit off ambient_pressure_compensation: 1 automatic_self_calibration: True address: 0x61 update_interval: 60s # Vindriktning particulate matter sensor - platform: pm1006 pm_2_5: name: "Feinstaub PM 2.5µm" on_value_range: - above: 0 below: 35 then: - text_sensor.template.publish: id: pm25_warn state: "grün" - above: 35 below: 85 then: - text_sensor.template.publish: id: pm25_warn state: "orange" - above: 85 then: - text_sensor.template.publish: id: pm25_warn state: "rot" # Analog photo diode voltage - platform: adc pin: 32 name: "Spannung Photodiode" attenuation: 11db update_interval: 1s internal: true on_value_range: - below: 0.25 then: light.turn_on: id: co2_light brightness: 30% - above: 0.5 then: light.turn_on: id: co2_light brightness: 60% # IR Receiver, dumps all received values into serial remote_receiver: pin: number: 23 inverted: True dump: all # IR Transmitter remote_transmitter: pin: GPIO22 # Infrared remotes use a 50% carrier signal carrier_duty_percent: 50% # Temporary test switches switch: - platform: template name: Yamaha Power Button turn_on_action: - remote_transmitter.transmit_nec: address: 0x7E81 command: 0x54AB - platform: template name: Samsung Power Button turn_on_action: - remote_transmitter.transmit_samsung: data: 0xE0E040BF nbits: 32