[Experience + Proposal] Universal local video surveillance in Gladys — go2rtc + Frigate (person/dog/horse detection... without cloud)

@mutmut thanks for the logs, they are quite telling :backhand_index_pointing_down:

1. The progress bar — Indeed: out of the ~4 minutes, it’s the Frigate image download that takes ~3 minutes by itself (the rest is almost instantaneous). Good news: even if it’s « a single step », Docker gives us the download progress — so we’ll display a real bar « Downloading Frigate image… X % » during these 3 minutes, plus the labels for the following steps (MQTT broker, configuration, startup). It’s in preparation.
I reproduced it by launching the image on a raspberry-pi, roughly the same time as you for the installation.

2 & 3. The MQTT brokers / the name eclipse-mosquitto — we agree. The broker dedicated to Frigate is a conscious choice (isolation, dedicated credentials), and mosquitto is ultra-light (a few MB), so no resource concerns. For the question « what if we shared / named it better », it’s exactly what Pierre-Gilles is preparing on external container integrations — the right place to discuss this is the dedicated topic where it’s being discussed: Intégrations externes dans Gladys Assistant

4. Your Intel HD 530 iGPU — yes, it’s already supported: the integration automatically detects the Intel GPU and enables acceleration (video decoding + OpenVINO detection). The only condition depends on your setup: you need to expose /dev/dri in your Proxmox LXC container and then in the Gladys Docker container. Once done, let me know what the « Hardware Acceleration » section of the Frigate configuration page displays — we’ll validate it together.

5. Restarting Frigate — same principle as point 1: we’ll display « Frigate restarting… » then « Frigate operational », based on the signal that Frigate sends us when it’s back online.

6. Your Myfox — the message connection refused …:554 means that the camera itself is not responding on this port: it’s indeed on the camera side that you need to « fiddle », as you felt. The red banner « No stream received » is there for that. We’ll also enhance the « Suggest this camera for the catalog » button to automatically include useful logs (Gladys, MQTT, Frigate, go2rtc) — this will allow us to help you much faster in such cases, and to add your Myfox to the catalog.

And I won’t forget to check if the eufy Security Solar Wall Light Cam S120 can be easily supported before you buy it. But without testing, I don’t think I can confirm 100%…

Well, it seems something went wrong, probably on my end. Indeed, even when the container is running, the db is not stored there. And similarly in the other test folder (tuya), I only have the mosquitto folder.

So, to answer the question, the mosquitto folder remains, but that’s what was there before…

As for permissions, they seem fine too…

We agree, the chance of this happening in production is almost non-existent! And it’s a case that logically isn’t handled because it has never occurred!

I’ll update and test later this afternoon!

OMG :heart_eyes: Sorry, I can’t think of any other expression that fits what I just read in all of your messages. Honestly, you’re all crazy and I just find it amazing :star_struck:

I can only wholeheartedly endorse this integration proposal, which I’ve also implemented, but just through MotioEyes … So, no integration or optimization, just notifications when a video is saved after motion.

If I can help in any way, I’d be happy to :grin:

Thanks to all of you,

Jean

So I started testing and I’m using mqtts instead of mqtt via an external mosquitto on my side.
As a result, Gladys can’t connect:

gladys  | 2026-07-15T23:38:34+0200 <info> connect.js:27 (FrigateManager.connect) Connecting Gladys to mqtt://mqtt.xxxx.local:8883 MQTT broker...
gladys  | 2026-07-15T23:38:34+0200 <warn> connect.js:48 (MqttClient.<anonymous>) Error while connecting to Frigate MQTT broker - Error: read ECONNRESET

Is it possible to add mqtts? :slight_smile:

Thanks

I have a silly question: wouldn’t it be possible to use the MQTT configured in Gladys? (the login/password, URL, and status are already there)

Hi @prohand,
I think so, well I hope so ^^ I’ll do it as soon as possible and keep you updated!

Hi @ProtZ,
That’s totally possible. We (weird to say ‹ we ›, but we’ll have to get used to it ^^) chose to implement it this way for now for consistency with Zigbee2mqtt. But I think in the end, this will be the solution retained. Or rather, more broadly, we should be able to define any MQTT or offer Gladys’s. For my part, my MQTT server is external to Gladys. My goal, like @prohand’s, is to switch to MQTTs.

Thanks :slight_smile:

Indeed, the choice should be to use the same as Gladys (whether it’s external or integrated) or to use an external MQTT :slight_smile:

Great job! That’s really a nice feature!

I played around with it a bit this afternoon and the test was successful with external MQTT and external Frigate (I used URLs instead of IP and I just forgot that I had a basic auth on my Frigate in addition to the classic auth), my 6 cameras are detected and the events work + image feedback.
I will continue some tests tonight. For now, I only have feedback on the configuration screen which could perhaps be improved (cf used the mqtt config of gladys).

