substitutions: node_name: !env_var co2ampel esphome: name: co2ampel_${node_name} platform: ESP32 board: esp32doit-devkit-v1 on_boot: - display.page.show: boot # manually define needed libs to avoid broken NeoPixelBus-esphome@2.5.7 (we use the upstream version 2.6.0 instead) platformio_options: lib_deps: NeoPixelBus@2.6.0, AsyncTCP-esphome, ESPAsyncTCP-esphome, AsyncTCP-esphome, AsyncMqttClient-esphome, ESPAsyncTCP-esphome, AsyncTCP-esphome, ArduinoJson-esphomelib@5.13.3, ESPAsyncWebServer-esphome ota: safe_mode: True password: !secret ota_passwd logger: level: DEBUG wifi: ssid: !secret wifi_ssid password: !secret wifi_passwd ap: ssid: "co2ampel" password: "" captive_portal: mqtt: broker: co2.cyber23.de topic_prefix: co2ampel/${node_name} birth_message: topic: co2ampel/${node_name}/status payload: online will_message: topic: co2ampel/${node_name}/status payload: offline uart: rx_pin: GPIO16 tx_pin: GPIO17 baud_rate: 9600 id: uart_mhz19 light: - platform: neopixelbus pin: GPIO4 num_leds: 12 name: "ws2812 ring" id: "ws2812" restore_mode: ALWAYS_OFF output: - platform: ledc pin: GPIO12 id: buzzer sensor: - platform: mhz19 update_interval: 10s automatic_baseline_calibration: true uart_id: uart_mhz19 temperature: name: ${node_name} Temperature id: mhz19_temp co2: name: ${node_name} PPM id: mhz19_co2 on_value: then: if: condition: sensor.in_range: id: mhz19_co2 above: 0 below: 800 then: - light.turn_off: id: ws2812 - display.page.show: co2 else: if: condition: sensor.in_range: id: mhz19_co2 above: 800 below: 1000 then: - light.turn_on: id: ws2812 brightness: 80% red: 50% green: 50% blue: 0% - display.page.show: co2 else: if: condition: sensor.in_range: id: mhz19_co2 above: 1000 then: - light.turn_on: id: ws2812 brightness: 100% red: 100% green: 0% blue: 0% # - output.turn_on: buzzer # - output.ledc.set_frequency: # id: buzzer # frequency: "5000Hz" # - output.set_level: # id: buzzer # level: "20%" # - delay: 10ms # - output.turn_off: buzzer - delay: 500ms - light.toggle: ws2812 - delay: 500ms - light.toggle: ws2812 - delay: 500ms - light.toggle: ws2812 - delay: 500ms - light.toggle: ws2812 - lambda: |- static int num_executions = 0; ESP_LOGD("main", "I am at execution number %d", num_executions); num_executions += 1; - display.page.show: co2 i2c: sda: GPIO21 scl: GPIO22 font: - file: "font.ttf" id: cust_font size: 70 display: - platform: ssd1306_i2c model: "SSD1306 128x64" address: 0x3C brightness: 100% update_interval: 10s pages: - id: boot lambda: |- it.printf(64, 0, id(cust_font), COLOR_ON, TextAlign::TOP_CENTER, ":-)"); - id: co2 lambda: |- int ergb; ergb = id(mhz19_co2).state/100; it.printf(64, 0, id(cust_font), COLOR_ON, TextAlign::TOP_CENTER, "%.0i", ergb); # it.printf(64, 16, id(cust_font), COLOR_ON, TextAlign::TOP_CENTER, "%.0fPPM", id(mhz19_co2).state); # it.printf(64, 40, id(cust_font),TextAlign::TOP_CENTER, "%.0f°C", id(mhz19_temp).state);