Files
ha-parental-controls/packages/parental_controls.yaml
T

103 lines
3.0 KiB
YAML

# =============================================================
# Parental Controls Package
# Requires OPNsense firewall alias "parental_blocked" + rule
# See README.md for full setup instructions
# =============================================================
input_text:
parental_control_config:
name: Parental Controls Configuration
max: 10000
initial: '{"users":[]}'
icon: mdi:shield-account
# ------------------------------------------------------------------
# OPNsense DHCP lease sensor
# Polls every 60s — provides device discovery + MAC→IP for dashboard
# Requires opnsense_leases_url and opnsense_basic_auth in secrets.yaml
# ------------------------------------------------------------------
rest:
- resource: !secret opnsense_leases_url
scan_interval: 60
headers:
Authorization: !secret opnsense_basic_auth
verify_ssl: false
sensor:
- name: "OPNsense DHCP Leases"
unique_id: parental_controls_dhcp_leases
value_template: "{{ value_json.total | default(value_json.rowCount) | default(0) }}"
icon: mdi:lan
json_attributes:
- rows
# ------------------------------------------------------------------
# OPNsense firewall API calls
# ------------------------------------------------------------------
rest_command:
parental_block_ip:
url: !secret opnsense_alias_add_url
method: post
headers:
Authorization: !secret opnsense_basic_auth
payload: "address={{ address }}"
content_type: "application/x-www-form-urlencoded"
verify_ssl: false
parental_unblock_ip:
url: !secret opnsense_alias_del_url
method: post
headers:
Authorization: !secret opnsense_basic_auth
payload: "address={{ address }}"
content_type: "application/x-www-form-urlencoded"
verify_ssl: false
parental_apply_firewall:
url: !secret opnsense_apply_url
method: post
headers:
Authorization: !secret opnsense_basic_auth
payload: "{}"
content_type: "application/json"
verify_ssl: false
# ------------------------------------------------------------------
# Scripts
# ------------------------------------------------------------------
script:
parental_block_ip:
alias: "Parental Controls — Block IP"
icon: mdi:block-helper
fields:
ip:
description: "IP address to block"
required: true
selector:
text:
sequence:
- service: rest_command.parental_block_ip
data:
address: "{{ ip }}"
parental_unblock_ip:
alias: "Parental Controls — Unblock IP"
icon: mdi:check-circle-outline
fields:
ip:
description: "IP address to unblock"
required: true
selector:
text:
sequence:
- service: rest_command.parental_unblock_ip
data:
address: "{{ ip }}"
parental_apply_firewall:
alias: "Parental Controls — Apply Firewall"
icon: mdi:shield-refresh
sequence:
- service: rest_command.parental_apply_firewall