---
esphome:
  name: $device_name
  comment: $device_comment
  build_path: build/test3
  on_boot:
    - if:
        condition:
          - api.connected
          - wifi.connected
          - time.has_time
        then:
          - logger.log: Have time

esp8266:
  board: d1_mini
  early_pin_init: true

substitutions:
  device_name: test3
  device_comment: test3 device

api:
  port: 8000
  password: pwd
  reboot_timeout: 0min
  encryption:
    key: bOFFzzvfpg5DB94DuBGLXD/hMnhpDKgP9UQyBulwWVU=
  services:
    - service: hello_world
      variables:
        name: string
      then:
        - logger.log:
            format: Hello World %s!
            args:
              - name.c_str()
    - service: empty_service
      then:
        - logger.log: Service Called
    - service: all_types
      variables:
        bool_: bool
        int_: int
        float_: float
        string_: string
      then:
        - logger.log: Something happened
    - service: array_types
      variables:
        bool_arr: bool[]
        int_arr: int[]
        float_arr: float[]
        string_arr: string[]
      then:
        - logger.log:
            # yamllint disable rule:line-length
            format: "Bool: %s (%u), Int: %d (%u), Float: %f (%u), String: %s (%u)"
            # yamllint enable rule:line-length
            args:
              - YESNO(bool_arr[0])
              - bool_arr.size()
              - int_arr[0]
              - int_arr.size()
              - float_arr[0]
              - float_arr.size()
              - string_arr[0].c_str()
              - string_arr.size()
    - service: dfplayer_next
      then:
        - dfplayer.play_next:
    - service: dfplayer_previous
      then:
        - dfplayer.play_previous:
    - service: dfplayer_play
      variables:
        file: int
      then:
        - dfplayer.play: !lambda "return file;"
    - service: dfplayer_play_loop
      variables:
        file: int
        loop_: bool
      then:
        - dfplayer.play:
            file: !lambda "return file;"
            loop: !lambda "return loop_;"
    - service: dfplayer_play_folder
      variables:
        folder: int
        file: int
      then:
        - dfplayer.play_folder:
            folder: !lambda "return folder;"
            file: !lambda "return file;"

    - service: dfplayer_play_loo_folder
      variables:
        folder: int
      then:
        - dfplayer.play_folder:
            folder: !lambda "return folder;"
            loop: true

    - service: dfplayer_set_device
      variables:
        device: int
      then:
        - dfplayer.set_device:
            device: TF_CARD

    - service: dfplayer_set_volume
      variables:
        volume: int
      then:
        - dfplayer.set_volume: !lambda "return volume;"
    - service: dfplayer_set_eq
      variables:
        preset: int
      then:
        # yamllint disable rule:line-length
        - dfplayer.set_eq: !lambda "return static_cast<dfplayer::EqPreset>(preset);"
        # yamllint enable rule:line-length

    - service: dfplayer_sleep
      then:
        - dfplayer.sleep

    - service: dfplayer_reset
      then:
        - dfplayer.reset

    - service: dfplayer_start
      then:
        - dfplayer.start

    - service: dfplayer_pause
      then:
        - dfplayer.pause

    - service: dfplayer_stop
      then:
        - dfplayer.stop

    - service: dfplayer_random
      then:
        - dfplayer.random

    - service: dfplayer_volume_up
      then:
        - dfplayer.volume_up

    - service: dfplayer_volume_down
      then:
        - dfplayer.volume_down

    - service: battery_level_percent
      variables:
        level_percent: int
      then:
        - tm1651.set_level_percent:
            id: tm1651_battery
            level_percent: !lambda "return level_percent;"
    - service: battery_level
      variables:
        level: int
      then:
        - tm1651.set_level:
            id: tm1651_battery
            level: !lambda "return level;"
    - service: battery_brightness
      variables:
        brightness: int
      then:
        - tm1651.set_brightness:
            id: tm1651_battery
            brightness: !lambda "return brightness;"
    - service: battery_turn_on
      then:
        - tm1651.turn_on:
            id: tm1651_battery
    - service: battery_turn_on
      then:
        - tm1651.turn_off:
            id: tm1651_battery
    - service: pid_set_control_parameters
      then:
        - climate.pid.set_control_parameters:
            id: pid_climate
            kp: 1.0
            kd: 1.0
            ki: 1.0
    - service: fingerprint_grow_enroll
      variables:
        finger_id: int
        num_scans: int
      then:
        - fingerprint_grow.enroll:
            finger_id: !lambda "return finger_id;"
            num_scans: !lambda "return num_scans;"
    - service: fingerprint_grow_cancel_enroll
      then:
        - fingerprint_grow.cancel_enroll:
    - service: fingerprint_grow_delete
      variables:
        finger_id: int
      then:
        - fingerprint_grow.delete:
            finger_id: !lambda "return finger_id;"
    - service: fingerprint_grow_delete_all
      then:
        - fingerprint_grow.delete_all:

wifi:
  ssid: "MySSID"
  password: "password1"

network:
  enable_ipv6: true

uart:
  - id: uart_1
    tx_pin:
      number: GPIO1
      inverted: true
    rx_pin: GPIO3
    baud_rate: 115200
  - id: uart_2
    tx_pin: GPIO4
    rx_pin: GPIO5
    baud_rate: 9600
  - id: uart_3
    tx_pin: GPIO4
    rx_pin: GPIO5
    baud_rate: 4800
  - id: uart_4
    tx_pin: GPIO4
    rx_pin: GPIO5
    baud_rate: 9600
  - id: uart_5
    tx_pin: GPIO4
    rx_pin: GPIO5
    baud_rate: 9600
  - id: uart_6
    tx_pin: GPIO4
    rx_pin: GPIO5
    baud_rate: 9600
  - id: uart_7
    tx_pin: GPIO4
    rx_pin: GPIO5
    baud_rate: 38400
  - id: uart_8
    tx_pin: GPIO4
    rx_pin: GPIO5
    baud_rate: 4800
    parity: NONE
    stop_bits: 2
    # Specifically added for testing debug with no options at all.
    debug:
  - id: uart_9
    tx_pin: GPIO4
    rx_pin: GPIO5
    baud_rate: 9600
  - id: uart_10
    tx_pin: GPIO4
    rx_pin: GPIO5
    baud_rate: 9600
  - id: uart_11
    tx_pin: GPIO4
    rx_pin: GPIO5
    baud_rate: 9600
  - id: uart_12
    tx_pin: GPIO4
    rx_pin: GPIO5
    baud_rate: 9600

modbus:
  uart_id: uart_1

vbus:
  uart_id: uart_4

ota:
  safe_mode: true
  port: 3286
  reboot_timeout: 15min

logger:
  hardware_uart: UART1
  level: DEBUG
  esp8266_store_log_strings_in_flash: true

debug:

improv_serial:
  next_url: https://esphome.io/?name={{device_name}}&version={{esphome_version}}&ip={{ip_address}}

deep_sleep:
  run_duration: 20s
  sleep_duration: 50s

wled:

adalight:

sensor:
  - platform: daly_bms
    voltage:
      name: Battery Voltage
    current:
      name: Battery Current
    battery_level:
      name: Battery Level
    max_cell_voltage:
      name: Max Cell Voltage
    max_cell_voltage_number:
      name: Max Cell Voltage Number
    min_cell_voltage:
      name: Min Cell Voltage
    min_cell_voltage_number:
      name: Min Cell Voltage Number
    max_temperature:
      name: Max Temperature
    max_temperature_probe_number:
      name: Max Temperature Probe Number
    min_temperature:
      name: Min Temperature
    min_temperature_probe_number:
      name: Min Temperature Probe Number
    remaining_capacity:
      name: Remaining Capacity
    cells_number:
      name: Cells Number
    temperature_1:
      name: Temperature 1
    temperature_2:
      name: Temperature 2

  - platform: homeassistant
    entity_id: sensor.hello_world
    id: ha_hello_world

  - platform: hydreon_rgxx
    model: RG 9
    uart_id: uart_6
    id: hydreon_rg9
    moisture:
      name: hydreon_rain
      id: hydreon_rain
    temperature:
      name: hydreon_temperature
    disable_led: true

  - platform: hydreon_rgxx
    model: RG_15
    uart_id: uart_6
    acc:
      name: hydreon_acc
    event_acc:
      name: hydreon_event_acc
    total_acc:
      name: hydreon_total_acc
    r_int:
      name: hydreon_r_int

  - platform: adc
    pin: VCC
    id: my_sensor

  - platform: binary_sensor_map
    name: Binary Sensor Map
    type: group
    channels:
      - binary_sensor: bin1
        value: 10.0
      - binary_sensor: bin2
        value: 15.0
      - binary_sensor: bin3
        value: 100.0

  - platform: binary_sensor_map
    name: Binary Sensor Map
    type: sum
    channels:
      - binary_sensor: bin1
        value: 10.0
      - binary_sensor: bin2
        value: 15.0
      - binary_sensor: bin3
        value: 100.0

  - platform: binary_sensor_map
    name: Binary Sensor Map
    type: bayesian
    prior: 0.4
    observations:
      - binary_sensor: bin1
        prob_given_true: 0.9
        prob_given_false: 0.4
      - binary_sensor: bin2
        prob_given_true: 0.7
        prob_given_false: 0.05
      - binary_sensor: bin3
        prob_given_true: 0.8
        prob_given_false: 0.2

  - platform: bl0939
    uart_id: uart_8
    voltage:
      name: BL0939 Voltage
    current_1:
      name: BL0939 Current 1
    current_2:
      name: BL0939 Current 2
    active_power_1:
      name: BL0939 Active Power 1
    active_power_2:
      name: BL0939 Active Power 2
    energy_1:
      name: BL0939 Energy 1
    energy_2:
      name: BL0939 Energy 2
    energy_total:
      name: BL0939 Total energy
  - platform: bl0940
    uart_id: uart_3
    voltage:
      name: BL0940 Voltage
    current:
      name: BL0940 Current
    power:
      name: BL0940 Power
    energy:
      name: BL0940 Energy
    internal_temperature:
      name: BL0940 Internal temperature
    external_temperature:
      name: BL0940 External temperature
  - platform: bl0942
    uart_id: uart_3
    voltage:
      name: BL0942 Voltage
    current:
      name: BL0942 Current
    power:
      name: BL0942 Power
    energy:
      name: BL0942 Energy
    frequency:
      name: BL0942 Frequency
  - platform: pzem004t
    uart_id: uart_3
    voltage:
      name: PZEM004T Voltage
    current:
      name: PZEM004T Current
    power:
      name: PZEM004T Power
  - platform: pzemac
    id: pzemac1
    voltage:
      name: PZEMAC Voltage
    current:
      name: PZEMAC Current
    power:
      name: PZEMAC Power
    energy:
      name: PZEMAC Energy
    frequency:
      name: PZEMAC Frequency
    power_factor:
      name: PZEMAC Power Factor
  - platform: pzemdc
    id: pzemdc1
    voltage:
      name: PZEMDC Voltage
    current:
      name: PZEMDC Current
    power:
      name: PZEMDC Power
    energy:
      name: PZEMDC Energy

  - platform: pmsx003
    uart_id: uart_9
    type: PMSX003
    pm_1_0:
      name: PM 1.0 Concentration
    pm_2_5:
      name: PM 2.5 Concentration
    pm_10_0:
      name: PM 10.0 Concentration
    pm_1_0_std:
      name: PM 1.0 Standard Atmospher Concentration
    pm_2_5_std:
      name: PM 2.5 Standard Atmospher Concentration
    pm_10_0_std:
      name: PM 10.0 Standard Atmospher Concentration
    pm_0_3um:
      name: Particulate Count >0.3um
    pm_0_5um:
      name: Particulate Count >0.5um
    pm_1_0um:
      name: Particulate Count >1.0um
    pm_2_5um:
      name: Particulate Count >2.5um
    pm_5_0um:
      name: Particulate Count >5.0um
    pm_10_0um:
      name: Particulate Count >10.0um
    update_interval: 30s
  - platform: pmsx003
    uart_id: uart_5
    type: PMS5003T
    pm_1_0:
      name: PM 1.0 Concentration
    pm_2_5:
      name: PM 2.5 Concentration
    pm_10_0:
      name: PM 10.0 Concentration
    pm_1_0_std:
      name: PM 1.0 Standard Atmospher Concentration
    pm_2_5_std:
      name: PM 2.5 Standard Atmospher Concentration
    pm_10_0_std:
      name: PM 10.0 Standard Atmospher Concentration
    pm_0_3um:
      name: Particulate Count >0.3um
    pm_0_5um:
      name: Particulate Count >0.5um
    pm_1_0um:
      name: Particulate Count >1.0um
    pm_2_5um:
      name: Particulate Count >2.5um
    temperature:
      name: PMS Temperature
    humidity:
      name: PMS Humidity
  - platform: pmsx003
    uart_id: uart_6
    type: PMS5003ST
    pm_1_0:
      name: PM 1.0 Concentration
    pm_2_5:
      name: PM 2.5 Concentration
    pm_10_0:
      name: PM 10.0 Concentration
    pm_1_0_std:
      name: PM 1.0 Standard Atmospher Concentration
    pm_2_5_std:
      name: PM 2.5 Standard Atmospher Concentration
    pm_10_0_std:
      name: PM 10.0 Standard Atmospher Concentration
    pm_0_3um:
      name: Particulate Count >0.3um
    pm_0_5um:
      name: Particulate Count >0.5um
    pm_1_0um:
      name: Particulate Count >1.0um
    pm_2_5um:
      name: Particulate Count >2.5um
    pm_5_0um:
      name: Particulate Count >5.0um
    pm_10_0um:
      name: Particulate Count >10.0um
    temperature:
      name: PMS Temperature
    humidity:
      name: PMS Humidity
    formaldehyde:
      name: PMS Formaldehyde Concentration
  - platform: cse7761
    uart_id: uart_7
    voltage:
      name: CSE7761 Voltage
    current_1:
      name: CSE7761 Current 1
    current_2:
      name: CSE7761 Current 2
    active_power_1:
      name: CSE7761 Active Power 1
    active_power_2:
      name: CSE7761 Active Power 2
  - platform: cse7766
    uart_id: uart_3
    voltage:
      name: CSE7766 Voltage
    current:
      name: CSE7766 Current
    power:
      name: CSE776 Power

  - platform: fingerprint_grow
    fingerprint_count:
      name: Fingerprint Count
    status:
      name: Fingerprint Status
    capacity:
      name: Fingerprint Capacity
    security_level:
      name: Fingerprint Security Level
    last_finger_id:
      name: Fingerprint Last Finger ID
    last_confidence:
      name: Fingerprint Last Confidence
  - platform: sdm_meter
    phase_a:
      current:
        name: Phase A Current
      voltage:
        name: Phase A Voltage
      active_power:
        name: Phase A Power
      power_factor:
        name: Phase A Power Factor
      apparent_power:
        name: Phase A Apparent Power
      reactive_power:
        name: Phase A Reactive Power
      phase_angle:
        name: Phase A Phase Angle
    phase_b:
      current:
        name: Phase B Current
      voltage:
        name: Phase B Voltage
      active_power:
        name: Phase B Power
      power_factor:
        name: Phase B Power Factor
      apparent_power:
        name: Phase B Apparent Power
      reactive_power:
        name: Phase B Reactive Power
      phase_angle:
        name: Phase B Phase Angle
    phase_c:
      current:
        name: Phase C Current
      voltage:
        name: Phase C Voltage
      active_power:
        name: Phase C Power
      power_factor:
        name: Phase C Power Factor
      apparent_power:
        name: Phase C Apparent Power
      reactive_power:
        name: Phase C Reactive Power
      phase_angle:
        name: Phase C Phase Angle
    frequency:
      name: Frequency
    import_active_energy:
      name: Import Active Energy
    export_active_energy:
      name: Export Active Energy
    import_reactive_energy:
      name: Import Reactive Energy
    export_reactive_energy:
      name: Export Reactive Energy
  - platform: dsmr
    energy_delivered_tariff1:
      name: dsmr_energy_delivered_tariff1

  - platform: nextion
    id: testnumber
    name: testnumber
    variable_name: testnumber
  - platform: nextion
    id: testwave
    name: testwave
    component_id: 2
    wave_channel_id: 1
  - platform: smt100
    uart_id: uart_10
    counts:
      name: Counts
    dielectric_constant:
      name: Dielectric Constant
    temperature:
      name: Temperature
    moisture:
      name: Moisture
    voltage:
      name: Voltage
    update_interval: 60s

  - platform: vbus
    model: deltasol c
    temperature_1:
      name: Temperature 1

  - platform: kuntze
    ph:
      name: Kuntze pH
    temperature:
      name: Kuntze temperature

