Old phone doorbell added
This commit is contained in:
151
Old_Phone_Doorbell/main.yaml
Normal file
151
Old_Phone_Doorbell/main.yaml
Normal 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
|
||||
|
||||
Reference in New Issue
Block a user