AboutBlogContact
ProductsESP DimmerDimmer Gen1Controller 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-dimmer_8ch-v03.yaml.

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

substitutions:
  name: boneio-dr-8ch-03
  friendly_name: 'BoneIO Dimmer LED'
  serial_prefix: 'dim' #Don't change it.

esphome:
  name: '${name}'
  friendly_name: '${friendly_name}'
  name_add_mac_suffix: true
  project:
    name: boneio.dimmer-led
    version: '0.3'

esp32:
  board: esp32dev
  framework:                                                                            
    type: esp-idf

external_components:
  - source: github://boneIO-eu/esphome-LM75@main #Original source and thank you note for BTomala https://github.com/boneIO-eu/esphome-lm75
    components: [lm75]

packages:
  internals_packages:
    url: https://github.com/boneIO-eu/esphome
    ref: v1.7.1
    files:
      [
        'devices/serial_no.yaml',
        'devices/dimmer_i2c.yaml',
        'devices/dimmer_ina219.yaml',
        'boards/dimmer_output.yaml',
      ]

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-dimmer_8ch-v0_3.yaml@latest
  import_full_config: true

pcf8574:
  - id: 'pcf_inputs'
    address: 0x38

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

web_server:
  port: 80
  local: true

text_sensor:
  - platform: version
    name: 'boneio-dimmer- Version'
    icon: mdi:cube-outline
    entity_category: diagnostic
  - platform: ethernet_info
    ip_address:
      entity_category: diagnostic
      name: boneio-dimmer IP
  - platform: template
    name: 'Hostname'
    id: hostname
    entity_category: diagnostic
    lambda: |-
      return id(eth).get_use_address();
    update_interval: 5min

