---
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
  includes:
    - custom.h

esp8266:
  board: d1_mini
  early_pin_init: true

substitutions:
  device_name: test3
  device_comment: test3 device
  min_sub: "0.03"
  max_sub: "12.0%"

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
        - stepper.set_target:
            id: my_stepper2
            target: !lambda 'return int_;'
    - 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'

i2c:
  sda: 4
  scl: 5
  scan: false

spi:
  clk_pin: GPIO12
  mosi_pin: GPIO13
  miso_pin: GPIO14

uart:
  - id: uart1
    tx_pin:
      number: GPIO1
      inverted: true
    rx_pin: GPIO3
    baud_rate: 115200
  - id: uart2
    tx_pin: GPIO4
    rx_pin: GPIO5
    baud_rate: 9600
  - id: uart3
    tx_pin: GPIO4
    rx_pin: GPIO5
    baud_rate: 4800
  - id: uart4
    tx_pin: GPIO4
    rx_pin: GPIO5
    baud_rate: 9600
  - id: uart5
    tx_pin: GPIO4
    rx_pin: GPIO5
    baud_rate: 9600
  - id: uart6
    tx_pin: GPIO4
    rx_pin: GPIO5
    baud_rate: 9600
  - id: uart7
    tx_pin: GPIO4
    rx_pin: GPIO5
    baud_rate: 38400
  - id: uart8
    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: uart9
    tx_pin: GPIO4
    rx_pin: GPIO5
    baud_rate: 9600
  - id: uart10
    tx_pin: GPIO4
    rx_pin: GPIO5
    baud_rate: 9600
  - id: uart11
    tx_pin: GPIO4
    rx_pin: GPIO5
    baud_rate: 9600

modbus:
  uart_id: uart1

vbus:
  uart_id: uart4

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