I could finally do like the Poulin brothers with Gladys: https://www.youtube.com/watch?v=Go2ERXdH3gg&list=PLuyMGpc2xoZsA1I3FZja4zWzV-m3GZmfA
By the way, I have the same crappy cameras in stock.

Hi! I just restarted a test, without success… Actions taken: installation, account creation, activation of the frigate integration and error: Frigate installation failed. Gladys’s log: 2026-07-16T20:42:27+0200 <info> detectHardware.js:78 (FrigateManager.detectHardware) Frigate: no compatible render node found, video decoding on CPU 2026-07-16T20:42:27+0200 <info> allocatePorts.js:33 (FrigateManager.allocatePorts) Frigate: allocated port 1885 for MQTT broker 2026-07-16T20:42:27+0200 <info> allocatePorts.js:33 (FrigateManager.allocatePorts) Frigate: allocated port 8971 for Frigate UI 2026-07-16T20:42:27+0200 <info> allocatePorts.js:33 (FrigateManager.allocatePorts) Frigate: allocated port 5000 for Frigate API 2026-07-16T20:42:27+0200 <info> allocatePorts.js:33 (FrigateManager.allocatePorts) Frigate: allocated port 8554 for Frigate RTSP restream 2026-07-16T20:42:27+0200 <info> allocateContainerNames.js:54 (FrigateManager.allocateContainerNames) Frigate: allocated container name gladys-frigate -mqtt for the MQTT broker 2026-07-16T20:42:27+0200 <info> allocateContainerNames.js:63 (FrigateManager.allocateContainerNames) Frigate: allocated container name gladys-frigate -server for Frigate 2026-07-16T20:42:27+0200 <info> checkForContainerUpdates.js:14 (FrigateManager.checkForContainerUpdates) Checking for current installed versions and required updates... 2026-07-16T20:42:27+0200 <info> checkForContainerUpdates.js:18 (FrigateManager.checkForContainerUpdates) Frigate MQTT container: update #1 of the container required... 2026-07-16T20:42:27+0200 <info> checkForContainerUpdates.js:32 (FrigateManager.checkForContainerUpdates) Frigate MQTT container: update #1 of the container done 2026-07-16T20:42:27+0200 <info> checkForContainerUpdates.js:37 (FrigateManager.checkForContainerUpdates) Frigate container: update #1 of the container required... 2026-07-16T20:42:27+0200 <info> checkForContainerUpdates.js:51 (FrigateManager.checkForContainerUpdates) Frigate container: update #1 of the container done 2026-07-16T20:42:27+0200 <info> installMqttContainer.js:26 (FrigateManager.installMqttContainer) Frigate MQTT broker is being installed as Docker container... 2026-07-16T20:42:27+0200 <info> installMqttContainer.js:27 (FrigateManager.installMqttContainer) Pulling eclipse-mosquitto:2.0.15 image... 2026-07-16T20:42:27+0200 <info> installMqttContainer.js:31 (FrigateManager.installMqttContainer) Preparing Frigate broker environment... 2026-07-16T20:42:27+0200 <info> installMqttContainer.js:40 (FrigateManager.installMqttContainer) Writing Mosquitto config file in /var/lib/gladysassistantfrigate/frigate/mqtt/mosquitto.conf 2026-07-16T20:42:28+0200 <info> installMqttContainer.js:57 (FrigateManager.installMqttContainer) Creating container with data in "/var/lib/gladysassistant" on host... 2026-07-16T20:42:28+0200 <info> installMqttContainer.js:70 (FrigateManager.installMqttContainer) Frigate MQTT broker is restarting... 2026-07-16T20:42:33+0200 <info> installMqttContainer.js:78 (FrigateManager.installMqttContainer) Creating user/pass... 2026-07-16T20:42:33+0200 <error> installMqttContainer.js:97 (FrigateManager.installMqttContainer) Frigate MQTT broker container failed to start: Error: (HTTP code 409) container stopped/paused - Container 097cd7cedd297728a2687b09135c89e59e7f7938854f7b31914d19e6174eb21b is restarting, wait until the container is running at /src/server/node_modules/docker-modem/lib/modem.js:336:17 at getCause (/src/server/node_modules/docker-modem/lib/modem.js:366:7) at Modem.buildPayload (/src/server/node_modules/docker-modem/lib/modem.js:335:5) at IncomingMessage.<anonymous> (/src/server/node_modules/docker-modem/lib/modem.js:303:16) at IncomingMessage.emit (node:events:531:35) at endReadableNT (node:internal/streams/readable:1698:12) at processTicksAndRejections (node:internal/process/task_queues:89:21) { reason: 'container stopped/paused', statusCode: 409, json: { message: 'Container 097cd7cedd297728a2687b09135c89e59e7f7938854f7b31914d19e6174eb21b is restarting, wait until the container is running' } } 2026-07-16T20:42:33+0200 <warn> errorMiddleware.js:68 (errorMiddleware) Error: (HTTP code 409) container stopped/paused - Container 097cd7cedd297728a2687b09135c89e59e7f7938854f7b31914d19e6174eb21b is restarting, wait until the container is running at /src/server/node_modules/docker-modem/lib/modem.js:336:17 at getCause (/src/server/node_modules/docker-modem/lib/modem.js:366:7) at Modem.buildPayload (/src/server/node_modules/docker-modem/lib/modem.js:335:5) at IncomingMessage.<anonymous> (/src/server/node_modules/docker-modem/lib/modem.js:303:16) at IncomingMessage.emit (node:events:531:35) at endReadableNT (node:internal/streams/readable:1698:12) at processTicksAndRejections (node:internal/process/task_queues:89:21) { reason: 'container stopped/paused', statusCode: 409, json: { message: 'Container 097cd7cedd297728a2687b09135c89e59e7f7938854f7b31914d19e6174eb21b is restarting, wait until the container is running' } } And what I suspect is the reason, the log of the mqtt service: 1784227505: Error: Unable to open config file /mosquitto/config/mosquitto.conf. Because the .conf file is in /mosquitto/mosquitto.conf… Here is its content: sudo nano /var/lib/gladysassistantfrigate/mosquitto/mosquitto.conf allow_anonymous false connection_messages false password_file /mosquitto/config/mosquitto.passwd listener 1883 And the same, the mosquitto.passwd is not in a config folder… And the mystery remains, no DB file :distorted_face:

