# ============================================================= # 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