---
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!");
      - 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

network:
  enable_ipv6: true

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
  use_abbreviations: false
  discovery: true
  discovery_retain: false
  discovery_prefix: discovery
  discovery_unique_id_generator: legacy
  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
        - deep_sleep.allow
    - 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
                # yamllint disable-line rule:line-length
                brightness: !lambda "return id(${roomname}_lights).current_values.get_brightness() + 0.5;"
            - light.dim_relative:
                id: ${roomname}_lights
                relative_brightness: 5%
            - uart.write:
                id: uart_0
                data: Hello World
            - uart.write:
                id: uart_0
                data: [0x00, 0x20, 0x30]
            - uart.write:
                id: uart_0
                data: !lambda |-
                  return {};
            - bluetooth_password.set:
                id: my_ld2410
                password: abcdef
  on_connect:
    - light.turn_on: ${roomname}_lights
    - mqtt.publish:
        topic: some/topic
        payload: Hello
  on_disconnect:
    - light.turn_off: ${roomname}_lights

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: true
    rx_pin:
      number: GPIO23
      inverted: true
    baud_rate: 115200
    id: uart_0
    parity: NONE
    data_bits: 8
    stop_bits: 1
    rx_buffer_size: 512
    debug:
      dummy_receiver: true
      direction: both
      after:
        bytes: 50
        timeout: 500ms
        delimiter: "\r\n"
      sequence:
        - lambda: UARTDebug::log_hex(direction, bytes, ':');
        - lambda: UARTDebug::log_string(direction, bytes);
        - lambda: UARTDebug::log_int(direction, bytes, ',');
        - lambda: UARTDebug::log_binary(direction, bytes, ';');
  - id: ld2410_uart
    tx_pin: 18
    rx_pin: 23
    baud_rate: 256000
    parity: NONE
    stop_bits: 1
  - id: gcja5_uart
    rx_pin: GPIO10
    parity: EVEN
    baud_rate: 9600

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
  version: 2

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: GPIO2
  wakeup_pin_mode: INVERT_WAKEUP

ads1115:
  address: 0x48
  i2c_id: i2c_bus

dallas:
  pin: GPIO23

as3935_spi:
  cs_pin: GPIO12
  irq_pin: GPIO13

esp32_ble:
  io_capability: keyboard_only

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
    on_passkey_request:
      then:
        - ble_client.passkey_reply:
            id: ble_blah
            passkey: 123456
    on_passkey_notification:
      then:
        - logger.log: "Passkey notification received"
    on_numeric_comparison_request:
      then:
        - ble_client.numeric_comparison_reply:
            id: ble_blah
            accept: True
  - mac_address: C4:4F:33:11:22:33
    id: my_bedjet_ble_client

bedjet:
  - ble_client_id: my_bedjet_ble_client
    id: my_bedjet_client
    time_id: sntp_time
mcp23s08:
  - id: mcp23s08_hub
    cs_pin: GPIO12
    deviceaddress: 0

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