binary_sensor:
  - platform: gpio
    name: 'IN_01'
    id: in_01
    pin:
      pcf8574: pcf_inputs
      number: 1
      mode:
        input: true
      inverted: true
    on_multi_click:
      - timing:
          - ON for at least 0.7s
        then:
          - while:
              condition:
                binary_sensor.is_on: in_01
              then:
                - if:
                    condition:
                      lambda: 'return id(chl_01).current_values.get_brightness() >= 0.90f;'
                    then:
                      - light.turn_on:
                          id: chl_01
                          brightness: 5%
                          transition_length: 0.2s
                    else:
                      - light.dim_relative:
                          id: chl_01
                          relative_brightness: 5%
                          transition_length: 0.2s
                - delay: 200ms
        invalid_cooldown: 0.5s
      - timing: #single click
          - ON for at most 0.4s
          - OFF for at least 0.1s
        then:
          light.toggle: chl_01
        invalid_cooldown: 0.5s
  - platform: gpio
    name: 'IN_02'
    id: in_02
    pin:
      pcf8574: pcf_inputs
      number: 2
      mode:
        input: true
      inverted: true
    on_multi_click:
      - timing:
          - ON for at least 0.7s
        then:
          - while:
              condition:
                binary_sensor.is_on: in_02
              then:
                - if:
                    condition:
                      lambda: 'return id(chl_02).current_values.get_brightness() >= 0.90f;'
                    then:
                      - light.turn_on:
                          id: chl_02
                          brightness: 5%
                          transition_length: 0.2s
                    else:
                      - light.dim_relative:
                          id: chl_02
                          relative_brightness: 5%
                          transition_length: 0.2s
                - delay: 200ms
        invalid_cooldown: 0.5s
      - timing: #single click
          - ON for at most 0.4s
          - OFF for at least 0.1s
        then:
          light.toggle: chl_02
        invalid_cooldown: 0.5s
  - platform: gpio
    name: 'IN_03'
    id: in_03
    pin:
      pcf8574: pcf_inputs
      number: 3
      mode:
        input: true
      inverted: true
    on_multi_click:
      - timing:
          - ON for at least 0.7s
        then:
          - while:
              condition:
                binary_sensor.is_on: in_03
              then:
                - if:
                    condition:
                      lambda: 'return id(chl_03).current_values.get_brightness() >= 0.90f;'
                    then:
                      - light.turn_on:
                          id: chl_03
                          brightness: 5%
                          transition_length: 0.2s
                    else:
                      - light.dim_relative:
                          id: chl_03
                          relative_brightness: 5%
                          transition_length: 0.2s
                - delay: 200ms
        invalid_cooldown: 0.5s
      - timing: #single click
          - ON for at most 0.4s
          - OFF for at least 0.1s
        then:
          light.toggle: chl_03
        invalid_cooldown: 0.5s
  - platform: gpio
    name: 'IN_04'
    id: in_04
    pin:
      pcf8574: pcf_inputs
      number: 4
      mode:
        input: true
      inverted: true
    on_multi_click:
      - timing:
          - ON for at least 0.7s
        then:
          - while:
              condition:
                binary_sensor.is_on: in_04
              then:
                - if:
                    condition:
                      lambda: 'return id(chl_04).current_values.get_brightness() >= 0.90f;'
                    then:
                      - light.turn_on:
                          id: chl_04
                          brightness: 5%
                          transition_length: 0.2s
                    else:
                      - light.dim_relative:
                          id: chl_04
                          relative_brightness: 5%
                          transition_length: 0.2s
                - delay: 200ms
        invalid_cooldown: 0.5s
      - timing: #single click
          - ON for at most 0.4s
          - OFF for at least 0.1s
        then:
          light.toggle: chl_04
        invalid_cooldown: 0.5s
  - platform: gpio
    name: 'IN_05'
    id: in_05
    pin:
      number: 36
      mode:
        input: true
      inverted: true
    on_multi_click:
      - timing:
          - ON for at least 0.7s
        then:
          - while:
              condition:
                binary_sensor.is_on: in_05
              then:
                - if:
                    condition:
                      lambda: 'return id(chr_01).current_values.get_brightness() >= 0.90f;'
                    then:
                      - light.turn_on:
                          id: chr_01
                          brightness: 5%
                          transition_length: 0.2s
                    else:
                      - light.dim_relative:
                          id: chr_01
                          relative_brightness: 5%
                          transition_length: 0.2s
                - delay: 200ms
        invalid_cooldown: 0.5s
      - timing: #single click
          - ON for at most 0.4s
          - OFF for at least 0.1s
        then:
          light.toggle: chr_01
        invalid_cooldown: 0.5s
  - platform: gpio
    name: 'IN_06'
    id: in_06
    pin:
      number: 39
      mode:
        input: true
      inverted: true
    on_multi_click:
      - timing:
          - ON for at least 0.7s
        then:
          - while:
              condition:
                binary_sensor.is_on: in_06
              then:
                - if:
                    condition:
                      lambda: 'return id(chr_02).current_values.get_brightness() >= 0.90f;'
                    then:
                      - light.turn_on:
                          id: chr_02
                          brightness: 5%
                          transition_length: 0.2s
                    else:
                      - light.dim_relative:
                          id: chr_02
                          relative_brightness: 5%
                          transition_length: 0.2s
                - delay: 200ms
        invalid_cooldown: 0.5s
      - timing: #single click
          - ON for at most 0.4s
          - OFF for at least 0.1s
        then:
          light.toggle: chr_02
        invalid_cooldown: 0.5s
  - platform: gpio
    name: 'IN_07'
    id: in_07
    pin:
      number: 34
      mode:
        input: true
      inverted: true
    on_multi_click:
      - timing:
          - ON for at least 0.7s
        then:
          - while:
              condition:
                binary_sensor.is_on: in_07
              then:
                - if:
                    condition:
                      lambda: 'return id(chr_03).current_values.get_brightness() >= 0.90f;'
                    then:
                      - light.turn_on:
                          id: chr_03
                          brightness: 5%
                          transition_length: 0.2s
                    else:
                      - light.dim_relative:
                          id: chr_03
                          relative_brightness: 5%
                          transition_length: 0.2s
                - delay: 200ms
        invalid_cooldown: 0.5s
      - timing: #single click
          - ON for at most 0.4s
          - OFF for at least 0.1s
        then:
          light.toggle: chr_03
        invalid_cooldown: 0.5s
  - platform: gpio
    name: 'IN_08'
    id: in_08
    pin:
      number: 35
      mode:
        input: true
      inverted: true
    on_multi_click:
      - timing:
          - ON for at least 0.7s
        then:
          - while:
              condition:
                binary_sensor.is_on: in_08
              then:
                - if:
                    condition:
                      lambda: 'return id(chr_04).current_values.get_brightness() >= 0.90f;'
                    then:
                      - light.turn_on:
                          id: chr_04
                          brightness: 5%
                          transition_length: 0.2s
                    else:
                      - light.dim_relative:
                          id: chr_04
                          relative_brightness: 5%
                          transition_length: 0.2s
                - delay: 200ms
        invalid_cooldown: 0.5s
      - timing: #single click
          - ON for at most 0.4s
          - OFF for at least 0.1s
        then:
          light.toggle: chr_04
        invalid_cooldown: 0.5s

