AboutBlogContact
ProductsESP 24x16AController Setup

Edit config file

Everything what you should know about configuration file

Configuration file

The configuration file might look big and complicated, but it's really not. The file itself is separated into sections, which we will describe below. For our example, we will use boneio-24x16_switches_v0_7.yaml.

So let's begin. Here is the whole config file:

substitutions:
  name: boneio-24-sw-07
  friendly_name: 'BoneIO ESP 24x16 Switches'
  serial_prefix: 'esp' #Don't change it.

esphome:
  name: '${name}'
  friendly_name: '${friendly_name}'
  name_add_mac_suffix: true
  project:
    name: boneio.24x16-switches
    version: '0.7'

esp32:
  board: nodemcu-32s
  framework:                                                                            
    type: esp-idf

ethernet:
  id: eth
  type: LAN8720
  mdc_pin: GPIO23
  mdio_pin: GPIO18
  clk:
    pin: GPIO0
    mode: CLK_EXT_IN
  phy_addr: 1
  power_pin: GPIO16

dashboard_import:
  package_import_url: github://boneIO-eu/esphome/boneio-24x16_switches_v0_7.yaml@latest
  import_full_config: true

packages:
  internals_packages:
    url: https://github.com/boneIO-eu/esphome
    ref: v1.7.1
    files: [
        'devices/buzzer.yaml',
        'devices/serial_no.yaml',
        'devices_v0_7/display.yaml',
        'devices_v0_7/i2c.yaml',
        'devices_v0_7-v0_9/ina219.yaml',
        'devices_v0_7-v0_9/lm75b.yaml',
        'devices_v0_7-v0_9/pcf_with_mcp.yaml',
        'boards/24x16_output.yaml',
        # 'devices_v0_7-v0_9/one_wire.yaml',
      ]

logger:
api:
  reboot_timeout: 0s
ota:
  - platform: esphome
  - platform: web_server

web_server:
  port: 80
  local: true

time:
  - platform: homeassistant
    timezone: Europe/Warsaw
    id: homeassistant_time

switch:
  - platform: output
    name: 'Switch 01'
    output: out_01
    id: switch_01
  - platform: output
    name: 'Switch 02'
    output: out_02
    id: switch_02
  - platform: output
    name: 'Switch 03'
    output: out_03
    id: switch_03
  - platform: output
    name: 'Switch 04'
    output: out_04
    id: switch_04
  - platform: output
    name: 'Switch 05'
    output: out_05
    id: switch_05
  - platform: output
    name: 'Switch 06'
    output: out_06
    id: switch_06
  - platform: output
    name: 'Switch 07'
    output: out_07
    id: switch_07
  - platform: output
    name: 'Switch 08'
    output: out_08
    id: switch_08
  - platform: output
    name: 'Switch 09'
    output: out_09
    id: switch_09
  - platform: output
    name: 'Switch 10'
    output: out_10
    id: switch_10
  - platform: output
    name: 'Switch 11'
    output: out_11
    id: switch_11
  - platform: output
    name: 'Switch 12'
    output: out_12
    id: switch_12
  - platform: output
    name: 'Switch 13'
    output: out_13
    id: switch_13
  - platform: output
    name: 'Switch 14'
    output: out_14
    id: switch_14
  - platform: output
    name: 'Switch 15'
    output: out_15
    id: switch_15
  - platform: output
    name: 'Switch 16'
    output: out_16
    id: switch_16
  - platform: output
    name: 'Switch 17'
    output: out_17
    id: switch_17
  - platform: output
    name: 'Switch 18'
    output: out_18
    id: switch_18
  - platform: output
    name: 'Switch 19'
    output: out_19
    id: switch_19
  - platform: output
    name: 'Switch 20'
    output: out_20
    id: switch_20
  - platform: output
    name: 'Switch 21'
    output: out_21
    id: switch_21
  - platform: output
    name: 'Switch 22'
    output: out_22
    id: switch_22
  - platform: output
    name: 'Switch 23'
    output: out_23
    id: switch_23
  - platform: output
    name: 'Switch 24'
    output: out_24
    id: switch_24