time:
  - platform: homeassistant

binary_sensor:
  - platform: daly_bms
    charging_mos_enabled:
      name: Charging MOS
    discharging_mos_enabled:
      name: Discharging MOS

  - platform: homeassistant
    entity_id: binary_sensor.hello_world
    id: ha_hello_world_binary

  - platform: fingerprint_grow
    name: Fingerprint Enrolling
  - platform: nextion
    page_id: 0
    component_id: 2
    name: Nextion Component 2 Touch
  - platform: nextion
    id: r0_sensor
    name: R0 Sensor
    component_name: page0.r0

  - platform: hydreon_rgxx
    hydreon_rgxx_id: hydreon_rg9
    too_cold:
      name: rg9_toocold
    em_sat:
      name: rg9_emsat
    lens_bad:
      name: rg9_lens_bad

  - platform: template
    id: pzemac_reset_energy
    on_press:
      then:
        - pzemac.reset_energy: pzemac1
  - platform: template
    id: pzemdc_reset_energy
    on_press:
      then:
        - pzemdc.reset_energy: pzemdc1

  - platform: vbus
    model: deltasol_bs_plus
    relay1:
      name: Relay 1 On

  - platform: gpio
    id: bin1
    pin: 1
  - platform: gpio
    id: bin2
    pin: 2
  - platform: gpio
    id: bin3
    pin: 3

