Centrale d'alarme filaire ESPHome pour Alarmo, avec secours batterie et mode autonome

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 :

  1. Le secteur, via un module 230 V / 5 V intégré à la carte.
  2. 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.
  3. 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

salut,

juste deux questions :

  • Y a t'il des sorties relais en cas d'alarme pour commander un transmetteur téléphonique externe ?

  • quelle est le coût de réalisation de cette alarme ?

Cela dépend des communes, mais généralement c'est 3 minutes max et 105db

(sur ma sirène extérieur, c'est directement géré par la sirène et réglables avec un potentiomètre sur la carte)

Salut,

Au niveau des relais, il y en a trois, car j'ai trois sirènes (deux intérieures et une extérieure), rien n'empêche de réaffecter un ou plusieurs des relais pour faire autre chose.

A vrai dire le coût globale je n'ai pas trop d'idée, mais voici quelques composants pris sur aliexpress (avant la nouvelle taxe) :

  • fusible réarmable 2€ les 20
  • connecteur USB 1€ les 10
  • alimentation 7.5€ (x2 si besoin du chargeur USB optionnel pour tablette ou autre)
  • multiplexeur analogique 2.35€ les 5
  • carte microcontroleur ESP32-S3 avec ethernet POE 23€
  • chargeur batterie lithium 1€
  • PCB commandé sur JLCPCB 20€ les 5

Tout le reste c'est de la recup

Donc total environ 60€, mais avec pas mal de trucs en multiple