Skip to content

Latest commit

 

History

History
188 lines (166 loc) · 6.08 KB

how_to_flash.md

File metadata and controls

188 lines (166 loc) · 6.08 KB

The ESP32 on this board must be programmed with a firmware like ESPHome.

ESPHome Example Configuration

esp32:
  board: esp32dev
  framework:
    type: esp-idf
    sdkconfig_options:
      CONFIG_FREERTOS_UNICORE: y # Only required if you have a single core ESP32

esphome:
  name: abb-welcome-demo
  friendly_name: "ABB Welcome Demo"
  on_boot:
    - lock.template.publish:
        id: front_door
        state: LOCKED
    - binary_sensor.template.publish:
        id: doorbell_indoor
        state: OFF
    - binary_sensor.template.publish:
        id: doorbell_outdoor
        state: OFF

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

logger:

api:
  encryption:
    key: !secret api_encryption_key

ota:
  password: !secret ota_password

remote_transmitter:
  pin: GPIO26
  carrier_duty_percent: 100%

remote_receiver:
  pin:
    number: GPIO25
    mode:
      input: True
  dump: [abbwelcome]
  filter: 8us
  tolerance:
    type: time
    value: 26us
  idle: 1500us
  buffer_size: 15kB
  memory_blocks: 5
  clock_divider: 160
  on_abbwelcome:
    then:
      - lambda: 'id(doorbell_intercom).publish_state(x.to_string().c_str());'
      - if:
          condition:
            and:
              - lambda: 'return (x.get_message_type() == 0x8d);' # unlock door response
              - lambda: 'return (x.get_source_address() == 0x4001);' # door address
          then:
            - lock.template.publish:
                id: front_door
                state: UNLOCKING
            - delay: 3s # time how long the door usually stays unlocked
            - lock.template.publish:
                id: front_door
                state: LOCKED
      - if:
          condition:
            and:
              - lambda: 'return (x.get_message_type() == 0x11);' # doorbell indoor
              - lambda: 'return (x.get_source_address() == 0x1001);' # your indoor station address
          then:
            - binary_sensor.template.publish:
                id: doorbell_indoor
                state: ON
            - binary_sensor.template.publish:
                id: doorbell_indoor
                state: OFF
      - if:
          condition:
            and:
              - lambda: 'return (x.get_message_type() == 0x01);' # doorbell outdoor
              - lambda: 'return (x.get_source_address() == 0x2001);' # outdoor station address
              - lambda: 'return (x.get_destination_address() == 0x1001);' # your indoor station address
          then:
            - binary_sensor.template.publish:
                id: doorbell_outdoor
                state: ON
            - binary_sensor.template.publish:
                id: doorbell_outdoor
                state: OFF

binary_sensor:
  - platform: template
    name: Doorbell indoor
    id: doorbell_indoor
    icon: mdi:bell
    filters:
      - delayed_off: 1s
  - platform: template
    name: Doorbell outdoor
    id: doorbell_outdoor
    icon: mdi:bell
    filters:
      - delayed_off: 1s

sensor:
  - platform: internal_temperature
    name: "Internal Temperature"

text_sensor:
  - platform: template
    name: "Doorbell Intercom" # Receive debug messages
    id: doorbell_intercom
    icon: mdi:bell-circle
    update_interval: never

lock:
  - platform: template
    name: "Front Door"
    id: front_door
    on_unlock:
      - then:
          - lock.template.publish:
              id: front_door
              state: LOCKED
    lock_action:
      - then:
          - lock.template.publish:
              id: front_door
              state: LOCKED
    unlock_action:
      - then:
          - remote_transmitter.transmit_abbwelcome:
              source_address: 0x1001 # your indoor station address
              destination_address: 0x4001 # door address
              three_byte_address: false # address length of your system
              message_type: 0x0d # unlock door
              data: [0xab, 0xcd, 0xef]  # door opener secret code, see receiver dump

button:
  - platform: restart
    name: "Reboot"
  - platform: safe_mode
    name: "Reboot (Safe Mode)"
  - platform: template
    name: "Stop Doorbell"
    on_press:
      - remote_transmitter.transmit_abbwelcome:
          source_address: 0x1001 # your indoor station address
          destination_address: 0x2001 # outdoor station address
          three_byte_address: false # address length of your system
          message_type: 0x02 # end call (stops your doorbell ringtone)
          data: [0x00]

status_led:
  pin: GPIO2

Flashing

For flashing you need a USB-to-serial adapter that supports 3.3V and has the required pins. The board includes an auto-reset circuit so you don't need to manually ground GPIO0 or press any buttons during flashing. The rest of the flashing process is identical to other ESP32 and ESPHome devices.

USB-to-serial adapter Programming header of the board
VCC 3V3
GND GND
TX RX
RX TX
DTR DTR
RTS RTS

If your USB-to-serial adapter can't supply enough power to flash the ESP32 you can disconnect 3V3 and connect an external power supply (12-30V DC) to the BUS+ and BUS- pins.

PCB image

Installation

Before connecting the device to the ABB-Welcome bus it is recommended to check the bus voltage. It should be between 20V and 30V DC. Above 36V the device can take damage. Connect the positive wire to BUS+ and the negative wire to BUS-. If the TX LED lights up continuously after connecting you should disconnect the wires and check your yaml configuration. The device has protection against reverse polarity and a resettable fuse.

Note: You are responsible for connecting the device to your system and for the firmware you upload. The author of this project takes no responsibility for any damages.