substitutions:
  devicename: test1
  sensorname: my
  textname: template
  roomname: living_room

esphome:
  name: test1
  name_add_mac_suffix: true
  platform: ESP32
  board: nodemcu-32s
  platformio_options:
    board_build.partitions: huge_app.csv
  on_boot:
    priority: 150.0
    then:
      - lambda: >-
          ESP_LOGD("main", "ON BOOT!");
  on_shutdown:
    then:
      - lambda: >-
          ESP_LOGD("main", "ON SHUTDOWN!");
  on_loop:
    then:
      - lambda: >-
          ESP_LOGV("main", "ON LOOP!");
      - light.addressable_set:
          id: addr1
          range_from: 0
          range_to: 100
          red: 100%
          green: !lambda 'return 255;'
          blue: 0%
          white: 100%
      - 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(${textname}_text).state;
            greeting: 'Hello World'
      - http_request.send:
          method: PUT
          url: https://esphome.io
          headers:
            Content-Type: application/json
          body: 'Some data'
          verify_ssl: false
          on_response:
            then:
              - logger.log:
                  format: 'Response status: %d'
                  args:
                    - status_code
  build_path: build/test1

packages:
  wifi: !include test_packages/test_packages_package_wifi.yaml
  pkg_test: !include test_packages/test_packages_package1.yaml

wifi:
  networks:
    - ssid: 'MySSID'
      password: 'password1'
    - ssid: 'MySSID2'
      password: ''
      channel: 14
      bssid: 'A1:63:95:47:D3:1D'
  manual_ip:
    static_ip: 192.168.178.230
    gateway: 192.168.178.1
    subnet: 255.255.255.0
    dns1: 1.1.1.1
    dns2: 1.2.2.1
  domain: .local
  reboot_timeout: 120s
  power_save_mode: light

mdns:
  disabled: false

http_request:
  useragent: esphome/device
  timeout: 10s

mqtt:
  broker: '192.168.178.84'
  port: 1883
  username: 'debug'
  password: 'debug'
  client_id: someclient
  discovery: True
  discovery_retain: False
  discovery_prefix: discovery
  topic_prefix: helloworld
  log_topic:
    topic: helloworld/hi
    level: INFO
  birth_message:
  will_message:
  shutdown_message:
    topic: topic/to/send/to
    payload: hi
    qos: 2
    retain: True
  keepalive: 60s
  reboot_timeout: 60s
  on_message:
    - topic: my/custom/topic
      qos: 0
      then:
        - lambda: >-
            ESP_LOGD("main", "Got message %s", x.c_str());
    - topic: livingroom/ota_mode
      then:
        - deep_sleep.prevent
    - topic: livingroom/ota_mode
      then:
        - deep_sleep.enter:
  on_json_message:
    topic: the/topic
    then:
      - if:
          condition:
            - wifi.connected:
            - mqtt.connected:
            - light.is_on: kitchen
            - light.is_off: kitchen
            - fan.is_on: fan_speed
            - fan.is_off: fan_speed
          then:
            - lambda: |-
                int data = x["my_data"];
                ESP_LOGD("main", "The data is: %d", data);
            - light.turn_on:
                id: ${roomname}_lights
                brightness: !lambda |-
                  float brightness = 1.0;
                  if (x.containsKey("brightness"))
                    brightness = x["brightness"];
                  return brightness;
                effect: !lambda |-
                  const char *effect = "None";
                  if (x.containsKey("effect"))
                    effect = x["effect"];
                  return effect;
            - light.control:
                id: ${roomname}_lights
                brightness: !lambda 'return id(${roomname}_lights).current_values.get_brightness() + 0.5;'
            - light.dim_relative:
                id: ${roomname}_lights
                relative_brightness: 5%
            - uart.write:
                id: uart0
                data: Hello World
            - uart.write:
                id: uart0
                data: [0x00, 0x20, 0x30]
            - uart.write:
                id: uart0
                data: !lambda |-
                  return {};

i2c:
  sda: 21
  scl: 22
  scan: True
  frequency: 100kHz
  setup_priority: -100
  id: i2c_bus

spi:
  clk_pin: GPIO21
  mosi_pin: GPIO22
  miso_pin: GPIO23

uart:
  - tx_pin:
      number: GPIO22
      inverted: yes
    rx_pin:
      number: GPIO23
      inverted: yes
    baud_rate: 115200
    id: uart0
    parity: NONE
    data_bits: 8
    stop_bits: 1
    rx_buffer_size: 512

  - id: adalight_uart
    tx_pin: GPIO25
    rx_pin: GPIO26
    baud_rate: 115200
    rx_buffer_size: 1024

ota:
  safe_mode: True
  password: 'superlongpasswordthatnoonewillknow'
  port: 3286
  reboot_timeout: 2min
  num_attempts: 5
  on_state_change:
    then:
      lambda: >-
        ESP_LOGD("ota", "State %d", state);
  on_begin:
    then:
      logger.log: "OTA begin"
  on_progress:
    then:
      lambda: >-
        ESP_LOGD("ota", "Got progress %f", x);
  on_end:
    then:
      logger.log: "OTA end"
  on_error:
    then:
      lambda: >-
        ESP_LOGD("ota", "Got error code %d", x);

logger:
  baud_rate: 0
  level: VERBOSE
  logs:
    mqtt.component: DEBUG
    mqtt.client: ERROR

web_server:
  port: 8080
  css_url: https://esphome.io/_static/webserver-v1.min.css
  js_url: https://esphome.io/_static/webserver-v1.min.js

power_supply:
  id: 'atx_power_supply'
  enable_time: 20ms
  keep_on_time: 10s
  pin:
    number: 13
    inverted: true

deep_sleep:
  run_duration: 20s
  sleep_duration: 50s
  wakeup_pin: GPIO39
  wakeup_pin_mode: INVERT_WAKEUP

ads1115:
  address: 0x48
  i2c_id: i2c_bus

dallas:
  pin: GPIO23

as3935_spi:
  cs_pin: GPIO12
  irq_pin: GPIO13

wled:

adalight:

esp32_ble_tracker:

ble_client:
  - mac_address: AA:BB:CC:DD:EE:FF
    id: ble_foo
  - mac_address: 11:22:33:44:55:66
    id: ble_blah
    on_connect:
      then:
        - switch.turn_on: ble1_status
    on_disconnect:
      then:
        - switch.turn_on: ble1_status
mcp23s08:
  - id: 'mcp23s08_hub'
    cs_pin: GPIO12
    deviceaddress: 0

mcp23s17:
  - id: 'mcp23s17_hub'
    cs_pin: GPIO12
    deviceaddress: 1

