diff --git a/templates.yaml b/templates.yaml new file mode 100644 index 0000000..1657694 --- /dev/null +++ b/templates.yaml @@ -0,0 +1,266 @@ +# ======================================== +# MODERN TEMPLATE CONFIGURATION +# ======================================== +# Migrated from legacy platform: template syntax +# Migration date: March 2026 +# Deadline: Before HA 2026.6 +# ======================================== + +# ========== BINARY SENSORS ========== +- binary_sensor: + + # ------ NETWORK MONITORING ------ + + - name: "Router Authenticated" + unique_id: router_authenticated + state: > + {{ states('input_text.router_token') not in ['unknown', '', 'unavailable'] }} + icon: > + {% if states('input_text.router_token') not in ['unknown', '', 'unavailable'] %} + mdi:check-circle + {% else %} + mdi:close-circle + {% endif %} + + - name: "Internet Connectivity" + unique_id: internet_connectivity + device_class: connectivity + state: > + {{ states('binary_sensor.ping_google') == 'on' or + states('binary_sensor.ping_cloudflare') == 'on' }} + icon: > + {% if states('binary_sensor.ping_google') == 'on' or + states('binary_sensor.ping_cloudflare') == 'on' %} + mdi:web + {% else %} + mdi:web-off + {% endif %} + + - name: "Network System Healthy" + unique_id: network_system_healthy + state: > + {{ states('binary_sensor.ping_router') == 'on' and + states('binary_sensor.router_authenticated') == 'on' and + states('sensor.system_health_score') | int(0) >= 70 }} + icon: > + {% if states('binary_sensor.ping_router') == 'on' and + states('binary_sensor.router_authenticated') == 'on' and + states('sensor.system_health_score') | int(0) >= 70 %} + mdi:check-circle-outline + {% else %} + mdi:alert-circle-outline + {% endif %} + + # ------ PARENTAL CONTROLS ------ + + - name: "Any Device Blocked" + unique_id: any_device_blocked + state: > + {{ states('sensor.devices_currently_blocked') | int(0) > 0 }} + icon: > + {% if states('sensor.devices_currently_blocked') | int(0) > 0 %} + mdi:shield-check + {% else %} + mdi:shield-off-outline + {% endif %} + + - name: "Bedtime Hours" + unique_id: bedtime_hours + state: > + {% set now_time = now().strftime('%H:%M') %} + {% set bedtime_start = states('input_text.bedtime_start') %} + {% set bedtime_end = states('input_text.bedtime_end') %} + {% if bedtime_start and bedtime_end %} + {% if bedtime_start > bedtime_end %} + {# Bedtime crosses midnight #} + {{ now_time >= bedtime_start or now_time <= bedtime_end }} + {% else %} + {# Normal bedtime within same day #} + {{ bedtime_start <= now_time <= bedtime_end }} + {% endif %} + {% else %} + false + {% endif %} + icon: > + {% set now_time = now().strftime('%H:%M') %} + {% set bedtime_start = states('input_text.bedtime_start') %} + {% set bedtime_end = states('input_text.bedtime_end') %} + {% if bedtime_start and bedtime_end %} + {% if bedtime_start > bedtime_end %} + {% if now_time >= bedtime_start or now_time <= bedtime_end %} + mdi:sleep + {% else %} + mdi:sleep-off + {% endif %} + {% else %} + {% if bedtime_start <= now_time <= bedtime_end %} + mdi:sleep + {% else %} + mdi:sleep-off + {% endif %} + {% endif %} + {% else %} + mdi:sleep-off + {% endif %} + + - name: "Homework Hours" + unique_id: homework_hours + state: > + {% set now_time = now().strftime('%H:%M') %} + {% set homework_start = states('input_text.homework_start') %} + {% set homework_end = states('input_text.homework_end') %} + {% if homework_start and homework_end %} + {{ homework_start <= now_time <= homework_end }} + {% else %} + false + {% endif %} + icon: > + {% if this.state == 'on' %} + mdi:school + {% else %} + mdi:school-outline + {% endif %} + + - name: "Emergency Mode" + unique_id: emergency_mode + state: > + {{ states('input_boolean.emergency_unblock_all') == 'on' or + states('input_boolean.bypass_mode_enabled') == 'on' }} + icon: > + {% if states('input_boolean.emergency_unblock_all') == 'on' or + states('input_boolean.bypass_mode_enabled') == 'on' %} + mdi:alert-octagon + {% else %} + mdi:shield-check-outline + {% endif %} + + - name: "Strict Parental Mode" + unique_id: strict_parental_mode + state: > + {{ states('input_boolean.strict_mode_enabled') == 'on' and + states('sensor.devices_currently_blocked') | int(0) >= 4 }} + icon: > + {% if states('input_boolean.strict_mode_enabled') == 'on' and + states('sensor.devices_currently_blocked') | int(0) >= 4 %} + mdi:shield-lock + {% else %} + mdi:shield-outline + {% endif %} + + # ------ DEVICE CONNECTIVITY ------ + + - name: "Jess Laptop 1 Device Reachable" + unique_id: jess_laptop_1_reachable + device_class: connectivity + state: > + {% if states('input_text.jess_laptop_1_testing_mac') not in ['unknown', '', 'unavailable'] %} + {{ states('input_boolean.jess_laptop_1_online') == 'on' }} + {% else %} + false + {% endif %} + icon: > + {% if states('input_text.jess_laptop_1_testing_mac') not in ['unknown', '', 'unavailable'] %} + {% if states('input_boolean.jess_laptop_1_online') == 'on' %} + mdi:laptop + {% else %} + mdi:laptop-off + {% endif %} + {% else %} + mdi:help-box + {% endif %} + + - name: "Bella Devices Reachable" + unique_id: bella_devices_reachable + device_class: connectivity + state: > + {{ states('input_boolean.bella_iphone_online') == 'on' or + states('input_boolean.bella_laptop_wireless_online') == 'on' or + states('input_boolean.bella_desktop_wireless_online') == 'on' }} + icon: > + {% if states('input_boolean.bella_iphone_online') == 'on' or + states('input_boolean.bella_laptop_wireless_online') == 'on' or + states('input_boolean.bella_desktop_wireless_online') == 'on' %} + mdi:account-check + {% else %} + mdi:account-off + {% endif %} + + - name: "Xander Devices Reachable" + unique_id: xander_devices_reachable + device_class: connectivity + state: > + {{ states('input_boolean.xander_desktop_wired_online') == 'on' or + states('input_boolean.xander_desktop_wireless_online') == 'on' }} + icon: > + {% if states('input_boolean.xander_desktop_wired_online') == 'on' or + states('input_boolean.xander_desktop_wireless_online') == 'on' %} + mdi:account-check + {% else %} + mdi:account-off + {% endif %} + + - name: "William Devices Reachable" + unique_id: william_devices_reachable + device_class: connectivity + state: > + {{ states('input_boolean.william_desktop_wireless_online') == 'on' or + states('input_boolean.william_laptop_wireless_online') == 'on' }} + icon: > + {% if states('input_boolean.william_desktop_wireless_online') == 'on' or + states('input_boolean.william_laptop_wireless_online') == 'on' %} + mdi:account-check + {% else %} + mdi:account-off + {% endif %} + + # ------ SYSTEM STATUS ------ + + - name: "Configuration Complete" + unique_id: configuration_complete + state: > + {% set required_macs = [ + 'input_text.jess_laptop_1_testing_mac', + 'input_text.bella_iphone_mac', + 'input_text.bella_laptop_wireless_mac', + 'input_text.xander_desktop_wired_mac', + 'input_text.william_desktop_wireless_mac', + 'input_text.william_laptop_wireless_mac' + ] %} + {% set empty_count = namespace(value=0) %} + {% for mac in required_macs %} + {% if states(mac) in ['', 'unknown', 'unavailable'] %} + {% set empty_count.value = empty_count.value + 1 %} + {% endif %} + {% endfor %} + {{ empty_count.value == 0 and states('input_text.router_password') not in ['', 'unknown', 'unavailable'] }} + icon: > + {% set required_macs = [ + 'input_text.jess_laptop_1_testing_mac', + 'input_text.bella_iphone_mac', + 'input_text.bella_laptop_wireless_mac', + 'input_text.xander_desktop_wired_mac', + 'input_text.william_desktop_wireless_mac', + 'input_text.william_laptop_wireless_mac' + ] %} + {% set empty_count = namespace(value=0) %} + {% for mac in required_macs %} + {% if states(mac) in ['', 'unknown', 'unavailable'] %} + {% set empty_count.value = empty_count.value + 1 %} + {% endif %} + {% endfor %} + {% if empty_count.value == 0 and states('input_text.router_password') not in ['', 'unknown', 'unavailable'] %} + mdi:check-circle + {% else %} + mdi:cog-outline + {% endif %} + + - name: "MAC Addresses Stable" + unique_id: mac_addresses_stable + state: > + {{ states('sensor.devices_with_changed_macs') | int(0) == 0 }} + icon: > + {% if states('sensor.devices_with_changed_macs') | int(0) == 0 %} + mdi:check-network-outline + {% else %} + mdi:alert-network-outline + {% endif %}