Files
haos-project/readme.md
T

369 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🏠 HAOS Infrastructure domotique auto-hébergée & sécurisée
> Plateforme domotique personnelle basée sur **Home Assistant OS**, conçue comme un environnement auto-hébergé de supervision IoT, d'automatisation avancée et d'architecture réseau sécurisée.
---
## 📋 Vue d'ensemble
Ce projet est une **infrastructure domotique opérationnelle** tournant 24/7 sur un mini-PC dédié. Il repose sur **Home Assistant OS** et combine automatisations conditionnelles, supervision IoT locale et sécurisation réseau avancée — sans aucune dépendance cloud imposée.
**Usages principaux :**
- Surveillance et sécurisation du logement (alarme, vidéo, détection fuite)
- Automatisation du quotidien (chauffage, présence, éclairage, ventilation)
- Optimisation énergétique (suivi Enedis, pilotage des radiateurs)
- Expérimentation IoT maîtrisée (capteurs custom ESPHome/ESP32, IR blaster)
- Notifications en temps réel via **bot Telegram**
---
## 🧱 Architecture générale
```text
┌──────────────────────────────────┐
│ Mini-PC dédié │
│ Home Assistant OS │
│ SSD / 24h/24 │
└────────────┬─────────────────────┘
┌──────────────────────┼───────────────────────┐
│ │ │
┌────────▼────────┐ ┌────────▼─────────┐ ┌────────▼─────────┐
│ Sécurité │ │ IoT & Protocoles │ │ Accès & Admin │
│ │ │ │ │ │
│ • Alarmo │ │ • Zigbee2MQTT │ │ • Cloudflared │
│ • Frigate (NVR) │ │ • ESPHome / ESP32 │ │ (CF Tunnel) │
│ • Détection IA │ │ • Heatzy │ │ • WireGuard VPN │
│ • Bot Telegram │ │ • Enedis │ │ (sur Proxmox) │
│ • Clavier Frient│ │ • IR Blaster │ │ • SSH / Samba │
└─────────────────┘ └───────────────────┘ └──────────────────┘
```
---
## 🖥️ Infrastructure matérielle
| Composant | Détail |
| -------------- | --------------------------------------------- |
| Machine | Mini-PC dédié |
| Stockage | SSD (fiabilité & performances) |
| Hyperviseur | Home Assistant OS (natif) |
| Coordinateur | Sonoff Zigbee 3.0 USB Dongle Plus V2 (ember) |
| Fonctionnement | 24/7, environnement isolé |
---
## 📡 Équipements Zigbee supervisés
| Nom | Type | Usage |
| --------------- | ----------------- | ------------------------------------ |
| ir blaster 1 | Blaster IR | Pilotage ventilateur & diffuseur |
| ir blaster 2 | Blaster IR | Réserve / extension |
| sirene zigbee 1 | Sirène | Alarme intrusion (mode burglar) |
| capteur fuite 1 | Capteur d'eau | Détection fuite salle de bain |
| Lampe rouge | Ampoule connectée | Signalisation |
| Bouton entree | Bouton Zigbee | Toggle lampadaire entrée |
| Clavier frient | Clavier à code | Armement/désarmement alarme physique |
| Lampesdb1/2 | Ampoule connectée | Éclairage salle de bain |
| bouton sdb | Bouton Zigbee | Toggle lumières salle de bain |
---
## ⚙️ Services & Add-ons déployés
### 🔐 Sécurité Accès distant
#### Cloudflared (Tunnel sortant)
Accès HTTPS distant sans exposition de port sur le routeur.
- Tunnel sortant chiffré vers Cloudflare
- Nom de domaine personnel avec HTTPS natif
- Aucune IP publique exposée, surface d'attaque réduite
#### WireGuard VPN
Accès administration via le serveur WireGuard hébergé sur le Proxmox (LXC dédié sur un second mini-PC — cf. `pve-project`).
- SSH et interfaces admin (Zigbee2MQTT, Frigate) accessibles via VPN uniquement
- Le seul port WAN ouvert (UDP 51820) est sur le Proxmox, pas sur HAOS
- HAOS ne fait tourner aucun serveur VPN — le client VPN obtient simplement un accès au LAN, qui inclut HAOS
---
### 🚨 Sécurité du logement
#### Alarmo Système d'alarme personnalisé
Extension d'alarme intégrée nativement à Home Assistant, pilotée via Telegram et clavier physique.
- Armement / désarmement (présence, mode nuit, absence, vacances)
- Clavier à code physique **Frient** pour armement/désarmement local
- Détection d'intrusion avec notifications instantanées via Telegram
- Snapshots et vidéos automatiques (caméras) envoyés sur déclenchement
- Extinction automatique des lumières à l'armement
- Activation de la lumière d'entrée au retour (désarmement)
- Activation Frigate détection uniquement quand alarme armée
#### Frigate NVR intelligent local
Vidéosurveillance avec détection d'objets par intelligence artificielle.
- Traitement local (aucun cloud vidéo)
- Caméras : principale et secondaire (avec mode privacy)
- Réduction des faux positifs par reconnaissance d'objets
- Détection activée/désactivée automatiquement selon l'état de l'alarme
- Preuves vidéo locales en cas d'incident
#### Bot Telegram Notifications & télécommande
Intégration Telegram bidirectionnelle pour la supervision et le contrôle à distance.
- Alertes instantanées : déclenchement alarme, fuite d'eau, armement/désarmement
- Envoi de photos et vidéos des caméras sur événement
- Commande `/garde_alarme` : envoi en boucle de snapshots (caméras)
- Commande `/arme_alarme` : armement à distance (mode vacances)
- Commande `/desactive_alarme` : désarmement à distance
---
### 🌡️ Confort & Énergie
#### Heatzy Gestion du chauffage
Pilotage dynamique de radiateurs électriques connectés selon des plages horaires fixes.
- Chauffe matin : 06h00 → 07h40 (mode heat)
- Chauffe soir : 18h00 → 21h00 (mode heat)
- Retour en mode `auto` hors plages
#### Enedis Suivi énergétique intelligent
Intégration officielle du compteur Linky via l'API Enedis.
- Visualisation de la consommation quotidienne
- Analyse des pics et corrélation chauffage / présence
- Identification des équipements énergivores
---
### 💡 Éclairage & Automatisations ambiantes
- **Lumière automatique** : allumage automatique sur détection de mouvement (PIR), extinction après 5 min
- **Lampadaire entrée** : toggle via bouton Zigbee + allumage automatique au retour
- **Lumières SDB** : toggle via bouton Zigbee dédié
- **Suspension** : allumage à 07h00, extinction à 22h00
- **Plantes (photosynthèse)** : lumières à 100% de luminosité quand alarme armée + 5 min (éclairage absent)
- **Lampes off à l'armement** : extinction de toutes les lumières au départ
#### Scènes lumières avancées
- **Sunset lamp** : scène lumière couchant de soleil via IR blaster (on/off)
- **LED bar** : pilotage barre LED décorative via IR (on/off)
---
### 🌬️ Ventilation & Domotique IR
Pilotage d'un ventilateur via **IR Blaster Zigbee** avec codes IR personnalisés.
- Toggle on/off
- Contrôle de la puissance (mode)
- Rotation automatique
- Intégration dans le script `toggle_ventilo`
#### Diffuseur d'huiles essentielles
Pilotage via IR Blaster avec séquences de codes pour allumage/arrêt.
---
### 🌿 IoT personnalisé ESPHome
#### Capteur d'humidité (ESP32)
Capteur de sol développé sur mesure via ESPHome sur microcontrôleur ESP32.
- Mesure d'humidité du sol en temps réel
- Historique graphique dans Home Assistant
- Notifications si sol sec
- Architecture extensible vers l'arrosage automatisé
---
### 📡 Réseau Zigbee local
Coordinateur : **Sonoff Zigbee 3.0 USB Dongle Plus V2** — géré via **Zigbee2MQTT** (adaptateur `ember`, canal 11).
- Aucun cloud tiers — données traitées localement
- Broker MQTT : **Mosquitto** (add-on natif HAOS)
- Proxy HTTP configuré pour Cloudflare (`trusted_proxies: 172.30.33.0/24`)
- Protocole ouvert, compatible multi-fabricants
---
## 🔐 Sécurité & Architecture
### Principes appliqués
| Principe | Mise en œuvre |
| ------------------------------ | ------------------------------------------------------------------ |
| Exposition minimale | Aucun port ouvert sur le routeur (WAN) côté HAOS |
| Accès distant sécurisé | Tunnel sortant Cloudflared uniquement |
| Administration cloisonnée | SSH et Samba accessibles via VPN uniquement (VPN hébergé sur Proxmox) |
| Traitement local des données | Vidéo (Frigate), Zigbee et capteurs ESPHome traités en local |
| Principe du moindre privilège | Services limités au strict nécessaire |
| Surveillance continue | Logs réguliers, mises à jour et sauvegardes automatisées |
| Privacy caméra | Switch dédié pour activer/désactiver le mode privacy de la caméra |
### Architecture Zero-Trust domestique
```text
┌──────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐
│ Accès distant │ │ IoT local │ │ Administration │
│ │ │ │ │ │
│ (Cloudflare Tunnel, │ │ (Zigbee2MQTT, │ │ (WireGuard VPN sur │
│ HTTPS natif) │ │ ESPHome, Frigate) │ │ Proxmox, SSH/Samba)│
└──────────────────────┘ └──────────────────────┘ └──────────────────────┘
Chiffré 100% local VPN only (hors HAOS)
```
---
## ⚡ Automatisations
Les automatisations sont organisées par domaine fonctionnel :
### 🚨 Alarme & Sécurité
| Alias | Déclencheur | Action principale |
| ----------------------------- | ---------------------------------- | --------------------------------------------------- |
| Alarme vacances | Alarme déclenchée (mode vacances) | Notification mobile (famille) |
| Question alarme | Alarme déclenchée | Message Telegram avec bouton désactivation |
| Snapshots caméra principale | Alarme déclenchée | 3 photos caméra principale + vidéo 10s → Telegram |
| Snapshots caméra secondaire | Alarme déclenchée | 3 photos caméra secondaire + vidéo 10s → Telegram |
| Surveillance à distance | Commande `/garde_alarme` | Photos toutes caméras en boucle → Telegram |
| Message telegram amorçage | Alarme armée (away) | Message de confirmation Telegram |
| Notif alarme désactivée | Alarme désarmée | Notification Telegram |
| desactive alarme telegram | Commande `/desactive_alarme` | Désarmement Alarmo |
| button arm | Commande `/arme_alarme` | Armement mode vacances |
| Alarme zigbee start/stop | `input_boolean.sirene_meian` | Publication MQTT sirène (burglar/stop) |
| Contrôle Sirène Meian | État `input_boolean.sirene_meian` | Toggle sirène via MQTT (template) |
| Clavier physique avec Alarmo | Clavier physique Frient | Armement/désarmement avec code PIN |
| toggle detect frigate | État alarme | Active/désactive détection Frigate |
| lampes off amorcage | Alarme → arming | Extinction de toutes les lumières |
### 💡 Éclairage
| Alias | Déclencheur | Action principale |
| -------------------------- | -------------------------------- | ------------------------------------------ |
| Lumière automatique auto | Détection mouvement PIR | Allumage switch + extinction après 5min |
| Bouton lampadaire | Action bouton entrée (MQTT) | Toggle lampadaire entrée |
| Lampe entrée auto | Alarme désarmée (retour) | Allumage lampadaire entrée |
| Bouton lampes sdb | Action bouton SDB (MQTT) | Toggle lumières salle de bain (x2) |
| Suspension on/off | Heure (07:00 / 22:00) | On/Off lumière suspension |
| Plantes photosynthèse | Alarme armed\_away + 5min | Lumières plantes à 100% |
| sunset lamp | `input_boolean.sunset_switch` | Scène lumière couchant de soleil (IR) |
| led bar | `input_boolean.led_bar_switch` | Toggle barre LED (IR) |
### 🌡️ Chauffage
| Alias | Déclencheur | Action |
| --------------------- | ------------- | ------------------------ |
| start chauffe matin | 06:00 | Radiateurs → mode heat |
| stop chauffe matin | 07:40 | Radiateurs → mode auto |
| start chauffe soir | 18:00 | Radiateurs → mode heat |
| stop chauffe soir | 21:00 | Radiateurs → mode auto |
### 🌬️ Ventilation & IR
| Alias | Déclencheur | Action |
| ---------------- | --------------------------------- | --------------------------- |
| ventilo | `input_boolean.ventilo_switch` | Script toggle ventilateur |
| ventilo toggle | Manuel | Code IR toggle |
| ventilo power | Manuel | Code IR power |
| ventilo rotate | Manuel | Code IR rotation |
| ventilo mode | Manuel | Code IR changement mode |
### 🛁 Capteurs & Sécurité passive
| Alias | Déclencheur | Action |
| ------------------------------- | ---------------------------------------- | ------------------------------- |
| fuite sdb | Capteur humidité (20s moist) | Alerte Telegram fuite d'eau |
| Privacy caméra | `input_boolean.camera_privacy_switch` | Toggle mode privacy caméra |
| diffuseur huiles essentielles | `input_boolean.diffuseur_switch` | Séquence IR on/off diffuseur |
---
## 📁 Contenu du dépôt
```text
haos-project/
├── readme.md # Ce fichier
├── docs/
│ ├── architecture.md # Schémas et choix d'architecture
│ ├── network-diagram.md # Plan réseau (segments IoT, VPN, tunnel)
│ ├── automations-overview.md # Vue d'ensemble des automatisations
│ └── security-policy.md # Politique de sécurité appliquée
└── configs/
├── homeassistant/
│ └── configuration.yaml.example # Config principale HAOS (anonymisée)
├── zigbee2mqtt/
│ └── configuration.yaml.example # Config Zigbee2MQTT (anonymisée)
├── alarmo/
│ └── automations-alarm.yaml # Automatisations alarme (anonymisées)
├── esphome/
│ └── humidity-sensor.yaml # Config capteur ESP32 humidité
└── frigate/
└── config.yaml.example # Template config Frigate NVR
```
---
## 🧠 Compétences illustrées
**Infrastructure & Réseau**
- Hébergement auto-géré sur matériel dédié (Home Assistant OS natif)
- Mise en place VPN WireGuard et tunnel sortant Cloudflared
- Administration distante sécurisée sans exposition WAN
- Gestion multi-protocoles (Zigbee, Wi-Fi, HTTP, MQTT, IR)
- Configuration Mosquitto MQTT broker et Zigbee2MQTT
**Cybersécurité**
- Architecture Zero-Trust appliquée à un environnement domestique
- Suppression des dépendances cloud sur les données sensibles (vidéo, capteurs)
- Segmentation logique des équipements IoT
- Réduction de la surface d'attaque (aucun port WAN sur HAOS, moindre privilège)
- Privacy caméra avec switch dédié
**Développement & Automatisation**
- Développement de capteurs custom avec ESPHome / ESP32
- Conception d'automatisations complexes (conditionnelles, répétitions, délais, templates Jinja2)
- Intégrations API officielles (Enedis, Heatzy, Telegram Bot)
- Pilotage IR avancé (ventilateur, diffuseur, éclairage ambiant)
- Blueprint Zigbee (Clavier physique avec Alarmo)
---
## ⚠️ Sécurité du dépôt
> Ce dépôt est **public**. Aucune clé privée, token, mot de passe, adresse IP réelle, clé réseau Zigbee, prénom ou identifiant sensible n'est commité. Les fichiers de configuration sont systématiquement **anonymisés ou fournis sous forme de templates**.
---
## 📌 À propos
Projet personnel en évolution continue, combinant domotique opérationnelle, sécurité réseau et expérimentation IoT. Utilisé au quotidien comme infrastructure réelle, avec un impact direct sur la sécurité du logement, le confort et la maîtrise énergétique.
---
*Infrastructure opérationnelle — évolutions régulières selon les intégrations et expérimentations en cours.*