sensor:
  - platform: ble_client
    ble_client_id: ble_foo
    name: 'Green iTag btn'
    service_uuid: 'ffe0'
    characteristic_uuid: 'ffe1'
    descriptor_uuid: 'ffe2'
    notify: true
    update_interval: never
    lambda: |-
      ESP_LOGD("main", "Length of data is %i", x.size());
      return x[0];
    on_notify:
      then:
        - lambda: |-
            ESP_LOGD("green_btn", "Button was pressed, val%f", x);
  - platform: adc
    pin: A0
    name: 'Living Room Brightness'
    update_interval: '1:01'
    attenuation: 2.5db
    unit_of_measurement: '°C'
    icon: 'mdi:water-percent'
    accuracy_decimals: 5
    expire_after: 120s
    setup_priority: -100
    force_update: true
    filters:
      - offset: 2.0
      - multiply: 1.2
      - calibrate_linear:
          - 0.0 -> 0.0
          - 40.0 -> 45.0
          - 100.0 -> 102.5
      - filter_out: 42.0
      - filter_out: nan
      - median:
          window_size: 5
          send_every: 5
          send_first_at: 3
      - min:
          window_size: 5
          send_every: 5
          send_first_at: 3
      - max:
          window_size: 5
          send_every: 5
          send_first_at: 3
      - sliding_window_moving_average:
          window_size: 15
          send_every: 15
          send_first_at: 15
      - exponential_moving_average:
          alpha: 0.1
          send_every: 15
      - throttle: 1s
      - heartbeat: 5s
      - debounce: 0.1s
      - delta: 5.0
      - or:
          - throttle: 1s
          - delta: 5.0
      - lambda: return x * (9.0/5.0) + 32.0;
    on_value:
      then:
        - lambda: |-
            ESP_LOGD("main", "Got value %f", x);
            id(${sensorname}_sensor).publish_state(42.0);
            ESP_LOGI("main", "Value of my sensor: %f", id(${sensorname}_sensor).state);
            ESP_LOGI("main", "Raw Value of my sensor: %f", id(${sensorname}_sensor).state);
    on_value_range:
      above: 5
      below: 10
      then:
        - lambda: >-
            ESP_LOGD("main", "Got value range %f", x);
        - wait_until:
            binary_sensor.is_on: binary_sensor1
    on_raw_value:
      - lambda: >-
          ESP_LOGD("main", "Got raw value %f", x);
      - logger.log:
          level: DEBUG
          format: 'Got raw value %f'
          args: ['x']
      - logger.log: 'Got raw value NAN'
      - mqtt.publish:
          topic: some/topic
          payload: Hello
          qos: 2
          retain: True
  - platform: esp32_hall
    name: ESP32 Hall Sensor
  - platform: ads1115
    multiplexer: 'A0_A1'
    gain: 1.024
    id: ${sensorname}_sensor
    filters:
    state_topic: hi/me
    retain: false
    availability:
  - platform: atm90e32
    cs_pin: 5
    phase_a:
      voltage:
        name: 'EMON Line Voltage A'
      current:
        name: 'EMON CT1 Current'
      power:
        name: 'EMON Active Power CT1'
      reactive_power:
        name: 'EMON Reactive Power CT1'
      power_factor:
        name: 'EMON Power Factor CT1'
      gain_voltage: 7305
      gain_ct: 27961
    phase_b:
      current:
        name: 'EMON CT2 Current'
      power:
        name: 'EMON Active Power CT2'
      reactive_power:
        name: 'EMON Reactive Power CT2'
      power_factor:
        name: 'EMON Power Factor CT2'
      gain_voltage: 7305
      gain_ct: 27961
    phase_c:
      current:
        name: 'EMON CT3 Current'
      power:
        name: 'EMON Active Power CT3'
      reactive_power:
        name: 'EMON Reactive Power CT3'
      power_factor:
        name: 'EMON Power Factor CT3'
      gain_voltage: 7305
      gain_ct: 27961
    frequency:
      name: 'EMON Line Frequency'
    chip_temperature:
      name: 'EMON Chip Temp A'
    line_frequency: 60Hz
    current_phases: 3
    gain_pga: 2X
  - platform: bh1750
    name: 'Living Room Brightness 3'
    internal: true
    address: 0x23
    resolution: 1.0
    update_interval: 30s
    retain: False
    availability:
    state_topic: livingroom/custom_state_topic
    measurement_duration: 31
    i2c_id: i2c_bus
  - platform: bme280
    temperature:
      name: 'Outside Temperature'
      oversampling: 16x
    pressure:
      name: 'Outside Pressure'
      oversampling: none
    humidity:
      name: 'Outside Humidity'
      oversampling: 8x
    address: 0x77
    iir_filter: 16x
    update_interval: 15s
    i2c_id: i2c_bus
  - platform: bme680
    temperature:
      name: 'Outside Temperature'
      oversampling: 16x
    pressure:
      name: 'Outside Pressure'
    humidity:
      name: 'Outside Humidity'
    gas_resistance:
      name: 'Outside Gas Sensor'
    address: 0x77
    heater:
      temperature: 320
      duration: 150ms
    update_interval: 15s
    i2c_id: i2c_bus
  - platform: bmp085
    temperature:
      name: 'Outside Temperature'
    pressure:
      name: 'Outside Pressure'
      filters:
        - lambda: >-
            return x / powf(1.0 - (x / 44330.0), 5.255);
    update_interval: 15s
    i2c_id: i2c_bus
  - platform: bmp280
    temperature:
      name: 'Outside Temperature'
      oversampling: 16x
    pressure:
      name: 'Outside Pressure'
    address: 0x77
    update_interval: 15s
    iir_filter: 16x
    i2c_id: i2c_bus
  - platform: dallas
    address: 0x1C0000031EDD2A28
    name: 'Living Room Temperature'
    resolution: 9
  - platform: dallas
    index: 1
    name: 'Living Room Temperature 2'
  - platform: dht
    pin: GPIO26
    temperature:
      name: 'Living Room Temperature 3'
    humidity:
      name: 'Living Room Humidity 3'
    model: AM2302
    update_interval: 15s
  - platform: dht12
    temperature:
      name: 'Living Room Temperature 4'
    humidity:
      name: 'Living Room Humidity 4'
    update_interval: 15s
    i2c_id: i2c_bus
  - platform: duty_cycle
    pin: GPIO25
    name: Duty Cycle Sensor
  - platform: esp32_hall
    name: 'ESP32 Hall Sensor'
    update_interval: 15s
  - platform: hdc1080
    temperature:
      name: 'Living Room Temperature 5'
    humidity:
      name: 'Living Room Pressure 5'
    update_interval: 15s
    i2c_id: i2c_bus
  - platform: hlw8012
    sel_pin: 5
    cf_pin: 14
    cf1_pin: 13
    current:
      name: 'HLW8012 Current'
    voltage:
      name: 'HLW8012 Voltage'
    power:
      name: 'HLW8012 Power'
      id: hlw8012_power
    energy:
      name: 'HLW8012 Energy'
      id: hlw8012_energy
    update_interval: 15s
    current_resistor: 0.001 ohm
    voltage_divider: 2351
    change_mode_every: 16
    initial_mode: VOLTAGE
    model: hlw8012
  - platform: total_daily_energy
    power_id: hlw8012_power
    name: 'HLW8012 Total Daily Energy'
  - platform: integration
    sensor: hlw8012_power
    name: 'Integration Sensor'
    time_unit: s
  - platform: integration
    sensor: hlw8012_power
    name: 'Integration Sensor lazy'
    time_unit: s
    min_save_interval: 60s
  - platform: hmc5883l
    address: 0x68
    field_strength_x:
      name: 'HMC5883L Field Strength X'
    field_strength_y:
      name: 'HMC5883L Field Strength Y'
    field_strength_z:
      name: 'HMC5883L Field Strength Z'
    heading:
      name: 'HMC5883L Heading'
    range: 130uT
    oversampling: 8x
    update_interval: 15s
    i2c_id: i2c_bus
  - platform: qmc5883l
    address: 0x0D
    field_strength_x:
      name: 'QMC5883L Field Strength X'
    field_strength_y:
      name: 'QMC5883L Field Strength Y'
    field_strength_z:
      name: 'QMC5883L Field Strength Z'
    heading:
      name: 'QMC5883L Heading'
    range: 800uT
    oversampling: 256x
    update_interval: 15s
    i2c_id: i2c_bus
  - platform: hx711
    name: 'HX711 Value'
    dout_pin: GPIO23
    clk_pin: GPIO25
    gain: 128
    update_interval: 15s
  - platform: ina219
    address: 0x40
    shunt_resistance: 0.1 ohm
    current:
      name: 'INA219 Current'
    power:
      name: 'INA219 Power'
    bus_voltage:
      name: 'INA219 Bus Voltage'
    shunt_voltage:
      name: 'INA219 Shunt Voltage'
    max_voltage: 32.0V
    max_current: 3.2A
    update_interval: 15s
    i2c_id: i2c_bus
  - platform: ina226
    address: 0x40
    shunt_resistance: 0.1 ohm
    current:
      name: 'INA226 Current'
    power:
      name: 'INA226 Power'
    bus_voltage:
      name: 'INA226 Bus Voltage'
    shunt_voltage:
      name: 'INA226 Shunt Voltage'
    max_current: 3.2A
    update_interval: 15s
    i2c_id: i2c_bus
  - platform: ina3221
    address: 0x40
    channel_1:
      shunt_resistance: 0.1 ohm
      current:
        name: 'INA3221 Channel 1 Current'
      power:
        name: 'INA3221 Channel 1 Power'
      bus_voltage:
        name: 'INA3221 Channel 1 Bus Voltage'
      shunt_voltage:
        name: 'INA3221 Channel 1 Shunt Voltage'
    update_interval: 15s
    i2c_id: i2c_bus
  - platform: htu21d
    temperature:
      name: 'Living Room Temperature 6'
    humidity:
      name: 'Living Room Humidity 6'
    update_interval: 15s
    i2c_id: i2c_bus
  - platform: max6675
    name: 'Living Room Temperature'
    cs_pin: GPIO23
    update_interval: 15s
  - platform: max31855
    name: 'Den Temperature'
    cs_pin: GPIO23
    update_interval: 15s
    reference_temperature:
      name: 'MAX31855 Internal Temperature'
  - platform: max31856
    name: 'BBQ Temperature'
    cs_pin: GPIO17
    update_interval: 15s
    mains_filter: 50Hz
  - platform: max31865
    name: 'Water Tank Temperature'
    cs_pin: GPIO23
    update_interval: 15s
    reference_resistance: '430 Ω'
    rtd_nominal_resistance: '100 Ω'
  - platform: mhz19
    uart_id: uart0
    co2:
      name: 'MH-Z19 CO2 Value'
    temperature:
      name: 'MH-Z19 Temperature'
    update_interval: 15s
    automatic_baseline_calibration: false
  - platform: mpu6050
    address: 0x68
    accel_x:
      name: 'MPU6050 Accel X'
    accel_y:
      name: 'MPU6050 Accel Y'
    accel_z:
      name: 'MPU6050 Accel z'
    gyro_x:
      name: 'MPU6050 Gyro X'
    gyro_y:
      name: 'MPU6050 Gyro Y'
    gyro_z:
      name: 'MPU6050 Gyro z'
    temperature:
      name: 'MPU6050 Temperature'
    i2c_id: i2c_bus
  - platform: ms5611
    temperature:
      name: 'Outside Temperature'
    pressure:
      name: 'Outside Pressure'
    address: 0x77
    update_interval: 15s
    i2c_id: i2c_bus
  - platform: pmsa003i
    pm_1_0:
      name: "PMSA003i PM1.0"
    pm_2_5:
      name: "PMSA003i PM2.5"
    pm_10_0:
      name: "PMSA003i PM10.0"
    pmc_0_3:
      name: "PMSA003i PMC <0.3µm"
    pmc_0_5:
      name: "PMSA003i PMC <0.5µm"
    pmc_1_0:
      name: "PMSA003i PMC <1µm"
    pmc_2_5:
      name: "PMSA003i PMC <2.5µm"
    pmc_5_0:
      name: "PMSA003i PMC <5µm"
    pmc_10_0:
      name: "PMSA003i PMC <10µm"
    address: 0x12
    standard_units: True
    i2c_id: i2c_bus
  - platform: pulse_counter
    name: 'Pulse Counter'
    pin: GPIO12
    count_mode:
      rising_edge: INCREMENT
      falling_edge: DECREMENT
    internal_filter: 13us
    update_interval: 15s
  - platform: pulse_meter
    name: 'Pulse Meter'
    id: pulse_meter_sensor
    pin: GPIO12
    internal_filter: 100ms
    timeout: 2 min
    on_value:
      - pulse_meter.set_total_pulses:
          id: pulse_meter_sensor
          value: 12345
    total:
      name: 'Pulse Meter Total'
  - platform: rotary_encoder
    name: 'Rotary Encoder'
    id: rotary_encoder1
    pin_a: GPIO23
    pin_b: GPIO25
    pin_reset: GPIO25
    filters:
      - or:
          - debounce: 0.1s
          - delta: 10
    resolution: 4
    min_value: -10
    max_value: 30
    on_value:
      - sensor.rotary_encoder.set_value:
          id: rotary_encoder1
          value: 10
      - sensor.rotary_encoder.set_value:
          id: rotary_encoder1
          value: !lambda 'return -1;'
    on_clockwise:
      - logger.log: 'Clockwise'
    on_anticlockwise:
      - logger.log: 'Anticlockwise'
  - platform: pulse_width
    name: Pulse Width
    pin: GPIO12
  - platform: sm300d2
    uart_id: uart0
    co2:
      name: 'SM300D2 CO2 Value'
    formaldehyde:
      name: 'SM300D2 Formaldehyde Value'
    tvoc:
      name: 'SM300D2 TVOC Value'
    pm_2_5:
      name: 'SM300D2 PM2.5 Value'
    pm_10_0:
      name: 'SM300D2 PM10 Value'
    temperature:
      name: 'SM300D2 Temperature Value'
    humidity:
      name: 'SM300D2 Humidity Value'
    update_interval: 60s
  - platform: sht3xd
    temperature:
      name: 'Living Room Temperature 8'
    humidity:
      name: 'Living Room Humidity 8'
    address: 0x44
    i2c_id: i2c_bus
    update_interval: 15s
  - platform: sts3x
    name: 'Living Room Temperature 9'
    address: 0x4A
    i2c_id: i2c_bus
  - platform: scd30
    co2:
      name: 'Living Room CO2 9'
    temperature:
      name: 'Living Room Temperature 9'
    humidity:
      name: 'Living Room Humidity 9'
    address: 0x61
    update_interval: 15s
    automatic_self_calibration: true
    altitude_compensation: 10m
    ambient_pressure_compensation: 961mBar
    temperature_offset: 4.2C
    i2c_id: i2c_bus
  - platform: sgp30
    eco2:
      name: 'Workshop eCO2'
      accuracy_decimals: 1
    tvoc:
      name: 'Workshop TVOC'
      accuracy_decimals: 1
    address: 0x58
    update_interval: 5s
    i2c_id: i2c_bus
  - platform: sps30
    pm_1_0:
      name: 'Workshop PM <1µm Weight concentration'
      id: 'workshop_PM_1_0'
    pm_2_5:
      name: 'Workshop PM <2.5µm Weight concentration'
      id: 'workshop_PM_2_5'
    pm_4_0:
      name: 'Workshop PM <4µm Weight concentration'
      id: 'workshop_PM_4_0'
    pm_10_0:
      name: 'Workshop PM <10µm Weight concentration'
      id: 'workshop_PM_10_0'
    pmc_0_5:
      name: 'Workshop PM <0.5µm Number concentration'
      id: 'workshop_PMC_0_5'
    pmc_1_0:
      name: 'Workshop PM <1µm Number concentration'
      id: 'workshop_PMC_1_0'
    pmc_2_5:
      name: 'Workshop PM <2.5µm Number concentration'
      id: 'workshop_PMC_2_5'
    pmc_4_0:
      name: 'Workshop PM <4µm Number concentration'
      id: 'workshop_PMC_4_0'
    pmc_10_0:
      name: 'Workshop PM <10µm Number concentration'
      id: 'workshop_PMC_10_0'
    address: 0x69
    update_interval: 10s
    i2c_id: i2c_bus
  - platform: sht4x
    temperature:
      name: 'SHT4X Temperature'
    humidity:
      name: 'SHT4X Humidity'
    address: 0x44
    update_interval: 15s
    i2c_id: i2c_bus
  - platform: shtcx
    temperature:
      name: 'Living Room Temperature 10'
    humidity:
      name: 'Living Room Humidity 10'
    address: 0x70
    update_interval: 15s
    i2c_id: i2c_bus
  - platform: template
    name: 'Template Sensor'
    state_class: measurement
    id: template_sensor
    lambda: |-
      if (id(ultrasonic_sensor1).state > 1) {
        return 42.0;
      } else {
        return {};
      }
    update_interval: 15s
    on_value:
      - sensor.template.publish:
          id: template_sensor
          state: 43.0
      - sensor.template.publish:
          id: template_sensor
          state: !lambda 'return NAN;'
  - platform: tsl2561
    name: 'TSL2561 Ambient Light'
    address: 0x39
    update_interval: 15s
    is_cs_package: true
    integration_time: 402ms
    gain: 16x
    i2c_id: i2c_bus
  - platform: tsl2591
    id: this_little_light_of_mine
    address: 0x29
    update_interval: 15s
    integration_time: 600ms
    gain: high
    visible:
      name: "tsl2591 visible"
      id: tsl2591_vis
      unit_of_measurement: 'pH'
    infrared:
      name: "tsl2591 infrared"
      id: tsl2591_ir
    full_spectrum:
      name: "tsl2591 full_spectrum"
      id: tsl2591_fs
    calculated_lux:
      name: "tsl2591 calculated_lux"
      id: tsl2591_cl
    i2c_id: i2c_bus
  - platform: ultrasonic
    trigger_pin: GPIO25
    echo_pin:
      number: GPIO23
      inverted: true
    name: 'Ultrasonic Sensor'
    timeout: 5.5m
    id: ultrasonic_sensor1
  - platform: uptime
    name: Uptime Sensor
  - platform: wifi_signal
    name: 'WiFi Signal Sensor'
    update_interval: 15s
  - platform: mqtt_subscribe
    name: 'MQTT Subscribe Sensor 1'
    topic: 'mqtt/topic'
    id: the_sensor
    qos: 2
    on_value:
      - mqtt.publish_json:
          topic: the/topic
          payload: |-
            root["key"] = id(the_sensor).state;
            root["greeting"] = "Hello World";
  - platform: sds011
    uart_id: uart0
    pm_2_5:
      name: 'SDS011 PM2.5'
    pm_10_0:
      name: 'SDS011 PM10.0'
    update_interval: 5min
    rx_only: false
  - platform: ccs811
    eco2:
      name: CCS811 eCO2
    tvoc:
      name: CCS811 TVOC
    update_interval: 30s
    baseline: 0x4242
    i2c_id: i2c_bus
  - platform: tx20
    wind_speed:
      name: 'Windspeed'
    wind_direction_degrees:
      name: 'Winddirection Degrees'
    pin:
      number: GPIO04
      mode: INPUT
  - platform: zyaura
    clock_pin: GPIO5
    data_pin: GPIO4
    co2:
      name: 'ZyAura CO2'
    temperature:
      name: 'ZyAura Temperature'
    humidity:
      name: 'ZyAura Humidity'
  - platform: as3935
    lightning_energy:
      name: 'Lightning Energy'
    distance:
      name: 'Distance Storm'
  - platform: tmp117
    name: 'TMP117 Temperature'
    update_interval: 5s
    i2c_id: i2c_bus
  - 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: 'CAQI'
    i2c_id: i2c_bus
  - platform: teleinfo
    tag_name: "HCHC"
    name: "hchc"
    unit_of_measurement: "Wh"
    icon: mdi:flash
    teleinfo_id: myteleinfo
  - platform: mcp9808
    name: 'MCP9808 Temperature'
    update_interval: 15s
    i2c_id: i2c_bus
  - platform: ezo
    id: ph_ezo
    address: 99
    unit_of_measurement: 'pH'
    i2c_id: i2c_bus
  - platform: sdp3x
    name: "HVAC Filter Pressure drop"
    id: filter_pressure
    update_interval: 5s
    accuracy_decimals: 3
    i2c_id: i2c_bus
  - platform: cs5460a
    id: cs5460a1
    current:
      name: "Socket current"
    voltage:
      name: "Mains voltage"
    power:
      name: "Socket power"
      on_value:
        then:
          cs5460a.restart: cs5460a1
    samples: 1600
    pga_gain: 10X
    current_gain: 0.01
    voltage_gain: 0.000573
    current_hpf: on
    voltage_hpf: on
    phase_offset: 20
    pulse_energy: 0.01 kWh
    cs_pin:
      mcp23xxx: mcp23017_hub
      number: 14