binary_sensor:
  - platform: gpio
    name: 'IN_01'
    id: in_01
    pin:
      pcf8574: pcf_inputs_1to14
      number: 0
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_01

  - platform: gpio
    name: 'IN_02'
    id: in_02
    pin:
      pcf8574: pcf_inputs_1to14
      number: 1
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_02

  - platform: gpio
    name: 'IN_03'
    id: in_03
    pin:
      pcf8574: pcf_inputs_1to14
      number: 2
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_03

  - platform: gpio
    name: 'IN_04'
    id: in_04
    pin:
      pcf8574: pcf_inputs_1to14
      number: 3
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_04

  - platform: gpio
    name: 'IN_05'
    id: in_05
    pin:
      pcf8574: pcf_inputs_1to14
      number: 4
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_05

  - platform: gpio
    name: 'IN_06'
    id: in_06
    pin:
      pcf8574: pcf_inputs_1to14
      number: 5
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_06

  - platform: gpio
    name: 'IN_07'
    id: in_07
    pin:
      pcf8574: pcf_inputs_1to14
      number: 6
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_07

  - platform: gpio
    name: 'IN_08'
    id: in_08
    pin:
      pcf8574: pcf_inputs_1to14
      number: 8
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_08

  - platform: gpio
    name: 'IN_09'
    id: in_09
    pin:
      pcf8574: pcf_inputs_1to14
      number: 9
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_09

  - platform: gpio
    name: 'IN_10'
    id: in_10
    pin:
      pcf8574: pcf_inputs_1to14
      number: 10
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_10

  - platform: gpio
    name: 'IN_11'
    id: in_11
    pin:
      pcf8574: pcf_inputs_1to14
      number: 11
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_11

  - platform: gpio
    name: 'IN_12'
    id: in_12
    pin:
      pcf8574: pcf_inputs_1to14
      number: 12
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_12

  - platform: gpio
    name: 'IN_13'
    id: in_13
    pin:
      pcf8574: pcf_inputs_1to14
      number: 13
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_13

  - platform: gpio
    name: 'IN_14'
    id: in_14
    pin:
      pcf8574: pcf_inputs_1to14
      number: 14
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_14

  - platform: gpio
    name: 'IN_15'
    id: in_15
    pin:
      pcf8574: pcf_inputs_15to28
      number: 6
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_15

  - platform: gpio
    name: 'IN_16'
    id: in_16
    pin:
      pcf8574: pcf_inputs_15to28
      number: 5
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_16

  - platform: gpio
    name: 'IN_17'
    id: in_17
    pin:
      pcf8574: pcf_inputs_15to28
      number: 4
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_17

  - platform: gpio
    name: 'IN_18'
    id: in_18
    pin:
      pcf8574: pcf_inputs_15to28
      number: 3
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_18

  - platform: gpio
    name: 'IN_19'
    id: in_19
    pin:
      pcf8574: pcf_inputs_15to28
      number: 2
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_19

  - platform: gpio
    name: 'IN_20'
    id: in_20
    pin:
      pcf8574: pcf_inputs_15to28
      number: 1
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_20

  - platform: gpio
    name: 'IN_21'
    id: in_21
    pin:
      pcf8574: pcf_inputs_15to28
      number: 0
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_21

  - platform: gpio
    name: 'IN_22'
    id: in_22
    pin:
      pcf8574: pcf_inputs_15to28
      number: 8
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_22

  - platform: gpio
    name: 'IN_23'
    id: in_23
    pin:
      pcf8574: pcf_inputs_15to28
      number: 9
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_23

  - platform: gpio
    name: 'IN_24'
    id: in_24
    pin:
      pcf8574: pcf_inputs_15to28
      number: 10
      mode:
        input: true
      inverted: true
    on_press:
      then:
        - switch.toggle: switch_24

  - platform: gpio
    name: 'IN_25'
    id: in_25
    pin:
      pcf8574: pcf_inputs_15to28
      number: 11
      mode:
        input: true
      inverted: true

  - platform: gpio
    name: 'IN_26'
    id: in_26
    pin:
      pcf8574: pcf_inputs_15to28
      number: 12
      mode:
        input: true
      inverted: true

  - platform: gpio
    name: 'IN_27'
    id: in_27
    pin:
      pcf8574: pcf_inputs_15to28
      number: 13
      mode:
        input: true
      inverted: true

  - platform: gpio
    name: 'IN_28'
    id: in_28
    pin:
      pcf8574: pcf_inputs_15to28
      number: 14
      mode:
        input: true
      inverted: true

  - platform: gpio
    name: 'IN_29'
    id: in_29
    pin:
      pcf8574: pcf_inputs_28to35_menu
      number: 0
      mode:
        input: true
      inverted: true

  - platform: gpio
    name: 'IN_30'
    id: in_30
    pin:
      pcf8574: pcf_inputs_28to35_menu
      number: 1
      mode:
        input: true
      inverted: true

  - platform: gpio
    name: 'IN_31'
    id: in_31
    pin:
      pcf8574: pcf_inputs_28to35_menu
      number: 2
      mode:
        input: true
      inverted: true

  - platform: gpio
    name: 'IN_32'
    id: in_32
    pin:
      pcf8574: pcf_inputs_28to35_menu
      number: 3
      mode:
        input: true
      inverted: true

  - platform: gpio
    name: 'IN_33'
    pin:
      pcf8574: pcf_inputs_28to35_menu
      number: 4
      mode:
        input: true
      inverted: true

  - platform: gpio
    name: 'IN_34'
    pin:
      pcf8574: pcf_inputs_28to35_menu
      number: 5
      mode:
        input: true
      inverted: true

  - platform: gpio
    name: 'IN_35'
    pin:
      pcf8574: pcf_inputs_28to35_menu
      number: 6
      mode:
        input: true
      inverted: true