sensor:
  - platform: pmwcs3
    i2c_id: i2c_bus
    e25:
      name: pmwcs3_e25
    ec:
      name: pmwcs3_ec
    temperature:
      name: pmwcs3_temperature
    vwc:
      name: pmwcs3_vwc
  - platform: gcja5
    pm_1_0:
      name: "Particulate Matter <1.0µm Concentration"
    pm_2_5:
      name: "Particulate Matter <2.5µm Concentration"
    pm_10_0:
      name: "Particulate Matter <10.0µm Concentration"
    pmc_0_5:
      name: "PMC 0.5"
    pmc_1_0:
      name: "PMC 1.0"
    pmc_2_5:
      name: "PMC 2.5"
    pmc_5_0:
      name: "PMC 5.0"
    pmc_10_0:
      name: "PMC 10.0"
    uart_id: gcja5_uart
  - platform: internal_temperature
    name: Internal Temperature
  - platform: ble_client
    type: characteristic
    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: ble_client
    type: rssi
    ble_client_id: ble_foo
    name: Green iTag RSSI
    update_interval: 15s
  - 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:
          datapoints:
            - 0.0 -> 0.0
            - 40.0 -> 45.0
            - 100.0 -> 102.5
      - clamp:
          min_value: -100
          max_value: 100
      - 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
          send_first_at: 15
      - throttle_average: 60s
      - throttle: 1s
      - heartbeat: 5s
      - debounce: 0.1s
      - delta: 5.0
      - delta: 1%
      - or:
          - throttle: 1s
          - delta: 5.0
      - lambda: return x * (9.0/5.0) + 32.0;
    on_value:
      then:
        # yamllint disable rule:line-length
        - 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);
        # yamllint enable rule:line-length
    on_value_range:
      above: 5
      below: 10
      then:
        - lambda: >-
            ESP_LOGD("main", "Got value range %f", x);
        - wait_until: wifi.connected
        - wait_until:
            condition:
              binary_sensor.is_on: binary_sensor1
            timeout: 1s
    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: as7341
    update_interval: 15s
    gain: X8
    atime: 120
    astep: 99
    f1:
      name: F1
    f2:
      name: F2
    f3:
      name: F3
    f4:
      name: F4
    f5:
      name: F5
    f6:
      name: F6
    f7:
      name: F7
    f8:
      name: F8
    clear:
      name: Clear
    nir:
      name: NIR
    i2c_id: i2c_bus
  - platform: atm90e26
    cs_pin: 5
    voltage:
      name: Line Voltage
    current:
      name: CT Amps
    power:
      name: Active Watts
    power_factor:
      name: Power Factor
    frequency:
      name: Line Frequency
    line_frequency: 50Hz
    meter_constant: 1000
    pl_const: 1429876
    gain_pga: 1X
    gain_metering: 7481
    gain_voltage: 26400
    gain_ct: 31251
  - 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
    update_interval: 30s
    retain: false
    availability:
    state_topic: livingroom/custom_state_topic
    i2c_id: i2c_bus
  - platform: max44009
    name: Outside Brightness 1
    internal: true
    address: 0x4A
    update_interval: 30s
    mode: low_power
    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:
      id: dht_temperature
      name: Living Room Temperature 3
    humidity:
      id: dht_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: ee895
    co2:
      name: Office CO2 1
    temperature:
      name: Office Temperature 1
    pressure:
      name: Office Pressure 1
    address: 0x5F
    i2c_id: i2c_bus
  - platform: esp32_hall
    name: ESP32 Hall Sensor
    update_interval: 15s
  - platform: ens210
    temperature:
      name: Living Room Temperature 5
    humidity:
      name: Living Room Humidity 5
    update_interval: 15s
    i2c_id: i2c_bus
  - platform: hdc1080
    temperature:
      name: Living Room Temperature 6
    humidity:
      name: Living Room Humidity 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
  - 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: honeywellabp
    pressure:
      name: Honeywell pressure
      min_pressure: 0
      max_pressure: 15
    temperature:
      name: Honeywell temperature
    cs_pin: GPIO5
  - platform: hte501
    temperature:
      name: Office Temperature 2
    humidity:
      name: Office Humidity 1
    address: 0x40
    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: kmeteriso
    temperature:
      name: Outside Temperature
    internal_temperature:
      name: Internal Ttemperature
    update_interval: 15s
    i2c_id: i2c_bus
  - platform: kalman_combinator
    name: Kalman-filtered temperature
    process_std_dev: 0.00139
    sources:
      - source: scd30_temperature
        error: !lambda |-
          return 0.4 + std::abs(x - 25) * 0.023;
      - source: scd4x_temperature
        error: 1.5
  - platform: htu21d
    temperature:
      name: Living Room Temperature 6
    humidity:
      name: Living Room Humidity 6
    heater:
      name: Living Room Heater 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: uart_0
    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: mpu6886
    address: 0x68
    accel_x:
      name: MPU6886 Accel X
    accel_y:
      name: MPU6886 Accel Y
    accel_z:
      name: MPU6886 Accel z
    gyro_x:
      name: MPU6886 Gyro X
    gyro_y:
      name: MPU6886 Gyro Y
    gyro_z:
      name: MPU6886 Gyro z
    temperature:
      name: MPU6886 Temperature
    i2c_id: i2c_bus
  - platform: bmi160
    address: 0x68
    acceleration_x:
      name: BMI160 Accel X
    acceleration_y:
      name: BMI160 Accel Y
    acceleration_z:
      name: BMI160 Accel z
    gyroscope_x:
      name: BMI160 Gyro X
    gyroscope_y:
      name: BMI160 Gyro Y
    gyroscope_z:
      name: BMI160 Gyro z
    temperature:
      name: BMI160 Temperature
    i2c_id: i2c_bus
  - platform: mmc5603
    address: 0x30
    field_strength_x:
      name: HMC5883L Field Strength X
    field_strength_y:
      name: HMC5883L Field Strength Y
    field_strength_z:
      name: HMC5883L Field Strength Z
    i2c_id: i2c_bus
  - platform: dps310
    temperature:
      name: DPS310 Temperature
    pressure:
      name: DPS310 Pressure
    address: 0x77
    update_interval: 15s
    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: qmp6988
    temperature:
      name: Living Temperature QMP
      oversampling: 32x
    pressure:
      name: Living Pressure QMP
      oversampling: 2x
    address: 0x70
    update_interval: 30s
    iir_filter: 16x
    i2c_id: i2c_bus
  - 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
      - display_menu.down:
    on_anticlockwise:
      - logger.log: Anticlockwise
      - display_menu.up:
  - platform: pulse_width
    name: Pulse Width
    pin: GPIO12
  - platform: sm300d2
    uart_id: uart_0
    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:
      id: scd30_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: scd4x
    id: scd40
    co2:
      name: SCD4X CO2
    temperature:
      id: scd4x_temperature
      name: SCD4X Temperature
    humidity:
      name: SCD4X Humidity
    update_interval: 15s
    automatic_self_calibration: true
    altitude_compensation: 10m
    ambient_pressure_compensation: 961mBar
    temperature_offset: 4.2C
    i2c_id: i2c_bus
  - platform: sfa30
    formaldehyde:
      name: "SFA30 formaldehyde"
    temperature:
      name: "SFA30 temperature"
    humidity:
      name: "SFA30 humidity"
    i2c_id: i2c_bus
    address: 0x5D
    update_interval: 30s
  - platform: sen0321
    name: Workshop Ozone Sensor
    id: sen0321_ozone
    update_interval: 10s
    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: tee501
    name: Office Temperature 3
    address: 0x48
    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
  - id: !extend ${devicename}_uptime_pcg
    unit_of_measurement: s
  - 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: uart_0
    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: true
    voltage_hpf: true
    phase_offset: 20
    pulse_energy: 0.01 kWh
    cs_pin:
      mcp23xxx: mcp23017_hub
      number: 14
  - platform: max9611
    i2c_id: i2c_bus
    shunt_resistance: 0.2 ohm
    gain: 1X
    voltage:
      name: Max9611 Voltage
    current:
      name: Max9611 Current
    power:
      name: Max9611 Watts
    temperature:
      name: Max9611 Temp
    update_interval: 1s
  - platform: mlx90614
    i2c_id: i2c_bus
    ambient:
      name: Ambient
    object:
      name: Object
      emissivity: 1.0
  - platform: mpl3115a2
    i2c_id: i2c_bus
    temperature:
      name: "MPL3115A2 Temperature"
    pressure:
      name: "MPL3115A2 Pressure"
    update_interval: 10s
  - platform: alpha3
    ble_client_id: ble_foo
    flow:
      name: "Radiator Pump Flow"
    head:
      name: "Radiator Pump Head"
    power:
      name: "Radiator Pump Power"
    speed:
      name: "Radiator Pump Speed"
  - platform: ld2410
    light:
      name: light
    moving_distance:
      name: "Moving distance (cm)"
    still_distance:
      name: "Still Distance (cm)"
    moving_energy:
      name: "Move Energy (%)"
    still_energy:
      name: "Still Energy (%)"
    detection_distance:
      name: "Distance Detection (cm)"
    g0:
      move_energy:
        name: g0 move energy
      still_energy:
        name: g0 still energy
    g1:
      move_energy:
        name: g1 move energy
      still_energy:
        name: g1 still energy
    g2:
      move_energy:
        name: g2 move energy
      still_energy:
        name: g2 still energy
    g3:
      move_energy:
        name: g3 move energy
      still_energy:
        name: g3 still energy
    g4:
      move_energy:
        name: g4 move energy
      still_energy:
        name: g4 still energy
    g5:
      move_energy:
        name: g5 move energy
      still_energy:
        name: g5 still energy
    g6:
      move_energy:
        name: g6 move energy
      still_energy:
        name: g6 still energy
    g7:
      move_energy:
        name: g7 move energy
      still_energy:
        name: g7 still energy
    g8:
      move_energy:
        name: g8 move energy
      still_energy:
        name: g8 still energy

  - platform: sen21231
    name: "Person Sensor"
    i2c_id: i2c_bus
  - platform: fs3000
    name: "Air Velocity"
    model: 1005
    update_interval: 60s
    i2c_id: i2c_bus
  - platform: absolute_humidity
    name: DHT Absolute Humidity
    temperature: dht_temperature
    humidity: dht_humidity
  - platform: hyt271
    i2c_id: i2c_bus
    temperature:
      name: "Temperature hyt271"
      id: temp_etuve
    humidity:
      name: "Humidity hyt271"
  - platform: iaqcore
    i2c_id: i2c_bus
    co2:
      name: "iAQ Core CO2 Sensor"
    tvoc:
      name: "iAQ Core TVOC Sensor"
  - platform: tmp1075
    name: "Temperature TMP1075"
    update_interval: 10s
    i2c_id: i2c_bus
    conversion_rate: 27.5ms
    alert:
      limit_low: 50
      limit_high: 75
      fault_count: 1
      polarity: active_high
      function: comparator
  - platform: zio_ultrasonic
    name: "Distance"
    update_interval: 60s
    i2c_id: i2c_bus
  - platform: bmp581
    i2c_id: i2c_bus
    temperature:
      name: "BMP581 Temperature"
      iir_filter: 2x
    pressure:
      name: "BMP581 Pressure"
      oversampling: 128x
  - platform: debug
    free:
      name: "Heap Free"
    block:
      name: "Heap Max Block"
    loop_time:
      name: "Loop Time"
    psram:
      name: "PSRAM Free"
  - platform: mmc5983
    i2c_id: i2c_bus
    field_strength_x:
      name: "Magnet X"
      id: magnet_x
    field_strength_y:
      name: "Magnet Y"
      id: magnet_y
    field_strength_z:
      name: "Magnet Z"
      id: magnet_z

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_off: 40ms
      - delayed_on_off:
          time_on: 10s
          time_off: !lambda "return 1000;"
      - delayed_on: 40ms
      - delayed_off: 40ms
      - delayed_on_off: !lambda "return 10;"
      - delayed_on: !lambda "return 1000;"
      - delayed_off: !lambda "return 0;"
    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: gpio
    pin:
      number: GPIO9
      mode: INPUT_OUTPUT_OPEN_DRAIN
    name: Living Room Button
  - platform: status
    name: Living Room Status
  - platform: esp32_touch
    name: ESP32 Touch Pad GPIO27
    pin: GPIO27
    threshold: 1000
    id: btn_left
    on_press:
      - if:
          condition:
            display_menu.is_active:
          then:
            - display_menu.enter:
          else:
            - display_menu.left:
            - display_menu.right:
            - display_menu.show:
  - 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: false
      - 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: PCA9554 binary sensor
    pin:
      pca9554: pca9554_hub
      number: 1
      mode: INPUT
      inverted: true
  - platform: gpio
    name: PCA6416A binary sensor
    pin:
      pca6416a: pca6416a_hub
      number: 15
      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: gpio
    name: Speed Fan Cycle binary sensor"
    pin:
      number: 18
      mode:
        input: true
        pulldown: true
    on_press:
      - fan.cycle_speed:
          id: fan_speed
          off_speed_cycle: False
      - logger.log: "Cycle speed clicked"
  - 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: remote_receiver
    name: Coolix Test 1
    coolix: 0xB21F98
  - platform: remote_receiver
    name: Coolix Test 2
    coolix:
      first: 0xB2E003
  - platform: remote_receiver
    name: Coolix Test 3
    coolix:
      first: 0xB2E003
      second: 0xB21F98
  - platform: as3935
    name: Storm Alert
  - platform: analog_threshold
    name: Analog Trheshold 1
    sensor_id: template_sensor
    threshold:
      upper: 110
      lower: 90
    filters:
      - delayed_on: 0s
      - delayed_off: 10s
  - platform: analog_threshold
    name: Analog Trheshold 2
    sensor_id: template_sensor
    threshold: 100
    filters:
      - invert:
  - platform: template
    id: open_endstop_sensor
  - platform: template
    id: open_sensor
  - platform: template
    id: open_obstacle_sensor

  - platform: template
    id: close_endstop_sensor
  - platform: template
    id: close_sensor
  - platform: template
    id: close_obstacle_sensor
  - platform: ld2410
    has_target:
      name: presence
    has_moving_target:
      name: movement
    has_still_target:
      name: still
    out_pin_presence_status:
      name: out pin presence status

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