globals:
  - id: my_global_string
    type: std::string
    initial_value: '""'

remote_receiver:
  pin: GPIO12
  dump: []

status_led:
  pin: GPIO2

text_sensor:
  - platform: daly_bms
    status:
      name: BMS Status
  - platform: version
    name: ESPHome Version
    icon: mdi:icon
    id: version_sensor
    on_value:
      # yamllint disable rule:line-length
      - lambda: !lambda |-
          ESP_LOGD("main", "The state is %s=%s", x.c_str(), id(version_sensor).state.c_str());
      # yamllint enable rule:line-length
      - script.execute: my_script
      - script.wait: my_script
      - script.stop: my_script
      - homeassistant.service:
          service: notify.html5
          data:
            title: New Humidity
          data_template:
            message: The humidity is {{ my_variable }}%.
          variables:
            my_variable: |-
              return id(version_sensor).state;
  - platform: template
    name: Template Text Sensor
    lambda: |-
      return {"Hello World"};
  - platform: homeassistant
    entity_id: sensor.hello_world2
    id: ha_hello_world2
  - platform: nextion
    name: text0
    id: text0
    update_interval: 4s
    component_name: text0
  - platform: dsmr
    identification:
      name: dsmr_identification
    p1_version:
      name: dsmr_p1_version

script:
  - id: my_script
    then:
      - lambda: 'ESP_LOGD("main", "Hello World!");'

switch:
  - platform: gpio
    id: gpio_switch1
    pin: 1
  - platform: gpio
    id: gpio_switch2
    pin: 2
  - platform: gpio
    id: gpio_switch3
    pin: 3

  - platform: nextion
    id: r0
    name: R0 Switch
    component_name: page0.r0

