Control D Manager - DNS Orchestration

Hi everyone,

I recently moved my DNS to Control D, primarily to solve a classic issue of protecting and controlling mobile devices when off the local network. One of the main motivators is for my kid’s devices: How do you reliably protect and control a kid’s phone (especially iOS) when they leave your local Wi-Fi, without forcing them through a clunky, battery-draining VPN?

The answer is actually surprisingly simple: you don’t need a complex router or firewall setup. You just install a Control D configuration profile directly on their phone, and you instantly gain the ability to block data and site access on demand, anywhere.

I wanted to bring that control into my smart home, so I built Control D Manager. It’s a custom integration that turns your Control D profiles, filters, and custom rules into programmable Home Assistant entities.

:sparkles: The “Everyday” Use Cases

1. Off-Network “Homework Mode” (On-Demand Blocking)
Because Control D is cloud-based, you can use HA to control a device that isn’t even on your network. Using native HA services (set_service_state or set_rule_state), you can easily build an automation that instantly blocks YouTube, TikTok, or all internet access on a kid’s phone while they are at school or out with friends.

2. The “Tamper Detection” Hook (Solving the iOS Bypass)
The obvious risk with iOS DNS profiles is that a clever kid can just delete them. Because phones are naturally chatty, this integration exposes endpoint activity sensors.
You can use this to build a tamper-detection automation: Have the HA Companion App trigger a location update. If the phone responds with its location (meaning it has an active internet connection), but your Control D endpoint sensor shows it hasn’t made a DNS query recently… you know they bypassed the DNS profile. (I plan on doing a full write-up on this specific automation soon!)

:rocket: For the Homelabbers & Power Users

While you don’t need any special network hardware to use this integration, if you do run a complex homelab, this integration scales perfectly with it.

Control D has a highly open API. If you run ctrld at the firewall/router layer to separate DNS policy by VLAN or individual client, this integration natively reads that architecture. You get high-fidelity, programmatic access to every single filter, service, and custom rule on your network.

To ensure this integration stays lightning-fast even on complex networks, I built it to a “Platinum” standard:

  • Zero Entity Bloat: Control D has thousands of possible filters. A naive integration would flood your HA registry. This uses a strict opt-in model: you explicitly choose which specific filters or custom rules actually become HA UI switches.
  • Stateless Pausing: Pass a duration payload to disable_profile and let the Control D cloud handle the countdown timer natively.
  • Pi-Hole Card Parity: Exposes normalized analytics sensors mapped to standard translation keys. You can drop this right into the popular custom:pi-hole Lovelace card for an instant, beautiful dashboard (despite limited compatibility due to it being built for a different platform, the compatibility is incredibly functional).

Links & Installation

I built this adhering strictly to HA core standards (DataUpdateCoordinators, strict typing, entry-scoped runtime) so it feels like a native part of your smart home, not a hacked-together web wrapper.

I’d love for the community to test it out—whether you just want to manage your kid’s iPad, or you want to orchestrate 15 different VLANs—and let me know what you think!



:heart: Support the Project

Building and maintaining integrations takes countless hours of development, testing, and covering hardware and tool costs. If Control D Manager is giving you the network control you’ve been hoping for, here is how you can help keep the project alive:

:star: Star this repository! (The Non-Negotiable)
If you install this integration and get value out of it, clicking the Star button at the top of the page is the easiest—and free—way to say thanks. It takes two seconds, helps others discover the project, and shows me that the community is actively using it.

:hot_beverage: Sponsor or Tip (The Ultimate Motivator)
While stars let me know the integration is alive, a sponsorship or tip is the absolute best way to affirm that the time and money spent building this tool is providing real value.

Financial support is never required, but it is the strongest motivation for me to keep fixing bugs, adding features, and maintaining this project long-term. If Control D Manager makes your smart home better, consider showing your support!

Sponsor Buy Me A Coffee

4 Likes

Really awesome, thanks for the work.

Announcing Control D Manager v1.1.0 - Full Redirection, Endpoint Controls, and Client Aliasing

Hey everyone,

A quick update on the Control D Manager integration for Home Assistant!

