Bonjour à tous.
N'ayant jamais trouvé la centrale d'alarme idéale pour mon besoin, je me suis lancé dans sa réalisation.
Objectifs :
- Intégration native à Home Assistant
- Détecteurs câblés en filaire, avec résistance série et parallèle au contact pour détecter les sabotages
- Sirènes filaires pilotées par le contact d'un relais
- Lien avec Home Assistant via Ethernet
- Secours batterie + Ethernet PoE
- Mode autonome en cas de perte de liaison avec Home Assistant
- Contraintes mécaniques, car l'emplacement est limité
- Sortie USB pour recharge d'une tablette Android me servant de visiophone (optionnel)
La centrale est gérée par une carte microcontrôleur basée sur ESP32-S3 avec Ethernet :
Du fait que la carte microcontrôleur soit générique, les entrées ADC sont limitées et insuffisantes pour mon besoin. J'ai donc été obligé d'avoir recours à un multiplexeur analogique :
Le multiplexeur ramène 16 voies analogiques sur une seule entrée ADC. J'en utilise 9 pour les zones (3 détections + 3 autoprotections détecteur + 3 autoprotections sirène) et 3 pour la surveillance des alimentations (secteur, 5 V interne, batterie). Il reste 4 voies libres pour évoluer.
Petit détail qui a son importance : l'entrée ADC utilisée est sur l'ADC2 de l'ESP32, normalement inutilisable dès que le Wi-Fi est actif. Comme la centrale ne communique que par Ethernet et que le Wi-Fi n'est jamais initialisé, ça ne pose aucun problème. En revanche, impossible d'ajouter du Wi-Fi en secours par la suite sans revoir ce point.
Le câblage des détecteurs : boucle à double équilibrage
C'est le cœur de la détection de sabotage, et ça mérite un petit schéma :
Centrale ──[ 2k2 ]──┬── contact NF du détecteur ──┐
│ │
[ 4k7 ] │
│ │
Centrale ───────────┴────────────────────────────┴
Côté centrale, chaque entrée est simplement tirée au 3,3 V par une résistance de 10 k. La boucle du détecteur forme donc un pont diviseur, et selon ce qui se passe sur la ligne on lit quatre tensions bien distinctes :
| État de la ligne | Résistance vue | Tension lue | Signification |
|---|---|---|---|
| Fils court-circuités | 0 Ω | 0,00 V | Sabotage |
| Contact fermé | 2k2 | 0,60 V | Repos |
| Contact ouvert | 6k9 | 1,35 V | Détection |
| Fil sectionné | ∞ | 3,30 V | Sabotage |
Tout l'intérêt est là : un intrus qui coupe le câble, ou qui le shunte pour neutraliser le contact, ne peut pas simuler l'état de repos, puisque celui-ci exige une résistance précise de 2k2. Les deux résistances se posent dans le boîtier du détecteur, au plus près du contact.
Le même principe est appliqué aux autoprotections des détecteurs et à celles des sirènes : au total 9 boucles surveillées de façon identique.
Le firmware traduit en permanence chaque tension en un état lisible — Court-circuit, Repos, Détection, Ouvert, ou Inconnu si la valeur tombe entre deux plages. Cet état « Inconnu » est très pratique au montage : il signale immédiatement une boucle mal dimensionnée ou une résistance de ligne excessive.
À noter : pour l'instant je n'ai pas encore posé les résistances dans mes détecteurs, donc la détection de court-circuit est volontairement désactivée côté logiciel. Elle sera réactivée une fois le câblage terminé.
Le pilotage des sirènes
Les sirènes sont commandées par des contacts de relais, avec une convention volontairement inversée :
| Relais | Sirène |
|---|---|
| Bobine alimentée, contact fermé | silencieuse |
| Bobine relâchée, contact ouvert | hurle |
Autrement dit, le déclenchement se fait à l'ouverture des relais. À la mise sous tension, les relais se ferment et la centrale est silencieuse. Le connecteur de chaque sirène expose le commun, le NO et le NC, donc chacun câble comme il le souhaite.
L'intérêt est évident : une coupure d'alimentation de la carte, un plantage du microcontrôleur, un fil de commande arraché ou même une carte retirée de son support déclenchent les sirènes. Le défaut est toujours bruyant, jamais silencieux. Le prix à payer, c'est une consommation permanente des trois bobines, à intégrer dans le calcul d'autonomie.
Trois sorties sirène indépendantes sont disponibles, pilotables séparément depuis Home Assistant.
Alimentation et secours
Trois sources se relaient sans coupure :
- Le secteur, via un module 230 V / 5 V intégré à la carte.
- Une batterie lithium 3S, chargée en permanence avec un circuit dédié spécialisé, qui reprend la main automatiquement par simple basculement passif — pas de circuit de commutation, donc rien qui puisse échouer.
- Le PoE, si l'installation le permet.
La batterie alimente également les détecteurs et les sirènes, chacun derrière son propre fusible réarmable pour qu'un court-circuit sur une ligne ne fasse pas tomber toute la centrale.
Trois tensions sont mesurées en continu par le multiplexeur : la sortie de l'alimentation secteur, le 5 V interne et la tension batterie. De quoi construire des alertes « perte secteur » et « batterie faible » — c'est la prochaine étape sur ma liste, ces mesures ne sont pas encore remontées à Home Assistant.
La sortie USB de recharge tablette est alimentée par un module secteur séparé et n'est pas secourue. C'est volontaire : hors de question de vider la batterie de l'alarme pour recharger une tablette. Elle s'appuie sur un contrôleur de port de charge USB dédié, qui gère la négociation sur les lignes de données pour que la tablette accepte de tirer le courant maximum au lieu de se limiter à 500 mA.
Logique de fonctionnement
En marche normale
Home Assistant a la main sur la centrale. L'ESP32 remonte simplement l'état de ses 9 boucles, et Alarmo applique sa logique : délais d'entrée et de sortie, zones temporisées, codes utilisateur, notifications. C'est lui qui commande le déclenchement des sirènes.
La centrale, de son côté, réplique en permanence l'état de l'entité alarm_control_panel.alarmo dans un capteur interne. Cette copie locale est la clé du mode autonome : elle reste en mémoire quand la liaison tombe.
En cas de perte du lien avec Home Assistant
Un capteur de statut détecte la rupture de la liaison au bout de quelques secondes. La centrale passe alors en mode autonome, mais uniquement si la dernière consigne connue d'Alarmo n'était pas « désarmé ». Si l'alarme était désarmée au moment de la coupure, elle le reste, et rien ne se déclenche.
En mode autonome, la logique est volontairement simple : toute détection ou tout sabotage sur une zone déclenche les trois sirènes.
Un point important côté configuration : il faut désactiver le redémarrage automatique d'ESPHome en cas de perte de l'API. Par défaut, la carte reboote au bout de 15 minutes sans client connecté — ce qui effacerait l'état mémorisé de l'alarme et casserait tout le mode autonome, précisément au pire moment.
De la même façon, le mode autonome ne s'arme qu'un certain temps (à définir) après le démarrage de la carte. Sans cette temporisation, la centrale déclencherait systématiquement au boot, puisque dans les premiers instants le lien n'est pas encore établi et l'état de l'alarme pas encore connu.
La temporisation des sirènes
Une fois les sirènes déclenchées, un verrou de 30 secondes (à ajuster) se réarme tant que la détection persiste. Concrètement :
t=0s détection → sirènes ON, verrou à 30 s
t=0→8s détection maintenue → verrou repoussé en continu
t=8s fin de détection → verrou figé à t=38s, sirènes toujours ON
t=38s verrou expiré → relais refermés, silence
Les sirènes retentissent donc au minimum 30 secondes après la dernière détection. Sans ce mécanisme, un détecteur de mouvement qui repasse au repos au bout de 2 secondes produirait un simple « bip » au lieu d'une alarme.
Quand Home Assistant revient, la centrale sort du mode autonome et rend la main. Une automatisation côté HA se charge de remettre les relais dans le bon état à la reconnexion.
Retours visuels et accès local
Trois LEDs en façade :
- Alimentation — la centrale est sous tension et le firmware tourne
- Défaut — le lien avec Home Assistant est rompu et la centrale est passée en mode autonome
- Alarme — les sirènes sont en cours de déclenchement par la logique autonome
Un serveur web intégré, protégé par identifiant et mot de passe, permet de consulter toutes les entrées et de forcer les sorties depuis un navigateur. C'est le plan de repli pour intervenir quand Home Assistant est justement hors service, et c'est aussi très pratique au moment du réglage des seuils. Il sera probablement désactivé à la fin de la mise au point
Ce qu'il reste à faire
- Poser les résistances d'équilibrage dans les détecteurs et réactiver la détection de court-circuit
- Remonter les mesures d'alimentation vers Home Assistant, avec alertes perte secteur et batterie faible
- Intégrer les autoprotections des sirènes à la logique autonome (elles sont mesurées, mais pas encore prises en compte hors ligne)
- Ajouter une durée maximale de retentissement — pour l'instant rien ne borne la durée totale, et il faut de toute façon vérifier ce qu'impose la réglementation pour les sirènes extérieures
- Publier le projet sur Github avec exemple de code, schémas / routage Kicad, boitier de montage et photos