esp32_touch:
  setup_mode: False
  iir_filter: 10ms
  sleep_duration: 27ms
  measurement_duration: 8ms
  low_voltage_reference: 0.5V
  high_voltage_reference: 2.7V
  voltage_attenuation: 1.5V

binary_sensor:
  - platform: gpio
    name: 'MCP23S08 Pin #1'
    pin:
      mcp23xxx: mcp23s08_hub
      # Use pin number 1
      number: 1
      # One of INPUT or INPUT_PULLUP
      mode: INPUT_PULLUP
      inverted: False
  - platform: gpio
    name: 'MCP23S17 Pin #1'
    pin:
      mcp23xxx: mcp23s17_hub
      # Use pin number 1
      number: 1
      # One of INPUT or INPUT_PULLUP
      mode: INPUT_PULLUP
      inverted: False
  - platform: gpio
    name: 'MCP23S17 Pin #1 with interrupt'
    pin:
      mcp23xxx: mcp23s17_hub
      # Use pin number 1
      number: 1
      # One of INPUT or INPUT_PULLUP
      mode: INPUT_PULLUP
      inverted: False
      interrupt: FALLING
  - platform: gpio
    pin: GPIO9
    name: 'Living Room Window'
    device_class: window
    filters:
      - invert:
      - delayed_on: 40ms
      - delayed_off: 40ms
    on_press:
      then:
        - lambda: >-
            ESP_LOGD("main", "Pressed");
    on_release:
      then:
        - lambda: >-
            ESP_LOGD("main", "Released");
    on_click:
      - min_length: 50ms
        max_length: 350ms
        then:
          - lambda: >-
              ESP_LOGD("main", "Clicked");
      - then:
          - lambda: >-
              ESP_LOGD("main", "Clicked");
    on_double_click:
      - min_length: 50ms
        max_length: 350ms
        then:
          - lambda: >-
              ESP_LOGD("main", "Double Clicked");
      - then:
          - lambda: >-
              ESP_LOGD("main", "Double Clicked");
    on_multi_click:
      - timing:
          - ON for at most 1s
          - OFF for at most 1s
          - ON for at most 1s
          - OFF for at least 0.2s
        then:
          - logger.log:
              format: 'Multi Clicked TWO'
              level: warn
      - timing:
          - OFF for 1s to 2s
          - ON for 1s to 2s
          - OFF for at least 0.5s
        then:
          - logger.log:
              format: 'Multi Clicked LONG SINGLE'
              level: warn
      - timing:
          - ON for at most 1s
          - OFF for at least 0.5s
        then:
          - logger.log:
              format: 'Multi Clicked SINGLE'
              level: warn
    id: binary_sensor1
  - platform: gpio
    pin:
      number: GPIO9
      mode: INPUT_PULLUP
    name: 'Living Room Window 2'
  - platform: status
    name: 'Living Room Status'
  - platform: esp32_touch
    name: 'ESP32 Touch Pad GPIO27'
    pin: GPIO27
    threshold: 1000
    id: btn_left
  - platform: template
    name: 'Garage Door Open'
    id: garage_door
    lambda: |-
      if (isnan(id(${sensorname}_sensor).state)) {
        // isnan checks if the ultrasonic sensor echo
        // has timed out, resulting in a NaN (not a number) state
        // in that case, return {} to indicate that we don't know.
        return {};
      } else if (id(${sensorname}_sensor).state > 30) {
        // Garage Door is open.
        return true;
      } else {
        // Garage Door is closed.
        return false;
      }
    on_press:
      - binary_sensor.template.publish:
          id: garage_door
          state: OFF
      - output.ledc.set_frequency:
          id: gpio_19
          frequency: 500.0Hz
      - output.ledc.set_frequency:
          id: gpio_19
          frequency: !lambda 'return 500.0;'
  - platform: pn532
    pn532_id: pn532_bs
    uid: 74-10-37-94
    name: 'PN532 NFC Tag'
  - platform: rdm6300
    uid: 7616525
    name: 'RDM6300 NFC Tag'
  - platform: gpio
    name: 'PCF binary sensor'
    pin:
      pcf8574: pcf8574_hub
      number: 1
      mode: INPUT
      inverted: True
  - platform: gpio
    name: 'MCP21 binary sensor'
    pin:
      mcp23xxx: mcp23017_hub
      number: 1
      mode: INPUT
      inverted: True
  - platform: gpio
    name: 'MCP22 binary sensor'
    pin:
      mcp23xxx: mcp23008_hub
      number: 7
      mode: INPUT_PULLUP
      inverted: False
  - platform: gpio
    name: 'MCP23 binary sensor'
    pin:
      mcp23016: mcp23016_hub
      number: 7
      mode: INPUT
      inverted: False

  - platform: remote_receiver
    name: 'Raw Remote Receiver Test'
    raw:
      code:
        [
          5685,
          -4252,
          1711,
          -2265,
          1712,
          -2265,
          1711,
          -2264,
          1712,
          -2266,
          3700,
          -2263,
          1712,
          -4254,
          1711,
          -4249,
          1715,
          -2266,
          1710,
          -2267,
          1709,
          -2265,
          3704,
          -4250,
          1712,
          -4254,
          3700,
          -2260,
          1714,
          -2265,
          1712,
          -2262,
          1714,
          -2267,
          1709,
        ]
  - platform: as3935
    name: 'Storm Alert'