sm2235:
  data_pin: GPIO4
  clock_pin: GPIO5
  max_power_color_channels: 9
  max_power_white_channels: 9

sm2335:
  data_pin: GPIO4
  clock_pin: GPIO5
  max_power_color_channels: 9
  max_power_white_channels: 9

bp1658cj:
  data_pin: GPIO3
  clock_pin: GPIO5
  max_power_color_channels: 4
  max_power_white_channels: 6

bp5758d:
  data_pin: GPIO3
  clock_pin: GPIO5

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: id26
    pin:
      pca9554: pca9554_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: sm2235
    id: sm2235_red
    channel: 1
  - platform: sm2235
    id: sm2235_green
    channel: 0
  - platform: sm2235
    id: sm2235_blue
    channel: 2
  - platform: sm2235
    id: sm2235_coldwhite
    channel: 4
  - platform: sm2235
    id: sm2235_warmwhite
    channel: 3
  - platform: sm2335
    id: sm2335_red
    channel: 1
  - platform: sm2335
    id: sm2335_green
    channel: 0
  - platform: sm2335
    id: sm2335_blue
    channel: 2
  - platform: sm2335
    id: sm2335_coldwhite
    channel: 4
  - platform: sm2335
    id: sm2335_warmwhite
    channel: 3
  - 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
  - platform: mcp4728
    id: mcp4728_dac_output_a
    channel: A
    vref: vdd
    power_down: normal
  - platform: mcp4728
    id: mcp4728_dac_output_b
    channel: B
    vref: internal
    gain: X1
    power_down: gnd_1k
  - platform: mcp4728
    id: mcp4728_dac_output_c
    channel: C
    vref: vdd
    power_down: gnd_100k
  - platform: mcp4728
    id: mcp4728_dac_output_d
    channel: D
    vref: internal
    gain: X2
    power_down: gnd_500k
  - platform: bp1658cj
    id: bp1658cj_red
    channel: 1
  - platform: bp1658cj
    id: bp1658cj_green
    channel: 2
  - platform: bp1658cj
    id: bp1658cj_blue
    channel: 0
  - platform: bp1658cj
    id: bp1658cj_coldwhite
    channel: 3
  - platform: bp1658cj
    id: bp1658cj_warmwhite
    channel: 4
  - platform: bp5758d
    id: bp5758d_red
    channel: 2
    current: 10
  - platform: bp5758d
    id: bp5758d_green
    channel: 3
    current: 10
  - platform: bp5758d
    id: bp5758d_blue
    channel: 1
    current: 10
  - platform: bp5758d
    id: bp5758d_coldwhite
    channel: 5
    current: 10
  - platform: bp5758d
    id: bp5758d_warmwhite
    channel: 4
    current: 10
  - platform: x9c
    id: test_x9c
    cs_pin: GPIO25
    inc_pin: GPIO26
    ud_pin: GPIO27
    initial_value: 0.5

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: true
    on_turn_off:
      - switch.template.publish:
          id: livingroom_lights
          state: true
  - 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

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
    action_state_topic: action/state/topic
    away_command_topic: away/command/topic
    away_state_topic: away/state/topic
    current_temperature_state_topic: current/temperature/state/topic
    fan_mode_command_topic: fan_mode/mode/command/topic
    fan_mode_state_topic: fan_mode/mode/state/topic
    mode_command_topic: mode/command/topic
    mode_state_topic: mode/state/topic
    swing_mode_command_topic: swing_mode/command/topic
    swing_mode_state_topic: swing_mode/state/topic
    target_temperature_command_topic: target/temperature/command/topic
    target_temperature_high_command_topic: target/temperature/high/command/topic
    target_temperature_high_state_topic: target/temperature/high/state/topic
    target_temperature_low_command_topic: target/temperature/low/command/topic
    target_temperature_low_state_topic: target/temperature/low/state/topic
    target_temperature_state_topic: target/temperature/state/topic
  - 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: daikin_brc
    name: Daikin BRC Climate
    use_fahrenheit: true
  - platform: delonghi
    name: Delonghi 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: heatpumpir
    protocol: mitsubishi_heavy_zm
    horizontal_default: left
    vertical_default: up
    name: HeatpumpIR Climate
    min_temperature: 18
    max_temperature: 30
  - platform: heatpumpir
    protocol: greeyt
    horizontal_default: left
    vertical_default: up
    name: HeatpumpIR Climate
    min_temperature: 18
    max_temperature: 30
  - platform: midea_ir
    name: Midea IR
    use_fahrenheit: true
  - platform: midea
    on_control:
      - logger.log: Control message received!
      - lambda: |-
          x.set_mode(CLIMATE_MODE_FAN_ONLY);
    on_state:
      - logger.log: State changed!
      - lambda: |-
          if (x.mode == CLIMATE_MODE_FAN_ONLY)
            id(binary_sensor1).publish_state(true);
    id: midea_unit
    uart_id: uart_0
    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
    icon: mdi:stove
  - platform: bedjet
    name: My Bedjet
    bedjet_id: my_bedjet_client
    heat_mode: extended
  - platform: whynter
    name: Whynter
  - platform: noblex
    name: AC Living
    id: noblex_ac
    sensor: ${sensorname}_sensor
    receiver_id: rcvr
  - platform: gree
    name: GREE
    model: generic
  - platform: zhlt01
    name: ZH/LT-01 Climate

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_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_coolix:
          first: 0xB21F98
      - remote_transmitter.transmit_coolix:
          first: 0xB21F98
          second: 0xB21F98
      - remote_transmitter.transmit_coolix:
          first: !lambda "return 0xB21F98;"
          second: !lambda "return 0xB21F98;"
      - remote_transmitter.transmit_midea:
          code: [0xA2, 0x08, 0xFF, 0xFF, 0xFF]
      - remote_transmitter.transmit_midea:
          code: !lambda "return {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
    command_retain: true
    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: MagiQuest
    turn_on_action:
      remote_transmitter.transmit_magiquest:
        wand_id: 0x01234567
  - 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: AEHA
    id: eaha_hitachi_climate_power_on
    turn_on_action:
      remote_transmitter.transmit_aeha:
        address: 0x8008
        data:
          [
            0x00,
            0x02,
            0xFD,
            0xFF,
            0x00,
            0x33,
            0xCC,
            0x49,
            0xB6,
            0xC8,
            0x37,
            0x16,
            0xE9,
            0x00,
            0xFF,
            0x00,
            0xFF,
            0x00,
            0xFF,
            0x00,
            0xFF,
            0x00,
            0xFF,
            0xCA,
            0x35,
            0x8F,
            0x70,
            0x00,
            0xFF,
            0x00,
            0xFF,
            0x00,
            0xFF,
            0x00,
            0xFF,
          ]
  - platform: template
    name: Haier
    turn_on_action:
      remote_transmitter.transmit_haier:
        code: [0xA6, 0xDA, 0x00, 0x00, 0x40, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x05]
  - platform: template
    name: Living Room Lights
    id: livingroom_lights
    optimistic: true
    assumed_state: true
    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;"
      - output.set_level:
          id: mcp4728_dac_output_a
          level: !lambda "return 0.5;"
    turn_off_action:
      - switch.turn_on: living_room_lights_off
    on_turn_on:
      - switch.template.publish:
          id: livingroom_lights
          state: true
  - platform: restart
    name: Living Room Restart
  - platform: safe_mode
    name: Living Room Restart (Safe Mode)
  - platform: factory_reset
    name: Living Room Restart (Factory Default Settings)
  - 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: false
    on_turn_off:
      - switch.template.publish:
          id: my_switch
          state: !lambda "return false;"
  - platform: uart
    uart_id: uart_0
    name: UART String Output
    data: DataToSend
  - platform: uart
    uart_id: uart_0
    name: UART Bytes Output
    data: [0xDE, 0xAD, 0xBE, 0xEF]
  - platform: uart
    uart_id: uart_0
    name: UART Recurring Output
    data: [0xDE, 0xAD, 0xBE, 0xEF]
    send_every: 1s
  - platform: uart
    uart_id: uart_0
    name: "UART On/Off"
    data:
      turn_on: "TurnOn\r\n"
      turn_off: "TurnOff\r\n"
  - platform: template
    assumed_state: true
    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
  - platform: template
    id: outlet_switch
    optimistic: true
    device_class: outlet
  - platform: ld2410
    engineering_mode:
      name: "control ld2410 engineering mode"
    bluetooth:
      name: "control ld2410 bluetooth"

