---
substitutions:
  device: dimmer
  name: Dimmer
  area: Basement
  comment: 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) {
            id(led).turn_on().set_effect('ERROR').perform();
          } else if (state & STATUS_LED_WARNING) {
            id(led).turn_on().set_effect('BOOT').perform();
          } else {
            id(led).turn_off().perform();
          }
          last_state = state;
        }

esp32:
  variant: esp32
  toolchain: esp-idf
  framework:
    type: esp-idf

packages:
  common: !include common/common.yaml

# fan:
#   - platform: speed
#     output: fan_dimmer1
#     id: fan1
#     name: Exercise Room
    # speed_count: 5
    # preset_modes:
    #   - 50%
    #   - 60%
    #   - 70%
    #   - 80%
    #   - 90%
    #   - 100%
    # on_preset_set:
    #   then:
    #     - fan.turn_on:
    #         id: fan1
    #         speed: !lambda |-
    #           return x.c_str();
    # # default_transition_length: 10s

button:
  - platform: template
    name: Exercise Room Fan 50 %
    on_press:
      then:
        - output.set_level:
            id: dimmer1
            level: 50%
  - platform: template
    name: Exercise Room Fan 60 %
    on_press:
      then:
        - output.set_level:
            id: dimmer1
            level: 60%
  - platform: template
    name: Exercise Room Fan 70 %
    on_press:
      then:
        - output.set_level:
            id: dimmer1
            level: 70%
  - platform: template
    name: Exercise Room Fan 80 %
    on_press:
      then:
        - output.set_level:
            id: dimmer1
            level: 80%
  - platform: template
    name: Exercise Room Fan 90 %
    on_press:
      then:
        - output.set_level:
            id: dimmer1
            level: 90%
  - platform: template
    name: Exercise Room Fan 100 %
    on_press:
      then:
        - output.set_level:
            id: dimmer1
            level: 100%
  - platform: template
    name: Exercise Room Fan +10 %
    on_press:
      then:
        - light.dim_relative:
            id: fan_dimmer1
            relative_brightness: 10%
  - platform: template
    name: Exercise Room Fan -10 %
    on_press:
      then:
        - light.dim_relative:
            id: fan_dimmer1
            relative_brightness: -10%

light:
  - platform: monochromatic
    output: dimmer1
    id: fan_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