Hi @GBoulvin,

Didn’t you make a mistake here:


In yellow, it’s the path in the container that is needed… so normally /var/lib/gladysassistant/gladys-production.db

In my case:

docker run -d \
  --log-opt max-size=10m \
  --restart=no \
  --privileged \
  --network=host \
  --name frigate-test-externe \
  -e NODE_ENV=production \
  -e SERVER_PORT=81 \
  -e TZ=Europe/Paris \
  -e SQLITE_FILE_PATH=/var/lib/gladysassistant/gladys-production-test.db \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /home/pi/Gladys-test:/var/lib/gladysassistant \
  -v /dev:/dev \
  terdious/gladys:Frigate-test-externe

Ahhhhh, if that’s the path in the container, then, yeah, that’s not fair!

It’s all better now! :rofl:

There you go, I managed to switch the myfox to trendnet (but not 100% as there is still a piece of myfox left) and I can have analyses with frigate.
However, I don’t have a 100% operational stream but it works for detection.

I still have a question about the dashboard info: what should I have in image:


However, it detected a cat and a car in the house while I have neither.

:grimacing:

@Terdious, I’m working on preparing an external TAPO integration for the cameras, and Claude has figured out how to decode the proprietary stream to view the video on my battery camera. Below is his explanation:

The C610 Video Protocol

The Starting Point

This camera does not expose RTSP (554) or ONVIF (2020) — both ports are closed. This is what led to the incorrect conclusion that it blocks all local access. In reality, only one port is open: 8800, which uses a proprietary TP-Link protocol, the same one used by the mobile app.

How It Works

The protocol resembles HTTP but is not quite the same. A TCP connection is opened, then:

  1. Authentication Challenge. A first POST /stream request without credentials results in a 401 — which is not a refusal but the challenge itself:

WWW-Authenticate: Digest realm=« TP-Link IP-Camera »,
algorithm=« MD5 », encrypt_type=« 3 », nonce=« … »

The encrypt_type=« 3 » is crucial: it means the password must be hashed in SHA256 before the digest (which remains in MD5). This is the password for the TP-Link cloud account, not a camera account.

  1. Key Exchange. Once authenticated, the camera returns a Key-Exchange header containing a nonce. From this, a key and an AES-128-CBC IV are derived using a recipe imposed by the firmware:

key = MD5(nonce + « : » + SHA256(password))
IV = MD5(username + « : » + nonce)

  1. The Stream. The stream is requested, and the camera sends an endless multipart body, divided by a boundary. Each part contains AES-encrypted MPEG-TS. It must be decrypted, then the 188-byte packets realigned — a boundary can fall in the middle of a packet.

A vital detail: the camera stops transmitting if the client does not regularly acknowledge the received packets.

Super! I’ll look into picking that up for frigate then!!

Thanks @Will_71!!

To avoid degrading the battery too much, you shouldn’t continuously read the video stream, otherwise the battery life drops quickly. For now, for integration, I’m only taking snapshots to get an image every minute. In one morning, I only lost 7% with cloudy weather. We’ll see in the long term if I need to increase the delay between each image.

Oh yes yes, that’s what I was saying earlier! In 5 hours, my battery was completely drained. To use the stream like this, it’s absolutely essential to warn that the camera must be plugged into the mains as I did! (or a battery level condition above 50%!)

So I can even find the battery percentage and motion detection info

It also gave me a button, but I don’t know what it is