logger:
  hardware_uart: UART1
  level: DEBUG
  esp8266_store_log_strings_in_flash: true

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: apds9960
    type: proximity
    name: APDS9960 Proximity
  - platform: vl53l0x
    name: VL53L0x Distance
    address: 0x29
    update_interval: 60s
    enable_pin: GPIO13
    timeout: 200us
  - platform: apds9960
    type: clear
    name: APDS9960 Clear
  - platform: apds9960
    type: red
    name: APDS9960 Red
  - platform: apds9960
    type: green
    name: APDS9960 Green
  - platform: apds9960
    type: blue
    name: APDS9960 Blue
  - platform: homeassistant
    entity_id: sensor.hello_world
    id: ha_hello_world
  - platform: aht10
    temperature:
      name: Temperature
    humidity:
      name: Humidity
  - platform: am2320
    temperature:
      name: Temperature
    humidity:
      name: Humidity
  - platform: hydreon_rgxx
    model: RG 9
    uart_id: uart6
    id: hydreon_rg9
    moisture:
      name: hydreon_rain
      id: hydreon_rain
  - platform: hydreon_rgxx
    model: RG_15
    uart_id: uart6
    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
    filters:
      - offset: 5.0
      - multiply: 2.0
      - filter_out: NAN
      - sliding_window_moving_average:
      - exponential_moving_average:
      - quantile:
          window_size: 5
          send_every: 5
          send_first_at: 3
          quantile: .8
      - lambda: 'return 0;'
      - delta: 100
      - throttle: 100ms
      - debounce: 500s
      - calibrate_linear:
          - 0 -> 0
          - 100 -> 100
      - calibrate_polynomial:
          degree: 3
          datapoints:
            - 0 -> 0
            - 100 -> 200
            - 400 -> 500
            - -50 -> -1000
            - -100 -> -10000
  - platform: cd74hc4067
    id: cd74hc4067_0
    number: 0
    sensor: my_sensor
  - platform: resistance
    sensor: my_sensor
    configuration: DOWNSTREAM
    resistor: 10kΩ
    reference_voltage: 3.3V
    name: Resistance
    id: resist
  - platform: ntc
    sensor: resist
    name: NTC Sensor
    calibration:
      b_constant: 3950
      reference_resistance: 10k
      reference_temperature: 25°C
  - platform: ntc
    sensor: resist
    name: NTC Sensor2
    calibration:
      - 10.0kOhm -> 25°C
      - 27.219kOhm -> 0°C
      - 14.674kOhm -> 15°C
  - platform: ct_clamp
    sensor: my_sensor
    name: CT Clamp
    sample_duration: 500ms
    update_interval: 5s

  - platform: tcs34725
    red_channel:
      name: Red Channel
    green_channel:
      name: Green Channel
    blue_channel:
      name: Blue Channel
    clear_channel:
      name: Clear Channel
    illuminance:
      name: Illuminance
    color_temperature:
      name: Color Temperature
    integration_time: 614ms
    gain: 60x
  - platform: custom
    lambda: |-
      auto s = new CustomSensor();
      App.register_component(s);
      return {s};
    sensors:
      - id: custom_sensor
        name: Custom 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: ade7953
    irq_pin: GPIO16
    voltage:
      name: ADE7953 Voltage
      id: ade7953_voltage
    current_a:
      name: ADE7953 Current A
      id: ade7953_current_a
    current_b:
      name: ADE7953 Current B
      id: ade7953_current_b
    active_power_a:
      name: ADE7953 Active Power A
      id: ade7953_active_power_a
    active_power_b:
      name: ADE7953 Active Power B
      id: ade7953_active_power_b
  - platform: bl0939
    uart_id: uart8
    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: uart3
    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: uart3
    voltage:
      name: 'BL0942 Voltage'
    current:
      name: 'BL0942 Current'
    power:
      name: 'BL0942 Power'
    energy:
      name: 'BL0942 Energy'
    frequency:
      name: "BL0942 Frequency"
  - platform: pzem004t
    uart_id: uart3
    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
    voltage:
      name: PZEMDC Voltage
    current:
      name: PZEMDC Current
    power:
      name: PZEMDC Power
  - platform: tmp102
    name: TMP102 Temperature
  - platform: hm3301
    pm_1_0:
      name: PM1.0
    pm_2_5:
      name: PM2.5
    pm_10_0:
      name: PM10.0
    aqi:
      name: AQI
      calculation_type: AQI
  - platform: pmsx003
    uart_id: uart9
    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: uart5
    type: PMS5003T
    pm_2_5:
      name: PM 2.5 Concentration
    temperature:
      name: PMS Temperature
    humidity:
      name: PMS Humidity
  - platform: pmsx003
    uart_id: uart6
    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: uart7
    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: uart3
    voltage:
      name: CSE7766 Voltage
    current:
      name: CSE7766 Current
    power:
      name: CSE776 Power
  - platform: ezo
    id: ph_ezo
    address: 99
    unit_of_measurement: pH
  - platform: tof10120
    name: Distance sensor
    update_interval: 5s
  - 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: mlx90393
    oversampling: 1
    filter: 0
    gain: 3X
    x_axis:
      name: mlxxaxis
    y_axis:
      name: mlxyaxis
    z_axis:
      name: mlxzaxis
      resolution: 17BIT
    temperature:
      name: mlxtemp
      oversampling: 2
  - platform: smt100
    uart_id: uart10
    counts:
      name: Counts
    dielectric_constant:
      name: Dielectric Constant
    temperature:
      name: Temperature
    moisture:
      name: Moisture
    voltage:
      name: Voltage
    update_interval: 60s

  - platform: adc128s102
    id: adc128s102_channel_0
    channel: 0

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

time:
  - platform: homeassistant

apds9960:
  address: 0x20
  update_interval: 60s

mpr121:
  id: mpr121_first
  address: 0x5A

binary_sensor:
  - platform: daly_bms
    charging_mos_enabled:
      name: Charging MOS
    discharging_mos_enabled:
      name: Discharging MOS
  - platform: apds9960
    direction: up
    name: APDS9960 Up
    device_class: motion
    filters:
      - invert
      - delayed_on: 20ms
      - delayed_off: 20ms
      - lambda: 'return false;'
    on_state:
      - logger.log: New state
    id: my_binary_sensor
  - platform: apds9960
    direction: down
    name: APDS9960 Down
  - platform: apds9960
    direction: left
    name: APDS9960 Left
  - platform: apds9960
    direction: right
    name: APDS9960 Right
  - platform: homeassistant
    entity_id: binary_sensor.hello_world
    id: ha_hello_world_binary
  - platform: mpr121
    id: touchkey0
    channel: 0
    name: touchkey0
  - platform: mpr121
    channel: 1
    name: touchkey1
    id: bin1
  - platform: mpr121
    channel: 2
    name: touchkey2
    id: bin2
  - platform: mpr121
    channel: 3
    name: touchkey3
    id: bin3
    on_press:
      then:
        - switch.toggle: mpr121_toggle
  - platform: ttp229_lsf
    channel: 1
    name: TTP229 LSF Test
  - platform: ttp229_bsf
    channel: 1
    name: TTP229 BSF Test
  - platform: fingerprint_grow
    name: Fingerprint Enrolling
  - platform: custom
    lambda: |-
      auto s = new CustomBinarySensor();
      App.register_component(s);
      return {s};
    binary_sensors:
      - id: custom_binary_sensor
        name: Custom Binary Sensor
  - 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: template
    id: cover_toggle
    on_press:
      then:
        - cover.toggle: time_based_cover
        - cover.toggle: endstop_cover
        - cover.toggle: current_based_cover
  - 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: vbus
    model: deltasol_bs_plus
    relay1:
      name: Relay 1 On

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: custom
    lambda: |-
      auto s = new CustomTextSensor();
      App.register_component(s);
      return {s};
    text_sensors:
      - id: custom_text_sensor
        name: Custom Text Sensor
  - 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!");'

