---
# copy of test5.yaml configured to build on IDF 5
esphome:
  name: test11-5
  build_path: build/test11.5
  project:
    name: esphome.test11_5_project
    version: "1.0.0"

esp32:
  board: nodemcu-32s
  framework:
    type: esp-idf
    version: 5.0.2
    platform_version: 6.3.2
    advanced:
      ignore_efuse_mac_crc: true

wifi:
  networks:
    - ssid: "MySSID"
      password: "password1"
      manual_ip:
        static_ip: 192.168.1.23
        gateway: 192.168.1.1
        subnet: 255.255.255.0

network:
  enable_ipv6: true

api:

ota:

logger:

debug:

psram:

uart:
  - id: uart_1
    tx_pin: 1
    rx_pin: 3
    baud_rate: 9600
  - id: uart_2
    tx_pin:
      allow_other_uses: true
      number: 17
    rx_pin:
      allow_other_uses: true
      number: 16
    baud_rate: 19200

i2c:
  sda:
    number: 21
    allow_other_uses: true
  frequency: 100khz

spi:
  - id: spi_1
    clk_pin:
      allow_other_uses: true
      number: 12
    mosi_pin:
      allow_other_uses: true
      number: 13
    miso_pin:
      allow_other_uses: true
      number: 14
  - id: spi_2
    clk_pin:
      allow_other_uses: true
      number: 32
    mosi_pin: 33

modbus:
  uart_id: uart_1
  flow_control_pin:
    allow_other_uses: true
    number: 5
  id: mod_bus1

modbus_controller:
  - id: modbus_controller_test
    address: 0x2
    modbus_id: mod_bus1

mqtt:
  broker: test.mosquitto.org
  port: 1883
  discovery: true
  discovery_prefix: homeassistant
  idf_send_async: false
  on_message:
    topic: testing/sensor/testing_sensor/state
    qos: 0
    then:
      # yamllint disable rule:line-length
      - lambda: |-
          ESP_LOGD("Mqtt Test", "testing/sensor/testing_sensor/state=[%s]", x.c_str());
      # yamllint enable rule:line-length

vbus:
  - uart_id: uart_2

binary_sensor:
  - platform: gpio
    pin: GPIO0
    id: io0_button
    icon: mdi:gesture-tap-button

  - platform: modbus_controller
    modbus_controller_id: modbus_controller_test
    id: modbus_binsensortest
    register_type: read
    address: 0x3200
    bitmask: 0x80  # (bit 8)
    lambda: "return x;"

  - platform: tm1638
    id: Button0
    key: 0
    filters:
      - delayed_on: 10ms
    on_press:
      then:
        - switch.turn_on: Led0
    on_release:
      then:
        - switch.turn_off: Led0
        - if:
            condition: ble.enabled
            then:
              - ble.disable:
            else:
              - ble.enable:

  - platform: tm1638
    id: Button1
    key: 1
    on_press:
      then:
        - switch.turn_on: Led1
    on_release:
      then:
        - switch.turn_off: Led1

  - platform: tm1638
    id: Button2
    key: 2
    on_press:
      then:
        - switch.turn_on: Led2
    on_release:
      then:
        - switch.turn_off: Led2

  - platform: tm1638
    id: Button3
    key: 3
    on_press:
      then:
        - switch.turn_on: Led3
    on_release:
      then:
        - switch.turn_off: Led3

  - platform: tm1638
    id: Button4
    key: 4
    on_press:
      then:
        - output.turn_on: Led4
    on_release:
      then:
        - output.turn_off: Led4

  - platform: tm1638
    id: Button5
    key: 5
    on_press:
      then:
        - output.turn_on: Led5
    on_release:
      then:
        - output.turn_off: Led5

  - platform: tm1638
    id: Button6
    key: 6
    on_press:
      then:
        - output.turn_on: Led6
    on_release:
      then:
        - output.turn_off: Led6

  - platform: tm1638
    id: Button7
    key: 7
    on_press:
      then:
        - output.turn_on: Led7
    on_release:
      then:
        - output.turn_off: Led7

  - platform: gpio
    id: sn74hc165_pin_0
    pin:
      sn74hc165: sn74hc165_hub
      number: 0

  - platform: ezo_pmp
    pump_state:
      name: "Pump State"
    is_paused:
      name: "Is Paused"

  - platform: matrix_keypad
    keypad_id: keypad
    id: key4
    row: 1
    col: 1
  - platform: matrix_keypad
    id: key1
    key: 1

  - platform: vbus
    model: deltasol_bs_plus
    relay2:
      name: Relay 2 On
    sensor1_error:
      name: Sensor 1 Error

  - platform: vbus
    model: custom
    command: 0x100
    source: 0x1234
    dest: 0x10
    binary_sensors:
      - id: vcustom_b
        name: VBus Custom Binary Sensor
        lambda: return x[0] & 1;

