substitutions: device: dimmer name: Dimmer area: Basement comment: "${area} | Pain cave fan" esphome: name: mcu-${device} friendly_name: ${name} area: ${area} comment: ${comment} on_loop: then: lambda: |- static uint32_t last_state = 0; auto state = App.get_app_state(); if (state != last_state) { if (state & STATUS_LED_ERROR) { auto call = id(led).turn_on(); call.set_effect("ERROR"); call.perform(); } else if (state & STATUS_LED_WARNING) { auto call = id(led).turn_on(); call.set_effect("BOOT"); call.perform(); } else { auto call = id(led).turn_off(); call.perform(); } last_state = state; } esp32: board: m5stack-atom framework: type: esp-idf version: 5.3.2 platform_version: 53.03.12 external_components: - source: github://pr#7072 components: ac_dimmer refresh: 0s - source: components packages: common: !include common/common.yaml light: - platform: monochromatic output: dimmer1 name: Exercise Room Fan default_transition_length: 10s - platform: esp32_rmt_led_strip name: LED id: led rgb_order: GRB pin: 27 num_leds: 1 # rmt_channel: 0 chipset: ws2812 restore_mode: ALWAYS_OFF effects: - strobe: name: "BEACON" colors: - state: true red: 0% green: 0% blue: 50% duration: 200ms - state: false duration: 200ms - state: true red: 0% green: 0% blue: 50% duration: 200ms - state: false duration: 10s - lambda: name: "ERROR" update_interval: 0.5s lambda: |- static bool state = false; auto call = id(led).turn_on(); call.set_transition_length(500); call.set_rgb(1, 0, 0); if (!state) { call.set_brightness(1); } else { // If using 0, it freaks Home Assistant UI. call.set_brightness(0.01); } call.perform(); state = !state; - lambda: name: "BOOT" update_interval: 0.5s lambda: |- static bool state = false; auto call = id(led).turn_on(); call.set_transition_length(500); call.set_rgb(0, 1, 0); if (!state) { call.set_brightness(1); } else { // If using 0, it freaks Home Assistant UI. call.set_brightness(0.01); } call.perform(); state = !state; output: - platform: ac_dimmer id: dimmer1 # min_power: 0.60 # zero_means_zero: true gate_pin: 22 zero_cross_pin: number: 25 mode: INPUT inverted: yes