pca9685:
  frequency: 500
  address: 0x0
  i2c_id: i2c_bus

tlc59208f:
  - address: 0x20
    id: tlc59208f_1
    i2c_id: i2c_bus
  - address: 0x22
    id: tlc59208f_2
    i2c_id: i2c_bus
  - address: 0x24
    id: tlc59208f_3
    i2c_id: i2c_bus

my9231:
  data_pin: GPIO12
  clock_pin: GPIO14
  num_channels: 6
  num_chips: 2
  bit_depth: 16

output:
  - platform: gpio
    pin: GPIO26
    id: gpio_26
    power_supply: atx_power_supply
    inverted: False
  - platform: ledc
    pin: 19
    id: gpio_19
    frequency: 1500Hz
    channel: 14
    max_power: 0.5
  - platform: pca9685
    id: pca_0
    channel: 0
  - platform: pca9685
    id: pca_1
    channel: 1
  - platform: pca9685
    id: pca_2
    channel: 2
  - platform: pca9685
    id: pca_3
    channel: 3
  - platform: pca9685
    id: pca_4
    channel: 4
  - platform: pca9685
    id: pca_5
    channel: 5
  - platform: pca9685
    id: pca_6
    channel: 6
  - platform: pca9685
    id: pca_7
    channel: 7
  - platform: tlc59208f
    id: tlc_0
    channel: 0
    tlc59208f_id: 'tlc59208f_1'
  - platform: tlc59208f
    id: tlc_1
    channel: 1
    tlc59208f_id: 'tlc59208f_1'
  - platform: tlc59208f
    id: tlc_2
    channel: 2
    tlc59208f_id: 'tlc59208f_1'
  - platform: tlc59208f
    id: tlc_3
    channel: 0
    tlc59208f_id: 'tlc59208f_2'
  - platform: tlc59208f
    id: tlc_4
    channel: 1
    tlc59208f_id: 'tlc59208f_2'
  - platform: tlc59208f
    id: tlc_5
    channel: 2
    tlc59208f_id: 'tlc59208f_2'
  - platform: tlc59208f
    id: tlc_6
    channel: 0
    tlc59208f_id: 'tlc59208f_3'
  - platform: tlc59208f
    id: tlc_7
    channel: 1
    tlc59208f_id: 'tlc59208f_3'
  - platform: tlc59208f
    id: tlc_8
    channel: 2
    tlc59208f_id: 'tlc59208f_3'
  - platform: gpio
    id: id2
    pin:
      pcf8574: pcf8574_hub
      number: 0
      mode: OUTPUT
      inverted: False
  - platform: gpio
    id: id22
    pin:
      mcp23xxx: mcp23017_hub
      number: 0
      mode: OUTPUT
      inverted: False
  - platform: gpio
    id: id23
    pin:
      mcp23xxx: mcp23008_hub
      number: 0
      mode: OUTPUT
      inverted: False
  - platform: gpio
    id: id25
    pin:
      mcp23016: mcp23016_hub
      number: 0
      mode: OUTPUT
      inverted: False
  - platform: my9231
    id: my_0
    channel: 0
  - platform: my9231
    id: my_1
    channel: 1
  - platform: my9231
    id: my_2
    channel: 2
  - platform: my9231
    id: my_3
    channel: 3
  - platform: my9231
    id: my_4
    channel: 4
  - platform: my9231
    id: my_5
    channel: 5
  - platform: slow_pwm
    id: id24
    pin: GPIO26
    period: 15s
  - platform: ac_dimmer
    id: dimmer1
    gate_pin: GPIO5
    zero_cross_pin: GPIO26
  - platform: esp32_dac
    pin: GPIO25
    id: dac_output
  - platform: mcp4725
    id: mcp4725_dac_output
    i2c_id: i2c_bus