fan:
  - platform: binary
    output: gpio_26
    name: Living Room Fan 1
    oscillation_output: gpio_19
    direction_output: gpio_26
  - platform: speed
    id: fan_speed
    icon: mdi:weather-windy
    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_level_state_topic: speed_level/state/topic
    speed_level_command_topic: speed_level/command/topic
    speed_state_topic: speed/state/topic
    speed_command_topic: speed/command/topic
    on_speed_set:
      then:
        - logger.log: Fan speed was changed!
  - platform: bedjet
    name: My Bedjet fan
    bedjet_id: my_bedjet_client
  - platform: copy
    source_id: fan_speed
    name: Fan Speed Copy

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:
      # yamllint disable rule:line-length
      - 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);
      # yamllint enable rule:line-length
      - 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%
  - id: kbx_green
    hex: "3DEC55"

display:
  - platform: lcd_gpio
    id: my_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
    user_characters:
      - position: 0
        data:
          - 0b00000
          - 0b01010
          - 0b00000
          - 0b00100
          - 0b00100
          - 0b10001
          - 0b01110
          - 0b00000
    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
    inverted: true
    length: 4
    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
    contrast: 60%
    pages:
      - id: page1
        lambda: |-
          it.qr_code(0, 0, id(homepage_qr));
          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
    model: TTGO TDisplay 135x240
    cs_pin: GPIO5
    dc_pin: GPIO16
    reset_pin: GPIO23
    backlight_pin: no
    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());
  - platform: ili9xxx
    model: TFT 2.4
    cs_pin: GPIO5
    dc_pin: GPIO4
    color_palette: GRAYSCALE
    reset_pin: GPIO22
    lambda: |-
      it.rectangle(0, 0, it.get_width(), it.get_height());
  - platform: ili9xxx
    model: TFT 2.4
    cs_pin: GPIO5
    dc_pin: GPIO4
    reset_pin: GPIO22
    auto_clear_enabled: false
    rotation: 90
    lambda: |-
      if (!id(glob_bool_processed)) {
        it.fill(Color::WHITE);
        id(glob_bool_processed) = true;
      }
  - platform: pvvx_mithermometer
    ble_client_id: ble_foo
    time_id: sntp_time
    disconnect_delay: 3s
    update_interval: 10min
    validity_period: 20min
    lambda: |-
      it.print_bignum(188.8);
      it.print_unit(pvvx_mithermometer::UNIT_DEG_E);
      it.print_smallnum(88);
      it.print_percent(true);
      it.print_happy(true);
      it.print_sad(true);
      it.print_bracket(true);
      it.print_battery(true);
  - platform: tm1621
    id: tm1621_display
    cs_pin: GPIO17
    data_pin: GPIO5
    read_pin: GPIO23
    write_pin: GPIO18
    lambda: |-
      it.printf(0, "%.1f", id(dht_temperature).state);
      it.display_celsius(true);
      it.printf(1, "%.1f", id(dht_humidity).state);
      it.display_humidity(true);