######################
### MODBUS SECTION ###
######################
# UNCOMMENT BELOW TO USE MODBUS
# uart:
#   id: uart_pin14_15
#   rx_pin: GPIO14
#   tx_pin: GPIO15
#   baud_rate: 9600
#   stop_bits: 1

# modbus:
#   send_wait_time: 200ms
#   uart_id: uart_pin14_15
#   id: boneio_modbus

# modbus_controller:
#   - id: YOURDEVICE ID
#     address: 0x09
#     modbus_id: mod_bus
#     setup_priority: -10
#     update_interval: 60s

substitutions

substitutions:
  name: boneio-24-sw-07
  friendly_name: 'BoneIO ESP 24x16 Switches'
  serial_prefix: 'esp' #Don't change it.

This part is mainly responsible for the name of your controller.
You should focus on friendly_name. You should write the exact name of your boneIO here. The name depends on your needs.
It could be "boneIO ESP 24x16" if you have one boneIO ESP controller, or for example, "boneIO ESP 1st-floor".

esphome

esphome:
  name: '${name}'
  friendly_name: '${friendly_name}'
  name_add_mac_suffix: true
  project:
    name: boneio.24x16-switches
    version: '0.7'

There are definitions for your controller. You shouldn't change name or friendly_name. The line name_add_mac_suffix: will add a MAC suffix to the controller's name, which is useful for identifying your controller. project: is the place where you define the type and version of your controller.

esp32

esp32:
  board: nodemcu-32s
  framework:                                                                            
    type: esp-idf

Definition of the ESP32 board and the required framework.

Ethernet

ethernet:
  id: eth
  type: LAN8720
  mdc_pin: GPIO23
  mdio_pin: GPIO18
  clk:
    pin: GPIO0
    mode: CLK_EXT_IN
  phy_addr: 1
  power_pin: GPIO16

This part is responsible for the description of your controller's Ethernet port - you shouldn't change anything here.

dashboard_import

dashboard_import:
  package_import_url: github://boneIO-eu/esphome/boneio-24x16_switches_v0_7.yaml@latest
  import_full_config: true

This is the place where the address for our GitHub repository is defined. The config and all additional packages are downloaded from there. There is nothing to change here.

packages

packages:
  internals_packages:
    url: https://github.com/boneIO-eu/esphome
    ref: v1.7.1
    files: [
        'devices/buzzer.yaml',
        'devices/serial_no.yaml',
        'devices_v0_7/display.yaml',
        'devices_v0_7/i2c.yaml',
        'devices_v0_7-v0_9/ina219.yaml',
        'devices_v0_7-v0_9/lm75b.yaml',
        'devices_v0_7-v0_9/pcf_with_mcp.yaml',
        'boards/24x16_output.yaml',
        # 'devices_v0_7-v0_9/one_wire.yaml',
      ]

Here are definitions of all packages used by boneIO, with the address to our GitHub. One thing that might interest you is uncommenting the # 'devices_v0_7-v0_9/one_wire.yaml' section if you would like to use a one-wire sensor.

logger

logger:

In case of troubleshooting, you can increase the log level to INFO, WARN, or DEBUG. This can be very useful in some cases.

api

api:
  reboot_timeout: 0s

Here, the reboot timeout is defined for when the controller loses connection with HA. If you want your boneIO to restart after losing connection with Home Assistant, you should enter a value that suits you here. For WiFi connections, the value should not be zero. For LAN connections, not rebooting does not negatively affect the connection with Home Assistant in most cases.

ota

ota:
  - platform: esphome
  - platform: web_server

Part responsible for Over The Air updates. The web_server platform allows updating via the device's web panel.

web_server

web_server:
  port: 80
  local: true
  version: 3

Part responsible for enabling the web server of the controller.

time

time:
  - platform: homeassistant
    timezone: Europe/Warsaw
    id: homeassistant_time

This section is responsible for selecting your controller's time zone. Adjust it to your location.

Modbus Section

######################
### MODBUS SECTION ###
######################
# UNCOMMENT BELOW TO USE MODBUS
# uart:
#   id: uart_pin14_15
#   rx_pin: GPIO14
#   tx_pin: GPIO15
#   baud_rate: 9600
#   stop_bits: 1

# modbus:
#   send_wait_time: 200ms
#   uart_id: uart_pin14_15
#   id: boneio_modbus

# modbus_controller:
#   - id: YOURDEVICE ID
#     address: 0x09
#     modbus_id: mod_bus
#     setup_priority: -10
#     update_interval: 60s

This section is responsible for Modbus. If you plan to use it, you should first uncomment it.
Then, please check our Modbus tutorial: Modbus with Esphome packages