Skip to content

Customization

Explore various examples to customize and extend the Doorman firmware. From adding custom sensors to tweaking automation settings, these examples help you tailor the device to your specific needs. Follow the guides to unlock full flexibility and make the most of your setup.

Create a simple TC Telegram Binary Sensor

You can easily add custom binary sensors for any TC Telegram, in addition to the preconfigured ones. This allows you to listen for and respond to any other bus telegram, expanding the functionality of your system.

yaml
# Doorman S3 Firmware
substitutions:
  name: "doorman-s3"
  friendly_name: "Doorman S3"

# Import Doorman Stock Firmware Config
packages:
  AzonInc.Doorman: github://azoninc/doorman/firmware/configurations/esp32-s3.ha.stock.dev.yaml@dev

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

binary_sensor: 
  - platform: tc_bus
    name: "Custom Telegram"
    type: open_door
    address: 0
    web_server: 
      sorting_group_id: sorting_group_listeners
yaml
# Doorman S3 Firmware
substitutions:
  name: "doorman-s3"
  friendly_name: "Doorman S3"

# Import Doorman Stock Firmware Config
packages:
  AzonInc.Doorman: github://azoninc/doorman/firmware/configurations/esp32-s3.ha.stock.dev.yaml@dev

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

binary_sensor: 
  - platform: tc_bus
    name: "Custom Telegram"
    telegram: 0x00001100
    web_server: 
      sorting_group_id: sorting_group_listeners

Control the internal RGB Status LED

To control the onboard RGB LED with a button (for example), just reference the light entity with the internal id: doorman_rgb_status_led.

yaml
# Doorman S3 Firmware
substitutions:
  name: "doorman-s3"
  friendly_name: "Doorman S3"

# Import Doorman Stock Firmware Config
packages:
  AzonInc.Doorman: github://azoninc/doorman/firmware/configurations/esp32-s3.ha.stock.dev.yaml@dev

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

button: 
  - platform: template
    name: "Turn on Status RGB LED to red"
    on_press: 
      - light.turn_on: 
          id: doorman_rgb_status_led
          red: 100%
          green: 0%
          blue: 0%

Use the External Hardware Button

If you want to use the external button to trigger automations, extend the on_press block and add your own actions.

yaml
# Doorman S3 Firmware
substitutions:
  name: "doorman-s3"
  friendly_name: "Doorman S3"

# Import Doorman Stock Firmware Config
packages:
  AzonInc.Doorman: github://azoninc/doorman/firmware/configurations/esp32-s3.ha.stock.dev.yaml@dev

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

binary_sensor: 
  - id: !extend doorman_external_button
    on_press: 
      - logger.log: "External button pressed!"

Use I²C Sensors

If you want to add sensors via the I²C bus, you can use the two available GPIO pins and add the I²C component to your configuration. You can then attach your sensors to these two I²C GPIO pins.

yaml
# Doorman S3 Firmware
substitutions:
  name: "doorman-s3"
  friendly_name: "Doorman S3"

# Import Doorman Stock Firmware Config
packages:
  AzonInc.Doorman: github://azoninc/doorman/firmware/configurations/esp32-s3.ha.stock.dev.yaml@dev

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

i2c: 
  sda: GPIO40
  scl: GPIO48
  scan: true
  id: i2c_bus

Create Your Own Doorbell Pattern

If you want to create a custom doorbell pattern, you can easily extend the existing doorbell entities. For more information about patterns, refer to the ESPHome Docs.

yaml
# Doorman S3 Firmware
substitutions:
  name: "doorman-s3"
  friendly_name: "Doorman S3"

# Import Doorman Stock Firmware Config
packages:
  AzonInc.Doorman: github://azoninc/doorman/firmware/configurations/esp32-s3.ha.stock.dev.yaml@dev

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

# Extend the doorbell_pattern event entity
# Add a new special event type
event: 
  - id: !extend apartment_doorbell_pattern
    event_types: 
      - "special"

# Extend the Ring-To-Open Pattern Conditions
# You need to extend each Door Pattern Condition where you want to use the pattern
select: 
  - id: !extend rto_apartment_door_pattern_condition
    options: 
      - "special"

# Extend the apartment_doorbell / entrance_doorbell entity
# and add your new special pattern
binary_sensor: 
  - id: !extend apartment_doorbell
    on_multi_click: 
      # Special Pattern
      - timing: 
          # Press twice quickly with at most half a second in between.
          - ON for at most 0.3s
          - OFF for at most 0.5s
          - ON for at most 0.3s
          - OFF for 1s to 1.5s
          # Press once slowly with at most 1.5 seconds in between.
          - ON for at most 0.3s
          - OFF for 1s to 1.5s
          # Press once
          - ON for at most 0.3s
          - OFF for at least 2s
        then: 
          - logger.log: "Special pattern detected!"
          - event.trigger: 
              id: apartment_doorbell_pattern
              # Use the previously defined new event type here
              event_type: special