tlc5947:
  data_pin:
    allow_other_uses: true
    number: GPIO12
  clock_pin:
    allow_other_uses: true
    number: GPIO14
  lat_pin:
    allow_other_uses: true
    number: GPIO15

gp8403:
  - id: gp8403_5v
    voltage: 5V
  - id: gp8403_10v
    voltage: 10V

output:
  - platform: gpio
    pin: GPIO2
    id: built_in_led

  - platform: tlc5947
    id: output_red
    channel: 0
    max_power: 0.8

  - platform: mcp47a1
    id: output_mcp47a1

  - platform: modbus_controller
    modbus_controller_id: modbus_controller_test
    id: modbus_output_test
    lambda: |-
      return x * 1.0 ;
    address: 0x9001
    value_type: U_WORD

  - platform: tm1638
    id: Led4
    led: 4

  - platform: tm1638
    id: Led5
    led: 5

  - platform: tm1638
    id: Led6
    led: 6

  - platform: tm1638
    id: Led7
    led: 7

  - platform: gp8403
    id: gp8403_output_0
    gp8403_id: gp8403_5v
    channel: 0
  - platform: gp8403
    gp8403_id: gp8403_10v
    id: gp8403_output_1
    channel: 1

demo:

esp32_ble:
  enable_on_boot: false

esp32_ble_server:
  manufacturer: ESPHome
  model: Test11

esp32_improv:
  authorizer: io0_button
  authorized_duration: 1min
  status_indicator: built_in_led

ezo_pmp:
  id: hcl_pump
  update_interval: 1s

number:
  - platform: template
    name: My template number
    id: template_number_id
    optimistic: true
    max_value: 100
    min_value: 0
    step: 5
    unit_of_measurement: "%"
    mode: slider
    device_class: humidity
    on_value:
      - logger.log:
          format: Number changed to %f
          args: [x]
    set_action:
      - logger.log:
          format: Template Number set to %f
          args: [x]
      - number.set:
          id: template_number_id
          value: 50
      - number.to_min: template_number_id
      - number.to_min:
          id: template_number_id
      - number.to_max: template_number_id
      - number.to_max:
          id: template_number_id
      - number.increment: template_number_id
      - number.increment:
          id: template_number_id
          cycle: false
      - number.decrement: template_number_id
      - number.decrement:
          id: template_number_id
          cycle: false
      - number.operation:
          id: template_number_id
          operation: Increment
          cycle: false
      - number.operation:
          id: template_number_id
          operation: !lambda "return NUMBER_OP_INCREMENT;"
          cycle: !lambda "return false;"

  - id: modbus_numbertest
    platform: modbus_controller
    modbus_controller_id: modbus_controller_test
    name: ModbusNumber
    address: 0x9002
    value_type: U_WORD
    lambda: "return  x * 1.0;"
    write_lambda: |-
      return x * 1.0 ;
    multiply: 1.0

select:
  - platform: template
    name: My template select
    id: template_select_id
    optimistic: true
    initial_option: two
    restore_value: true
    on_value:
      - logger.log:
          format: Select changed to %s (index %d)"
          args: ["x.c_str()", "i"]
    set_action:
      - logger.log:
          format: Template Select set to %s
          args: ["x.c_str()"]
      - select.set:
          id: template_select_id
          option: two
      - select.first: template_select_id
      - select.last:
          id: template_select_id
      - select.previous: template_select_id
      - select.next:
          id: template_select_id
          cycle: false
      - select.operation:
          id: template_select_id
          operation: Previous
          cycle: false
      - select.operation:
          id: template_select_id
          operation: !lambda "return SELECT_OP_PREVIOUS;"
          cycle: !lambda "return true;"
      - select.set_index:
          id: template_select_id
          index: 1
      - select.set_index:
          id: template_select_id
          index: !lambda "return 1 + 1;"
    options:
      - one
      - two
      - three

  - platform: modbus_controller
    name: Modbus Select Register 1000
    address: 1000
    value_type: U_WORD
    optionsmap:
      "Zero": 0
      "One": 1
      "Two": 2
      "Three": 3

