first
This commit is contained in:
@@ -0,0 +1,350 @@
|
|||||||
|
# automations-alarm.yaml – Alarmo & Sécurité
|
||||||
|
# Automatisations liées au système d'alarme
|
||||||
|
# Version anonymisée — noms, pièces et identifiants remplacés
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# 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
|
||||||
|
|
||||||
|
- alias: Désarmement via commande Telegram
|
||||||
|
description: Désarme l'alarme via commande bot Telegram
|
||||||
|
triggers:
|
||||||
|
- trigger: event
|
||||||
|
event_type: telegram_callback
|
||||||
|
event_data:
|
||||||
|
command: /desactive_alarme
|
||||||
|
actions:
|
||||||
|
- action: alarmo.disarm
|
||||||
|
data:
|
||||||
|
entity_id: alarm_control_panel.alarmo
|
||||||
|
|
||||||
|
- alias: Armement via commande Telegram
|
||||||
|
description: Arme en mode absence prolongée via commande bot Telegram
|
||||||
|
triggers:
|
||||||
|
- trigger: event
|
||||||
|
event_type: telegram_callback
|
||||||
|
event_data:
|
||||||
|
command: /arme_alarme
|
||||||
|
actions:
|
||||||
|
- action: alarmo.arm
|
||||||
|
data:
|
||||||
|
entity_id: alarm_control_panel.alarmo
|
||||||
|
mode: vacation
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# SURVEILLANCE À DISTANCE
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
- alias: Envoi photos à la demande
|
||||||
|
description: Envoie des photos de toutes les caméras sur commande Telegram
|
||||||
|
triggers:
|
||||||
|
- trigger: event
|
||||||
|
event_type: telegram_callback
|
||||||
|
event_data:
|
||||||
|
command: /photos
|
||||||
|
actions:
|
||||||
|
- repeat:
|
||||||
|
count: 5
|
||||||
|
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
|
||||||
|
- 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
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# 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)
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
|
||||||
|
- alias: Clavier physique avec Alarmo
|
||||||
|
description: Armement/désarmement via clavier Zigbee à code PIN
|
||||||
|
use_blueprint:
|
||||||
|
path: Bygood91/frient_keypad_with_alarmo.yaml
|
||||||
|
input:
|
||||||
|
z2m_keypad_path: zigbee2mqtt/clavier
|
||||||
|
z2m_keypad_path_set: zigbee2mqtt/clavier/set
|
||||||
|
pin_list: !secret alarmo_pin
|
||||||
|
control_panel: alarm_control_panel.alarmo
|
||||||
|
pin_control_panel: !secret alarmo_pin
|
||||||
|
action_arming:
|
||||||
|
- device_id: DEVICE_ID_ALARMO
|
||||||
|
domain: alarm_control_panel
|
||||||
|
entity_id: alarm_control_panel.alarmo
|
||||||
|
type: arm_away
|
||||||
|
action_disarmed:
|
||||||
|
- device_id: DEVICE_ID_ALARMO
|
||||||
|
domain: alarm_control_panel
|
||||||
|
entity_id: alarm_control_panel.alarmo
|
||||||
|
type: disarm
|
||||||
|
code: !secret alarmo_pin
|
||||||
|
action_alarm:
|
||||||
|
- device_id: DEVICE_ID_ALARMO
|
||||||
|
domain: alarm_control_panel
|
||||||
|
entity_id: alarm_control_panel.alarmo
|
||||||
|
type: trigger
|
||||||
|
action_armed_night:
|
||||||
|
- device_id: DEVICE_ID_ALARMO
|
||||||
|
domain: alarm_control_panel
|
||||||
|
entity_id: alarm_control_panel.alarmo
|
||||||
|
type: arm_night
|
||||||
@@ -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,167 @@
|
|||||||
|
# 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
|
||||||
|
|
||||||
|
# Caméra chambre – privacy géré via switch Home Assistant
|
||||||
|
camera_chambre:
|
||||||
|
enabled: true
|
||||||
|
ffmpeg:
|
||||||
|
inputs:
|
||||||
|
- path: rtsp://admin:{CAMERA_PASSWORD}@192.168.1.X:554/stream1
|
||||||
|
roles:
|
||||||
|
- detect
|
||||||
|
detect:
|
||||||
|
enabled: false # Désactivé par défaut (usage ponctuel)
|
||||||
|
width: 1280
|
||||||
|
height: 720
|
||||||
|
fps: 5
|
||||||
|
objects:
|
||||||
|
track:
|
||||||
|
- person
|
||||||
|
# Note : le mode privacy est piloté côté HA via switch.camera_privacy
|
||||||
|
# Frigate voit simplement le flux coupé ou actif
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────
|
||||||
|
# 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,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
|
||||||
@@ -10,10 +10,11 @@ Ce projet est une **infrastructure domotique opérationnelle** tournant 24/7 sur
|
|||||||
|
|
||||||
**Usages principaux :**
|
**Usages principaux :**
|
||||||
|
|
||||||
- Surveillance et sécurisation du logement (alarme, vidéo)
|
- Surveillance et sécurisation du logement (alarme, vidéo, détection fuite)
|
||||||
- Automatisation du quotidien (chauffage, présence, éclairage)
|
- Automatisation du quotidien (chauffage, présence, éclairage, ventilation)
|
||||||
- Optimisation énergétique (suivi Enedis, pilotage des radiateurs)
|
- Optimisation énergétique (suivi Enedis, pilotage des radiateurs)
|
||||||
- Expérimentation IoT maîtrisée (capteurs custom ESPHome/ESP32)
|
- Expérimentation IoT maîtrisée (capteurs custom ESPHome/ESP32, IR blaster)
|
||||||
|
- Notifications en temps réel via **bot Telegram**
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -28,27 +29,44 @@ Ce projet est une **infrastructure domotique opérationnelle** tournant 24/7 sur
|
|||||||
│
|
│
|
||||||
┌──────────────────────┼───────────────────────┐
|
┌──────────────────────┼───────────────────────┐
|
||||||
│ │ │
|
│ │ │
|
||||||
┌────────▼────────┐ ┌────────▼────────┐ ┌─────────▼────────┐
|
┌────────▼────────┐ ┌────────▼─────────┐ ┌────────▼─────────┐
|
||||||
│ Sécurité │ │ IoT & Protocoles│ │ Accès & Admin │
|
│ Sécurité │ │ IoT & Protocoles │ │ Accès & Admin │
|
||||||
│ │ │ │ │ │
|
│ │ │ │ │ │
|
||||||
│ • Alarmo │ │ • Zigbee2MQTT │ │ • Cloudflared │
|
│ • Alarmo │ │ • Zigbee2MQTT │ │ • Cloudflared │
|
||||||
│ • Frigate (NVR) │ │ • ESPHome / ESP32│ │ (CF Tunnel) │
|
│ • Frigate (NVR) │ │ • ESPHome / ESP32 │ │ (CF Tunnel) │
|
||||||
│ • Détection IA │ │ • Heatzy │ │ • WireGuard VPN │
|
│ • Détection IA │ │ • Heatzy │ │ • WireGuard VPN │
|
||||||
│ • Notifications │ │ • Enedis │ │ • SSH / Samba │
|
│ • Bot Telegram │ │ • Enedis │ │ • SSH / Samba │
|
||||||
└─────────────────┘ └──────────────────┘ └──────────────────┘
|
│ • Clavier Frient│ │ • IR Blaster │ │ │
|
||||||
|
└─────────────────┘ └───────────────────┘ └──────────────────┘
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🖥️ Infrastructure matérielle
|
## 🖥️ Infrastructure matérielle
|
||||||
|
|
||||||
| Composant | Détail |
|
| Composant | Détail |
|
||||||
| -------------- | ----------------------------------- |
|
| -------------- | ----------------------------------------------- |
|
||||||
| Machine | Mini-PC dédié |
|
| Machine | Mini-PC dédié |
|
||||||
| Stockage | SSD (fiabilité & performances) |
|
| Stockage | SSD (fiabilité & performances) |
|
||||||
| Hyperviseur | Home Assistant OS (natif) |
|
| Hyperviseur | Home Assistant OS (natif) |
|
||||||
| Coordinateur | Sonoff Zigbee USB Dongle |
|
| Coordinateur | Sonoff Zigbee 3.0 USB Dongle Plus V2 (ember) |
|
||||||
| Fonctionnement | 24/7, environnement isolé |
|
| 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 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -66,11 +84,11 @@ Accès HTTPS distant sans exposition de port sur le routeur.
|
|||||||
|
|
||||||
#### WireGuard VPN
|
#### WireGuard VPN
|
||||||
|
|
||||||
Accès administration sécurisé réservé au tunnel privé.
|
Accès administration via le serveur WireGuard hébergé sur le Proxmox (LXC dédié — cf. `pve-project`).
|
||||||
|
|
||||||
- SSH restreint au VPN
|
- SSH et interfaces admin (Zigbee2MQTT, Frigate) accessibles via VPN uniquement
|
||||||
- Partage Samba limité au LAN
|
- Le seul port WAN ouvert (UDP 51820) est sur le Proxmox, pas sur HAOS
|
||||||
- Aucun port d'administration exposé sur le WAN
|
- HAOS ne fait tourner aucun serveur VPN
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -78,32 +96,46 @@ Accès administration sécurisé réservé au tunnel privé.
|
|||||||
|
|
||||||
#### Alarmo – Système d'alarme personnalisé
|
#### Alarmo – Système d'alarme personnalisé
|
||||||
|
|
||||||
Extension d'alarme intégrée nativement à Home Assistant.
|
Extension d'alarme intégrée nativement à Home Assistant, pilotée via Telegram et clavier physique.
|
||||||
|
|
||||||
- Armement / désarmement (présence, mode nuit, absence)
|
- Armement / désarmement (présence, mode nuit, absence, vacances)
|
||||||
- Détection d'intrusion avec notifications instantanées
|
- Clavier à code physique **Frient** pour armement/désarmement local
|
||||||
- Scénarios conditionnels selon les occupants
|
- 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
|
#### Frigate – NVR intelligent local
|
||||||
|
|
||||||
Vidéosurveillance avec détection d'objets par intelligence artificielle.
|
Vidéosurveillance avec détection d'objets par intelligence artificielle.
|
||||||
|
|
||||||
- Traitement local (aucun cloud vidéo)
|
- Traitement local (aucun cloud vidéo)
|
||||||
|
- Caméras : principales et secondaires (avec mode privacy)
|
||||||
- Réduction des faux positifs par reconnaissance d'objets
|
- Réduction des faux positifs par reconnaissance d'objets
|
||||||
- Enregistrements internes et déclenchement automatique d'alertes
|
- Détection activée/désactivée automatiquement selon l'état de l'alarme
|
||||||
- Preuves vidéo locales en cas d'incident
|
- 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 `/desactive_alarme` : désarmement à distance
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 🌡️ Confort & Énergie
|
### 🌡️ Confort & Énergie
|
||||||
|
|
||||||
#### Heatzy – Gestion du chauffage
|
#### Heatzy – Gestion du chauffage
|
||||||
|
|
||||||
Pilotage dynamique de radiateurs électriques connectés selon présence et horaires.
|
Pilotage dynamique de radiateurs électriques connectés selon des plages horaires fixes.
|
||||||
|
|
||||||
- Programmation horaire et adaptation à la présence
|
- Chauffe matin : 06h00 → 07h40 (mode heat)
|
||||||
- Optimisation de la température pièce par pièce
|
- Chauffe soir : 18h00 → 21h00 (mode heat)
|
||||||
- Réduction directe de la consommation énergétique
|
- Retour en mode `auto` hors plages
|
||||||
|
|
||||||
#### Enedis – Suivi énergétique intelligent
|
#### Enedis – Suivi énergétique intelligent
|
||||||
|
|
||||||
@@ -115,6 +147,37 @@ Intégration officielle du compteur Linky via l'API Enedis.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### 💡 É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
|
### 🌿 IoT personnalisé – ESPHome
|
||||||
|
|
||||||
#### Capteur d'humidité (ESP32)
|
#### Capteur d'humidité (ESP32)
|
||||||
@@ -130,10 +193,11 @@ Capteur de sol développé sur mesure via ESPHome sur microcontrôleur ESP32.
|
|||||||
|
|
||||||
### 📡 Réseau Zigbee local
|
### 📡 Réseau Zigbee local
|
||||||
|
|
||||||
Coordinateur : **Sonoff Zigbee USB Dongle** — géré via **Zigbee2MQTT**.
|
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
|
- Aucun cloud tiers — données traitées localement
|
||||||
- Maîtrise complète des 15 équipements Zigbee supervisés
|
- Broker MQTT : **Mosquitto** (add-on natif HAOS)
|
||||||
|
- Proxy HTTP configuré pour Cloudflare (`trusted_proxies: 172.30.33.0/24`)
|
||||||
- Protocole ouvert, compatible multi-fabricants
|
- Protocole ouvert, compatible multi-fabricants
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -150,6 +214,7 @@ Coordinateur : **Sonoff Zigbee USB Dongle** — géré via **Zigbee2MQTT**.
|
|||||||
| Traitement local des données | Vidéo (Frigate), Zigbee et capteurs ESPHome traités en local |
|
| 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 |
|
| Principe du moindre privilège | Services limités au strict nécessaire |
|
||||||
| Surveillance continue | Logs réguliers, mises à jour et sauvegardes automatisées |
|
| 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
|
### Architecture Zero-Trust domestique
|
||||||
|
|
||||||
@@ -167,13 +232,66 @@ Coordinateur : **Sonoff Zigbee USB Dongle** — géré via **Zigbee2MQTT**.
|
|||||||
|
|
||||||
## ⚡ Automatisations
|
## ⚡ Automatisations
|
||||||
|
|
||||||
Plus de **50 automatisations conditionnelles** actives, couvrant :
|
Les automatisations sont organisées par domaine fonctionnel :
|
||||||
|
|
||||||
- Gestion de la présence (arrivée / départ)
|
### 🚨 Alarme & Sécurité
|
||||||
- Scénarios d'alarme et notifications contextuelles
|
|
||||||
- Pilotage du chauffage selon horaires et occupants
|
| Alias | Déclencheur | Action principale |
|
||||||
- Alertes IoT (plantes, énergie, caméras)
|
| ---------------------------- | ------------------------------------ | ---------------------------------------------- |
|
||||||
- Scènes d'éclairage et routines quotidiennes
|
| 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 Telegram | 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 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -182,21 +300,25 @@ Plus de **50 automatisations conditionnelles** actives, couvrant :
|
|||||||
```text
|
```text
|
||||||
haos-project/
|
haos-project/
|
||||||
│
|
│
|
||||||
├── readme.md # Ce fichier
|
├── readme.md # Ce fichier
|
||||||
│
|
│
|
||||||
├── docs/
|
├── docs/
|
||||||
│ ├── architecture.md # Schémas et choix d'architecture
|
│ ├── architecture.md # Schémas et choix d'architecture
|
||||||
│ ├── network-diagram.md # Plan réseau (segments IoT, VPN, tunnel)
|
│ ├── network-diagram.md # Plan réseau (segments IoT, VPN, tunnel)
|
||||||
│ ├── automations-overview.md # Vue d'ensemble des automatisations
|
│ ├── automations-overview.md # Vue d'ensemble des automatisations
|
||||||
│ └── security-policy.md # Politique de sécurité appliquée
|
│ └── security-policy.md # Politique de sécurité appliquée
|
||||||
│
|
│
|
||||||
└── configs/
|
└── configs/
|
||||||
|
├── homeassistant/
|
||||||
|
│ └── configuration.yaml.example # Config principale HAOS (anonymisée)
|
||||||
├── zigbee2mqtt/
|
├── zigbee2mqtt/
|
||||||
│ └── configuration.yaml.example # Template config Zigbee2MQTT
|
│ └── configuration.yaml.example # Config Zigbee2MQTT (anonymisée)
|
||||||
|
├── alarmo/
|
||||||
|
│ └── automations-alarm.yaml # Automatisations alarme (anonymisées)
|
||||||
├── esphome/
|
├── esphome/
|
||||||
│ └── humidity-sensor.yaml # Config capteur ESP32 (anonymisée)
|
│ └── humidity-sensor.yaml # Config capteur ESP32 humidité
|
||||||
└── frigate/
|
└── frigate/
|
||||||
└── config.yaml.example # Template config Frigate NVR
|
└── config.yaml.example # Template config Frigate NVR
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -208,7 +330,8 @@ haos-project/
|
|||||||
- Hébergement auto-géré sur matériel dédié (Home Assistant OS natif)
|
- Hébergement auto-géré sur matériel dédié (Home Assistant OS natif)
|
||||||
- Mise en place VPN WireGuard et tunnel sortant Cloudflared
|
- Mise en place VPN WireGuard et tunnel sortant Cloudflared
|
||||||
- Administration distante sécurisée sans exposition WAN
|
- Administration distante sécurisée sans exposition WAN
|
||||||
- Gestion multi-protocoles (Zigbee, Wi-Fi, HTTP, MQTT)
|
- Gestion multi-protocoles (Zigbee, Wi-Fi, HTTP, MQTT, IR)
|
||||||
|
- Configuration Mosquitto MQTT broker et Zigbee2MQTT
|
||||||
|
|
||||||
**Cybersécurité**
|
**Cybersécurité**
|
||||||
|
|
||||||
@@ -216,19 +339,21 @@ haos-project/
|
|||||||
- Suppression des dépendances cloud sur les données sensibles (vidéo, capteurs)
|
- Suppression des dépendances cloud sur les données sensibles (vidéo, capteurs)
|
||||||
- Segmentation logique des équipements IoT
|
- Segmentation logique des équipements IoT
|
||||||
- Réduction de la surface d'attaque (aucun port WAN, moindre privilège)
|
- 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 & Automatisation**
|
||||||
|
|
||||||
- Développement de capteurs custom avec ESPHome / ESP32
|
- Développement de capteurs custom avec ESPHome / ESP32
|
||||||
- Conception de plus de 50 automatisations conditionnelles
|
- Conception d'automatisations complexes (conditionnelles, répétitions, délais, templates Jinja2)
|
||||||
- Intégrations API officielles (Enedis, Heatzy)
|
- Intégrations API officielles (Enedis, Heatzy, Telegram Bot)
|
||||||
- Pilotage énergétique et optimisation des usages
|
- Pilotage IR avancé (ventilateur, diffuseur, éclairage ambiant)
|
||||||
|
- Blueprint Zigbee (Clavier physique avec Alarmo)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ⚠️ Sécurité du dépôt
|
## ⚠️ Sécurité du dépôt
|
||||||
|
|
||||||
> Ce dépôt est **public**. Aucune clé privée, token, mot de passe, adresse IP réelle ou information sensible n'est commitée. Les fichiers de configuration sont systématiquement **anonymisés ou fournis sous forme de templates**.
|
> 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**.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user