Light On When Entrance Doorbell Rings

You can easily set up an automation to turn on the light whenever someone rings the entrance doorbell. This can be useful for enhancing visibility or simply making it easier to see who is at the door. Simply configure the automation to trigger the light based on the doorbell event.

yaml
# Doorman S3 Firmware
substitutions:
  name: "doorman-s3"
  friendly_name: "Doorman S3"

# Import Doorman Stock Firmware Config
packages:
  AzonInc.Doorman: github://azoninc/doorman/firmware/configurations/esp32-s3.ha.stock.dev.yaml@dev

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

binary_sensor: 
  - id: !extend entrance_doorbell
    on_press: 
      - tc_bus.send: 
          type: "light"
yaml
# Doorman S3 Firmware
substitutions:
  name: "doorman-s3"
  friendly_name: "Doorman S3"

# Import Doorman Stock Firmware Config
packages:
  AzonInc.Doorman: github://azoninc/doorman/firmware/configurations/esp32-s3.ha.stock.dev.yaml@dev

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

# Import the Home Assistant sun elevation sensor
sensor: 
  - platform: homeassistant
    id: sun_elevation
    entity_id: sun.sun
    attribute: elevation

# Extend the entrance doorbell sensor
binary_sensor: 
  - id: !extend entrance_doorbell
    on_press: 
      # Sun elevation is <= 0 (dark)
      - if: 
          condition: 
            sensor.in_range: 
              id: sun_elevation
              below: 1
          then: 
            # Turn on the light
            - tc_bus.send: 
                type: "light"

Mix and Match

Want to customize the firmware and use only the features you need? Good news!
The Doorman firmware is modular, organized into packages that you can easily mix and match.

Don't need a feature, like the indoor station settings? Simply comment it out in your configuration. The order of the packages is important because some depend on others.

Check out the example YAML configuration below for guidance:

Example configuration
yaml
# Doorman S3 DIY Firmware

# You can change a few options here.
substitutions:
  name: "doorman-s3"
  friendly_name: "Doorman S3"

  log_level: "INFO"
  
  # Required for "External Components"
  branch: "dev"

packages:
  # Device type
  # Either esp32, esp32-s3 or esp32-s3-quad
  host: github://azoninc/doorman/firmware/hosts/esp32-s3.yaml@dev
  # host: github://azoninc/doorman/firmware/hosts/esp32-s3-quad.yaml@dev
  # host: github://azoninc/doorman/firmware/hosts/esp32.yaml@dev

  # External Components (REQUIRED)
  external_components: github://azoninc/doorman/firmware/components/external-components.yaml@dev

  # RGB Status LED (REQUIRED)
  rgb_status_led: github://azoninc/doorman/firmware/components/rgb-status-led.yaml@dev
  rgb_status_led_effects: github://azoninc/doorman/firmware/components/rgb-status-led.effects.yaml@dev

  # Base Doorman Firmware (REQUIRED)
  base: github://azoninc/doorman/firmware/base.yaml@dev

  # Improv BLE
  # Incompatible with Nuki Bridge
  bluedroid_ble: github://azoninc/doorman/firmware/components/bluedroid-ble.yaml@dev

  # OTA via Webserver & Device Builder
  ota_update: github://azoninc/doorman/firmware/components/ota-update.esphome.yaml@dev

  # Smart Home Integration
  # Either homeassistant, mqtt, homekit or custom
  # Use custom, if you just want to use it via wifi (http requests)
  api: github://azoninc/doorman/firmware/components/api.homeassistant.yaml@dev
  # api: github://azoninc/doorman/firmware/components/api.mqtt.yaml@dev
  # api: github://azoninc/doorman/firmware/components/api.homekit.yaml@dev
  # api: github://azoninc/doorman/firmware/components/api.custom.yaml@dev
  
  # TC:BUS debug tools
  debug_utilities: github://azoninc/doorman/firmware/components/debug-utilities.yaml@dev

  # ESPHome debug sensors
  debug_component: github://azoninc/doorman/firmware/components/debug-component.yaml@dev
  debug_component_psram: github://azoninc/doorman/firmware/components/debug-component.psram.yaml@dev

  # Pattern events
  pattern_events: github://azoninc/doorman/firmware/components/pattern-events.yaml@dev

  # Ring To Open automation
  ring_to_open: github://azoninc/doorman/firmware/components/ring-to-open.yaml@dev

  # TC:BUS Device Settings (Indoor Station)
  # Ringtones, Volume
  indoor_station_settings: github://azoninc/doorman/firmware/components/indoor-station-settings.yaml@dev

  # Nuki Bridge
  # Incompatible with Improv BLE (bluedroid-ble)
  # addon_nuki_bridge: !include github://azoninc/doorman/firmware/components/nuki-bridge.yaml@dev

  # Interactive Setup Mode
  interactive_setup: github://azoninc/doorman/firmware/components/interactive-setup.yaml@dev

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

Released under the GPL 3.0 License.