sensor:
  - platform: adc
    id: adc_sensor_p32
    name: ADC pin 32
    pin:
      allow_other_uses: true
      number: 32
    attenuation: 11db
    update_interval: 1s
  - platform: internal_temperature
    name: Internal Temperature
  - platform: selec_meter
    total_active_energy:
      name: SelecEM2M Total Active Energy
    import_active_energy:
      name: SelecEM2M Import Active Energy
    export_active_energy:
      name: SelecEM2M Export Active Energy
    total_reactive_energy:
      name: SelecEM2M Total Reactive Energy
    import_reactive_energy:
      name: SelecEM2M Import Reactive Energy
    export_reactive_energy:
      name: SelecEM2M Export Reactive Energy
    apparent_energy:
      name: SelecEM2M Apparent Energy
    active_power:
      name: SelecEM2M Active Power
    reactive_power:
      name: SelecEM2M Reactive Power
    apparent_power:
      name: SelecEM2M Apparent Power
    voltage:
      name: SelecEM2M Voltage
    current:
      name: SelecEM2M Current
    power_factor:
      name: SelecEM2M Power Factor
    frequency:
      name: SelecEM2M Frequency
    maximum_demand_active_power:
      name: SelecEM2M Maximum Demand Active Power
      disabled_by_default: true
    maximum_demand_reactive_power:
      name: SelecEM2M Maximum Demand Reactive Power
      disabled_by_default: true
    maximum_demand_apparent_power:
      name: SelecEM2M Maximum Demand Apparent Power
      disabled_by_default: true

  - id: modbus_sensortest
    platform: modbus_controller
    modbus_controller_id: modbus_controller_test
    address: 0x331A
    register_type: read
    value_type: U_WORD

  - platform: t6615
    uart_id: uart_2
    co2:
      name: CO2 Sensor

  - platform: bmp3xx
    temperature:
      name: BMP Temperature
      oversampling: 16x
    pressure:
      name: BMP Pressure
    address: 0x77
    iir_filter: 2X

  - platform: sen5x
    id: sen54
    temperature:
      name: Temperature
      accuracy_decimals: 1
    humidity:
      name: Humidity
      accuracy_decimals: 0
    pm_1_0:
      name: PM <1µm Weight concentration
      id: pm_1_0
      accuracy_decimals: 1
    pm_2_5:
      name: PM <2.5µm Weight concentration
      id: pm_2_5
      accuracy_decimals: 1
    pm_4_0:
      name: PM <4µm Weight concentration
      id: pm_4_0
      accuracy_decimals: 1
    pm_10_0:
      name: PM <10µm Weight concentration
      id: pm_10_0
      accuracy_decimals: 1
    nox:
      name: NOx
    voc:
      name: VOC
      algorithm_tuning:
        index_offset: 100
        learning_time_offset_hours: 12
        learning_time_gain_hours: 12
        gating_max_duration_minutes: 180
        std_initial: 50
        gain_factor: 230
    temperature_compensation:
      offset: 0
      normalized_offset_slope: 0
      time_constant: 0
    auto_cleaning_interval: 604800s
    acceleration_mode: low
    store_baseline: true
    address: 0x69
  - platform: mcp9600
    thermocouple_type: K
    hot_junction:
      name: Thermocouple Temperature
    cold_junction:
      name: Ambient Temperature

  - platform: ezo_pmp
    current_volume_dosed:
      name: Current Volume Dosed
    total_volume_dosed:
      name: Total Volume Dosed
    absolute_total_volume_dosed:
      name: Absolute Total Volume Dosed
    pump_voltage:
      name: Pump Voltage
    last_volume_requested:
      name: Last Volume Requested
    max_flow_rate:
      name: Max Flow Rate

  - platform: vbus
    model: deltasol c
    temperature_3:
      name: Temperature 3
    operating_hours_1:
      name: Operating Hours 1
    heat_quantity:
      name: Heat Quantity
    time:
      name: System Time

  - platform: debug
    free:
      name: "Heap Free"
    block:
      name: "Heap Max Block"
    loop_time:
      name: "Loop Time"
    psram:
      name: "PSRAM Free"

  - platform: vbus
    model: custom
    command: 0x100
    source: 0x1234
    dest: 0x10
    sensors:
      - id: vcustom
        name: VBus Custom Sensor
        lambda: return x[0] / 10.0;

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

  - platform: ade7953_i2c
    irq_pin:
      allow_other_uses: true
      number: 16
    voltage:
      name: ADE7953 Voltage
    current_a:
      name: ADE7953 Current A
    current_b:
      name: ADE7953 Current B
    power_factor_a:
      name: "ADE7953 Power Factor A"
    power_factor_b:
      name: "ADE7953 Power Factor B"
    apparent_power_a:
      name: "ADE7953 Apparent Power A"
    apparent_power_b:
      name: "ADE7953 Apparent Power B"
    active_power_a:
      name: ADE7953 Active Power A
    active_power_b:
      name: ADE7953 Active Power B
    reactive_power_a:
      name: "ADE7953 Reactive Power A"
    reactive_power_b:
      name: "ADE7953 Reactive Power B"
    update_interval: 1s

  - platform: ade7953_spi
    spi_id: spi_1
    cs_pin: 04
    irq_pin:
      allow_other_uses: true
      number: 16
    voltage:
      name: ADE7953 Voltage
    current_a:
      name: ADE7953 Current A
    current_b:
      name: ADE7953 Current B
    power_factor_a:
      name: "ADE7953 Power Factor A"
    power_factor_b:
      name: "ADE7953 Power Factor B"
    apparent_power_a:
      name: "ADE7953 Apparent Power A"
    apparent_power_b:
      name: "ADE7953 Apparent Power B"
    active_power_a:
      name: ADE7953 Active Power A
    active_power_b:
      name: ADE7953 Active Power B
    reactive_power_a:
      name: "ADE7953 Reactive Power A"
    reactive_power_b:
      name: "ADE7953 Reactive Power B"
    update_interval: 1s

