first
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
# Architecture – HAOS Project
|
||||
|
||||
## Vue d'ensemble
|
||||
|
||||
L'infrastructure repose sur Home Assistant OS installé en natif sur un mini-PC dédié, fonctionnant 24h/24.
|
||||
|
||||
## Stack technique
|
||||
|
||||
| Couche | Technologie |
|
||||
| ------------------- | ------------------------------------ |
|
||||
| OS domotique | Home Assistant OS (HAOS) |
|
||||
| Broker MQTT | Mosquitto (add-on officiel) |
|
||||
| Réseau Zigbee | Zigbee2MQTT + Sonoff Dongle Plus V2 |
|
||||
| NVR | Frigate |
|
||||
| Alarme | Alarmo |
|
||||
| Tunnel sortant | Cloudflared (add-on officiel) |
|
||||
| VPN | WireGuard (add-on officiel) |
|
||||
| Capteurs custom | ESPHome (add-on officiel) |
|
||||
| Notifications | Telegram Bot API |
|
||||
| Énergie | Intégration Enedis officielle |
|
||||
| Chauffage | Heatzy (intégration HACS) |
|
||||
|
||||
## Flux de données
|
||||
|
||||
```
|
||||
Équipements Zigbee
|
||||
│
|
||||
▼ (radio Zigbee 2.4GHz)
|
||||
Sonoff USB Dongle
|
||||
│
|
||||
▼ (USB)
|
||||
Zigbee2MQTT ──► Mosquitto MQTT ──► Home Assistant
|
||||
│
|
||||
├── Alarmo
|
||||
├── Frigate (RTSP)
|
||||
├── ESPHome (Wi-Fi)
|
||||
├── Heatzy (Cloud API)
|
||||
└── Enedis (Cloud API)
|
||||
```
|
||||
|
||||
## Accès réseau
|
||||
|
||||
```
|
||||
Internet
|
||||
│
|
||||
▼ (HTTPS sortant uniquement)
|
||||
Cloudflare
|
||||
│
|
||||
▼ (tunnel chiffré)
|
||||
Cloudflared add-on
|
||||
│
|
||||
▼
|
||||
Home Assistant (LAN)
|
||||
│
|
||||
└── WireGuard VPN (admin SSH/Samba uniquement)
|
||||
```
|
||||
|
||||
## Principes de sécurité
|
||||
|
||||
- **Zéro port ouvert** sur la box/routeur
|
||||
- **Tunnel sortant** uniquement (Cloudflared) pour l'accès web
|
||||
- **VPN WireGuard** obligatoire pour toute administration (SSH, Samba)
|
||||
- **Données locales** : vidéo, Zigbee, capteurs ESPHome restent sur le réseau local
|
||||
- **Moindre privilège** : chaque service n'accède qu'à ce dont il a besoin
|
||||
@@ -0,0 +1,84 @@
|
||||
# Automatisations – Vue d'ensemble
|
||||
|
||||
## Statistiques
|
||||
|
||||
| Domaine | Nombre d'automatisations |
|
||||
| ----------------- | ------------------------ |
|
||||
| Alarme & Sécurité | 15 |
|
||||
| Éclairage | 9 |
|
||||
| Chauffage | 4 |
|
||||
| Ventilation & IR | 5 |
|
||||
| Capteurs | 3 |
|
||||
| **Total** | **~36 actives** |
|
||||
|
||||
> Des scripts et scènes additionnels complètent les automatisations pour atteindre plus de 50 logiques conditionnelles.
|
||||
|
||||
---
|
||||
|
||||
## Alarme & Sécurité
|
||||
|
||||
| Fonction | Déclencheur | Action |
|
||||
| --------------------------------- | --------------------------------- | ------------------------------------------------ |
|
||||
| Notification déclenchement | Alarme triggered | Message + bouton désactivation (bot Telegram) |
|
||||
| Notification absence prolongée | Alarme triggered (vacation) | Notification contacts d'urgence (mobile) |
|
||||
| Snapshots caméra principale | Alarme triggered | 3 photos + vidéo 10s → Telegram |
|
||||
| Snapshots caméra secondaire | Alarme triggered | 3 photos + vidéo 10s → Telegram |
|
||||
| Photos à la demande | Commande Telegram | Envoi en boucle des caméras → Telegram |
|
||||
| Notification armement | armed_away | Confirmation armement → Telegram |
|
||||
| Notification désarmement | disarmed | Confirmation désarmement → Telegram |
|
||||
| Désarmement Telegram | Commande bot Telegram | Désarmement Alarmo |
|
||||
| Armement Telegram | Commande bot Telegram | Armement mode vacation |
|
||||
| Contrôle sirène Zigbee | input_boolean sirène | MQTT → sirène mode burglar/stop (template) |
|
||||
| Clavier physique (blueprint) | Clavier Zigbee à code | Arm/Disarm/Night avec code PIN |
|
||||
| Détection Frigate selon alarme | État alarme (any) | Active/désactive détection caméras |
|
||||
| Extinction lumières à l'armement | disarmed → arming | Extinction de toutes les lumières |
|
||||
| Éclairage plantes en absence | armed_away + 5 min | Lumières plantes à 100% |
|
||||
|
||||
---
|
||||
|
||||
## Éclairage
|
||||
|
||||
| Fonction | Déclencheur | Action |
|
||||
| ------------------------------- | ---------------------------------- | ---------------------------------- |
|
||||
| Lumière auto sur mouvement | Capteur PIR | Allumage + extinction après 5 min |
|
||||
| Toggle lampe via bouton Zigbee | Action bouton Zigbee (single) | Toggle lampe |
|
||||
| Allumage automatique au retour | Alarme disarmed (retour) | Allumage lampe entrée |
|
||||
| Toggle lumières via bouton | Action bouton Zigbee (single) | Toggle groupe de lumières |
|
||||
| Allumage automatique matin | Heure fixe (matin) | Allumage lumière programmée |
|
||||
| Extinction automatique soir | Heure fixe (soir) | Extinction lumière programmée |
|
||||
| Éclairage plantes en absence | armed_away + 5 min | Lumières plantes 100% |
|
||||
| Scène lumière ambiante | input_boolean switch | Scène IR on/off |
|
||||
| Toggle barre LED | input_boolean switch | Toggle LED via IR |
|
||||
|
||||
---
|
||||
|
||||
## Chauffage
|
||||
|
||||
| Fonction | Déclencheur | Action |
|
||||
| --------------------- | ----------------- | ----------------------- |
|
||||
| Chauffe matin (on) | Heure fixe | Radiateurs → heat |
|
||||
| Chauffe matin (off) | Heure fixe | Radiateurs → auto |
|
||||
| Chauffe soir (on) | Heure fixe | Radiateurs → heat |
|
||||
| Chauffe soir (off) | Heure fixe | Radiateurs → auto |
|
||||
|
||||
---
|
||||
|
||||
## Ventilation & IR Blaster
|
||||
|
||||
| Fonction | Déclencheur | Action |
|
||||
| ------------------ | ------------------------ | ----------------------- |
|
||||
| Toggle ventilateur | input_boolean switch | Script toggle IR |
|
||||
| Toggle on/off | Manuel (script) | Code IR on/off |
|
||||
| Puissance | Manuel (script) | Code IR power |
|
||||
| Rotation | Manuel (script) | Code IR rotation |
|
||||
| Mode | Manuel (script) | Code IR mode |
|
||||
|
||||
---
|
||||
|
||||
## Capteurs & Divers
|
||||
|
||||
| Fonction | Déclencheur | Action |
|
||||
| --------------------------- | ----------------------------- | ----------------------------------- |
|
||||
| Alerte fuite d'eau | Capteur humidité (20s) | Notification Telegram |
|
||||
| Privacy caméra | input_boolean switch | Toggle mode privacy caméra |
|
||||
| Diffuseur arômes | input_boolean switch | Séquence IR on/off diffuseur |
|
||||
@@ -0,0 +1,171 @@
|
||||
# Diagramme réseau – HAOS Project
|
||||
|
||||
## Vue d'ensemble
|
||||
|
||||
```text
|
||||
INTERNET
|
||||
│
|
||||
┌──────────────┴──────────────┐
|
||||
│ │
|
||||
┌─────────▼─────────┐ ┌───────────▼───────────┐
|
||||
│ Cloudflare CDN │ │ Admin (mobile / PC) │
|
||||
│ (DNS + Tunnel) │ │ Client WireGuard │
|
||||
└─────────┬─────────┘ └───────────┬───────────┘
|
||||
│ Tunnel chiffré (sortant) │ UDP :51820
|
||||
┌─────────▼─────────────────────────────▼───────────┐
|
||||
│ Box / Routeur │
|
||||
│ 192.168.1.1 │
|
||||
│ 1 seul port ouvert : UDP 51820 (WireGuard) │
|
||||
└──────────────────────┬─────────────────────────────┘
|
||||
│ LAN 192.168.1.0/24
|
||||
┌─────────────────┼──────────────────┐
|
||||
│ │ │
|
||||
┌─────────▼────────┐ ┌─────▼──────────┐ ┌───▼──────────────────┐
|
||||
│ Mini-PC Proxmox │ │ Mini-PC HAOS │ │ Équipements IoT │
|
||||
│ 192.168.1.Y │ │ 192.168.1.X │ │ (Wi-Fi / Zigbee) │
|
||||
│ │ │ │ │ │
|
||||
│ ┌──────────────┐ │ │ ┌────────────┐ │ │ • Caméras IP (RTSP) │
|
||||
│ │ WireGuard │ │ │ │Home Asst. │ │ │ • ESP32 ESPHome │
|
||||
│ │ LXC :51820 │ │ │ │:8123 │ │ │ • Radiateurs Heatzy │
|
||||
│ └──────┬───────┘ │ │ ├────────────┤ │ └──────────────────────┘
|
||||
│ │ VPN │ │ │Mosquitto │ │
|
||||
│ │tunnel │ │ │MQTT :1883 │ │ ┌──────────────────────┐
|
||||
│ ▼ LAN │ │ ├────────────┤ │ │ Réseau Zigbee │
|
||||
│ ┌──────────────┐ │ │ │Zigbee2MQTT │◄├──│ Canal 11 / 2.4GHz │
|
||||
│ │ Apache │ │ │ │UI :8099 │ │ │ │
|
||||
│ │ Guacamole │ │ │ ├────────────┤ │ │ • Sirène │
|
||||
│ │ (CF Tunnel) │ │ │ │Frigate NVR │ │ │ • Capteur fuite │
|
||||
│ └──────────────┘ │ │ │:5000/:1984 │ │ │ • Boutons Zigbee │
|
||||
│ │ │ ├────────────┤ │ │ • IR Blasters │
|
||||
│ (cf. pve-project)│ │ │Cloudflared │ │ │ • Clavier à code │
|
||||
└──────────────────┘ │ │(tunnel out)│ │ │ • Ampoules │
|
||||
│ └────────────┘ │ └──────────────────────┘
|
||||
└────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Rôles des machines
|
||||
|
||||
| Machine | IP | Rôle |
|
||||
| -------------- | ------------- | -------------------------------------------------- |
|
||||
| Box / Routeur | 192.168.1.1 | Passerelle, NAT, 1 port ouvert (UDP 51820) |
|
||||
| Mini-PC Proxmox| 192.168.1.Y | WireGuard VPN (LXC), Guacamole, OPNsense, lab |
|
||||
| Mini-PC HAOS | 192.168.1.X | Home Assistant OS + tous les services domotiques |
|
||||
|
||||
> Le serveur WireGuard est hébergé sur le **Proxmox** (LXC dédié), pas sur HAOS.
|
||||
> L'accès VPN donne un accès au LAN complet, donc aussi à HAOS et ses interfaces d'admin.
|
||||
|
||||
---
|
||||
|
||||
## Adressage réseau
|
||||
|
||||
| Service | Hôte | Port | Protocole | Accessible depuis |
|
||||
| ------------------- | -------------- | ---------- | ---------- | ----------------------- |
|
||||
| Home Assistant | 192.168.1.X | 8123 | HTTP/WS | LAN + CF Tunnel |
|
||||
| Mosquitto MQTT | 192.168.1.X | 1883 | MQTT (TCP) | LAN uniquement |
|
||||
| Zigbee2MQTT UI | 192.168.1.X | 8099 | HTTP | LAN + VPN |
|
||||
| Frigate (UI) | 192.168.1.X | 5000 | HTTP | LAN + VPN |
|
||||
| Frigate (RTSP out) | 192.168.1.X | 1984 | RTSP | LAN uniquement |
|
||||
| WireGuard VPN | 192.168.1.Y | 51820 | UDP | WAN (port ouvert) |
|
||||
| Guacamole | 192.168.1.Y | — | HTTPS | CF Tunnel (Proxmox) |
|
||||
| Caméras IP | 192.168.1.X+n | 554 | RTSP | LAN uniquement |
|
||||
| ESP32 ESPHome | 192.168.1.X+n | — | mDNS/HTTP | LAN uniquement |
|
||||
|
||||
---
|
||||
|
||||
## Flux réseau détaillés
|
||||
|
||||
### Accès HAOS distant (HTTPS)
|
||||
|
||||
```text
|
||||
Utilisateur
|
||||
│
|
||||
▼ HTTPS :443
|
||||
Cloudflare Edge
|
||||
│
|
||||
▼ Tunnel QUIC chiffré (connexion sortante depuis HAOS)
|
||||
Cloudflared add-on (Mini-PC HAOS)
|
||||
│
|
||||
▼ HTTP local
|
||||
Home Assistant :8123
|
||||
```
|
||||
|
||||
### Administration SSH / Zigbee2MQTT / Frigate
|
||||
|
||||
```text
|
||||
Admin
|
||||
│
|
||||
▼ UDP :51820
|
||||
WireGuard LXC (Proxmox, 192.168.1.Y)
|
||||
│
|
||||
▼ Tunnel VPN → LAN 192.168.1.0/24
|
||||
Mini-PC HAOS :8099 (Z2M) / :5000 (Frigate) / SSH
|
||||
```
|
||||
|
||||
### Flux Zigbee → Home Assistant
|
||||
|
||||
```text
|
||||
Équipement Zigbee
|
||||
│ Radio 2.4GHz
|
||||
▼
|
||||
Sonoff USB Dongle (coordinateur, USB sur HAOS)
|
||||
│ Série USB
|
||||
▼
|
||||
Zigbee2MQTT (add-on HAOS)
|
||||
│ MQTT publish
|
||||
▼
|
||||
Mosquitto :1883 (add-on HAOS)
|
||||
│ MQTT subscribe
|
||||
▼
|
||||
Home Assistant
|
||||
```
|
||||
|
||||
### Flux caméras → Frigate → Home Assistant
|
||||
|
||||
```text
|
||||
Caméra IP
|
||||
│ RTSP :554 (LAN)
|
||||
▼
|
||||
Frigate NVR (add-on HAOS — décodage + détection CPU)
|
||||
├─▼ Événements MQTT → Mosquitto → Home Assistant
|
||||
├─▼ Snapshots → /config/www/
|
||||
└─▼ Enregistrements → /media/frigate/
|
||||
```
|
||||
|
||||
### Flux ESPHome → Home Assistant
|
||||
|
||||
```text
|
||||
ESP32 (capteur sol)
|
||||
│ Wi-Fi LAN
|
||||
▼
|
||||
ESPHome add-on (HAOS)
|
||||
│ API native chiffrée (mDNS)
|
||||
▼
|
||||
Home Assistant
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## WireGuard – Plage VPN (LXC Proxmox)
|
||||
|
||||
| Interface | Adresse | Usage |
|
||||
| ------------ | ------------- | -------------- |
|
||||
| wg0 (serveur)| 10.0.0.1/24 | LXC Proxmox |
|
||||
| Client 1 | 10.0.0.2/32 | Mobile admin |
|
||||
| Client 2 | 10.0.0.3/32 | PC admin |
|
||||
|
||||
Les clients VPN ont accès au LAN `192.168.1.0/24` via la route configurée dans WireGuard, ce qui inclut HAOS (`192.168.1.X`) et Proxmox (`192.168.1.Y`).
|
||||
|
||||
---
|
||||
|
||||
## Segmentation et isolation
|
||||
|
||||
L'isolation des équipements IoT repose sur :
|
||||
|
||||
- **Aucun accès WAN** configuré pour les caméras, ESP32 et équipements Zigbee
|
||||
- **Flux RTSP** consommés uniquement par Frigate en local
|
||||
- **MQTT non exposé** sur le WAN (port 1883 LAN only)
|
||||
- **ESPHome** sans cloud (API locale uniquement)
|
||||
|
||||
> Pour aller plus loin : VLAN IoT dédié sur switch manageable + règles firewall OPNsense (disponible sur le Proxmox — cf. `pve-project`).
|
||||
@@ -0,0 +1,95 @@
|
||||
# Politique de sécurité – HAOS Project
|
||||
|
||||
## Principes fondamentaux
|
||||
|
||||
### 1. Exposition réseau minimale
|
||||
|
||||
Aucun port entrant n'est ouvert sur le routeur/box.
|
||||
|
||||
| Service | Exposition | Détail |
|
||||
| -------------- | -------------------- | ----------------------------------------- |
|
||||
| Home Assistant | Tunnel sortant | Cloudflared → Cloudflare → domaine perso |
|
||||
| SSH | VPN uniquement | Inaccessible hors WireGuard |
|
||||
| Samba | LAN uniquement | Partage réseau local uniquement |
|
||||
| MQTT | LAN uniquement | Mosquitto non exposé sur le WAN |
|
||||
| Zigbee2MQTT | LAN uniquement | Interface web sur port 8099 (LAN) |
|
||||
|
||||
### 2. Accès distant via tunnel sortant (Cloudflared)
|
||||
|
||||
Le flux réseau est **sortant uniquement** depuis le serveur vers Cloudflare.
|
||||
|
||||
```
|
||||
Utilisateur distant
|
||||
│
|
||||
▼ HTTPS
|
||||
Cloudflare Edge
|
||||
│
|
||||
▼ Tunnel chiffré (WireGuard/QUIC)
|
||||
Cloudflared add-on (HAOS)
|
||||
│
|
||||
▼ HTTP local
|
||||
Home Assistant
|
||||
```
|
||||
|
||||
Avantages :
|
||||
- Aucun port ouvert sur la box
|
||||
- IP publique non exposée
|
||||
- HTTPS natif via certificat Cloudflare
|
||||
- Protection DDoS Cloudflare incluse
|
||||
|
||||
### 3. Administration via VPN (WireGuard)
|
||||
|
||||
Toute administration système (SSH, Samba, Zigbee2MQTT UI) est restreinte au tunnel WireGuard.
|
||||
|
||||
### 4. Données locales
|
||||
|
||||
Les données sensibles ne transitent pas vers des clouds tiers :
|
||||
|
||||
| Donnée | Traitement | Justification |
|
||||
| --------------- | ----------- | ----------------------------------- |
|
||||
| Flux vidéo | Local | Frigate NVR sur le serveur |
|
||||
| Réseau Zigbee | Local | Zigbee2MQTT + Mosquitto locaux |
|
||||
| Capteurs ESP32 | Local | ESPHome sur réseau local |
|
||||
| Enedis | API officielle | Données de consommation uniquement |
|
||||
| Heatzy | API officielle | Commandes chauffage uniquement |
|
||||
|
||||
### 5. Principe du moindre privilège
|
||||
|
||||
- Services limités au strict nécessaire
|
||||
- Chaque add-on n'a accès qu'à ses ressources propres
|
||||
- Mot de passe MQTT dédié (non partagé)
|
||||
- Code PIN alarme non stocké en clair dans les automatisations (secrets.yaml)
|
||||
|
||||
### 6. Sauvegardes & Maintenance
|
||||
|
||||
- Sauvegardes automatiques régulières de la configuration HAOS
|
||||
- Mises à jour appliquées régulièrement (HAOS, add-ons, intégrations)
|
||||
- Surveillance des logs (HAOS, Zigbee2MQTT, Frigate)
|
||||
|
||||
## Gestion des secrets
|
||||
|
||||
Tous les éléments sensibles sont stockés dans `secrets.yaml` (non commité) :
|
||||
|
||||
```yaml
|
||||
# secrets.yaml – NE PAS COMMITER
|
||||
telegram_chat_alexis: "XXXXXXXXX"
|
||||
telegram_chat_vanessa: "XXXXXXXXX"
|
||||
mqtt_password: "XXXXXXXXX"
|
||||
alarmo_pin: "XXXX"
|
||||
wifi_ssid: "XXXXXXXXX"
|
||||
wifi_password: "XXXXXXXXX"
|
||||
esphome_api_key: "XXXXXXXXX"
|
||||
esphome_ota_password: "XXXXXXXXX"
|
||||
esphome_ap_password: "XXXXXXXXX"
|
||||
```
|
||||
|
||||
## Ce que ce dépôt ne contient pas
|
||||
|
||||
- ❌ Clés privées ou tokens
|
||||
- ❌ Mots de passe (MQTT, Telegram, Wi-Fi)
|
||||
- ❌ Adresses IP réelles du réseau local
|
||||
- ❌ Clé réseau Zigbee (network_key)
|
||||
- ❌ PAN ID / Extended PAN ID Zigbee
|
||||
- ❌ Adresses MAC des équipements Zigbee
|
||||
- ❌ Code PIN de l'alarme
|
||||
- ❌ Chat ID Telegram
|
||||
Reference in New Issue
Block a user