---
esphome:
  name: $devicename
  platform: ESP32
  board: nodemcu-32s
  build_path: build/test4

substitutions:
  devicename: test-4

ethernet:
  type: LAN8720
  mdc_pin:
    allow_other_uses: true
    number: GPIO23
  mdio_pin:
    allow_other_uses: true
    number: GPIO25
  clk_mode: GPIO0_IN
  phy_addr: 0
  power_pin:
    allow_other_uses: true
    number: GPIO25
  manual_ip:
    static_ip: 192.168.178.56
    gateway: 192.168.178.1
    subnet: 255.255.255.0
  domain: .local

network:
  enable_ipv6: true

mqtt:
  broker: test.mosquitto.org
  port: 1883
  discovery: true
  discovery_prefix: homeassistant
  topic_prefix:

api:

i2c:
  sda:
    allow_other_uses: true
    number: 21
  scl:
    allow_other_uses: true
    number: 22
  scan: false

spi:
  - id: spi_id_1
    clk_pin:
      allow_other_uses: true
      number: GPIO21
    mosi_pin:
      allow_other_uses: true
      number: GPIO22
    miso_pin:
      allow_other_uses: true
      number: GPIO23
    interface: hardware
  - id: spi_id_2
    clk_pin:
      number: GPIO32
    mosi_pin:
      number: GPIO33
    interface: hardware

uart:
  - id: uart115200
    tx_pin:
      allow_other_uses: true
      number: GPIO22
    rx_pin:
      allow_other_uses: true
      number: GPIO23
    baud_rate: 115200
  - id: uart9600
    tx_pin:
      allow_other_uses: true
      number: GPIO25
    rx_pin:
      allow_other_uses: true
      number: GPIO26
    baud_rate: 9600
  - id: uart_a02yyuw
    tx_pin:
      allow_other_uses: true
      number: GPIO22
    rx_pin:
      allow_other_uses: true
      number: GPIO23
    baud_rate: 9600
  - id: uart_he60r
    tx_pin:
      number: GPIO18
      allow_other_uses: true
    rx_pin:
      number: GPIO36
      allow_other_uses: true
    baud_rate: 1200
    parity: EVEN

ota:
  safe_mode: true
  port: 3286

logger:
  level: DEBUG

debug:

web_server:
  ota: false
  auth:
    username: admin
    password: admin
  include_internal: true

time:
  - platform: sntp
    id: sntp_time

tuya:
  time_id: sntp_time
  uart_id: uart115200
  status_pin:
    number: GPIO5
    inverted: true
    allow_other_uses: true

select:
  - platform: tuya
    id: tuya_select
    enum_datapoint: 42
    options:
      0: Internal
      1: Floor
      2: Both

pipsolar:
  id: inverter0
  uart_id: uart115200

pylontech:
  - id: pylontech0
    uart_id: uart115200
  - id: pylontech1
    uart_id: uart115200

sx1509:
  - id: sx1509_hub
    address: 0x3E

mcp3204:
  spi_id: spi_id_1
  cs_pin:
    allow_other_uses: true
    number: GPIO23

dac7678:
  address: 0x4A
  id: dac7678_hub1
  internal_reference: true