First off, I want to give a massive shoutout to the Control D team. Following my v1.0.0 post, they generously reached out and upgraded my account with a Full Control license so I could properly develop and test the premium tier features. That level of upstream developer support is incredible, and I immediately put it to work.

Thanks to that upgrade, v1.1.0 is now live, bringing full Redirection support and expanding the integration beyond profile automation into broader endpoint and client operations.

:sparkles: What’s New in v1.1.0:

  • Fully Unlocked Redirection: I was finally able to test and correct the Redirect behavior end-to-end. We now have solid redirect behavior across your default rules, custom rules, and services. This is available directly via UI entities as well as more granularly via the updated Home Assistant service layer.
  • On-the-Fly Client Aliasing: You can now dynamically manage network clients using HA automations with the new set_client_alias and clear_client_alias services. This even supports analytics-only client rows, meaning alias actions work perfectly even if the client isn’t exposed as a standalone HA entity.
  • Endpoint Operations: Added new services to natively rename_endpoint and set_endpoint_analytics_logging straight from Home Assistant automations.
  • Zero-Bloat Maintained: Staying true to the integration’s design philosophy, all these new endpoint and client controls are strictly “service-first.” They give you limitless automation capability without flooding your Home Assistant registry with useless entity platforms.

Notes for current users: No migration is required from 1.0.0. Just update via HACS and you’re good to go!

GitHub Repository: https://github.com/ccpk1/controld-manager-ha


Thanks again to the Control D team for the generous license, and to the community for the great feedback on the first release. Let me know what you build with the new redirect and endpoint services!

2 Likes

Big Control D fan. Love your project!

1 Like

Stumbled upon this intergration since I’ve been using Control D for almost a year now. This is awesome!

1 Like

Thanks so much for the kind words! If it’s doing the job for you, dropping a star on the repo would be awesome. I only launched this a few weeks ago, and the hardest part of a new release is trying to figure out if the silence means everything is working perfectly, or if people just haven’t found it yet. Glad to hear it’s hitting the mark for you!

1 Like

Control D Manager v1.2.0 is now live! :rocket:

Hey everyone,

Following up on the recent updates, version 1.2.0 is now available via HACS. This release is entirely focused on making the integration smarter, cleaner, and much easier to manage, keeping your Home Assistant entity registry completely free of bloat.

:sparkles: The Big Enabler: Control D v2.0.14

A few days ago, Control D released platform update v2.0.14, which included a new "See All Active Services" view in their web dashboard.

Previously, you had to expose entire Service Categories in HA (which could contain 100+ disabled entities) just to manually enable the two or three services you actually cared about. Because Control D now centralizes your active services upstream, I was able to completely rewrite how this integration syncs that data.

:hammer_and_wrench: Smarter Syncing & Zero Entity Bloat

  • "Expose all active services" (The New Default): The integration now directly syncs with the explicit live service rows you already have present on your Control D profile. No more category dumping or sifting through hundreds of disabled entities.
  • "Expose all custom rules": You now have a one-click, opt-in policy to expose the full, live custom-rule surface for a specific profile without picking folders or rules one by one.

The Recommended Workflow: Switch your profile in the integration options to "Expose all active services," then simply manage what's active directly in the Control D web UI. The integration will automatically sync and expose only those active services as entities.

(Note: The old manual category-based method is still available if you genuinely need that broader surface, but the active sync is the new recommended path).

:memo: Upgrade Notes

  • No breaking changes and no migration steps, just upgrade from HACS and restart Home Assistant.
  • Existing profiles that had no manual service categories saved will automatically migrate to the new "Expose all active services" behavior.
  • Existing profiles that were already using explicitly stored service categories will retain those categories and do not migrate automatically.
  • Note: Because Home Assistant remembers entity-registry choices after creation, some entities may require manual enable/disable cleanup in HA after changing your exposure settings.

Here is a look at the updated configuration options:

You can check out the full changelog on the GitHub repository. Enjoy the cleaner registry, and let me know how the new syncing workflow feels for your setup!

:heart: Support the Project

