Initial commit (reset history)
This commit is contained in:
@@ -0,0 +1,326 @@
|
|||||||
|
# automations-alarm.yaml – Alarmo & Sécurité
|
||||||
|
# Automatisations liées au système d'alarme
|
||||||
|
# Version anonymisée — noms, pièces, identifiants ET commandes de pilotage à distance remplacés
|
||||||
|
#
|
||||||
|
# NOTE : les commandes Telegram réelles (déclencheurs `telegram_callback`) et le mapping
|
||||||
|
# exact code PIN / clavier physique ne sont volontairement pas publiés ici.
|
||||||
|
# Ce fichier illustre la structure et la logique des automatisations, pas leur
|
||||||
|
# interface de contrôle exacte.
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# DÉCLENCHEMENT ALARME
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
- alias: Notification déclenchement alarme
|
||||||
|
description: Envoie un message de notification quand l'alarme est déclenchée
|
||||||
|
triggers:
|
||||||
|
- trigger: state
|
||||||
|
entity_id: alarm_control_panel.alarmo
|
||||||
|
to: triggered
|
||||||
|
actions:
|
||||||
|
- action: telegram_bot.send_message
|
||||||
|
data:
|
||||||
|
message: "Alarme déclenchée !"
|
||||||
|
target:
|
||||||
|
- !secret telegram_chat_user1
|
||||||
|
- !secret telegram_chat_user2
|
||||||
|
|
||||||
|
- alias: Notification alarme mode absence prolongée
|
||||||
|
description: Notifie les contacts d'urgence en mode absence prolongée
|
||||||
|
triggers:
|
||||||
|
- trigger: state
|
||||||
|
entity_id: alarm_control_panel.alarmo
|
||||||
|
from: armed_vacation
|
||||||
|
to: triggered
|
||||||
|
actions:
|
||||||
|
- action: notify.mobile_app_contact_1
|
||||||
|
data:
|
||||||
|
message: "Alarme déclenchée !"
|
||||||
|
title: "Alarme domicile"
|
||||||
|
- action: notify.mobile_app_contact_2
|
||||||
|
data:
|
||||||
|
title: "Alarme domicile"
|
||||||
|
message: "ALARME DÉCLENCHÉE"
|
||||||
|
|
||||||
|
- alias: Snapshots caméra principale sur alarme
|
||||||
|
description: Envoie plusieurs photos + vidéo de la caméra principale sur déclenchement
|
||||||
|
triggers:
|
||||||
|
- trigger: state
|
||||||
|
entity_id: alarm_control_panel.alarmo
|
||||||
|
to: triggered
|
||||||
|
actions:
|
||||||
|
- repeat:
|
||||||
|
count: 3
|
||||||
|
sequence:
|
||||||
|
- action: camera.snapshot
|
||||||
|
data:
|
||||||
|
filename: /config/www/tmp1.jpg
|
||||||
|
target:
|
||||||
|
entity_id: camera.camera_principale
|
||||||
|
- action: telegram_bot.send_photo
|
||||||
|
data:
|
||||||
|
verify_ssl: true
|
||||||
|
file: /config/www/tmp1.jpg
|
||||||
|
target:
|
||||||
|
- !secret telegram_chat_user1
|
||||||
|
- !secret telegram_chat_user2
|
||||||
|
- delay:
|
||||||
|
seconds: 1
|
||||||
|
- action: camera.record
|
||||||
|
data:
|
||||||
|
filename: /config/www/clip1.mp4
|
||||||
|
duration: 10
|
||||||
|
target:
|
||||||
|
entity_id: camera.camera_principale
|
||||||
|
- action: telegram_bot.send_video
|
||||||
|
data:
|
||||||
|
verify_ssl: true
|
||||||
|
file: /config/www/clip1.mp4
|
||||||
|
target:
|
||||||
|
- !secret telegram_chat_user1
|
||||||
|
- !secret telegram_chat_user2
|
||||||
|
|
||||||
|
- alias: Snapshots caméra secondaire sur alarme
|
||||||
|
description: Envoie plusieurs photos + vidéo de la caméra secondaire sur déclenchement
|
||||||
|
triggers:
|
||||||
|
- trigger: state
|
||||||
|
entity_id: alarm_control_panel.alarmo
|
||||||
|
to: triggered
|
||||||
|
actions:
|
||||||
|
- repeat:
|
||||||
|
count: 3
|
||||||
|
sequence:
|
||||||
|
- action: camera.snapshot
|
||||||
|
data:
|
||||||
|
filename: /config/www/tmp2.jpg
|
||||||
|
target:
|
||||||
|
entity_id: camera.camera_secondaire
|
||||||
|
- action: telegram_bot.send_photo
|
||||||
|
data:
|
||||||
|
verify_ssl: true
|
||||||
|
file: /config/www/tmp2.jpg
|
||||||
|
target:
|
||||||
|
- !secret telegram_chat_user1
|
||||||
|
- !secret telegram_chat_user2
|
||||||
|
- delay:
|
||||||
|
seconds: 1
|
||||||
|
- action: camera.record
|
||||||
|
data:
|
||||||
|
filename: /config/www/clip2.mp4
|
||||||
|
duration: 10
|
||||||
|
target:
|
||||||
|
entity_id: camera.camera_secondaire
|
||||||
|
- action: telegram_bot.send_video
|
||||||
|
data:
|
||||||
|
verify_ssl: true
|
||||||
|
file: /config/www/clip2.mp4
|
||||||
|
target:
|
||||||
|
- !secret telegram_chat_user1
|
||||||
|
- !secret telegram_chat_user2
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# ARMEMENT / DÉSARMEMENT
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
- alias: Notification armement alarme
|
||||||
|
description: Confirme l'armement par notification
|
||||||
|
triggers:
|
||||||
|
- trigger: state
|
||||||
|
entity_id: alarm_control_panel.alarmo
|
||||||
|
to: armed_away
|
||||||
|
actions:
|
||||||
|
- action: telegram_bot.send_message
|
||||||
|
data:
|
||||||
|
message: "Alarme armée."
|
||||||
|
title: "Alarme activée"
|
||||||
|
target: !secret telegram_chat_user1
|
||||||
|
- action: telegram_bot.send_message
|
||||||
|
data:
|
||||||
|
message: "Alarme armée."
|
||||||
|
title: "Alarme activée"
|
||||||
|
target: !secret telegram_chat_user2
|
||||||
|
|
||||||
|
- alias: Notification désarmement alarme
|
||||||
|
description: Confirme le désarmement par notification
|
||||||
|
triggers:
|
||||||
|
- trigger: state
|
||||||
|
entity_id: alarm_control_panel.alarmo
|
||||||
|
to: disarmed
|
||||||
|
actions:
|
||||||
|
- action: telegram_bot.send_message
|
||||||
|
data:
|
||||||
|
message: "Alarme désactivée."
|
||||||
|
title: "Alarme désactivée"
|
||||||
|
target:
|
||||||
|
- !secret telegram_chat_user1
|
||||||
|
- !secret telegram_chat_user2
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# COMMANDES À DISTANCE (Telegram)
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# Les automatisations de pilotage à distance (armement, désarmement et
|
||||||
|
# consultation des caméras via le bot Telegram) existent bien dans
|
||||||
|
# l'installation réelle, mais leurs déclencheurs exacts (`telegram_callback`
|
||||||
|
# / nom de commande) ne sont pas publiés dans ce dépôt, pour limiter le
|
||||||
|
# risque qu'un tiers reproduise ces actions s'il découvre le bot.
|
||||||
|
#
|
||||||
|
# Structure générale (illustrative, non fonctionnelle telle quelle) :
|
||||||
|
#
|
||||||
|
# - alias: Commande à distance — désarmement
|
||||||
|
# triggers:
|
||||||
|
# - trigger: event
|
||||||
|
# event_type: telegram_callback
|
||||||
|
# event_data:
|
||||||
|
# command: !secret telegram_cmd_disarm
|
||||||
|
# actions:
|
||||||
|
# - action: alarmo.disarm
|
||||||
|
# data:
|
||||||
|
# entity_id: alarm_control_panel.alarmo
|
||||||
|
#
|
||||||
|
# - alias: Commande à distance — armement
|
||||||
|
# triggers:
|
||||||
|
# - trigger: event
|
||||||
|
# event_type: telegram_callback
|
||||||
|
# event_data:
|
||||||
|
# command: !secret telegram_cmd_arm
|
||||||
|
# actions:
|
||||||
|
# - action: alarmo.arm
|
||||||
|
# data:
|
||||||
|
# entity_id: alarm_control_panel.alarmo
|
||||||
|
# mode: vacation
|
||||||
|
#
|
||||||
|
# - alias: Commande à distance — consultation caméras
|
||||||
|
# triggers:
|
||||||
|
# - trigger: event
|
||||||
|
# event_type: telegram_callback
|
||||||
|
# event_data:
|
||||||
|
# command: !secret telegram_cmd_snapshot
|
||||||
|
# actions:
|
||||||
|
# - repeat:
|
||||||
|
# count: 5
|
||||||
|
# sequence:
|
||||||
|
# - action: camera.snapshot
|
||||||
|
# target:
|
||||||
|
# entity_id: camera.camera_principale
|
||||||
|
# - action: telegram_bot.send_photo
|
||||||
|
# data:
|
||||||
|
# target:
|
||||||
|
# - !secret telegram_chat_user1
|
||||||
|
# - !secret telegram_chat_user2
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# SIRÈNE ZIGBEE
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
- alias: Contrôle sirène Zigbee
|
||||||
|
description: Publie le mode sirène (burglar/stop) selon l'état de l'input_boolean
|
||||||
|
triggers:
|
||||||
|
- trigger: state
|
||||||
|
entity_id: input_boolean.sirene_switch
|
||||||
|
actions:
|
||||||
|
- action: mqtt.publish
|
||||||
|
data:
|
||||||
|
topic: zigbee2mqtt/sirene/set
|
||||||
|
payload_template: >
|
||||||
|
{% if is_state('input_boolean.sirene_switch', 'on') %}
|
||||||
|
{"warning": {"mode": "burglar"}}
|
||||||
|
{% else %}
|
||||||
|
{"warning": {"mode": "stop"}}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# INTÉGRATIONS CONDITIONNELLES
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
- alias: Détection Frigate selon état alarme
|
||||||
|
description: Active/désactive la détection Frigate selon l'état de l'alarme
|
||||||
|
triggers:
|
||||||
|
- trigger: state
|
||||||
|
entity_id: alarm_control_panel.alarmo
|
||||||
|
actions:
|
||||||
|
- if:
|
||||||
|
- condition: state
|
||||||
|
entity_id: alarm_control_panel.alarmo
|
||||||
|
state: disarmed
|
||||||
|
then:
|
||||||
|
- type: turn_off
|
||||||
|
device_id: DEVICE_ID_CAMERA_1
|
||||||
|
entity_id: switch.frigate_detect_camera_1
|
||||||
|
domain: switch
|
||||||
|
- type: turn_off
|
||||||
|
device_id: DEVICE_ID_CAMERA_2
|
||||||
|
entity_id: switch.frigate_detect_camera_2
|
||||||
|
domain: switch
|
||||||
|
else:
|
||||||
|
- type: turn_on
|
||||||
|
device_id: DEVICE_ID_CAMERA_1
|
||||||
|
entity_id: switch.frigate_detect_camera_1
|
||||||
|
domain: switch
|
||||||
|
- type: turn_on
|
||||||
|
device_id: DEVICE_ID_CAMERA_2
|
||||||
|
entity_id: switch.frigate_detect_camera_2
|
||||||
|
domain: switch
|
||||||
|
|
||||||
|
- alias: Extinction lumières à l'armement
|
||||||
|
description: Éteint toutes les lumières quand l'alarme passe en mode arming
|
||||||
|
triggers:
|
||||||
|
- trigger: state
|
||||||
|
entity_id: alarm_control_panel.alarmo
|
||||||
|
from: disarmed
|
||||||
|
to: arming
|
||||||
|
actions:
|
||||||
|
- type: turn_off
|
||||||
|
device_id: DEVICE_ID_LUMIERE_1
|
||||||
|
entity_id: switch.lumiere_1
|
||||||
|
domain: switch
|
||||||
|
- type: turn_off
|
||||||
|
device_id: DEVICE_ID_LUMIERE_2
|
||||||
|
entity_id: switch.lumiere_2
|
||||||
|
domain: switch
|
||||||
|
- type: turn_off
|
||||||
|
device_id: DEVICE_ID_LUMIERE_3
|
||||||
|
entity_id: light.lumiere_3
|
||||||
|
domain: light
|
||||||
|
- type: turn_off
|
||||||
|
device_id: DEVICE_ID_LUMIERE_4
|
||||||
|
entity_id: light.lumiere_4
|
||||||
|
domain: light
|
||||||
|
|
||||||
|
- alias: Éclairage plantes en absence
|
||||||
|
description: Active l'éclairage des plantes à pleine puissance quand absent depuis 5 min
|
||||||
|
triggers:
|
||||||
|
- trigger: state
|
||||||
|
entity_id: alarm_control_panel.alarmo
|
||||||
|
to: armed_away
|
||||||
|
for:
|
||||||
|
minutes: 5
|
||||||
|
actions:
|
||||||
|
- type: turn_on
|
||||||
|
device_id: DEVICE_ID_LUMIERE_PLANTES_1
|
||||||
|
entity_id: light.lumiere_plantes_1
|
||||||
|
domain: light
|
||||||
|
brightness_pct: 100
|
||||||
|
- type: turn_on
|
||||||
|
device_id: DEVICE_ID_LUMIERE_PLANTES_2
|
||||||
|
entity_id: light.lumiere_plantes_2
|
||||||
|
domain: light
|
||||||
|
brightness_pct: 100
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# CLAVIER PHYSIQUE (BLUEPRINT)
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# Le mapping exact code PIN / action n'est pas publié (code PIN déjà en !secret,
|
||||||
|
# mais le nom du blueprint et la structure de configuration sont volontairement
|
||||||
|
# simplifiés ci-dessous pour ne pas constituer un guide d'implémentation 1:1).
|
||||||
|
|
||||||
|
- alias: Clavier physique avec Alarmo
|
||||||
|
description: >
|
||||||
|
Armement/désarmement via clavier Zigbee à code PIN, basé sur un blueprint
|
||||||
|
communautaire (frient keypad + Alarmo). Configuration complète disponible
|
||||||
|
sur demande.
|
||||||
|
use_blueprint:
|
||||||
|
path: REDACTED — voir documentation Home Assistant / Alarmo pour les
|
||||||
|
blueprints clavier Zigbee disponibles
|
||||||
|
input:
|
||||||
|
pin_list: !secret alarmo_pin
|
||||||
|
control_panel: alarm_control_panel.alarmo
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
# humidity-sensor.yaml – ESPHome
|
||||||
|
# Capteur d'humidité du sol sur ESP32
|
||||||
|
# Mesure la résistance du sol via deux sondes métalliques
|
||||||
|
|
||||||
|
esphome:
|
||||||
|
name: capteur-plantes
|
||||||
|
friendly_name: Capteur Plantes
|
||||||
|
|
||||||
|
esp32:
|
||||||
|
board: esp32dev
|
||||||
|
framework:
|
||||||
|
type: arduino
|
||||||
|
|
||||||
|
# Logs série
|
||||||
|
logger:
|
||||||
|
|
||||||
|
# API Home Assistant
|
||||||
|
api:
|
||||||
|
encryption:
|
||||||
|
key: !secret esphome_api_key
|
||||||
|
|
||||||
|
# OTA updates
|
||||||
|
ota:
|
||||||
|
- platform: esphome
|
||||||
|
password: !secret esphome_ota_password
|
||||||
|
|
||||||
|
wifi:
|
||||||
|
ssid: !secret wifi_ssid
|
||||||
|
password: !secret wifi_password
|
||||||
|
ap:
|
||||||
|
ssid: "Capteur-Plantes Fallback"
|
||||||
|
password: !secret esphome_ap_password
|
||||||
|
|
||||||
|
captive_portal:
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# CAPTEUR D'HUMIDITÉ DU SOL
|
||||||
|
# Principe : lecture analogique de la résistance du sol
|
||||||
|
# Sol sec = haute résistance = valeur haute
|
||||||
|
# Sol humide = faible résistance = valeur basse
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
sensor:
|
||||||
|
- platform: adc
|
||||||
|
pin: GPIO34
|
||||||
|
name: "Humidité Sol Plante 1"
|
||||||
|
id: soil_moisture_raw
|
||||||
|
update_interval: 60s
|
||||||
|
unit_of_measurement: "%"
|
||||||
|
accuracy_decimals: 1
|
||||||
|
attenuation: auto
|
||||||
|
# Calibration : ajuster min/max selon votre sol et vos sondes
|
||||||
|
filters:
|
||||||
|
- calibrate_linear:
|
||||||
|
- 3.0 -> 0.0 # Sol sec (ajuster selon calibration)
|
||||||
|
- 1.1 -> 100.0 # Sol saturé (ajuster selon calibration)
|
||||||
|
- clamp:
|
||||||
|
min_value: 0
|
||||||
|
max_value: 100
|
||||||
|
on_value:
|
||||||
|
then:
|
||||||
|
- if:
|
||||||
|
condition:
|
||||||
|
sensor.in_range:
|
||||||
|
id: soil_moisture_raw
|
||||||
|
below: 30.0
|
||||||
|
then:
|
||||||
|
- logger.log: "Sol sec ! Arrosage nécessaire."
|
||||||
|
|
||||||
|
# Température interne ESP32 (monitoring)
|
||||||
|
- platform: internal_temperature
|
||||||
|
name: "Température ESP32"
|
||||||
|
update_interval: 300s
|
||||||
@@ -0,0 +1,148 @@
|
|||||||
|
# config.yaml – Frigate NVR
|
||||||
|
# Version anonymisée — IPs et credentials remplacés
|
||||||
|
# Documentation : https://docs.frigate.video/configuration/
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# MQTT – Connexion au broker Mosquitto local
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
mqtt:
|
||||||
|
enabled: true
|
||||||
|
host: 192.168.1.X # IP du serveur HAOS
|
||||||
|
port: 1883
|
||||||
|
user: mqtt
|
||||||
|
password: "{FRIGATE_MQTT_PASSWORD}" # Variable d'env ou secrets Frigate
|
||||||
|
topic_prefix: frigate
|
||||||
|
client_id: frigate
|
||||||
|
stats_interval: 60
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# DÉTECTEUR D'OBJETS
|
||||||
|
# CPU par défaut — décommenter pour accélération matérielle
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
detectors:
|
||||||
|
cpu1:
|
||||||
|
type: cpu
|
||||||
|
num_threads: 3
|
||||||
|
|
||||||
|
# Pour Coral USB (recommandé si disponible) :
|
||||||
|
# detectors:
|
||||||
|
# coral:
|
||||||
|
# type: edgetpu
|
||||||
|
# device: usb
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# BASE DE DONNÉES
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
database:
|
||||||
|
path: /config/frigate.db
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# STOCKAGE – Enregistrements et clips
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
record:
|
||||||
|
enabled: true
|
||||||
|
retain:
|
||||||
|
days: 3
|
||||||
|
mode: motion # N'enregistre que les segments avec mouvement
|
||||||
|
events:
|
||||||
|
retain:
|
||||||
|
default: 10 # Jours de rétention des événements (clips)
|
||||||
|
mode: motion
|
||||||
|
|
||||||
|
snapshots:
|
||||||
|
enabled: true
|
||||||
|
bounding_box: true # Encadre l'objet détecté
|
||||||
|
crop: false
|
||||||
|
retain:
|
||||||
|
default: 10
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# CAMÉRAS
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
cameras:
|
||||||
|
|
||||||
|
# Caméra principale (pièce de vie)
|
||||||
|
camera_principale:
|
||||||
|
enabled: true
|
||||||
|
ffmpeg:
|
||||||
|
inputs:
|
||||||
|
- path: rtsp://admin:{CAMERA_PASSWORD}@192.168.1.X:554/stream1
|
||||||
|
roles:
|
||||||
|
- detect
|
||||||
|
- record
|
||||||
|
# Optimisations décodage (réduire la charge CPU)
|
||||||
|
input_args: preset-rtsp-restream
|
||||||
|
output_args:
|
||||||
|
record: preset-record-generic-audio-copy
|
||||||
|
detect:
|
||||||
|
enabled: false # Activé/désactivé dynamiquement par Home Assistant
|
||||||
|
width: 1920
|
||||||
|
height: 1080
|
||||||
|
fps: 5
|
||||||
|
objects:
|
||||||
|
track:
|
||||||
|
- person
|
||||||
|
filters:
|
||||||
|
person:
|
||||||
|
min_area: 5000 # Ignorer les petites détections (faux positifs)
|
||||||
|
max_area: 100000
|
||||||
|
threshold: 0.7
|
||||||
|
motion:
|
||||||
|
threshold: 25
|
||||||
|
contour_area: 100
|
||||||
|
mask:
|
||||||
|
- 0,0,0,200,400,200,400,0 # Masquer zone statique si besoin
|
||||||
|
record:
|
||||||
|
retain:
|
||||||
|
days: 3
|
||||||
|
snapshots:
|
||||||
|
retain:
|
||||||
|
default: 10
|
||||||
|
|
||||||
|
# Caméra secondaire (entrée / autre pièce)
|
||||||
|
camera_secondaire:
|
||||||
|
enabled: true
|
||||||
|
ffmpeg:
|
||||||
|
inputs:
|
||||||
|
- path: rtsp://admin:{CAMERA_PASSWORD}@192.168.1.X:554/stream1
|
||||||
|
roles:
|
||||||
|
- detect
|
||||||
|
- record
|
||||||
|
input_args: preset-rtsp-restream
|
||||||
|
output_args:
|
||||||
|
record: preset-record-generic-audio-copy
|
||||||
|
detect:
|
||||||
|
enabled: false
|
||||||
|
width: 1920
|
||||||
|
height: 1080
|
||||||
|
fps: 5
|
||||||
|
objects:
|
||||||
|
track:
|
||||||
|
- person
|
||||||
|
filters:
|
||||||
|
person:
|
||||||
|
min_area: 5000
|
||||||
|
threshold: 0.7
|
||||||
|
motion:
|
||||||
|
threshold: 25
|
||||||
|
contour_area: 100
|
||||||
|
record:
|
||||||
|
retain:
|
||||||
|
days: 3
|
||||||
|
snapshots:
|
||||||
|
retain:
|
||||||
|
default: 10
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# UI FRIGATE
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
ui:
|
||||||
|
live_mode: mse # mse | webrtc | jsmpeg
|
||||||
|
timezone: Europe/Paris
|
||||||
|
use_experimental_ui: false
|
||||||
@@ -0,0 +1,128 @@
|
|||||||
|
# configuration.yaml – Home Assistant OS
|
||||||
|
# Version anonymisée — secrets externalisés dans secrets.yaml
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# CORE
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
# Charge les intégrations par défaut (UI, historique, log, etc.)
|
||||||
|
default_config:
|
||||||
|
|
||||||
|
frontend:
|
||||||
|
themes: !include_dir_merge_named themes
|
||||||
|
|
||||||
|
automation: !include automations.yaml
|
||||||
|
script: !include scripts.yaml
|
||||||
|
scene: !include scenes.yaml
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# HTTP – Proxy inverse Cloudflare
|
||||||
|
# L'accès distant passe par le tunnel Cloudflared (sortant).
|
||||||
|
# L'administration passe par WireGuard hébergé sur le serveur Proxmox.
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
http:
|
||||||
|
use_x_forwarded_for: true
|
||||||
|
trusted_proxies:
|
||||||
|
- 172.30.33.0/24 # Réseau interne add-on Cloudflared
|
||||||
|
# Pas de WireGuard sur HAOS — le serveur VPN est sur le Proxmox (LXC dédié)
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# NOTIFICATIONS – Bot Telegram
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
telegram_bot:
|
||||||
|
- platform: polling
|
||||||
|
api_key: !secret telegram_bot_token
|
||||||
|
allowed_chat_ids:
|
||||||
|
- !secret telegram_chat_user1
|
||||||
|
- !secret telegram_chat_user2
|
||||||
|
|
||||||
|
notify:
|
||||||
|
- platform: telegram
|
||||||
|
name: user1
|
||||||
|
chat_id: !secret telegram_chat_user1
|
||||||
|
- platform: telegram
|
||||||
|
name: user2
|
||||||
|
chat_id: !secret telegram_chat_user2
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# INPUT BOOLEANS – Switchs virtuels dashboard
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
input_boolean:
|
||||||
|
# Scènes lumière
|
||||||
|
sunset_switch:
|
||||||
|
name: Scène lumière ambiante
|
||||||
|
initial: off
|
||||||
|
led_bar_switch:
|
||||||
|
name: Barre LED
|
||||||
|
initial: off
|
||||||
|
|
||||||
|
# Appareils IR
|
||||||
|
ventilo_switch:
|
||||||
|
name: Ventilateur
|
||||||
|
initial: off
|
||||||
|
diffuseur_switch:
|
||||||
|
name: Diffuseur arômes
|
||||||
|
initial: off
|
||||||
|
|
||||||
|
# Alarme & Sécurité
|
||||||
|
sirene_switch:
|
||||||
|
name: Sirène
|
||||||
|
initial: off
|
||||||
|
camera_privacy_switch:
|
||||||
|
name: Caméra privacy
|
||||||
|
initial: off
|
||||||
|
|
||||||
|
# Maître automatisations
|
||||||
|
master_automatisations:
|
||||||
|
name: Automatisations On/Off
|
||||||
|
initial: on
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# SENSORS
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
sensor: !include sensors.yaml
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# TEMPLATE – Switch caméra avec inversion privacy
|
||||||
|
# Le switch HA représente l'état "caméra visible"
|
||||||
|
# alors que l'entité physique est un switch "privacy" (logique inversée)
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
template:
|
||||||
|
- switch:
|
||||||
|
- name: Caméra
|
||||||
|
unique_id: camera_privacy_template
|
||||||
|
state: "{{ is_state('switch.camera_privacy', 'off') }}"
|
||||||
|
icon: >
|
||||||
|
{% if is_state('switch.camera_privacy', 'off') %}
|
||||||
|
mdi:cctv
|
||||||
|
{% else %}
|
||||||
|
mdi:cctv-off
|
||||||
|
{% endif %}
|
||||||
|
turn_on:
|
||||||
|
- action: switch.turn_off
|
||||||
|
target:
|
||||||
|
entity_id: switch.camera_privacy
|
||||||
|
turn_off:
|
||||||
|
- action: switch.turn_on
|
||||||
|
target:
|
||||||
|
entity_id: switch.camera_privacy
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# HOMEKIT (optionnel)
|
||||||
|
# Expose certaines entités vers Apple Home
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
# homekit:
|
||||||
|
# - name: HAOS Bridge
|
||||||
|
# port: 21063
|
||||||
|
# filter:
|
||||||
|
# include_domains:
|
||||||
|
# - light
|
||||||
|
# - switch
|
||||||
|
# - climate
|
||||||
|
# - alarm_control_panel
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
# configuration.yaml – Zigbee2MQTT
|
||||||
|
# Version anonymisée — clés réseau et mots de passe remplacés
|
||||||
|
# Adaptateur : Sonoff Zigbee 3.0 USB Dongle Plus V2 (ember)
|
||||||
|
|
||||||
|
version: 5
|
||||||
|
|
||||||
|
mqtt:
|
||||||
|
base_topic: zigbee2mqtt
|
||||||
|
server: mqtt://core-mosquitto:1883
|
||||||
|
user: mqtt
|
||||||
|
password: !secret mqtt_password # À définir dans secrets.yaml
|
||||||
|
|
||||||
|
serial:
|
||||||
|
baudrate: 115200
|
||||||
|
rtscts: false
|
||||||
|
# Adapter le port selon votre installation :
|
||||||
|
port: /dev/serial/by-id/usb-Itead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_V2_XXXXXXXXXXXXXXXX-if00-port0
|
||||||
|
adapter: ember
|
||||||
|
|
||||||
|
advanced:
|
||||||
|
log_level: info
|
||||||
|
channel: 11
|
||||||
|
network_key: GENERATE # Générer via : zigbee2mqtt/bridge/request/options
|
||||||
|
pan_id: GENERATE # Générer automatiquement
|
||||||
|
|
||||||
|
frontend:
|
||||||
|
enabled: true
|
||||||
|
port: 8099
|
||||||
|
|
||||||
|
homeassistant:
|
||||||
|
enabled: true
|
||||||
|
legacy_action_sensor: false
|
||||||
|
base_topic: zigbee2mqtt
|
||||||
|
force_disable_retain: false
|
||||||
|
include_device_information: false
|
||||||
|
keepalive: 60
|
||||||
|
maximum_packet_size: 1048576
|
||||||
|
reject_unauthorized: true
|
||||||
|
server: mqtt://core-mosquitto:1883
|
||||||
|
user: mqtt
|
||||||
|
version: 4
|
||||||
|
experimental_event_entities: false
|
||||||
|
|
||||||
|
# Appareils Zigbee enregistrés
|
||||||
|
# Les adresses MAC sont propres à chaque installation
|
||||||
|
devices:
|
||||||
|
'0xXXXXXXXXXXXXXXXX':
|
||||||
|
friendly_name: ir blaster 1
|
||||||
|
'0xXXXXXXXXXXXXXXXX':
|
||||||
|
friendly_name: ir blaster 2
|
||||||
|
'0xXXXXXXXXXXXXXXXX':
|
||||||
|
friendly_name: sirene
|
||||||
|
'0xXXXXXXXXXXXXXXXX':
|
||||||
|
friendly_name: capteur fuite 1
|
||||||
|
'0xXXXXXXXXXXXXXXXX':
|
||||||
|
friendly_name: Lampe rouge
|
||||||
|
'0xXXXXXXXXXXXXXXXX':
|
||||||
|
friendly_name: Bouton entree
|
||||||
|
'0xXXXXXXXXXXXXXXXX':
|
||||||
|
friendly_name: clavier
|
||||||
|
'0xXXXXXXXXXXXXXXXX':
|
||||||
|
friendly_name: Lampesdb2
|
||||||
|
'0xXXXXXXXXXXXXXXXX':
|
||||||
|
friendly_name: Lampesdb1
|
||||||
|
'0xXXXXXXXXXXXXXXXX':
|
||||||
|
friendly_name: bouton sdb
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
# 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) |
|
||||||
|
| Capteurs custom | ESPHome (add-on officiel) |
|
||||||
|
| Notifications | Telegram Bot API |
|
||||||
|
| Énergie | Intégration Enedis officielle |
|
||||||
|
| Chauffage | Heatzy (intégration HACS) |
|
||||||
|
|
||||||
|
> **Le VPN WireGuard ne fait pas partie de la stack HAOS.** Il est hébergé sur un LXC dédié, sur un second mini-PC sous Proxmox VE (cf. `pve-project`). HAOS ne fait tourner aucun serveur VPN : le client WireGuard obtient un accès au LAN, qui inclut HAOS, au même titre que tout autre hôte du réseau local.
|
||||||
|
|
||||||
|
## Flux de données
|
||||||
|
|
||||||
|
```text
|
||||||
|
É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
|
||||||
|
|
||||||
|
```text
|
||||||
|
Internet
|
||||||
|
│
|
||||||
|
┌───────────────┴───────────────┐
|
||||||
|
│ │
|
||||||
|
▼ HTTPS sortant uniquement ▼ UDP 51820 (seul port WAN ouvert, pas sur HAOS)
|
||||||
|
Cloudflare WireGuard (LXC sur Proxmox, mini-PC distinct)
|
||||||
|
│ │
|
||||||
|
▼ tunnel chiffré ▼ tunnel VPN → accès LAN complet
|
||||||
|
Cloudflared add-on (HAOS) LAN 192.168.1.0/24 (HAOS, Proxmox, IoT)
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
Home Assistant
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
> L'accès web public à Home Assistant passe uniquement par le tunnel sortant Cloudflared. L'administration (SSH, Samba, UI Zigbee2MQTT/Frigate) passe uniquement par le VPN WireGuard, qui n'est pas un add-on HAOS mais un service distinct hébergé sur le Proxmox.
|
||||||
|
|
||||||
|
## Principes de sécurité
|
||||||
|
|
||||||
|
- **Zéro port ouvert** sur la box/routeur côté HAOS (le seul port WAN ouvert, UDP 51820, est sur le Proxmox)
|
||||||
|
- **Tunnel sortant** uniquement (Cloudflared) pour l'accès web à Home Assistant
|
||||||
|
- **VPN WireGuard** obligatoire pour toute administration (SSH, Samba) — hébergé sur le Proxmox, pas sur HAOS
|
||||||
|
- **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,86 @@
|
|||||||
|
# Automatisations – Vue d'ensemble
|
||||||
|
|
||||||
|
## Statistiques
|
||||||
|
|
||||||
|
| Domaine | Nombre d'automatisations |
|
||||||
|
| ------------------- | ------------------------- |
|
||||||
|
| Alarme & Sécurité | 14 |
|
||||||
|
| Éclairage | 9 |
|
||||||
|
| Chauffage | 4 |
|
||||||
|
| Ventilation & IR | 5 |
|
||||||
|
| Capteurs | 3 |
|
||||||
|
| **Total** | **~35 actives** |
|
||||||
|
|
||||||
|
> Des scripts et scènes additionnels complètent les automatisations pour atteindre plus de 50 logiques conditionnelles.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Alarme & Sécurité
|
||||||
|
|
||||||
|
> Les commandes exactes de pilotage à distance (Telegram) ne sont volontairement pas détaillées ici, pour limiter le risque qu'un tiers les reproduise. Seule la fonction est décrite.
|
||||||
|
|
||||||
|
| 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 |
|
||||||
|
| Consultation caméras à distance | Commande Telegram (privée) | Envoi en boucle des caméras → Telegram |
|
||||||
|
| Notification armement | armed\_away | Confirmation armement → Telegram |
|
||||||
|
| Notification désarmement | disarmed | Confirmation désarmement → Telegram |
|
||||||
|
| Désarmement à distance | Commande Telegram (privée) | Désarmement Alarmo |
|
||||||
|
| Armement à distance | Commande Telegram (privée) | 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 délai |
|
||||||
|
| 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 programmé | Heure fixe | Allumage lumière programmée |
|
||||||
|
| Extinction automatique programmée | Heure fixe | 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
|
||||||
|
|
||||||
|
> Les plages horaires précises ne sont volontairement pas publiées (elles révèlent des habitudes de présence au domicile). Seule la logique est décrite.
|
||||||
|
|
||||||
|
| Fonction | Déclencheur | Action |
|
||||||
|
| -------------------------- | ----------------------- | --------------------- |
|
||||||
|
| Activation chauffe (x2/jour) | Heure fixe (non publiée) | Radiateurs → heat |
|
||||||
|
| Fin de chauffe (x2/jour) | Heure fixe (non publiée) | 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,99 @@
|
|||||||
|
# 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.
|
||||||
|
|
||||||
|
```text
|
||||||
|
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, lui-même hébergé sur un LXC dédié sur le Proxmox (second mini-PC), et non sur HAOS.
|
||||||
|
|
||||||
|
### 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_user1: "XXXXXXXXX"
|
||||||
|
telegram_chat_user2: "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
|
||||||
|
- ❌ Prénoms ou noms réels des occupants
|
||||||
@@ -0,0 +1,322 @@
|
|||||||
|
# 🏠 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 │ │ • SSH / Samba │
|
||||||
|
│ • Clavier Frient│ │ • IR Blaster │ │ │
|
||||||
|
└─────────────────┘ └───────────────────┘ └──────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🖥️ 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é — 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
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🚨 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.
|
||||||
|
|
||||||
|
- Plusieurs modes d'armement (présence, 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
|
||||||
|
- Automatisations d'éclairage liées à l'état de l'alarme
|
||||||
|
- Activation de la détection Frigate conditionnée à l'état de l'alarme
|
||||||
|
|
||||||
|
> Le détail précis des scénarios d'armement/désarmement et des commandes de pilotage à distance n'est volontairement pas documenté publiquement.
|
||||||
|
|
||||||
|
#### Frigate – NVR intelligent local
|
||||||
|
|
||||||
|
Vidéosurveillance avec détection d'objets par intelligence artificielle.
|
||||||
|
|
||||||
|
- Traitement local (aucun cloud vidéo)
|
||||||
|
- Caméras : principales et secondaires (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
|
||||||
|
- Commandes de contrôle à distance (consultation et désarmement)
|
||||||
|
|
||||||
|
> Le détail exact des commandes disponibles n'est volontairement pas documenté publiquement.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🌡️ Confort & Énergie
|
||||||
|
|
||||||
|
#### Heatzy – Gestion du chauffage
|
||||||
|
|
||||||
|
Pilotage dynamique de radiateurs électriques connectés selon des plages horaires programmées, avec retour automatique en mode `auto` hors plages actives.
|
||||||
|
|
||||||
|
> Les plages horaires précises ne sont volontairement pas documentées publiquement (elles révèlent des habitudes de présence au domicile).
|
||||||
|
|
||||||
|
#### 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 un délai
|
||||||
|
- **Lampadaire entrée** : toggle via bouton Zigbee + allumage automatique au retour
|
||||||
|
- **Lumières SDB** : toggle via bouton Zigbee dédié
|
||||||
|
- **Suspension** : allumage/extinction programmés
|
||||||
|
- **Plantes (photosynthèse)** : éclairage dédié conditionné à l'état de l'alarme
|
||||||
|
- **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) |
|
||||||
|
| Accès distant sécurisé | Tunnel sortant Cloudflared uniquement |
|
||||||
|
| Administration cloisonnée | SSH et Samba accessibles via VPN uniquement |
|
||||||
|
| 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, │
|
||||||
|
│ HTTPS natif) │ │ ESPHome, Frigate) │ │ SSH, Samba LAN) │
|
||||||
|
└──────────────────────┘ └──────────────────────┘ └──────────────────────┘
|
||||||
|
Chiffré 100% local VPN only
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚡ Automatisations
|
||||||
|
|
||||||
|
Les automatisations sont organisées par domaine fonctionnel. Le détail des déclencheurs et actions liés à l'alarme, à la sécurité du logement et aux horaires de présence n'est volontairement pas publié — seules les catégories fonctionnelles sont listées ci-dessous, à titre d'illustration de la complexité gérée.
|
||||||
|
|
||||||
|
### 🚨 Alarme & Sécurité
|
||||||
|
Notifications Telegram, gestion de la sirène, intégration du clavier physique, pilotage conditionnel de la détection vidéo selon l'état de l'alarme.
|
||||||
|
|
||||||
|
### 💡 Éclairage
|
||||||
|
Allumage/extinction sur détection de mouvement, toggle via boutons Zigbee, scènes lumineuses programmées et conditionnelles.
|
||||||
|
|
||||||
|
### 🌡️ Chauffage
|
||||||
|
Pilotage des radiateurs selon des plages horaires programmées (détail non publié).
|
||||||
|
|
||||||
|
### 🌬️ Ventilation & IR
|
||||||
|
Toggle, contrôle de puissance, rotation et changement de mode via codes IR.
|
||||||
|
|
||||||
|
### 🛁 Capteurs & Sécurité passive
|
||||||
|
Détection de fuite d'eau avec alerte Telegram, gestion du mode privacy caméra, pilotage du diffuseur d'huiles essentielles.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📁 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 (niveau fonctionnel)
|
||||||
|
│ └── 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 # Retiré du dépôt public (détails sensibles)
|
||||||
|
├── 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, 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 ou identifiant sensible n'est commitée. Les fichiers de configuration sont systématiquement **anonymisés ou fournis sous forme de templates**.
|
||||||
|
>
|
||||||
|
> Par ailleurs, les détails opérationnels précis du système d'alarme (commandes de pilotage à distance, scénarios exacts d'armement/désarmement) et les horaires de présence au domicile (plages de chauffage) sont volontairement omis de la documentation publique, pour des raisons de sécurité physique.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📌 À 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.*
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 180 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 157 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 36 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 269 KiB |
Reference in New Issue
Block a user