sensor:
  - platform: pylontech
    pylontech_id: pylontech0
    battery: 1
    voltage:
      id: pyl01_voltage
    current:
      id: pyl01_current
    coulomb:
      id: pyl01_soc
    mos_temperature:
      id: pyl01_mos_temperature
  - platform: pylontech
    pylontech_id: pylontech1
    battery: 1
    voltage:
      id: pyl13_voltage
    temperature_low:
      id: pyl13_temperature_low
    temperature_high:
      id: pyl13_temperature_high
    voltage_low:
      id: pyl13_voltage_low
    voltage_high:
      id: pyl13_voltage_high
  - platform: homeassistant
    entity_id: sensor.hello_world
    id: ha_hello_world
  - platform: tuya
    id: tuya_sensor
    sensor_datapoint: 1
  - platform: pipsolar
    pipsolar_id: inverter0
    grid_rating_voltage:
      id: inverter0_grid_rating_voltage
      name: inverter0_grid_rating_voltage
    grid_rating_current:
      id: inverter0_grid_rating_current
      name: inverter0_grid_rating_current
    ac_output_rating_voltage:
      id: inverter0_ac_output_rating_voltage
      name: inverter0_ac_output_rating_voltage
    ac_output_rating_frequency:
      id: inverter0_ac_output_rating_frequency
      name: inverter0_ac_output_rating_frequency
    ac_output_rating_current:
      id: inverter0_ac_output_rating_current
      name: inverter0_ac_output_rating_current
    ac_output_rating_apparent_power:
      id: inverter0_ac_output_rating_apparent_power
      name: inverter0_ac_output_rating_apparent_power
    ac_output_rating_active_power:
      id: inverter0_ac_output_rating_active_power
      name: inverter0_ac_output_rating_active_power
    battery_rating_voltage:
      id: inverter0_battery_rating_voltage
      name: inverter0_battery_rating_voltage
    battery_recharge_voltage:
      id: inverter0_battery_recharge_voltage
      name: inverter0_battery_recharge_voltage
    battery_under_voltage:
      id: inverter0_battery_under_voltage
      name: inverter0_battery_under_voltage
    battery_bulk_voltage:
      id: inverter0_battery_bulk_voltage
      name: inverter0_battery_bulk_voltage
    battery_float_voltage:
      id: inverter0_battery_float_voltage
      name: inverter0_battery_float_voltage
    battery_type:
      id: inverter0_battery_type
      name: inverter0_battery_type
    current_max_ac_charging_current:
      id: inverter0_current_max_ac_charging_current
      name: inverter0_current_max_ac_charging_current
    current_max_charging_current:
      id: inverter0_current_max_charging_current
      name: inverter0_current_max_charging_current
    input_voltage_range:
      id: inverter0_input_voltage_range
      name: inverter0_input_voltage_range
    output_source_priority:
      id: inverter0_output_source_priority
      name: inverter0_output_source_priority
    charger_source_priority:
      id: inverter0_charger_source_priority
      name: inverter0_charger_source_priority
    parallel_max_num:
      id: inverter0_parallel_max_num
      name: inverter0_parallel_max_num
    machine_type:
      id: inverter0_machine_type
      name: inverter0_machine_type
    topology:
      id: inverter0_topology
      name: inverter0_topology
    output_mode:
      id: inverter0_output_mode
      name: inverter0_output_mode
    battery_redischarge_voltage:
      id: inverter0_battery_redischarge_voltage
      name: inverter0_battery_redischarge_voltage
    pv_ok_condition_for_parallel:
      id: inverter0_pv_ok_condition_for_parallel
      name: inverter0_pv_ok_condition_for_parallel
    pv_power_balance:
      id: inverter0_pv_power_balance
      name: inverter0_pv_power_balance
    grid_voltage:
      id: inverter0_grid_voltage
      name: inverter0_grid_voltage
    grid_frequency:
      id: inverter0_grid_frequency
      name: inverter0_grid_frequency
    ac_output_voltage:
      id: inverter0_ac_output_voltage
      name: inverter0_ac_output_voltage
    ac_output_frequency:
      id: inverter0_ac_output_frequency
      name: inverter0_ac_output_frequency
    ac_output_apparent_power:
      id: inverter0_ac_output_apparent_power
      name: inverter0_ac_output_apparent_power
    ac_output_active_power:
      id: inverter0_ac_output_active_power
      name: inverter0_ac_output_active_power
    output_load_percent:
      id: inverter0_output_load_percent
      name: inverter0_output_load_percent
    bus_voltage:
      id: inverter0_bus_voltage
      name: inverter0_bus_voltage
    battery_voltage:
      id: inverter0_battery_voltage
      name: inverter0_battery_voltage
    battery_charging_current:
      id: inverter0_battery_charging_current
      name: inverter0_battery_charging_current
    battery_capacity_percent:
      id: inverter0_battery_capacity_percent
      name: inverter0_battery_capacity_percent
    inverter_heat_sink_temperature:
      id: inverter0_inverter_heat_sink_temperature
      name: inverter0_inverter_heat_sink_temperature
    pv_input_current_for_battery:
      id: inverter0_pv_input_current_for_battery
      name: inverter0_pv_input_current_for_battery
    pv_input_voltage:
      id: inverter0_pv_input_voltage
      name: inverter0_pv_input_voltage
    battery_voltage_scc:
      id: inverter0_battery_voltage_scc
      name: inverter0_battery_voltage_scc
    battery_discharge_current:
      id: inverter0_battery_discharge_current
      name: inverter0_battery_discharge_current
    battery_voltage_offset_for_fans_on:
      id: inverter0_battery_voltage_offset_for_fans_on
      name: inverter0_battery_voltage_offset_for_fans_on
    eeprom_version:
      id: inverter0_eeprom_version
      name: inverter0_eeprom_version
    pv_charging_power:
      id: inverter0_pv_charging_power
      name: inverter0_pv_charging_power
  - platform: hrxl_maxsonar_wr
    name: Rainwater Tank Level
    uart_id: uart115200
    filters:
      - sliding_window_moving_average:
          window_size: 12
          send_every: 12
      - or:
          - throttle: 20min
          - delta: 0.02
  - platform: mcp3204
    name: MCP3204 Pin 1
    number: 1
    id: mcp_sensor
  - platform: copy
    source_id: mcp_sensor
    name: MCP binary sensor copy
  - platform: ufire_ec
    id: ufire_ec_board
    temperature:
      name: Ufire Temperature
    ec:
      name: Ufire EC
    temperature_compensation: 20.0
    temperature_coefficient: 0.019
  - platform: ufire_ise
    id: ufire_ise_board
    temperature:
      name: Ufire Temperature
    ph:
      name: Ufire pH
  - platform: a01nyub
    id: a01nyub_sensor
    name: "a01nyub Distance"
    uart_id: uart9600
    state_topic: "esphome/sensor/a01nyub_sensor/state"
  - platform: a02yyuw
    id: a02yyuw_sensor
    name: "a02yyuw Distance"
    uart_id: uart_a02yyuw
    state_topic: "esphome/sensor/a02yyuw_sensor/state"