tm1651:
  id: tm1651_battery
  clk_pin: GPIO23
  dio_pin: GPIO23

remote_receiver:
  id: rcvr
  pin: GPIO32
  dump: all
  on_coolix:
    then:
      delay: !lambda "return x.first + x.second;"

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

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

mcp4728:
  - id: mcp4728_dac
    store_in_eeprom: false
    address: 0x60
    i2c_id: i2c_bus

gps:
  uart_id: uart_0

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
    i2c_id: i2c_bus
    on_time:
      - seconds: 0
        then: ds1307.read_time
      - at: "16:00:00"
        then:
          - if:
              condition:
                or:
                  - binary_sensor.is_on: close_sensor
                  - binary_sensor.is_on: open_sensor
              then:
                logger.log: "close_sensor or open_sensor is on"
          - if:
              condition:
                and:
                  - binary_sensor.is_on: close_sensor
                  - binary_sensor.is_on: open_sensor
              then:
                logger.log: "close_sensor and open_sensor are both on"
          - if:
              condition:
                xor:
                  - binary_sensor.is_on: close_sensor
                  - binary_sensor.is_on: open_sensor
              then:
                logger.log: "close_sensor or open_sensor is exclusively on"
          - if:
              condition:
                not:
                  - binary_sensor.is_on: close_sensor
              then:
                logger.log: "close_sensor is not on"
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: false
    has_position: true
    position_state_topic: position/state/topic
    position_command_topic: position/command/topic
    tilt_lambda: !lambda "return 0.5;"
    tilt_state_topic: tilt/state/topic
    tilt_command_topic: tilt/command/topic
    on_open:
      then:
        - lambda: 'ESP_LOGD("cover", "open");'
    on_closed:
      then:
        - lambda: 'ESP_LOGD("cover", "closed");'
  - platform: am43
    name: Test AM43
    id: am43_test
    ble_client_id: ble_foo
    icon: mdi:blinds
  - platform: feedback
    name: Feedback Cover
    id: gate
    device_class: gate

    infer_endstop_from_movement: false
    has_built_in_endstop: false
    max_duration: 30s
    direction_change_wait_time: 300ms
    acceleration_wait_time: 150ms
    obstacle_rollback: 10%

    open_duration: 22.1s
    open_endstop: open_endstop_sensor
    open_sensor: open_sensor
    open_obstacle_sensor: open_obstacle_sensor

    close_duration: 22.4s
    close_endstop: close_endstop_sensor
    close_sensor: close_sensor
    close_obstacle_sensor: close_obstacle_sensor

    open_action:
      - logger.log: Open Action

    close_action:
      - logger.log: Close Action

    stop_action:
      - logger.log: Stop Action

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

