Recently a third party integration with Platinum status and IoT class Local Push that I am using added a feature to also connect directly to the manufacturer’s website of the device to check for firmware updates for devices that cannot connect to the internet themselves.
Although this could be considered a helpful feature in some cases, in my case this was an unpleasant surprise as I explicitly had disabled internet access for these devices as I didn’t want the manufacturer to be able to track what devices are running on our network.
This made me realize that from a privacy perspective it can currently be quite difficult to understand whether any integration connects to the internet themselves as well or not as apparently the IoT class is not a good indicator for this. The example integration I’m talking about does mention it connecting to the manufacturer’s website in it’s readme, but it’s listed quite far down the page as part of the description of the firmware update entity which users might not be looking at when installing the integration.
As I feel this issue applies to all integrations, it would be helpful if Home Assistant adds a separate attribute besides IoT class that indicates to users whether integrations are really fully local or are also connecting to upstream servers on the internet for whatever reason. It could be just a boolean but even better, maybe integrations should be required to just list all upstream servers they connect to in a manifest file (and which are not user configurable).
Potential ways to implemented this feature:
-
Use an honor system. To KISS, just enforce that any integration adds a manifest.json with DNS names that integrations connects to (unless the user has to input them themselves) and list these DNS names on the website.
-
Enforce that the manifest.json is correct by forcing integrations to use an official hass library to make upstream/internet connections which checks the manifest for allowed connections.
From a privacy & legal perspective, I guess that the 2nd would be the absolute best as it’d be a runtime check/filter. But the first one is much easier, less invasive and could probably at least be checked on code commits with some code checker (f.e. the same one that checks the integration quality scale)?
PS: I’m deliberately not naming the integration that made me realize this as I feel that doesn’t add anything of value to this FR as this seems a generic issue with all integrations. Also I don’t want to give the impression that the developer in question did something wrong or something like that