sm2135:
  data_pin: GPIO12
  clock_pin: GPIO14

switch:
  - platform: template
    name: mpr121_toggle
    id: mpr121_toggle
    optimistic: true
  - platform: gpio
    id: gpio_switch1
    pin:
      mcp23xxx: mcp23017_hub
      number: 0
      mode: OUTPUT
    interlock: &interlock [gpio_switch1, gpio_switch2, gpio_switch3]
  - platform: gpio
    id: gpio_switch2
    pin:
      mcp23xxx: mcp23008_hub
      number: 0
      mode: OUTPUT
    interlock: *interlock
  - platform: gpio
    id: gpio_switch3
    pin: GPIO1
    interlock: *interlock
  - platform: custom
    lambda: |-
      auto s = new CustomSwitch();
      return {s};
    switches:
      - id: custom_switch
        name: Custom Switch
  - platform: nextion
    id: r0
    name: R0 Switch
    component_name: page0.r0

custom_component:
  lambda: |-
    auto s = new CustomComponent();
    s->set_update_interval(15000);
    return {s};

stepper:
  - platform: uln2003
    id: my_stepper
    pin_a: GPIO12
    pin_b: GPIO13
    pin_c: GPIO14
    pin_d: GPIO15
    sleep_when_done: false
    step_mode: HALF_STEP
    max_speed: 250 steps/s
    acceleration: inf
    deceleration: inf
  - platform: a4988
    id: my_stepper2
    step_pin: GPIO1
    dir_pin: GPIO2
    max_speed: 0.1 steps/s
    acceleration: 10 steps/s^2
    deceleration: 10 steps/s^2

interval:
  interval: 5s
  then:
    - logger.log: Interval Run
    - stepper.set_target:
        id: my_stepper2
        target: 500
    - stepper.set_target:
        id: my_stepper
        target: !lambda 'return 0;'
    - stepper.report_position:
        id: my_stepper2
        position: 0
    - stepper.report_position:
        id: my_stepper
        position: !lambda 'return 50/100.0;'

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



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


cover:
  - platform: endstop
    name: Endstop Cover
    id: endstop_cover
    stop_action:
      - switch.turn_on: gpio_switch1
    open_endstop: my_binary_sensor
    open_action:
      - switch.turn_on: gpio_switch1
    open_duration: 5min
    close_endstop: my_binary_sensor
    close_action:
      - switch.turn_on: gpio_switch2
      - output.set_level:
          id: out
          level: 50%
      - output.esp8266_pwm.set_frequency:
          id: out
          frequency: 500.0Hz
      - output.esp8266_pwm.set_frequency:
          id: out
          frequency: !lambda 'return 500.0;'
      - servo.write:
          id: my_servo
          level: -100%
      - servo.write:
          id: my_servo
          level: !lambda 'return -1.0;'
      - delay: 2s
      - servo.detach: my_servo
    close_duration: 4.5min
    max_duration: 10min
  - platform: time_based
    name: Time Based Cover
    id: time_based_cover
    stop_action:
      - switch.turn_on: gpio_switch1
    open_action:
      - switch.turn_on: gpio_switch1
    open_duration: 5min
    close_action:
      - switch.turn_on: gpio_switch2
    close_duration: 4.5min
  - platform: current_based
    name: Current Based Cover
    id: current_based_cover
    open_sensor: ade7953_current_a
    open_moving_current_threshold: 0.5
    open_obstacle_current_threshold: 0.8
    open_duration: 12s
    open_action:
      - switch.turn_on: gpio_switch1
    close_sensor: ade7953_current_b
    close_moving_current_threshold: 0.5
    close_obstacle_current_threshold: 0.8
    close_duration: 10s
    close_action:
      - switch.turn_on: gpio_switch2
    stop_action:
      - switch.turn_off: gpio_switch1
      - switch.turn_off: gpio_switch2
    obstacle_rollback: 30%
    start_sensing_delay: 0.8s
    malfunction_detection: true
    malfunction_action:
      then:
        - logger.log: Malfunction Detected
  - platform: template
    name: Template Cover with Tilt
    tilt_lambda: 'return 0.5;'
    tilt_action:
      - output.set_level:
          id: out
          level: !lambda 'return tilt;'
    position_action:
      - output.set_level:
          id: out
          level: !lambda 'return pos;'