script:
  - id: automation_test
    then:
      - repeat:
          count: 5
          then:
            - logger.log: looping!

  - id: zero_repeat_test
    then:
      - repeat:
          count: !lambda "return 0;"
          then:
            - logger.log: shouldn't see mee!

switch:
  - platform: modbus_controller
    modbus_controller_id: modbus_controller_test
    id: modbus_switch_test
    register_type: coil
    address: 2
    bitmask: 1

  - platform: tm1638
    id: Led0
    led: 0
    name: TM1638Led0

  - platform: tm1638
    id: Led1
    led: 1
    name: TM1638Led1

  - platform: tm1638
    id: Led2
    led: 2
    name: TM1638Led2

  - platform: tm1638
    id: Led3
    led: 3
    name: TM1638Led3

display:
  - platform: tm1638
    id: primarydisplay
    stb_pin:
      allow_other_uses: true
      number: 5  # TM1638 STB
    clk_pin: 18  # TM1638 CLK
    dio_pin: 23  # TM1638 DIO
    update_interval: 5s
    intensity: 5
    lambda: |-
      it.print("81818181");

time:
  - platform: pcf85063
  - platform: pcf8563

text_sensor:
  - platform: ezo_pmp
    dosing_mode:
      name: Dosing Mode
    calibration_status:
      name: Calibration Status
      on_value:
        - ezo_pmp.dose_volume:
            id: hcl_pump
            volume: 10
        - ezo_pmp.dose_volume_over_time:
            id: hcl_pump
            volume: 10
            duration: 2
        - ezo_pmp.dose_with_constant_flow_rate:
            id: hcl_pump
            volume_per_minute: 10
            duration: 2
        - ezo_pmp.set_calibration_volume:
            id: hcl_pump
            volume: 10
        - ezo_pmp.find: hcl_pump
        - ezo_pmp.dose_continuously: hcl_pump
        - ezo_pmp.clear_total_volume_dosed: hcl_pump
        - ezo_pmp.clear_calibration: hcl_pump
        - ezo_pmp.pause_dosing: hcl_pump
        - ezo_pmp.stop_dosing: hcl_pump
        - ezo_pmp.arbitrary_command:
            id: hcl_pump
            command: D,?

sn74hc165:
  id: sn74hc165_hub
  data_pin:
    allow_other_uses: true
    number: GPIO12
  clock_pin:
    allow_other_uses: true
    number: GPIO14
  load_pin:
    number: GPIO27
  clock_inhibit_pin:
    number: GPIO26
  sr_count: 4

matrix_keypad:
  id: keypad
  rows:
    - pin:
        allow_other_uses: true
        number: 21
    - pin: 19
  columns:
    - pin:
        allow_other_uses: true
        number: 17
    - pin:
        allow_other_uses: true
        number: 16
  keys: "1234"

key_collector:
  - id: reader
    source_id: keypad
    min_length: 4
    max_length: 4

light:
  - platform: esp32_rmt_led_strip
    id: led_strip
    pin:
      allow_other_uses: true
      number: 13
    num_leds: 60
    rmt_channel: 6
    rgb_order: GRB
    chipset: ws2812
  - platform: esp32_rmt_led_strip
    id: led_strip2
    pin:
      allow_other_uses: true
      number: 15
    num_leds: 60
    rmt_channel: 2
    rgb_order: RGB
    bit0_high: 100us
    bit0_low: 100us
    bit1_high: 100us
    bit1_low: 100us