e131:

light:
  - platform: binary
    name: 'Desk Lamp'
    output: gpio_26
    effects:
      - strobe:
      - strobe:
          name: 'My Strobe'
          colors:
            - state: True
              duration: 250ms
            - state: False
              duration: 250ms
    on_turn_on:
      - switch.template.publish:
          id: livingroom_lights
          state: yes
    on_turn_off:
      - switch.template.publish:
          id: livingroom_lights
          state: yes
  - platform: monochromatic
    name: 'Kitchen Lights'
    id: kitchen
    output: gpio_19
    gamma_correct: 2.8
    default_transition_length: 2s
    effects:
      - strobe:
      - flicker:
      - flicker:
          name: 'My Flicker'
          alpha: 98%
          intensity: 1.5%
      - lambda:
          name: My Custom Effect
          update_interval: 1s
          lambda: |-
            static int state = 0;
            state += 1;
            if (state == 4)
              state = 0;
  - platform: rgb
    name: 'Living Room Lights'
    id: ${roomname}_lights
    red: pca_0
    green: pca_1
    blue: pca_2
  - platform: rgbw
    name: 'Living Room Lights 2'
    red: pca_3
    green: pca_4
    blue: pca_5
    white: pca_6
    color_interlock: true
  - platform: rgbww
    name: 'Living Room Lights 2'
    red: pca_3
    green: pca_4
    blue: pca_5
    cold_white: pca_6
    warm_white: pca_6
    cold_white_color_temperature: 153 mireds
    warm_white_color_temperature: 500 mireds
    color_interlock: true
  - platform: rgbct
    name: 'Living Room Lights 2'
    red: pca_3
    green: pca_4
    blue: pca_5
    color_temperature: pca_6
    white_brightness: pca_6
    cold_white_color_temperature: 153 mireds
    warm_white_color_temperature: 500 mireds
    color_interlock: true
  - platform: cwww
    name: 'Living Room Lights 2'
    cold_white: pca_6
    warm_white: pca_6
    cold_white_color_temperature: 153 mireds
    warm_white_color_temperature: 500 mireds
    constant_brightness: true
  - platform: color_temperature
    name: 'Living Room Lights 2'
    color_temperature: pca_6
    brightness: pca_6
    cold_white_color_temperature: 153 mireds
    warm_white_color_temperature: 500 mireds
  - platform: fastled_clockless
    id: addr1
    chipset: WS2811
    pin: GPIO23
    num_leds: 60
    rgb_order: BRG
    max_refresh_rate: 20ms
    power_supply: atx_power_supply
    color_correct: [75%, 100%, 50%]
    name: 'FastLED WS2811 Light'
    effects:
      - addressable_color_wipe:
      - addressable_color_wipe:
          name: Color Wipe Effect With Custom Values
          colors:
            - red: 100%
              green: 100%
              blue: 100%
              num_leds: 1
            - red: 0%
              green: 0%
              blue: 0%
              num_leds: 1
          add_led_interval: 100ms
          reverse: False
      - addressable_scan:
      - addressable_scan:
          name: Scan Effect With Custom Values
          move_interval: 100ms
      - addressable_twinkle:
      - addressable_twinkle:
          name: Twinkle Effect With Custom Values
          twinkle_probability: 5%
          progress_interval: 4ms
      - addressable_random_twinkle:
      - addressable_random_twinkle:
          name: Random Twinkle Effect With Custom Values
          twinkle_probability: 5%
          progress_interval: 32ms
      - addressable_fireworks:
      - addressable_fireworks:
          name: Fireworks Effect With Custom Values
          update_interval: 32ms
          spark_probability: 10%
          use_random_color: false
          fade_out_rate: 120
      - addressable_flicker:
      - addressable_flicker:
          name: Flicker Effect With Custom Values
          update_interval: 16ms
          intensity: 5%
      - addressable_lambda:
          name: 'Test For Custom Lambda Effect'
          lambda: |-
            if (initial_run) {
              it[0] = current_color;
            }

      - wled:
          port: 11111

      - adalight:
          uart_id: adalight_uart

      - automation:
          name: Custom Effect
          sequence:
            - light.addressable_set:
                id: addr1
                red: 100%
                green: 100%
                blue: 0%
            - delay: 100ms
            - light.addressable_set:
                id: addr1
                red: 0%
                green: 100%
                blue: 0%
      - e131:
          universe: 1
  - platform: fastled_spi
    id: addr2
    chipset: WS2801
    data_pin: GPIO23
    clock_pin: GPIO22
    data_rate: 2MHz
    num_leds: 60
    rgb_order: BRG
    name: 'FastLED SPI Light'
  - platform: neopixelbus
    id: addr3
    name: 'Neopixelbus Light'
    gamma_correct: 2.8
    color_correct: [0.0, 0.0, 0.0, 0.0]
    default_transition_length: 10s
    power_supply: atx_power_supply
    effects:
      - addressable_flicker:
          name: Flicker Effect With Custom Values
          update_interval: 16ms
          intensity: 5%
    type: GRBW
    variant: SK6812
    method: ESP32_I2S_0
    num_leds: 60
    pin: GPIO23
  - platform: partition
    name: 'Partition Light'
    segments:
      - id: addr1
        from: 0
        to: 0
      - id: addr2
        from: 1
        to: 10
      - id: addr2
        from: 20
        to: 25

