From fc67b902b9af4ea16a46246a188e4e575970557c Mon Sep 17 00:00:00 2001 From: "Adrian A. Baumann" Date: Wed, 29 Oct 2025 10:51:40 +0100 Subject: [PATCH] Old phone doorbell added --- Old_Phone_Doorbell/main.yaml | 151 +++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 Old_Phone_Doorbell/main.yaml diff --git a/Old_Phone_Doorbell/main.yaml b/Old_Phone_Doorbell/main.yaml new file mode 100644 index 0000000..6a4ade8 --- /dev/null +++ b/Old_Phone_Doorbell/main.yaml @@ -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 +