Building and maintaining integrations takes countless hours of development, testing, and covering hardware and tool costs. If Control D Manager is giving you the network control you've been hoping for, here is how you can help keep the project alive:

:star: Star this repository! (The Non-Negotiable :blush:)
GitHub repository

:hot_beverage: Sponsor or Tip (The Ultimate Motivator)
Sponsor Buy Me A Coffee

1 Like

Hey everyone,

Quick update on the Control D Manager integration for Home Assistant. I realized I never posted the announcement for the 1.3.0 release, so let me cover that and bundle in the just released 1.3.1 all at once.

:white_check_mark: Version 1.3.0 — Smarter entities & Easier setup

A while back, 1.3.0 rolled out with two big themes: making entities more reliable to build on, and making setup problems actually diagnosable.

Structured entity metadata Every Control D entity now carries consistent metadata — integration, profile, purpose, item type, taxonomy path, and item name. In practical terms, dashboards, templates, and automations no longer have to hack their way around entity names; you can select and build on entities programmatically in a consistent way.

Much better setup diagnostics Startup and refresh now log far more detail — which stage is running, what normalization is happening, and exactly where an upstream payload mismatch breaks. If you ever hit a setup failure, the log now points at the real cause instead of leaving you guessing.

A compatibility fix Some Control D accounts return live service IDs as numbers instead of strings, which could break setup. 1.3.0 now handles both, so those accounts set up cleanly.

:tada: Version 1.3.1 — No more entity state flickering

If you toggled a few options, filters, or services at once — or ran a script that flips 5-10 settings in a loop — you’d sometimes see the UI and the the underlying entity state briefly “bounce back” to an older value before correcting.

What was happening Every change was triggering its own full inventory refresh, and if a refresh was already running when you made a change, that stale result could land afterward and momentarily flip the UI back to the old state.

What’s fixed

  • Writes now apply instantly, and the integration waits a short moment before re-checking the cloud state.
  • If a refresh was already in flight when you made a change, that stale result is now thrown away instead of overriding your newer change.
  • Rapid batches of changes get coalesced into a single refresh instead of one refresh per setting — so bulk scripts are much lighter on the API.

The result: no flicker, whether you change one thing or a whole batch.

:memo: Upgrade Notes

  • No breaking changes or configuration needed — update via HACS as usual and you’re done.
  • Both 1.3.0 and 1.3.1 are included in this single update.

GitHub Repository & Documentation: https://github.com/ccpk1/controld-manager-ha

:heart: Support the Project

If Control D Manager is making your home better, I’d genuinely appreciate the support:

Enjoy — and let me know how Control D is working for you!

Announcing Control D Manager 2.0.0

Version 2.0.0 adds an AI assistant surface and completes the endpoint and client lifecycle. It brings two breaking changes: configuration changes now require an administrator, and two summary sensor attributes were renamed.

An assistant surface for control and diagnosis

Control D Manager registers its own Home Assistant LLM API. Home Assistant serves it to the built-in Assist pipeline and, through the MCP Server integration, to any MCP client: desktop and editor assistants, chat clients, and custom agents. There is no separate server to run.

The surface covers everyday control and diagnosis. Pausing a profile, changing a service mode, or reading back what a profile currently enforces takes a sentence instead of a walk through the dashboard. Diagnosis reaches wider, because a single question can legitimately span profiles, endpoints, clients, and rules, and on a home lab or a segmented network the answer usually needs several of those at once before it makes sense.

That diagnostic reach is why this is a set of tools rather than more entities. Control D’s per-query activity log and ranked breakdowns are high-cardinality telemetry, and exposing them as entities would add thousands of registry rows that go stale almost immediately, so they are fetched on demand instead.

What follows is a real session against a live account, transcribed from Assist and lightly trimmed. Profile names are changed. It runs on a low-cost zero-data-retention model from OpenRouter, which is part of the point: the answers below come from the domain context in the tool descriptions, not from model scale.

tell me about my control d

Your Control D account protects 293 devices across 18 endpoints using 8 profiles. In the recent analytics window, your network handled 348,140 total queries: 153,741 blocked queries, 194,046 bypassed queries, 353 redirected queries. All 8 profiles are currently active and unpaused.

