It turns a supported UniFi Protect camera into a Home Assistant Assist satellite. The add-on receives microphone audio from the camera over RTSP, processes it through Linux Voice Assistant, and sends spoken responses back through the camera’s speaker using the Protect talkback API.
I built and tested it with a UniFi Protect G4 Instant. Other Protect cameras may also work if they provide an audio-enabled RTSP stream and support speaker talkback, but I have not verified them yet.
This is my first add-on shared publicly, so feedback, bug reports, and contributions are very welcome. Feel free to rip it apart! I hope someone else finds it useful.
AI disclosure: Most of the code was written with GitHub Copilot using several different AI models. I am a software engineer, and I personally tested and thoroughly reviewed the code, but I want to be transparent about how it was developed.
Thank you so much for this brilliant add-on! I’ve tested it with an UniFi Protect G5 Dome, and it works like a charm!
I have one question regarding multiple cameras: Is it possible to use several UniFi Protect cameras as separate Assist satellites? If so, what would be the recommended way to set this up? Would I need to run a separate Docker stack/container instance for each camera, or is there a way to configure multiple cameras within a single setup?
Most of us (me included) use unifi cams on externals. Doors. Security cams etc. (I use my g5s to scare off the deer that like to eat my bushes.)
If you are not doing anything to PREVENT assist from accessing tools this opens a GIGANTIC security hole. I could literally walk up to the door lock and get it to open if you have t done anything to prevent it.
(lock.unlock + open speaker + assist…)
My personal solution - I wrote a whole darned voice platform for lllms.. Youre welcome to use it but you don’t need to go that far..
You can setup alternate voice agents. I’d STRONGLY suggest that the ones with access to this do NOT have access to your normal toolset - especially lock.unlock. honestly I’d not give them any tools at all if they are not under your control 24*7.
Treat any externally accessible Assist satellite exactly like an unauthenticated network client. Give it its own agent and only the minimum capabilities you are comfortable exposing to a stranger
As it stands today, I have not tested multiple camera. I would image you can start a second container and give it the different camera and a different Assist satellite name. Should work.
I am working on adding multiple camera support, ideally all from the same container with area aware Assist. I haven’t gotten to deep into this so let me know if you have preferences. I am currently just going off my use case.
Yeah great call out! This can definitely open a huge security hole if not setup correctly. I typically keep anything security specific unexposed to voice assistant (ie locks, alarm, garage doors etc).
Yes please share! Very interested to see how you went about this.
I had the idea to work on something with bluetooth proxy to detect my phone’s presence to allow sensitive voice controls to go through. Ill keep people posted if I do end up going down that road.