remote_transmitter:
  - pin: 32
    carrier_duty_percent: 100%

climate:
  - platform: tcl112
    name: TCL112 Climate With Sensor
    supports_heat: True
    supports_cool: True
    sensor: ${sensorname}_sensor
  - platform: tcl112
    name: TCL112 Climate
  - platform: coolix
    name: Coolix Climate With Sensor
    supports_heat: True
    supports_cool: True
    sensor: ${sensorname}_sensor
  - platform: coolix
    name: Coolix Climate
  - platform: fujitsu_general
    name: Fujitsu General Climate
  - platform: daikin
    name: Daikin Climate
  - platform: yashima
    name: Yashima Climate
  - platform: mitsubishi
    name: Mitsubishi
  - platform: whirlpool
    name: Whirlpool Climate
  - platform: climate_ir_lg
    name: LG Climate
  - platform: toshiba
    name: Toshiba Climate
  - platform: hitachi_ac344
    name: Hitachi Climate
  - platform: midea
    id: midea_unit
    uart_id: uart0
    name: Midea Climate
    transmitter_id:
    period: 1s
    num_attempts: 5
    timeout: 2s
    beeper: false
    autoconf: true
    visual:
      min_temperature: 17 °C
      max_temperature: 30 °C
      temperature_step: 0.5 °C
    supported_modes:
      - FAN_ONLY
      - HEAT_COOL
      - COOL
      - HEAT
      - DRY
    custom_fan_modes:
      - SILENT
      - TURBO
    supported_presets:
      - ECO
      - BOOST
      - SLEEP
    custom_presets:
      - FREEZE_PROTECTION
    supported_swing_modes:
      - VERTICAL
      - HORIZONTAL
      - BOTH
    outdoor_temperature:
      name: "Temp"
    power_usage:
      name: "Power"
    humidity_setpoint:
      name: "Humidity"
  - platform: anova
    name: Anova cooker
    ble_client_id: ble_blah
    unit_of_measurement: c

script:
  - id: climate_custom
    then:
      - climate.control:
          id: midea_unit
          custom_preset: FREEZE_PROTECTION
          custom_fan_mode: SILENT
  - id: climate_preset
    then:
      - climate.control:
          id: midea_unit
          preset: SLEEP