#
# platform sensor.apds9960 requires component apds9960
#
#  - platform: apds9960
#    type: proximity
#    name: APDS9960 Proximity
#  - platform: apds9960
#    type: clear
#    name: APDS9960 Clear
#  - platform: apds9960
#    type: red
#    name: APDS9960 Red
#  - platform: apds9960
#    type: green
#    name: APDS9960 Green
#  - platform: apds9960
#    type: blue
#    name: APDS9960 Blue

binary_sensor:
  - platform: tuya
    id: tuya_binary_sensor
    sensor_datapoint: 1
  - platform: pipsolar
    pipsolar_id: inverter0
    add_sbu_priority_version:
      id: inverter0_add_sbu_priority_version
      name: inverter0_add_sbu_priority_version
    configuration_status:
      id: inverter0_configuration_status
      name: inverter0_configuration_status
    scc_firmware_version:
      id: inverter0_scc_firmware_version
      name: inverter0_scc_firmware_version
    load_status:
      id: inverter0_load_status
      name: inverter0_load_status
    battery_voltage_to_steady_while_charging:
      id: inverter0_battery_voltage_to_steady_while_charging
      name: inverter0_battery_voltage_to_steady_while_charging
    charging_status:
      id: inverter0_charging_status
      name: inverter0_charging_status
    scc_charging_status:
      id: inverter0_scc_charging_status
      name: inverter0_scc_charging_status
    ac_charging_status:
      id: inverter0_ac_charging_status
      name: inverter0_ac_charging_status
    charging_to_floating_mode:
      id: inverter0_charging_to_floating_mode
      name: inverter0_charging_to_floating_mode
    switch_on:
      id: inverter0_switch_on
      name: inverter0_switch_on
    dustproof_installed:
      id: inverter0_dustproof_installed
      name: inverter0_dustproof_installed
    silence_buzzer_open_buzzer:
      id: inverter0_silence_buzzer_open_buzzer
      name: inverter0_silence_buzzer_open_buzzer
    overload_bypass_function:
      id: inverter0_overload_bypass_function
      name: inverter0_overload_bypass_function
    lcd_escape_to_default:
      id: inverter0_lcd_escape_to_default
      name: inverter0_lcd_escape_to_default
    overload_restart_function:
      id: inverter0_overload_restart_function
      name: inverter0_overload_restart_function
    over_temperature_restart_function:
      id: inverter0_over_temperature_restart_function
      name: inverter0_over_temperature_restart_function
    backlight_on:
      id: inverter0_backlight_on
      name: inverter0_backlight_on
  - platform: template
    id: ar1
    lambda: "return {};"
    filters:
      - autorepeat:
          - delay: 2s
            time_off: 100ms
            time_on: 900ms
          - delay: 4s
            time_off: 100ms
            time_on: 400ms
    on_state:
      then:
        - lambda: 'ESP_LOGI("ar1:", "%d", x);'
  - platform: touchscreen
    touchscreen_id: xpt_touchscreen
    id: touch_key0
    x_min: 80
    x_max: 160
    y_min: 106
    y_max: 212
    on_press:
      - logger.log: Touched

  - platform: gpio
    name: GPIO SX1509 test
    pin:
      sx1509: sx1509_hub
      number: 3

  - platform: touchscreen
    touchscreen_id: lilygo_touchscreen
    id: touch_key1
    x_min: 0
    x_max: 100
    y_min: 0
    y_max: 100
    on_press:
      - logger.log: Touched
  - platform: gt911
    id: touch_key_911
    index: 0

  - platform: gpio
    name: MaxIn Pin 4
    pin:
      max6956: max6956_1
      number: 4

      mode:
        input: true
        pullup: true
      inverted: false

  - platform: gpio
    name: XL9535 Pin 0
    pin:
      xl9535: xl9535_hub
      number: 0
      mode:
        input: true
      inverted: false

  - platform: gpio
    name: XL9535 Pin 17
    pin:
      xl9535: xl9535_hub
      number: 17
      mode:
        input: true
      inverted: false