climate:
  - platform: bang_bang
    name: Bang Bang Climate
    sensor: ha_hello_world
    default_target_temperature_low: 18°C
    default_target_temperature_high: 24°C
    idle_action:
      - switch.turn_on: gpio_switch1
    cool_action:
      - switch.turn_on: gpio_switch2
    heat_action:
      - switch.turn_on: gpio_switch1
    away_config:
      default_target_temperature_low: 16°C
      default_target_temperature_high: 20°C
  - platform: thermostat
    name: Thermostat Climate
    sensor: ha_hello_world
    preset:
      - name: Default Preset
        default_target_temperature_low: 18°C
        default_target_temperature_high: 24°C
      - name: Away
        default_target_temperature_low: 16°C
        default_target_temperature_high: 20°C
    idle_action:
      - switch.turn_on: gpio_switch1
    cool_action:
      - switch.turn_on: gpio_switch2
    supplemental_cooling_action:
      - switch.turn_on: gpio_switch3
    heat_action:
      - switch.turn_on: gpio_switch1
    supplemental_heating_action:
      - switch.turn_on: gpio_switch3
    dry_action:
      - switch.turn_on: gpio_switch2
    fan_only_action:
      - switch.turn_on: gpio_switch1
    auto_mode:
      - switch.turn_on: gpio_switch2
    off_mode:
      - switch.turn_on: gpio_switch1
    heat_mode:
      - switch.turn_on: gpio_switch2
    cool_mode:
      - switch.turn_on: gpio_switch1
    dry_mode:
      - switch.turn_on: gpio_switch2
    fan_only_mode:
      - switch.turn_on: gpio_switch1
    fan_mode_auto_action:
      - switch.turn_on: gpio_switch2
    fan_mode_on_action:
      - switch.turn_on: gpio_switch1
    fan_mode_off_action:
      - switch.turn_on: gpio_switch2
    fan_mode_low_action:
      - switch.turn_on: gpio_switch1
    fan_mode_medium_action:
      - switch.turn_on: gpio_switch2
    fan_mode_high_action:
      - switch.turn_on: gpio_switch1
    fan_mode_middle_action:
      - switch.turn_on: gpio_switch2
    fan_mode_focus_action:
      - switch.turn_on: gpio_switch1
    fan_mode_diffuse_action:
      - switch.turn_on: gpio_switch2
    fan_mode_quiet_action:
      - switch.turn_on: gpio_switch1
    swing_off_action:
      - switch.turn_on: gpio_switch2
    swing_horizontal_action:
      - switch.turn_on: gpio_switch1
    swing_vertical_action:
      - switch.turn_on: gpio_switch2
    swing_both_action:
      - switch.turn_on: gpio_switch1
    startup_delay: true
    supplemental_cooling_delta: 2.0
    cool_deadband: 0.5
    cool_overrun: 0.5
    min_cooling_off_time: 300s
    min_cooling_run_time: 300s
    max_cooling_run_time: 600s
    supplemental_heating_delta: 2.0
    heat_deadband: 0.5
    heat_overrun: 0.5
    min_heating_off_time: 300s
    min_heating_run_time: 300s
    max_heating_run_time: 600s
    min_fanning_off_time: 30s
    min_fanning_run_time: 30s
    min_fan_mode_switching_time: 15s
    min_idle_time: 30s
    set_point_minimum_differential: 0.5
    fan_only_action_uses_fan_mode_timer: true
    fan_only_cooling: true
    fan_with_cooling: true
    fan_with_heating: true
  - platform: pid
    id: pid_climate
    name: PID Climate Controller
    sensor: ha_hello_world
    default_target_temperature: 21°C
    heat_output: my_slow_pwm
    control_parameters:
      kp: 0.0
      ki: 0.0
      kd: 0.0
      max_integral: 0.0
      output_averaging_samples: 1
      derivative_averaging_samples: 1
    deadband_parameters:
      threshold_high: 0.4
      threshold_low: -2.0
      kp_multiplier: 0.0
      ki_multiplier: 0.0
      kd_multiplier: 0.0
      deadband_output_averaging_samples: 1
  - platform: haier
    protocol: hOn
    name: Haier AC
    uart_id: uart_12
    wifi_signal: true
    beeper: true
    outdoor_temperature:
      name:  Haier AC outdoor temperature
    visual:
      min_temperature: 16 °C
      max_temperature: 30 °C
      temperature_step: 1 °C
    supported_modes:
    - 'OFF'
    - HEAT_COOL
    - COOL
    - HEAT
    - DRY
    - FAN_ONLY
    supported_swing_modes:
    - 'OFF'
    - VERTICAL
    - HORIZONTAL
    - BOTH