pca9554:
  - id: pca9554_hub
    address: 0x3F
    i2c_id: i2c_bus

pca6416a:
  - id: pca6416a_hub
    address: 0x21
    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: true
    initial_value: "0"
  - id: glob_float
    type: float
    restore_value: true
    initial_value: "0.0f"
  - id: glob_bool
    type: bool
    restore_value: false
    initial_value: "true"
  - id: glob_string
    type: std::string
    restore_value: false
    # initial_value: ""
  - id: glob_bool_processed
    type: bool
    restore_value: false
    initial_value: "false"

text_sensor:
  - platform: ble_client
    ble_client_id: ble_foo
    name: Sensor Location
    service_uuid: "180d"
    characteristic_uuid: "2a38"
    descriptor_uuid: "2902"
    notify: true
    update_interval: never
    on_notify:
      then:
        - lambda: |-
            ESP_LOGD("green_btn", "Location changed: %s", x.c_str());
  - 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:
          canbus_id: mcp2515_can
          can_id: 23
          data: [0x10, 0x20, 0x30]
      - canbus.send:
          canbus_id: mcp2515_can
          can_id: 23
          data: !lambda return {0x10, 0x20, 0x30};
      - canbus.send:
          canbus_id: esp32_internal_can
          can_id: 23
          data: [0x10, 0x20, 0x30]
      - canbus.send:
          canbus_id: mcp2515_can
          can_id: 24
          remote_transmission_request: true
          data: []
      - canbus.send:
          canbus_id: esp32_internal_can
          can_id: 24
          remote_transmission_request: true
          data: []
  - platform: template
    name: Template Text Sensor
    id: ${textname}_text
  - platform: wifi_info
    scan_results:
      name: Scan Results
    ip_address:
      name: IP Address
    ssid:
      name: SSID
    bssid:
      name: BSSID
    mac_address:
      name: Mac Address
    dns_address:
      name: DNS ADdress
  - platform: version
    name: ESPHome Version No Timestamp
    hide_timestamp: true
  - platform: teleinfo
    tag_name: OPTARIF
    name: optarif
    teleinfo_id: myteleinfo
  - platform: ld2410
    version:
      name: "presenece sensor version"
    mac_address:
      name: "presenece sensor mac address"

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
    id: mcp2515_can
    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.c_str());
      - can_id: 23
        then:
          - if:
              condition:
                lambda: "return x[0] == 0x11;"
              then:
                light.toggle: ${roomname}_lights
      - can_id: 0b00000000000000000000001000000
        can_id_mask: 0b11111000000000011111111000000
        use_extended_id: true
        then:
          - lambda: |-
              auto pdo_id = can_id >> 14;
              switch (pdo_id)
              {
                case 117:
                  ESP_LOGD("canbus", "exhaust_fan_duty");
                  break;
                case 118:
                  ESP_LOGD("canbus", "supply_fan_duty");
                  break;
                case 119:
                  ESP_LOGD("canbus", "supply_fan_flow");
                  break;
                // to be continued...
              }
  - platform: esp32_can
    id: esp32_internal_can
    rx_pin: GPIO04
    tx_pin: GPIO05
    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.c_str() );
      - can_id: 23
        then:
          - if:
              condition:
                lambda: "return x[0] == 0x11;"
              then:
                light.toggle: ${roomname}_lights
      - can_id: 0b00000000000000000000001000000
        can_id_mask: 0b11111000000000011111111000000
        use_extended_id: true
        then:
          - lambda: |-
              auto pdo_id = can_id >> 14;
              switch (pdo_id)
              {
                case 117:
                  ESP_LOGD("canbus", "exhaust_fan_duty");
                  break;
                case 118:
                  ESP_LOGD("canbus", "supply_fan_duty");
                  break;
                case 119:
                  ESP_LOGD("canbus", "supply_fan_flow");
                  break;
                // to be continued...
              }

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