switch:
  - platform: template
    name: MIDEA_AC_TOGGLE_LIGHT
    turn_on_action:
      midea_ac.display_toggle:
  - platform: template
    name: MIDEA_AC_SWING_STEP
    turn_on_action:
      midea_ac.swing_step:
  - platform: template
    name: MIDEA_AC_BEEPER_CONTROL
    optimistic: true
    turn_on_action:
      midea_ac.beeper_on:
    turn_off_action:
      midea_ac.beeper_off:
  - platform: template
    name: MIDEA_RAW
    turn_on_action:
      remote_transmitter.transmit_midea:
        code: [0xA2, 0x08, 0xFF, 0xFF, 0xFF]
  - platform: gpio
    name: 'MCP23S08 Pin #0'
    pin:
      mcp23xxx: mcp23s08_hub
      # Use pin number 0
      number: 0
      mode: OUTPUT
      inverted: False
  - platform: gpio
    name: 'MCP23S17 Pin #0'
    pin:
      mcp23xxx: mcp23s17_hub
      # Use pin number 0
      number: 1
      mode: OUTPUT
      inverted: False
  - platform: gpio
    pin: GPIO25
    name: 'Living Room Dehumidifier'
    icon: 'mdi:restart'
    inverted: True
    command_topic: custom_command_topic
    restore_mode: ALWAYS_OFF
  - platform: template
    name: JVC Off
    id: living_room_lights_on
    turn_on_action:
      remote_transmitter.transmit_jvc:
        data: 0x10EF
  - platform: template
    name: NEC
    id: living_room_lights_off
    turn_on_action:
      remote_transmitter.transmit_nec:
        address: 0x4242
        command: 0x8484
  - platform: template
    name: LG
    turn_on_action:
      remote_transmitter.transmit_lg:
        data: 4294967295
        nbits: 28
  - platform: template
    name: Samsung
    turn_on_action:
      remote_transmitter.transmit_samsung:
        data: 0xABCDEF
  - platform: template
    name: Samsung36
    turn_on_action:
      remote_transmitter.transmit_samsung36:
        address: 0x0400
        command: 0x000E00FF
  - platform: template
    name: ToshibaAC
    turn_on_action:
      - remote_transmitter.transmit_toshiba_ac:
          rc_code_1: 0xB24DBF4050AF
          rc_code_2: 0xD5660001003C
  - platform: template
    name: Sony
    turn_on_action:
      remote_transmitter.transmit_sony:
        data: 0xABCDEF
        nbits: 12
  - platform: template
    name: Panasonic
    turn_on_action:
      remote_transmitter.transmit_panasonic:
        address: 0x4004
        command: 0x1000BCD
  - platform: template
    name: Pioneer
    turn_on_action:
      - remote_transmitter.transmit_pioneer:
          rc_code_1: 0xA556
          rc_code_2: 0xA506
          repeat:
            times: 2
  - platform: template
    name: RC Switch Raw
    turn_on_action:
      remote_transmitter.transmit_rc_switch_raw:
        code: '00101001100111110101xxxx'
        protocol: 1
  - platform: template
    name: RC Switch Type A
    turn_on_action:
      remote_transmitter.transmit_rc_switch_type_a:
        group: '11001'
        device: '01000'
        state: True
        protocol:
          pulse_length: 175
          sync: [1, 31]
          zero: [1, 3]
          one: [3, 1]
          inverted: False
  - platform: template
    name: RC Switch Type B
    turn_on_action:
      remote_transmitter.transmit_rc_switch_type_b:
        address: 4
        channel: 2
        state: True
  - platform: template
    name: RC Switch Type C
    turn_on_action:
      remote_transmitter.transmit_rc_switch_type_c:
        family: 'a'
        group: 1
        device: 2
        state: True
  - platform: template
    name: RC Switch Type D
    turn_on_action:
      remote_transmitter.transmit_rc_switch_type_d:
        group: 'a'
        device: 2
        state: True
  - platform: template
    name: RC5
    turn_on_action:
      remote_transmitter.transmit_rc5:
        address: 0x00
        command: 0x0B
  - platform: template
    name: RC5
    turn_on_action:
      remote_transmitter.transmit_raw:
        code: [1000, -1000]
  - platform: template
    name: Living Room Lights
    id: livingroom_lights
    optimistic: True
    assumed_state: yes
    turn_on_action:
      - switch.turn_on: living_room_lights_on
      - output.set_level:
          id: gpio_19
          level: 50%
      - output.set_level:
          id: gpio_19
          level: !lambda 'return 0.5;'
      - output.set_level:
          id: dac_output
          level: 50%
      - output.set_level:
          id: dac_output
          level: !lambda 'return 0.5;'
      - output.set_level:
          id: mcp4725_dac_output
          level: !lambda 'return 0.5;'
    turn_off_action:
      - switch.turn_on: living_room_lights_off
    restore_state: False
    on_turn_on:
      - switch.template.publish:
          id: livingroom_lights
          state: yes
  - platform: restart
    name: 'Living Room Restart'
  - platform: shutdown
    name: 'Living Room Shutdown'
  - platform: output
    name: 'Generic Output'
    output: pca_6
  - platform: template
    name: 'Template Switch'
    id: my_switch
    lambda: |-
      if (id(binary_sensor1).state) {
        return true;
      } else {
        return {};
      }
      id(my_switch).publish_state(false);
      id(my_switch).publish_state(true);
      if (id(my_switch).state) {
        // Switch is ON, do something here
        id(my_switch).turn_off();
        id(my_switch).turn_on();
      } else {
        // Switch is OFF, do something else here
      }
    optimistic: true
    assumed_state: no
    restore_state: True
    on_turn_off:
      - switch.template.publish:
          id: my_switch
          state: !lambda 'return false;'
  - platform: uart
    uart_id: uart0
    name: 'UART String Output'
    data: 'DataToSend'
  - platform: uart
    uart_id: uart0
    name: 'UART Bytes Output'
    data: [0xDE, 0xAD, 0xBE, 0xEF]
  - platform: uart
    uart_id: uart0
    name: 'UART Recurring Output'
    data: [0xDE, 0xAD, 0xBE, 0xEF]
    send_every: 1s
  - platform: template
    assumed_state: yes
    name: Stepper Switch
    turn_on_action:
      - stepper.set_target:
          id: my_stepper
          target: !lambda |-
            static int32_t i = 0;
            i += 1000;
            if (i > 5000) {
              i = -5000;
            }
            return i;
      - stepper.report_position:
          id: my_stepper
          position: 0

  - platform: gpio
    name: 'SN74HC595 Pin #0'
    pin:
      sn74hc595: sn74hc595_hub
      # Use pin number 0
      number: 0
      inverted: False
  - platform: template
    id: ble1_status
    optimistic: true

fan:
  - platform: binary
    output: gpio_26
    name: 'Living Room Fan 1'
    oscillation_output: gpio_19
    direction_output: gpio_26
  - platform: speed
    id: fan_speed
    output: pca_6
    speed_count: 10
    name: 'Living Room Fan 2'
    oscillation_output: gpio_19
    direction_output: gpio_26
    oscillation_state_topic: oscillation/state/topic
    oscillation_command_topic: oscillation/command/topic
    speed_state_topic: speed/state/topic
    speed_command_topic: speed/command/topic
    on_speed_set:
      then:
        - logger.log: "Fan speed was changed!"

interval:
  - interval: 10s
    then:
      - display.page.show: !lambda |-
          if (true) return id(page1); else return id(page2);
      - display.page.show_next: display1
      - display.page.show_previous: display1
  - interval: 2s
    then:
      - lambda: |-
          static uint16_t btn_left_state = id(btn_left)->get_value();

          ESP_LOGD("adaptive touch", "___  Touch Pad '%s' (T%u): val: %u state: %u tres:%u", id(btn_left)->get_name().c_str(), id(btn_left)->get_touch_pad(), id(btn_left)->get_value(), btn_left_state, id(btn_left)->get_threshold());

          btn_left_state = ((uint32_t) id(btn_left)->get_value()  +  63 * (uint32_t)btn_left_state) >> 6;

          id(btn_left)->set_threshold(btn_left_state * 0.9);
      - if:
          condition:
            display.is_displaying_page:
              id: display1
              page_id: page1
          then:
            - logger.log: 'Seeing page 1'

color:
  - id: kbx_red
    red: 100%
    green_int: 123
    blue: 2%
  - id: kbx_blue
    red: 0%
    green: 1%
    blue: 100%