sprinkler:
  - id: yard_sprinkler_ctrlr
    main_switch: Yard Sprinklers
    auto_advance_switch: Yard Sprinklers Auto Advance
    reverse_switch: Yard Sprinklers Reverse
    pump_start_pump_delay: 2s
    pump_stop_valve_delay: 4s
    pump_switch_off_during_valve_open_delay: true
    valve_open_delay: 5s
    valves:
      - valve_switch: Yard Valve 0
        enable_switch: Enable Yard Valve 0
        pump_switch_id: gpio_switch1
        run_duration: 10s
        valve_switch_id: gpio_switch2
      - valve_switch: Yard Valve 1
        enable_switch: Enable Yard Valve 1
        pump_switch_id: gpio_switch1
        run_duration: 10s
        valve_switch_id: gpio_switch2
      - valve_switch: Yard Valve 2
        enable_switch: Enable Yard Valve 2
        pump_switch_id: gpio_switch1
        run_duration: 10s
        valve_switch_id: gpio_switch2
  - id: garden_sprinkler_ctrlr
    main_switch: Garden Sprinklers
    auto_advance_switch: Garden Sprinklers Auto Advance
    reverse_switch: Garden Sprinklers Reverse
    valve_overlap: 5s
    valves:
      - valve_switch: Garden Valve 0
        enable_switch: Enable Garden Valve 0
        pump_switch_id: gpio_switch1
        run_duration: 10s
        valve_switch_id: gpio_switch2
      - valve_switch: Garden Valve 1
        enable_switch: Enable Garden Valve 1
        pump_switch_id: gpio_switch1
        run_duration: 10s
        valve_switch_id: gpio_switch2

output:
  - platform: esp8266_pwm
    id: out
    pin: D3
    frequency: 50Hz
  - platform: esp8266_pwm
    id: out2
    pin: D4
  - platform: slow_pwm
    pin: GPIO5
    id: my_slow_pwm
    period: 15s
    restart_cycle_on_state_change: false

e131:

light:
  - platform: neopixelbus
    name: Neopixelbus Light
    pin: GPIO1
    type: GRBW
    variant: SK6812
    method: ESP8266_UART0
    num_leds: 100
    effects:
      - wled:
      - adalight:
          uart_id: uart_3
      - e131:
          universe: 1
  - platform: hbridge
    name: Icicle Lights
    pin_a: out
    pin_b: out2
  - platform: sonoff_d1
    uart_id: uart_2
    use_rm433_remote: false
    name: Sonoff D1 Dimmer
    id: d1_light
    restore_mode: RESTORE_DEFAULT_OFF
  - platform: shelly_dimmer
    name: "Shelly Dimmer Light"
    power:
      name: "Shelly Dimmer Power"
    voltage:
      name: "Shelly Dimmer Voltage"
    current:
      name: "Shelly Dimmer Current"
    max_brightness: 500
    firmware: "51.6"
    uart_id: uart_11

sim800l:
  uart_id: uart_4
  on_sms_received:
    - lambda: |-
        std::string str;
        str = sender;
        str = message;
    - sim800l.send_sms:
        message: hello you
        recipient: "+1234"
    - sim800l.dial:
        recipient: "+1234"

dfplayer:
  uart_id: uart_5
  on_finished_playback:
    then:
      if:
        condition:
          not: dfplayer.is_playing
        then:
          logger.log: Playback finished event
tm1651:
  id: tm1651_battery
  clk_pin: D6
  dio_pin: D5

rf_bridge:
  uart_id: uart_5
  on_code_received:
    - lambda: |-
        uint32_t test;
        test = data.sync;
        test = data.low;
        test = data.high;
        test = data.code;
    - rf_bridge.send_code:
        sync: 0x1234
        low: 0x1234
        high: 0x1234
        code: 0x123456
    - rf_bridge.learn

  on_advanced_code_received:
    - lambda: |-
        uint32_t test;
        std::string test_code;
        test = data.length;
        test = data.protocol;
        test_code = data.code;
    - rf_bridge.start_advanced_sniffing:
    - rf_bridge.stop_advanced_sniffing:
    - rf_bridge.send_advanced_code:
        length: 0x04
        protocol: 0x01
        code: "ABC123"
    - rf_bridge.send_raw:
        raw: "AAA5070008001000ABC12355"

