qAlarm 2 (qAlarm2_be, qAlarm2_fe)¶
La nuova console per gli operatori di centrale. Nata per la videosorveglianza: deve sostituire Telegram e la pagina comandi, e in futuro assorbire anche la telemetria del vecchio qAlarm.
Stato¶
- Non è in produzione. Gira solo su Coolify dev (
mdm.dev.qalarm.backend.bsqdev.uk,mdm.dev.qalarm.panel.bsqdev.uk), con deploy automatico a ogni commit sul branchdeploy_dev. - Funzioni presenti (call del 30/09 e del 19/10): allarmi in tempo reale, chat con il cliente via Protexia (anche di gruppo, completata a ottobre), comandi di automazione, inserimento/disinserimento, live streaming delle telecamere, contatti e procedure del cliente.
- Mai provata con impianti reali in modo continuativo. La chat richiede l'aggiornamento dell'app Protexia, non ancora pubblicato.
- Richiesta aperta della centrale: barra sempre visibile con gli impianti offline.
- 28/10/2026: deploy dev del commit
46ba967completato dopo la correzione del nome progetto Compose e l'attivazione di Preserve repository during deployment. Backend, worker, Redis e servizi di supporto avviati; riconoscimento dei container e lettura log Coolify ripristinati. API e handshake Socket.IO verificati. Redis conserva lo stesso volume e 8 chiavi, con backup RDB/AOF verificato. Statorunning:unknown, senza health check Docker. Dettagli e limiti in Coolify dev.
Architettura¶
- Backend (
qAlarm2_be): FastAPI, MySQL/SQLAlchemy, Redis, Socket.IO (AsyncRedisManager), integrazioni con BSQ, midserver, S3 e SQS. Avvio:uv run qalarm run(HTTP) ouv run qalarm run --app main:sio_app(HTTP + Socket.IO). - Worker (
event_worker/): processo separato (uv run qalarm worker) che legge lo streamevent_streamdal Redis del midserver (grupponotification_consumers, consumerworker_1). - Frontend (
qAlarm2_fe): React/Vite servito da nginx. - Dati: usa anche tabelle del database BSQ (utenti, installazioni, notifiche, procedure). L'elenco delle installazioni è la tabella BSQ
installationfiltrata per tipo (il database BSQ contiene anche gli impianti Ajax e degli altri servizi); il collegamento al box èinstallation.code == mac. Quindi mostra anche impianti senza box. Vedi sorgenti-dati-installazioni.md.
Il Redis del midserver diventa quindi critico anche per qAlarm: va reso persistente e raggiungibile solo dalla rete interna.
Problemi noti (Q1–Q9)¶
| # | Problema |
|---|---|
| Q1 | Il frontend costruito da CodeBuild punta a un IP privato di fallback (http://172.16.16.254:8000): il buildspec non passa VITE_API_BASE_URL/VITE_SOCKET_URL. |
| Q2 | Il JWT completo viene stampato nei log a ogni richiesta (app/middlewares/jwt_var.py:19). |
| Q3 | Nessuna build ECR per backend e worker. |
| Q4 | Nessun endpoint di health; /metrics pubblico. |
| Q5 | CORS aperto a tutti con credenziali; Socket.IO con cors_allowed_origins="*". |
| Q6 | Il worker non ritenta gli eventi falliti (niente XAUTOCLAIM) e ha nome consumer fisso. |
| Q7 | Porta host fissa e WebSocket: serve attenzione per l'aggiornamento senza fermo. |
| Q8 | index.html senza no-cache: dopo un deploy i browser possono tenere la versione vecchia. |
| Q9 | prod.yml con IP privati fissi (172.16.16.253, OTLP 192.168.200.202). |
| — | wss://ome.bsqdev.uk/app scritto nel codice del frontend (src/features/cameras/components/OvenPlayerWrapper.tsx:10). |
Documentazione nel repository¶
qAlarm2_be/docs/ (architettura, test di accettazione locali, checklist), qAlarm2_be/AGENTS.md.