light:
  - platform: monochromatic
    output: chl01
    name: 'CHL 01'
    id: chl_01
    default_transition_length: 2s
    gamma_correct: 0
  - platform: monochromatic
    output: chl02
    name: 'CHL 02'
    id: chl_02
    default_transition_length: 2s
    gamma_correct: 0
  - platform: monochromatic
    output: chl03
    name: 'CHL 03'
    id: chl_03
    default_transition_length: 2s
    gamma_correct: 0
  - platform: monochromatic
    output: chl04
    name: 'CHL 04'
    id: chl_04
    default_transition_length: 2s
    gamma_correct: 0

  - platform: monochromatic
    output: chr01
    name: 'CHR 01'
    id: chr_01
    default_transition_length: 2s
    gamma_correct: 0
  - platform: monochromatic
    output: chr02
    name: 'CHR 02'
    id: chr_02
    default_transition_length: 2s
    gamma_correct: 0
  - platform: monochromatic
    output: chr03
    name: 'CHR 03'
    id: chr_03
    default_transition_length: 2s
    gamma_correct: 0
  - platform: monochromatic
    output: chr04
    name: 'CHR 04'
    id: chr_04
    default_transition_length: 2s
    gamma_correct: 0

sensor:
  - platform: lm75
    id: boneIO_temp
    name: 'Temperature'
    update_interval: 30s
    entity_category: diagnostic
    on_value_range:
      - above: 70.0
        then:
          - switch.turn_on: buzzer
      - below: 70.0
        then:
          - switch.turn_off: buzzer

switch:
  - platform: gpio
    id: buzzer
    name: 'Buzzer'
    pin:
      pcf8574: pcf_inputs
      number: 0
      mode:
        output: true
      inverted: true

substitutions

substitutions:
  name: boneio-dr-8ch-03
  friendly_name: 'BoneIO Dimmer LED'
  serial_prefix: 'dim' #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 Dimmer-G1" if you have one boneIO controller, or for example, "boneIO Dimmer-G1 1st-floor".

esphome

esphome:
  name: '${name}'
  friendly_name: '${friendly_name}'
  name_add_mac_suffix: true
  project:
    name: boneio.dimmer-led
    version: '0.3'

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: esp32dev
  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-dimmer_8ch-v0_3.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/serial_no.yaml',
        'devices/dimmer_i2c.yaml',
        'devices/dimmer_ina219.yaml',
        'boards/dimmer_output.yaml',
      ]

Here are definitions of all packages used by boneIO, with the address to our GitHub. You can also find there the definitions of modbus devices.

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

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.