number:
  - platform: template
    id: test_number
    state_topic: livingroom/custom_state_topic
    command_topic: livingroom/custom_command_topic
    min_value: 0
    step: 1
    max_value: 10
    optimistic: true
  - platform: ld2410
    light_threshold:
      name: light threshold
    timeout:
      name: timeout
    max_move_distance_gate:
      name: max move distance gate
    max_still_distance_gate:
      name: max still distance gate
    g0:
      move_threshold:
        name: g0 move threshold
      still_threshold:
        name: g0 still threshold
    g1:
      move_threshold:
        name: g1 move threshold
      still_threshold:
        name: g1 still threshold
    g2:
      move_threshold:
        name: g2 move threshold
      still_threshold:
        name: g2 still threshold
    g3:
      move_threshold:
        name: g3 move threshold
      still_threshold:
        name: g3 still threshold
    g4:
      move_threshold:
        name: g4 move threshold
      still_threshold:
        name: g4 still threshold
    g5:
      move_threshold:
        name: g5 move threshold
      still_threshold:
        name: g5 still threshold
    g6:
      move_threshold:
        name: g6 move threshold
      still_threshold:
        name: g6 still threshold
    g7:
      move_threshold:
        name: g7 move threshold
      still_threshold:
        name: g7 still threshold
    g8:
      move_threshold:
        name: g8 move threshold
      still_threshold:
        name: g8 still threshold

select:
  - platform: template
    id: test_select
    state_topic: livingroom/custom_state_topic
    command_topic: livingroom/custom_command_topic
    options:
      - one
      - two
    optimistic: true
  - platform: copy
    source_id: test_select
    name: Test Select Copy
  - platform: ld2410
    distance_resolution:
      name: distance resolution
    baud_rate:
      name: baud rate
    light_function:
      name: light function
    out_pin_level:
      name: out ping level

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