climate:
  - platform: tuya
    id: tuya_climate
    switch_datapoint: 1
    target_temperature_datapoint: 3
    current_temperature_multiplier: 0.5
    target_temperature_multiplier: 0.5
    reports_fahrenheit: true

switch:
  - platform: tuya
    id: tuya_switch
    switch_datapoint: 1
  - platform: pipsolar
    pipsolar_id: inverter0
    output_source_priority_utility:
      name: inverter0_output_source_priority_utility
    output_source_priority_solar:
      name: inverter0_output_source_priority_solar
    output_source_priority_battery:
      name: inverter0_output_source_priority_battery
    input_voltage_range:
      name: inverter0_input_voltage_range
    pv_ok_condition_for_parallel:
      name: inverter0_pv_ok_condition_for_parallel
    pv_power_balance:
      name: inverter0_pv_power_balance
  - platform: copy
    source_id: tuya_switch
    name: Tuya Switch Copy

light:
  - platform: fastled_clockless
    id: led_matrix_32x8
    name: led_matrix_32x8
    chipset: WS2812B
    pin:
      allow_other_uses: true
      number: GPIO15
    num_leds: 256
    rgb_order: GRB
    default_transition_length: 0s
    color_correct: [50%, 50%, 50%]
  - platform: tuya
    id: tuya_light
    switch_datapoint: 1
    dimmer_datapoint: 2
    min_value_datapoint: 3
    color_temperature_datapoint: 4
    min_value: 1
    max_value: 100
    cold_white_color_temperature: 153 mireds
    warm_white_color_temperature: 500 mireds
    gamma_correct: 1

cover:
  - platform: tuya
    id: tuya_cover
    position_datapoint: 2
  - platform: copy
    source_id: tuya_cover
    name: Tuya Cover copy
  - platform: he60r
    uart_id: uart_he60r
    id: garage_door
    name: Garage Door
    open_duration: 14s
    close_duration: 14s

display:
  - platform: addressable_light
    id: led_matrix_32x8_display
    addressable_light_id: led_matrix_32x8
    width: 32
    height: 8
    pixel_mapper: |-
      if (x % 2 == 0) {
        return (x * 8) + y;
      }
      return (x * 8) + (7 - y);
    lambda: |-
      Color red = Color(0xFF0000);
      Color green = Color(0x00FF00);
      Color blue = Color(0x0000FF);
      it.rectangle(0, 0, it.get_width(), it.get_height(), red);
      it.rectangle(1, 1, it.get_width()-2, it.get_height()-2, green);
      it.rectangle(2, 2, it.get_width()-4, it.get_height()-4, blue);
      it.rectangle(3, 3, it.get_width()-6, it.get_height()-6, red);
      auto touch = id(ft63_touchscreen)->get_touch();
      if (touch)  { ESP_LOGD("touch", "%d/%d", touch.value().x, touch.value().y); }
    rotation: 0°
    update_interval: 16ms

  - platform: inkplate6
    id: inkplate_display
    greyscale: false
    partial_updating: false
    update_interval: 60s
    display_data_1_pin:
      number: GPIO5
      allow_other_uses: true
    display_data_2_pin:
      number: GPIO18
      allow_other_uses: true
    display_data_3_pin:
      number: GPIO19
      allow_other_uses: true
    display_data_5_pin:
      number: GPIO25
      allow_other_uses: true
    display_data_4_pin:
      number: GPIO23
      allow_other_uses: true
    display_data_6_pin:
      number: GPIO26
      allow_other_uses: true
    display_data_7_pin:
      number: GPIO27
      allow_other_uses: true
    ckv_pin:
      number: GPIO1
      allow_other_uses: true
    sph_pin:
      number: GPIO1
      allow_other_uses: true
    gmod_pin:
      number: GPIO1
      allow_other_uses: true
    gpio0_enable_pin:
      number: GPIO1
      allow_other_uses: true
    oe_pin:
      number: GPIO1
      allow_other_uses: true
    spv_pin:
      number: GPIO1
      allow_other_uses: true
    powerup_pin:
      number: GPIO1
      allow_other_uses: true
    wakeup_pin:
      number: GPIO1
      allow_other_uses: true
    vcom_pin:
      number: GPIO1
      allow_other_uses: true

