92 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			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)
 |