diff --git a/esphome/livingroom.yaml b/esphome/livingroom.yaml new file mode 100644 index 0000000..819703b --- /dev/null +++ b/esphome/livingroom.yaml @@ -0,0 +1,236 @@ +esphome: + name: livingroom + platform: ESP32 + board: nodemcu-32s + + 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" + +wifi: + ssid: "Voltage-legacy" + password: !secret voltage_legacy_psk + use_address: livingroom.home + power_save_mode: high + fast_connect: on + + # Enable fallback hotspot (captive portal) in case wifi connection fails + ap: + ssid: "Wohnzimmer Fallback Hotspot" + password: !secret fallback_psk + +captive_portal: + +# Enable logging +logger: + level: DEBUG + +# Enable Home Assistant API +api: + password: !secret api + +# 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: "Wohnzimmer CO2 Warnstufe" + id: co2_warn + - platform: template + name: "Wohnzimmer 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 to 1600ppm) + # • air quality category 4: LED is red (1600-2000ppm) + - platform: scd30 + i2c_id: bus_a + co2: + name: "Wohnzimmer 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: "Wohnzimmer Temperatur" + accuracy_decimals: 2 + humidity: + name: "Wohnzimmer Luftfeuchtigkeit" + accuracy_decimals: 1 + # SCD30 temp sensor is a bit off + temperature_offset: 1.5 °C + ambient_pressure_compensation: 1 + automatic_self_calibration: True + address: 0x61 + update_interval: 60s + # Vindriktning particulate matter sensor + - platform: pm1006 + pm_2_5: + name: "Wohnzimmer 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.4 + then: + light.turn_on: + id: co2_light + brightness: 60% diff --git a/esphome/livingroom/partitions.csv b/esphome/livingroom/partitions.csv new file mode 100644 index 0000000..f846601 --- /dev/null +++ b/esphome/livingroom/partitions.csv @@ -0,0 +1,6 @@ +nvs, data, nvs, 0x009000, 0x005000, +otadata, data, ota, 0x00e000, 0x002000, +app0, app, ota_0, 0x010000, 0x1C0000, +app1, app, ota_1, 0x1D0000, 0x1C0000, +eeprom, data, 0x99, 0x390000, 0x001000, +spiffs, data, spiffs, 0x391000, 0x00F000