display:
  - platform: lcd_gpio
    dimensions: 18x4
    data_pins:
      - GPIO19
      - GPIO21
      - GPIO22
      - GPIO23
    enable_pin: GPIO23
    rs_pin: GPIO25
    lambda: |-
      it.print("Hello World!");
  - platform: lcd_pcf8574
    dimensions: 18x4
    address: 0x3F
    lambda: |-
      it.print("Hello World!");
    i2c_id: i2c_bus
  - platform: max7219
    cs_pin: GPIO23
    num_chips: 1
    lambda: |-
      it.print("01234567");
  - platform: tm1637
    clk_pin: GPIO23
    dio_pin: GPIO25
    intensity: 3
    lambda: |-
      it.print("1234");
  - platform: tm1637
    clk_pin:
      mcp23xxx: mcp23017_hub
      number: 1
    dio_pin:
      mcp23xxx: mcp23017_hub
      number: 2
    intensity: 3
    lambda: |-
      it.print("1234");
  - platform: pcd8544
    cs_pin: GPIO23
    dc_pin: GPIO23
    reset_pin: GPIO23
    contrast: 60
    lambda: |-
      it.rectangle(0, 0, it.get_width(), it.get_height());
  - platform: ssd1306_i2c
    model: 'SSD1306_128X64'
    reset_pin: GPIO23
    address: 0x3C
    id: display1
    brightness: 60%
    pages:
      - id: page1
        lambda: |-
          it.rectangle(0, 0, it.get_width(), it.get_height());
      - id: page2
        lambda: |-
          // Nothing
    on_page_change:
      from: page1
      to: page2
      then:
        lambda: |-
          ESP_LOGD("display", "1 -> 2");
    i2c_id: i2c_bus
  - platform: ssd1306_spi
    model: 'SSD1306 128x64'
    cs_pin: GPIO23
    dc_pin: GPIO23
    reset_pin: GPIO23
    lambda: |-
      it.rectangle(0, 0, it.get_width(), it.get_height());
  - platform: ssd1322_spi
    model: 'SSD1322 256x64'
    cs_pin: GPIO23
    dc_pin: GPIO23
    reset_pin: GPIO23
    lambda: |-
      it.rectangle(0, 0, it.get_width(), it.get_height());
  - platform: ssd1325_spi
    model: 'SSD1325 128x64'
    cs_pin: GPIO23
    dc_pin: GPIO23
    reset_pin: GPIO23
    lambda: |-
      it.rectangle(0, 0, it.get_width(), it.get_height());
  - platform: ssd1327_i2c
    model: 'SSD1327 128X128'
    reset_pin: GPIO23
    address: 0x3D
    id: display1327
    brightness: 60%
    pages:
      - id: page13271
        lambda: |-
          it.rectangle(0, 0, it.get_width(), it.get_height());
      - id: page13272
        lambda: |-
          // Nothing
    i2c_id: i2c_bus
  - platform: ssd1327_spi
    model: 'SSD1327 128x128'
    cs_pin: GPIO23
    dc_pin: GPIO23
    reset_pin: GPIO23
    lambda: |-
      it.rectangle(0, 0, it.get_width(), it.get_height());
  - platform: ssd1331_spi
    cs_pin: GPIO23
    dc_pin: GPIO23
    reset_pin: GPIO23
    lambda: |-
      it.rectangle(0, 0, it.get_width(), it.get_height());
  - platform: ssd1351_spi
    model: 'SSD1351 128x128'
    cs_pin: GPIO23
    dc_pin: GPIO23
    reset_pin: GPIO23
    lambda: |-
      it.rectangle(0, 0, it.get_width(), it.get_height());
  - platform: st7789v
    cs_pin: GPIO5
    dc_pin: GPIO16
    reset_pin: GPIO23
    backlight_pin: GPIO4
    lambda: |-
      it.rectangle(0, 0, it.get_width(), it.get_height());
  - platform: st7920
    width: 128
    height: 64
    cs_pin:
      number: GPIO23
      inverted: true
    lambda: |-
      it.rectangle(0, 0, it.get_width(), it.get_height());
  - platform: st7735
    model: 'INITR_BLACKTAB'
    cs_pin: GPIO5
    dc_pin: GPIO16
    reset_pin: GPIO23
    rotation: 0
    device_width: 128
    device_height: 160
    col_start: 0
    row_start: 0
    lambda: |-
      it.rectangle(0, 0, it.get_width(), it.get_height());

tm1651:
  id: tm1651_battery
  clk_pin: GPIO23
  dio_pin: GPIO23

remote_receiver:
  pin: GPIO32
  dump: all

status_led:
  pin: GPIO2

pn532_spi:
  id: pn532_bs
  cs_pin: GPIO23
  update_interval: 1s
  on_tag:
    - lambda: |-
        ESP_LOGD("main", "Found tag %s", x.c_str());
    - mqtt.publish:
        topic: the/topic
        payload: !lambda 'return x;'
  on_tag_removed:
    - lambda: |-
        ESP_LOGD("main", "Removed tag %s", x.c_str());
    - mqtt.publish:
        topic: the/topic
        payload: !lambda 'return x;'

pn532_i2c:
  i2c_id: i2c_bus

rdm6300:
  uart_id: uart0

rc522_spi:
  cs_pin: GPIO23
  update_interval: 1s
  on_tag:
    - lambda: |-
        ESP_LOGD("main", "Found tag %s", x.c_str());

rc522_i2c:
  - update_interval: 1s
    on_tag:
      - lambda: |-
          ESP_LOGD("main", "Found tag %s", x.c_str());
    i2c_id: i2c_bus

  - update_interval: 1s
    on_tag:
      - lambda: |-
          ESP_LOGD("main", "Found tag %s", x.c_str());
    i2c_id: i2c_bus

gps:
  uart_id: uart0

time:
  - platform: sntp
    id: sntp_time
    servers:
      - 0.pool.ntp.org
      - 1.pool.ntp.org
      - 192.168.178.1
    on_time:
      cron: '/30 0-30,30/5 * ? JAN-DEC MON,SAT-SUN,TUE-FRI'
      then:
        - lambda: 'ESP_LOGD("main", "time");'
  - platform: gps
    on_time_sync:
      then:
        ds1307.write_time:
          id: ds1307_time
  - platform: ds1307
    id: ds1307_time
    update_interval: never
    on_time:
      seconds: 0
      then: ds1307.read_time
    i2c_id: i2c_bus

cover:
  - platform: template
    name: 'Template Cover'
    id: template_cover
    lambda: |-
      if (id(binary_sensor1).state) {
        return COVER_OPEN;
      } else {
        return {};
      }
    optimistic: true
    open_action:
      - cover.template.publish:
          id: template_cover
          state: CLOSED
    assumed_state: no
  - platform: am43
    name: 'Test AM43'
    id: am43_test
    ble_client_id: ble_foo

debug:

tca9548a:
  - address: 0x70
    id: multiplex0
    channels:
      - bus_id: multiplex0_chan0
        channel: 0
    i2c_id: i2c_bus
  - address: 0x71
    id: multiplex1
    i2c_id: multiplex0_chan0

pcf8574:
  - id: 'pcf8574_hub'
    address: 0x21
    pcf8575: False
    i2c_id: i2c_bus

mcp23017:
  - id: 'mcp23017_hub'
    open_drain_interrupt: 'true'
    i2c_id: i2c_bus

mcp23008:
  - id: 'mcp23008_hub'
    address: 0x22
    open_drain_interrupt: 'true'
    i2c_id: i2c_bus

mcp23016:
  - id: 'mcp23016_hub'
    address: 0x23
    i2c_id: i2c_bus

stepper:
  - platform: a4988
    id: my_stepper
    step_pin: GPIO23
    dir_pin: GPIO25
    sleep_pin: GPIO25
    max_speed: 250 steps/s
    acceleration: 100 steps/s^2
    deceleration: 200 steps/s^2

globals:
  - id: glob_int
    type: int
    restore_value: yes
    initial_value: '0'
  - id: glob_float
    type: float
    restore_value: yes
    initial_value: '0.0f'
  - id: glob_bool
    type: bool
    restore_value: no
    initial_value: 'true'
  - id: glob_string
    type: std::string
    restore_value: no
    # initial_value: ""

text_sensor:
  - platform: mqtt_subscribe
    name: 'MQTT Subscribe Text'
    topic: 'the/topic'
    qos: 2
    on_value:
      - text_sensor.template.publish:
          id: ${textname}_text
          state: Hello World
      - text_sensor.template.publish:
          id: ${textname}_text
          state: |-
            return "Hello World2";
      - globals.set:
          id: glob_int
          value: '0'
      - canbus.send:
          can_id: 23
          data: [0x10, 0x20, 0x30]
  - platform: template
    name: Template Text Sensor
    id: ${textname}_text
  - platform: wifi_info
    ip_address:
      name: 'IP Address'
    ssid:
      name: 'SSID'
    bssid:
      name: 'BSSID'
    mac_address:
      name: 'Mac Address'
  - platform: version
    name: 'ESPHome Version No Timestamp'
    hide_timestamp: True
  - platform: teleinfo
    tag_name: "OPTARIF"
    name: "optarif"
    teleinfo_id: myteleinfo

sn74hc595:
  - id: 'sn74hc595_hub'
    data_pin: GPIO21
    clock_pin: GPIO23
    latch_pin: GPIO22
    oe_pin: GPIO32
    sr_count: 2

rtttl:
  output: gpio_19

canbus:
  - platform: mcp2515
    cs_pin: GPIO17
    can_id: 4
    bit_rate: 50kbps
    on_frame:
      - can_id: 500
        then:
          - lambda: |-
              std::string b(x.begin(), x.end());
              ESP_LOGD("canid 500", "%s", &b[0] );
      - can_id: 23
        then:
          - if:
              condition:
                lambda: 'return x[0] == 0x11;'
              then:
                light.toggle: ${roomname}_lights

teleinfo:
  id: myteleinfo
  uart_id: uart0
  update_interval: 60s
  historical_mode: true