lock:
  - platform: template
    id: test_lock1
    name: Template Switch
    lambda: |-
      if (id(binary_sensor1).state) {
        return LOCK_STATE_LOCKED;
      }else{
        return LOCK_STATE_UNLOCKED;
      }
    optimistic: true
    assumed_state: false
    on_unlock:
      - lock.template.publish:
          id: test_lock1
          state: !lambda "return LOCK_STATE_UNLOCKED;"
    on_lock:
      - lock.template.publish:
          id: test_lock1
          state: !lambda "return LOCK_STATE_LOCKED;"
  - platform: output
    name: Generic Output Lock
    id: test_lock2
    output: pca_6
  - platform: copy
    source_id: test_lock2
    name: Generic Output Lock Copy

button:
  - platform: template
    name: Start calibration
    on_press:
      - scd4x.perform_forced_calibration:
          value: 419
          id: scd40
      - scd4x.factory_reset:
          id: scd40
  - platform: template
    name: Midea Display Toggle
    on_press:
      midea_ac.display_toggle:
  - platform: template
    name: Midea Swing Step
    on_press:
      midea_ac.swing_step:
  - platform: template
    name: Midea Power On
    on_press:
      midea_ac.power_on:
  - platform: template
    name: Midea Power Off
    on_press:
      midea_ac.power_off:
  - platform: template
    name: Midea Power Inverse
    on_press:
      midea_ac.power_toggle:
  - platform: template
    name: Poller component suspend test
    on_press:
      - component.suspend: myteleinfo
      - delay: 20s
      - component.update: myteleinfo
      - delay: 20s
      - component.resume: myteleinfo
      - delay: 20s
      - component.resume:
          id: myteleinfo
          update_interval: 2s
      - delay: 20s
      - component.resume:
          id: myteleinfo
          update_interval: !lambda return 2500;
  - platform: ld2410
    factory_reset:
      name: "factory reset"
    restart:
      name: "restart"
    query_params:
      name: query params
  - platform: uart
    uart_id: uart_0
    name: UART button
    data: "Pressed\r\n"

ld2410:
  id: my_ld2410
  uart_id: ld2410_uart

lcd_menu:
  display_id: my_lcd_gpio
  mark_back: 0x5e
  mark_selected: 0x3e
  mark_editing: 0x2a
  mark_submenu: 0x7e
  active: false
  mode: rotary
  on_enter:
    then:
      lambda: 'ESP_LOGI("lcd_menu", "root enter");'
  on_leave:
    then:
      lambda: 'ESP_LOGI("lcd_menu", "root leave");'
  items:
    - type: back
      text: Back
    - type: label
    - type: menu
      text: Submenu 1
      items:
        - type: back
          text: Back
        - type: menu
          text: Submenu 21
          items:
            - type: back
              text: Back
            - type: command
              text: Show Main
              on_value:
                then:
                  - display_menu.show_main:
    - type: select
      text: Enum Item
      immediate_edit: true
      select: test_select
      on_enter:
        then:
          lambda: 'ESP_LOGI("lcd_menu", "select enter: %s, %s", it->get_text().c_str(), it->get_value_text().c_str());'
      on_leave:
        then:
          lambda: 'ESP_LOGI("lcd_menu", "select leave: %s, %s", it->get_text().c_str(), it->get_value_text().c_str());'
      on_value:
        then:
          lambda: 'ESP_LOGI("lcd_menu", "select value: %s, %s", it->get_text().c_str(), it->get_value_text().c_str());'
    - type: number
      text: Number
      number: test_number
      on_enter:
        then:
          lambda: 'ESP_LOGI("lcd_menu", "number enter: %s, %s", it->get_text().c_str(), it->get_value_text().c_str());'
      on_leave:
        then:
          lambda: 'ESP_LOGI("lcd_menu", "number leave: %s, %s", it->get_text().c_str(), it->get_value_text().c_str());'
      on_value:
        then:
          lambda: 'ESP_LOGI("lcd_menu", "number value: %s, %s", it->get_text().c_str(), it->get_value_text().c_str());'
    - type: command
      text: Hide
      on_value:
        then:
          - display_menu.hide:
    - type: switch
      text: Switch
      switch: my_switch
      on_text: Bright
      off_text: Dark
      immediate_edit: false
      on_value:
        then:
          lambda: 'ESP_LOGI("lcd_menu", "switch value: %s", it->get_value_text().c_str());'
    - type: custom
      text: !lambda 'return "Custom";'
      value_lambda: 'return "Val";'
      on_next:
        then:
          lambda: 'ESP_LOGI("lcd_menu", "custom next: %s", it->get_text().c_str());'
      on_prev:
        then:
          lambda: 'ESP_LOGI("lcd_menu", "custom prev: %s", it->get_text().c_str());'

alarm_control_panel:
  - platform: template
    id: alarmcontrolpanel1
    name: Alarm Panel
    codes:
      - "1234"
    requires_code_to_arm: true
    arming_home_time: 1s
    arming_away_time: 15s
    pending_time: 15s
    trigger_time: 30s
    binary_sensors:
      - binary_sensor1
    on_state:
      then:
        - lambda: !lambda |-
            ESP_LOGD("TEST", "State change %s", alarm_control_panel_state_to_string(id(alarmcontrolpanel1)->get_state()));