display:
  - platform: nextion
    uart_id: uart_1
    tft_url: http://esphome.io/default35.tft
    update_interval: 5s
    on_sleep:
      then:
        lambda: 'ESP_LOGD("display","Display went to sleep");'
    on_wake:
      then:
        lambda: 'ESP_LOGD("display","Display woke up");'
    on_setup:
      then:
        lambda: 'ESP_LOGD("display","Display setup completed");'
    on_page:
      then:
        lambda: 'ESP_LOGD("display","Display shows new page %u", x);'

fingerprint_grow:
  sensing_pin: 4
  password: 0x12FE37DC
  new_password: 0xA65B9840
  on_finger_scan_matched:
    - homeassistant.event:
        event: esphome.${device_name}_fingerprint_grow_finger_scan_matched
        data:
          finger_id: !lambda "return finger_id;"
          confidence: !lambda "return confidence;"
  on_finger_scan_unmatched:
    - homeassistant.event:
        event: esphome.${device_name}_fingerprint_grow_finger_scan_unmatched
  on_enrollment_scan:
    - homeassistant.event:
        event: esphome.${device_name}_fingerprint_grow_enrollment_scan
        data:
          finger_id: !lambda "return finger_id;"
          scan_num: !lambda "return scan_num;"
  on_enrollment_done:
    - homeassistant.event:
        event: esphome.${device_name}_fingerprint_grow_node_enrollment_done
        data:
          finger_id: !lambda "return finger_id;"
  on_enrollment_failed:
    - homeassistant.event:
        event: esphome.${device_name}_fingerprint_grow_enrollment_failed
        data:
          finger_id: !lambda "return finger_id;"
  uart_id: uart_6

dsmr:
  decryption_key: 00112233445566778899aabbccddeeff
  uart_id: uart_6
  max_telegram_length: 1000
  request_pin: D5
  request_interval: 20s
  receive_timeout: 100ms

daly_bms:
  update_interval: 20s
  uart_id: uart_1

qr_code:
  - id: homepage_qr
    value: https://esphome.io/index.html

lightwaverf:
  read_pin: 13
  write_pin: 14

alarm_control_panel:
  - platform: template
    id: alarmcontrolpanel1
    name: Alarm Panel
    codes:
      - "1234"
    requires_code_to_arm: true
    arming_home_time: 1s
    arming_night_time: 1s
    arming_away_time: 15s
    pending_time: 15s
    trigger_time: 30s
    binary_sensors:
      - input: bin1
        bypass_armed_home: true
        bypass_armed_night: true
    on_state:
      then:
        - lambda: !lambda |-
            ESP_LOGD("TEST", "State change %s", alarm_control_panel_state_to_string(id(alarmcontrolpanel1)->get_state()));
  - platform: template
    id: alarmcontrolpanel2
    name: Alarm Panel
    codes:
      - "1234"
    requires_code_to_arm: true
    arming_home_time: 1s
    arming_night_time: 1s
    arming_away_time: 15s
    pending_time: 15s
    trigger_time: 30s
    binary_sensors:
      - input: bin1
        bypass_armed_home: true
        bypass_armed_night: true
    on_disarmed:
      then:
        - logger.log: "### DISARMED ###"
    on_pending:
      then:
        - logger.log: "### PENDING ###"
    on_arming:
      then:
        - logger.log: "### ARMING ###"
    on_armed_home:
      then:
        - logger.log: "### ARMED HOME ###"
    on_armed_night:
      then:
        - logger.log: "### ARMED NIGHT ###"
    on_armed_away:
      then:
        - logger.log: "### ARMED AWAY ###"
    on_triggered:
      then:
        - logger.log: "### TRIGGERED ###"
    on_cleared:
      then:
        - logger.log: "### CLEARED ###"