Old phone doorbell added

This commit is contained in:
2025-10-29 10:51:40 +01:00
parent 1cb58b01d4
commit fc67b902b9

View File

@@ -0,0 +1,151 @@
substitutions:
name: "old-phone-doorbell"
friendly_name: "Old Phone (Doorbell)"
esphome:
name: "${name}"
esp8266:
board: nodemcuv2
framework:
version: dev
# Enable Home Assistant API
api:
encryption:
key: !secret oldphonedoorbell_api
ota:
- platform: esphome
password: !secret oldphonedoorbell_ota
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Old-Phone-Doorbell"
password: !secret oldphonedoorbell_fallback
captive_portal:
output:
- platform: gpio
pin: GPIO4 # H-Bridge A (D2)
id: h_bridge_a
inverted: false
- platform: gpio
pin: GPIO5 # H-Bridge B (D1)
id: h_bridge_b
inverted: false
- platform: gpio
pin: GPIO14 # Enable (D5)
id: h_bridge_enable
inverted: false
globals:
- id: is_ringing_active
type: bool
restore_value: no
initial_value: 'false'
- id: current_ac_phase
type: bool
restore_value: no
initial_value: 'false'
# Timer for 20Hz AC (50ms period - alternates every 25ms)
interval:
- interval: 19ms
then:
- if:
condition:
and:
- lambda: 'return id(is_ringing_active);'
then:
- if:
condition:
lambda: 'return id(current_ac_phase);'
then:
- output.turn_on: h_bridge_a
- output.turn_off: h_bridge_b
else:
- output.turn_off: h_bridge_a
- output.turn_on: h_bridge_b
- globals.set:
id: current_ac_phase
value: !lambda 'return !id(current_ac_phase);'
else:
- output.turn_off: h_bridge_a
- output.turn_off: h_bridge_b
button:
- platform: template
name: "${friendly_name}"
icon: "mdi:phone-classic"
on_press:
- script.execute: british_ring_script
number:
- platform: template
name: "Nuber of times ringing"
optimistic: true
id: RingCount
unit_of_measurement: "times"
initial_value: 3
restore_value: true
min_value: 1
max_value: 10
step: 1
mode: box
script:
- id: british_ring_script
then:
# Initialize
- output.turn_off: h_bridge_a
- output.turn_off: h_bridge_b
- globals.set:
id: current_ac_phase
value: 'false'
# Enable H-bridge
- output.turn_on: h_bridge_enable
- delay: 10ms # Ensure enable stabilization
# Ring pattern (3 cycles)
- repeat:
count: !lambda 'return int(id(RingCount).state);'
then:
# First ring segment (400ms)
- globals.set:
id: is_ringing_active
value: 'true'
- delay: 400ms
# First pause (200ms)
- globals.set:
id: is_ringing_active
value: 'false'
- delay: 200ms
# Second ring segment (400ms)
- globals.set:
id: is_ringing_active
value: 'true'
- delay: 400ms
# Long pause (2000ms)
- globals.set:
id: is_ringing_active
value: 'false'
- delay: 2000ms
# Final cleanup
- delay: 10ms
- output.turn_off: h_bridge_enable
logger:
level: DEBUG