output:
  - platform: esp8266_pwm
    id: out
    pin: D3
    frequency: 50Hz
  - platform: esp8266_pwm
    id: out2
    pin: D4
  - platform: custom
    type: binary
    lambda: |-
      auto s = new CustomBinaryOutput();
      App.register_component(s);
      return {s};
    outputs:
      - id: custom_binary
  - platform: sigma_delta_output
    id: sddac
    update_interval: 60s
    pin: D4
    turn_on_action:
      then:
        - logger.log: "Turned on"
    turn_off_action:
      then:
        - logger.log: "Turned off"
    state_change_action:
      then:
        - logger.log:
            format: "Changed state: %d"
            args: [ 'state' ]
  - platform: custom
    type: float
    lambda: |-
      auto s = new CustomFloatOutput();
      App.register_component(s);
      return {s};
    outputs:
      - id: custom_float
  - platform: slow_pwm
    pin: GPIO5
    id: my_slow_pwm
    period: 15s
    restart_cycle_on_state_change: false
  - platform: sm2135
    id: sm2135_0
    channel: 0
  - platform: sm2135
    id: sm2135_1
    channel: 1
  - platform: sm2135
    id: sm2135_2
    channel: 2
  - platform: sm2135
    id: sm2135_3
    channel: 3
  - platform: sm2135
    id: sm2135_4
    channel: 4

mcp23017:
  id: mcp23017_hub

mcp23008:
  id: mcp23008_hub

e131:

light:
  - platform: neopixelbus
    name: Neopixelbus Light
    pin: GPIO1
    type: GRBW
    variant: SK6812
    method: ESP8266_UART0
    num_leds: 100
    effects:
      - wled:
      - adalight:
          uart_id: uart3
      - e131:
          universe: 1
  - platform: hbridge
    name: Icicle Lights
    pin_a: out
    pin_b: out2
  - platform: sonoff_d1
    uart_id: uart2
    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: uart11

servo:
  id: my_servo
  output: out
  restore: true
  min_level: $min_sub
  max_level: $max_sub

ttp229_lsf:

ttp229_bsf:
  sdo_pin: D2
  scl_pin: D1

sim800l:
  uart_id: uart4
  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: uart5
  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: uart5
  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'
    - http_request.get:
        url: https://esphome.io
        headers:
          Content-Type: application/json
        verify_ssl: false
    - http_request.post:
        url: https://esphome.io
        verify_ssl: false
        json:
          key: !lambda |-
            return id(version_sensor).state;
          greeting: Hello World
    - http_request.send:
        method: PUT
        url: https://esphome.io
        headers:
          Content-Type: application/json
        body: Some data
        verify_ssl: false

display:
  - platform: max7219digit
    cs_pin: GPIO15
    num_chips: 4
    rotate_chip: 0
    intensity: 10
    scroll_mode: STOP
    id: my_matrix
    lambda: |-
      it.printdigit("hello");
  - platform: nextion
    uart_id: uart1
    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);'


http_request:
  useragent: esphome/device
  timeout: 10s

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: uart6

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

daly_bms:
  update_interval: 20s
  uart_id: uart1

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

button:
  - platform: output
    id: output_button
    output: out
    duration: 100ms
  - platform: wake_on_lan
    target_mac_address: 12:34:56:78:90:ab
    name: wol_test_1
    id: wol_1
  - platform: factory_reset
    name: Restart Button (Factory Default Settings)


cd74hc4067:
  pin_s0: GPIO12
  pin_s1: GPIO13
  pin_s2: GPIO14
  pin_s3: GPIO15

adc128s102:
  cs_pin: GPIO12