number:
  - platform: tuya
    id: tuya_number
    number_datapoint: 102
    min_value: 0
    max_value: 17
    step: 1
  - platform: copy
    source_id: tuya_number
    name: Tuya Number Copy

text_sensor:
  - platform: pylontech
    pylontech_id: pylontech0
    battery: 1
    base_state:
      id: pyl0_base_state
    voltage_state:
      id: pyl0_voltage_state
    current_state:
      id: pyl0_current_state
    temperature_state:
      id: pyl0_temperature_state
  - platform: pipsolar
    pipsolar_id: inverter0
    device_mode:
      id: inverter0_device_mode
      name: inverter0_device_mode
    last_qpigs:
      id: inverter0_last_qpigs
      name: inverter0_last_qpigs
    last_qpiri:
      id: inverter0_last_qpiri
      name: inverter0_last_qpiri
    last_qmod:
      id: inverter0_last_qmod
      name: inverter0_last_qmod
    last_qflag:
      id: inverter0_last_qflag
      name: inverter0_last_qflag
  - platform: copy
    source_id: inverter0_device_mode
    name: Inverter Text Sensor Copy
  - platform: ethernet_info
    ip_address:
      name: IP Address

output:
  - platform: pipsolar
    pipsolar_id: inverter0
    battery_recharge_voltage:
      id: inverter0_battery_recharge_voltage_out
  - platform: dac7678
    dac7678_id: dac7678_hub1
    channel: 0
    id: dac7678_1_ch0
  - platform: dac7678
    dac7678_id: dac7678_hub1
    channel: 1
    id: dac7678_1_ch1
  - platform: dac7678
    dac7678_id: dac7678_hub1
    channel: 2
    id: dac7678_1_ch2
  - platform: dac7678
    dac7678_id: dac7678_hub1
    channel: 3
    id: dac7678_1_ch3
  - platform: dac7678
    dac7678_id: dac7678_hub1
    channel: 4
    id: dac7678_1_ch4
  - platform: dac7678
    dac7678_id: dac7678_hub1
    channel: 5
    id: dac7678_1_ch5
  - platform: dac7678
    dac7678_id: dac7678_hub1
    channel: 6
    id: dac7678_1_ch6
  - platform: dac7678
    dac7678_id: dac7678_hub1
    channel: 7
    id: dac7678_1_ch7
esp32_camera:
  name: ESP-32 Camera
  data_pins:
    - number: GPIO17
      allow_other_uses: true
    - number: GPIO35
      allow_other_uses: true
    - number: GPIO34
    - number: GPIO5
      allow_other_uses: true
    - number: GPIO39
      allow_other_uses: true
    - number: GPIO18
      allow_other_uses: true
    - number: GPIO36
      allow_other_uses: true
    - number: GPIO19
      allow_other_uses: true
  vsync_pin:
    allow_other_uses: true
    number: GPIO22
  href_pin:
    allow_other_uses: true
    number: GPIO26
  pixel_clock_pin:
    allow_other_uses: true
    number: GPIO21
  external_clock:
    pin:
      allow_other_uses: true
      number: GPIO27
    frequency: 20MHz
  i2c_pins:
    sda:
      allow_other_uses: true
      number: GPIO25
    scl:
      allow_other_uses: true
      number: GPIO23
  reset_pin:
    allow_other_uses: true
    number: GPIO15
  power_down_pin:
    allow_other_uses: true
    number: GPIO1
  resolution: 640x480
  jpeg_quality: 10
  on_image:
    then:
      - lambda: |-
          ESP_LOGD("main", "image len=%d, data=%c", image.length, image.data[0]);

esp32_camera_web_server:
  - port: 8080
    mode: stream
  - port: 8081
    mode: snapshot

