ESP-Home/mateuszs-tv.yaml

92 lines
2.1 KiB
YAML

esphome:
name: mateuszs-tv
friendly_name: Mateusz's TV
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "sn7OnWvf695dM1BAlpkhUFeFbBOyLCFwob+vOEiz6MY="
ota:
platform: esphome
password: !secret ota
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Mateuszs-Tv Fallback Hotspot"
password: "j781muxx0RXE"
captive_portal:
web_server:
# Define the TV state binary sensor (connected to GPIO34)
binary_sensor:
- platform: gpio
pin:
number: 34
mode: INPUT
name: "Status"
id: status
device_class: power
text_sensor:
- platform: homeassistant
entity_id: remote.chromecast_hd
id: tv_status
on_value:
- lambda: |-
if (id(override).state == false) {
if (x == "on" && !id(power_switch).state) {
id(power_switch).turn_on();
} else if (x == "off" && id(power_switch).state) {
id(power_switch).turn_off();
}
}
# Define the switch to control TV power (Only toggled via Home Assistant)
switch:
- platform: template
name: "Switch"
id: power_switch
restore_mode: RESTORE_DEFAULT_OFF
# turn_on_action:
# - output.turn_off: tv_relay # Set P23 LOW
# - delay: 300ms
# - output.turn_on: tv_relay # Set P23 HIGH
optimistic: true
turn_off_action:
- lambda: |-
if (millis() > 5000) { // Check if 5 seconds have passed since startup
id(tv_relay).turn_off(); // Set P23 LOW
delay(1500); // Delay for 1500ms
id(tv_relay).turn_on(); // Set P23 HIGH
}
- platform: template
name: "Override"
id: override
optimistic: true
restore_mode: RESTORE_DEFAULT_OFF
# Define GPIO23 as the output (normally pull-up)
output:
- platform: gpio
id: tv_relay
pin:
number: 23
mode: OUTPUT
inverted: false # Normal logic (LOW = active)