Jane’s phone wasn’t working right this morning

Looking at the activity log for Jane’s Phone today, it has experienced several blocked queries by the x-hagezi-light filter. Some of the domains being blocked include:

  • app-measurement.com
  • googleads.g.doubleclick.net
  • api-eu.mixpanel.com
  • app-analytics-services.com
  • incoming.telemetry.mozilla.org

These are standard tracker/analytics blocks, but if an app or service Jane was trying to use relies on one of them, it could cause issues. Would you like me to make an exception or pause protection for Jane’s phone?

Give me some time ranges those blocks happened today

Based on the activity log for Jane’s Phone today, the blocked queries occurred in these time windows (all times in UTC):

  • 07:06 to 10:56 UTC: Consistent background telemetry and analytics blocks (such as api-eu.mixpanel.com, app-measurement.com, and googleads.g.doubleclick.net) occurring roughly every 30 minutes.
  • 10:19 to 10:56 UTC: Additional blocks including telemetry domains (incoming.telemetry.mozilla.org) and app measurement services.

If Jane was using her phone around 7:00 AM to 11:00 AM UTC, those background blocks might have affected her apps.

tell me more about that blocking service

The blocking service causing those blocks on Jane’s phone is Hagezi’s Light blocklist (tracked in Control D as x-hagezi-light).

It is a popular, lightweight third-party community blocklist designed to block common online annoyances without being overly aggressive. Specifically, it targets:

  • Ad networks and tracking domains (like Google Ads / doubleclick.net)
  • App analytics and telemetry (like Mixpanel and app-measurement.com)
  • Browser telemetry (like Mozilla’s telemetry)

Because it runs at the DNS level through Control D, it prevents Jane’s phone from even resolving the addresses for these trackers and analytics servers, stopping them in the background.

why is it being applied?

The x-hagezi-light filter is being applied because it is enabled within the configuration of the Jane’s Phone profile (profile ID 733915vbnc48r).

Every profile in Control D can have its own set of built-in and third-party security or blocking filters turned on. In this case, the Hagezi Light blocklist has been activated specifically for Jane’s phone profile, so any DNS requests matching that list get blocked automatically.

What blocks and filters apply to Jane’s chromebook?

Jane’s Chromebook is covered under the Jane’s Devices profile (with the Default Profile applied as a secondary/fallback profile).

The active filters and protection categories enabled on the Jane’s Devices profile include: Adult Content, Clickbait, Dating, Drugs, Gambling, Malware, New Domains, Phishing, Torrents & Piracy, and VPN & DNS.

I want to pause the blocking on Ben’s phone for 5 minutes

I have paused the “Ben’s Phone” profile for 5 minutes.

You can reverse this change at any time by running controld_manager__enable_profile(profile_id='518044mplx72q').

Nothing in that sequence required a dashboard. The assistant resolved a device to the profile that owns it, named the filter responsible, described what that filter does, explained why it was active on that profile, compared the protections on a second device, and then made a timed change that reverses itself while handing back the call to cancel it early.

Other questions the tools answer directly include whether a single domain is blocked on a single endpoint without waiting for real traffic, which profile is blocking a request when an endpoint enforces more than one, and what a profile is currently configured to do, including its catch-all rule.

The surface carries the domain model

A tool that can read Control D data is not much use to an agent that does not know what it is reading. Every tool description is composed from a shared model of how Control D works plus that tool’s own specifics, so the agent knows the following before you ask anything.

The vocabulary is defined. A profile is a policy container, an endpoint is a DNS resolver that enforces a profile, and a client is a device seen under an endpoint. Home Assistant’s own device and entity are named as separate concepts, with an explicit rule against conflating them.

The domain rules are stated. An endpoint always enforces at least one profile, so only its secondary can be removed. A device can legitimately be both a client and its own endpoint, and both listings are correct because they answer different questions. A client row is an observation rather than stored configuration.

Identifiers have provenance. Every id a tool accepts is a Control D id obtained from a read tool, and the one translation that is needed happens in the tool layer rather than in the model’s head.