external_components:
  - source: github://esphome/esphome@dev
    refresh: 1d
    components: [bh1750]
  - source: ../esphome/components
    components: [sntp]

button:
  - platform: restart
    name: Restart Button
  - platform: safe_mode
    name: Safe Mode Button
  - platform: shutdown
    name: Shutdown Button
    id: shutdown_btn
  - platform: copy
    source_id: shutdown_btn
    name: Shutdown Button Copy

touchscreen:
  - platform: ektf2232
    interrupt_pin:
      allow_other_uses: true
      number: GPIO36
    rts_pin:
      allow_other_uses: true
      number: GPIO5
    display: inkplate_display
    on_touch:
      - logger.log:
          format: Touch at (%d, %d)
          args: [touch.x, touch.y]

  - platform: xpt2046
    id: xpt_touchscreen
    spi_id: spi_id_2
    cs_pin:
      allow_other_uses: true
      number: GPIO17
    interrupt_pin:
      number: GPIO16
    display: inkplate_display
    update_interval: 50ms
    threshold: 400
    calibration:
      x_min: 3860
      x_max: 280
      y_min: 340
      y_max: 3860
    on_touch:
      - logger.log:
          format: Touch at (%d, %d)
          args: [touch.x, touch.y]

  - platform: lilygo_t5_47
    id: lilygo_touchscreen
    interrupt_pin:
      allow_other_uses: true
      number: GPIO36
    display: inkplate_display
    on_touch:
      - logger.log:
          format: Touch at (%d, %d)
          args: [touch.x, touch.y]
  - platform: gt911
    interrupt_pin:
      number: GPIO3
    display: inkplate_display

  - platform: ft63x6
    id: ft63_touchscreen
    interrupt_pin:
      allow_other_uses: true
      number: GPIO39
    reset_pin:
      allow_other_uses: true
      number: GPIO5
    display: inkplate_display
    on_touch:
      - logger.log:
          format: Touch at (%d, %d)
          args: [touch.x, touch.y]

i2s_audio:
  i2s_lrclk_pin:
    allow_other_uses: true
    number: GPIO26
  i2s_bclk_pin:
    allow_other_uses: true
    number: GPIO27
  i2s_mclk_pin:
    allow_other_uses: true
    number: GPIO25

media_player:
  - platform: i2s_audio
    name: None
    dac_type: external
    i2s_dout_pin:
      allow_other_uses: true
      number: GPIO25
    mute_pin:
      number: GPIO14
    on_state:
      - media_player.play:
      - media_player.play_media: http://localhost/media.mp3
      - media_player.play_media: !lambda 'return "http://localhost/media.mp3";'
    on_idle:
      - media_player.pause:
    on_play:
      - media_player.stop:
    on_pause:
      - media_player.toggle:
      - wait_until:
          media_player.is_idle:
      - wait_until:
          media_player.is_playing:
      - media_player.volume_up:
      - media_player.volume_down:
      - media_player.volume_set: 50%

prometheus:
  include_internal: true
  relabel:
    ha_hello_world:
      id: hellow_world
      name: Hello World

microphone:
  - platform: i2s_audio
    id: mic_id_adc
    adc_pin:
      allow_other_uses: true
      number: GPIO35
    adc_type: internal

  - platform: i2s_audio
    id: mic_id_external
    i2s_din_pin:
      allow_other_uses: true
      number: GPIO23
    adc_type: external
    pdm: false

speaker:
  - platform: i2s_audio
    id: speaker_id
    dac_type: external
    i2s_dout_pin:
      allow_other_uses: true
      number: GPIO25
    mode: mono

voice_assistant:
  microphone: mic_id_external
  speaker: speaker_id
  on_listening:
    - logger.log: "Voice assistant microphone listening"
  on_start:
    - logger.log: "Voice assistant started"
  on_stt_end:
    - logger.log:
        format: "Voice assistant STT ended with result %s"
        args: [x.c_str()]
  on_tts_start:
    - logger.log:
        format: "Voice assistant TTS started with text %s"
        args: [x.c_str()]
  on_tts_end:
    - logger.log:
        format: "Voice assistant TTS ended with url %s"
        args: [x.c_str()]
  on_end:
    - logger.log: "Voice assistant ended"
  on_error:
    - logger.log:
        format: "Voice assistant error - code %s, message: %s"
        args: [code.c_str(), message.c_str()]

max6956:
  - id: max6956_1
    address: 0x40

xl9535:
  - id: xl9535_hub
    address: 0x20