I have a vintage doorbell in my house but wanted the button + chime decoupled so I could sense the button and control the chime through HA. I saw other solutions but none that worked with my classic lighted button + mechanical “impact” chime. Circuits are below.
A little background: Most chimes I have seen use the AC signal to trigger the coil to smack the chime and then retract (and maybe smack the other chime) when the wave collapses. To make life easy, I just used a DC supply in place of the existing transformer and handled the “turn off” of the power to the coil in software.
To make the button work I made my own lighted switch, but that isn’t necessary. An off the shelf LED switch will work. Using an LM317 configured as a constant current source, I run it from the circuit power and supply a little current to turn on the LED. So on one side of the LED is ground and the other is a few volts. I tie the high side also into the optocoupler input on the relay board. So now when the button is pressed the lighted button turns off and the optocoupler stops conducting, telling the controller the button is pressed. From there, can do pretty much anything, in my case, send a signal to HA and if all is well, ring the chime, though the chime ring could be done entirely in the esp code.
The chime is simply wired from the power side of the relay board through the NO contacts on the relay. So when the relay closes it energizes the coil in the doorball and it hits the chime – tens of ms later the relay deengerzies and the coil hits the other bell.
This way, I can also trigger things on the sonos, lights, etc or whatever, and can mute the chime at night.
The circuit is pretty forgiving, R is probably ok at 500-1K, and perhaps you want to throw in a ceramic cap across the input of the regulator, but for this it will work without.
The one caveat is because the pin on the ESP is strapped, you do need to be a bit careful when flashing esphome, I did it by just power cycling and then starting the flasher.
esphome:
name: doorbell-interface
friendly_name: Front Door Doorbell
comment: Door Bell Button and Chime Relay
esp8266:
board: esp12e
# Enable Home Assistant API
api:
encryption:
key: ""
ota:
password: ""
num_attempts: 3
reboot_timeout: 1min
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
domain: .home
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Doorbell-Interface"
password: ""
# Enable Web server.
web_server:
port: 80
captive_portal:
logger:
level: DEBUG
light:
- platform: status_led
pin:
number: GPIO2
inverted: True
id: led_status_light
restore_mode: ALWAYS_ON
#internal: true #hide from front end
effects:
- strobe:
name: "Slow Blink" # 0.1s on, 2s off
colors:
- state: true
brightness: 100%
duration: 100ms
- state: false
duration: 2s
on_turn_on:
- light.turn_on:
id: led_status_light
effect: "Slow Blink"
# One sensor input
binary_sensor:
- platform: gpio
filters:
- delayed_on_off: 100ms
pin:
number: GPIO5
inverted: false
mode:
input: true
pullup: true
name: "doorbell_button"
device_class: door
# One relay outputs, exposed as switches in Home Assistant
switch:
- platform: gpio
pin: GPIO4
name: "doorbell_chime_relay"
icon: "mdi:icon-bell"
id: chime_relay
on_turn_on:
- delay: 600ms
- switch.turn_off: chime_relay
# Text sensors with general information.
text_sensor:
# Expose ESPHome version as sensor.
- platform: version
name: ESPHome Version
# Expose WiFi information as sensors.
- platform: wifi_info
ip_address:
name: IP
ssid:
name: SSID
bssid:
name: BSSID
# Sensors with general information.
sensor:
# Uptime sensor.
- platform: uptime
name: Uptime
# WiFi Signal sensor.
- platform: wifi_signal
name: WiFi Signal
update_interval: 60s