The agent therefore arrives at your first question already knowing what a profile is, where identifiers come from, and how to read the result of a write.

Tiered, and summary by default

Exposure is set in the integration options and starts at Summary only. The tier decides which tools are registered at all:

Tier Tools What it reaches
Off 0 Nothing is registered
Summary only (default) 1 Account counts and block statistics, plus each profile’s name, protected-device count, paused state, and block counts
Read only 5 Adds endpoints, clients, addresses, and query-level analytics
Read and control 21 Adds reversible changes: filters, services, options, rules, profile enable and disable, endpoint naming, profiles, descriptions, and client aliases
Full 24 Adds the three destructive deletes, as their own tool class

Summary stays high level. It sends aggregate counts and profile names, and nothing that identifies a device or a website: no client names, no IP addresses, no MAC addresses, no endpoint names, no domains, and no per-query records. Anything that specific arrives only when you raise the tier, and it goes to whichever model your assistant uses.

Reads change nothing. Writes report whether anything actually changed, what the state was before, and the call that reverses them where one exists. The destructive tier describes its blast radius before acting. Every write also requires an administrator, so a non-admin user is rejected by the service whatever tier is configured.

Requires Home Assistant 2026.10 or newer. On older versions every other feature works normally and this setting is not offered.

Breaking changes

Every write service now requires an administrator

The 19 services that change Control D configuration now require an admin user. A non-admin user calling a write is rejected where it previously succeeded.

Automations and scripts are unaffected. The check applies only to calls that carry a user, and a call without one is not blocked. The 5 read services are unchanged and remain available to any user.

If you are the only user, or you are the admin, nothing changes for you.

Two summary sensor attributes were renamed

On the account and per-profile summary sensors, discovered_endpoint_count and router_client_count are now endpoint_count and client_count, and the sensors are labeled “Protected devices” with a devices unit instead of “Endpoint count”. The old names described endpoints as if they were devices, which stopped being true once the counts were separated.

Entity identities are untouched. The internal sensor key is unchanged, so nothing is recreated and no entity_id moves. Only templates, dashboards, or automations that read the old attribute names or the unit need a small edit.

What else landed in 2.0.0

Ten new services, four reads and six writes, bringing the total to 24.

The endpoint and client lifecycle is complete. Create and delete endpoints, assign a primary or secondary profile, set an endpoint’s description, delete a client alias, and remove a service override. Each write carries an undo where one makes sense.

Redirect rules survive a toggle. Changing a rule’s state now writes a status-only update, so a redirect keeps its destination instead of being flattened, and the destination appears as a redirect_target attribute on the rule switch.

Protected-device counting is honest. The summary sensors count what DNS protection covers, endpoints plus the clients behind them, and expose both underlying counts as attributes.

Catalog search. get_catalog accepts a search term, so a named object is reachable in a catalog of over a thousand rows without paging.

The 2.0.0 release notes have the full service list and the reasoning behind each change.

Fixes

Eight fixes, most of them in the service and tool write paths. Writes failed for objects you had not exposed as entities. An undo restored a placeholder instead of the real previous value. Profile identifiers were not translated to the device id Control D expects, and numeric account fields broke setup. The tool result contract’s before and after shapes did not match the documentation, and delete_rule blamed an unreadable state for its missing undo.

The full list is in the release notes.

Upgrading

No configuration changes are required. Existing profiles, entities, and automations keep working. See the breaking changes above for the administrator requirement and the two renamed summary sensor attributes.

The AI/MCP surface needs Home Assistant 2026.10 or newer.

Links

On HACS: I have submitted Control D Manager for inclusion in the default store. Until that review completes, it is still installed as a custom repository, exactly as before, and updates arrive through HACS as usual.

Support the project

If Control D Manager is useful to you, there are two ways to help.

Star the repository. It takes a second, it is free, and it helps other people find the project.

Sponsor or tip. This is never required, but financial support does make it easier to keep putting time into bug fixes, features, and long-term maintenance.

Sponsor Buy Me A Coffee


This is an unofficial community project. It is not an official Control D product, and Control D does not provide support for it.