esphome:
  name: test5
  build_path: build/test5
  project:
    name: esphome.test5_project
    version: "1.0.0"

esp32:
  board: nodemcu-32s
  framework:
    type: esp-idf
    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

api:

ota:

logger:

uart:
  - id: uart1
    tx_pin: 1
    rx_pin: 3
    baud_rate: 9600
  - id: uart2
    tx_pin: 17
    rx_pin: 16
    baud_rate: 19200

i2c:

modbus:
  uart_id: uart1
  flow_control_pin: 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:
      - lambda: |-
          ESP_LOGD("Mqtt Test","testing/sensor/testing_sensor/state=[%s]",x.c_str());

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: !lambda "{ return x ;}"

tlc5947:
  data_pin: GPIO12
  clock_pin: GPIO14
  lat_pin: GPIO15

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

demo:

esp32_ble:

esp32_ble_server:
  manufacturer: "ESPHome"
  model: "Test5"

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

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
    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: 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: uart2
    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
    acceleration_mode: low
    store_baseline: true
    address: 0x69

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

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