Contents
- 1 Intro:
- 2 Prérequis
- 3 Créer un dépôt GitHub
- 4 Préparer l’accès SSH vers GitHub
- 5 Créer le fichier .gitignore
- 6 Initialiser le dépôt Git dans Home Assistant
- 7 Faire le premier commit manuel
- 8 Vérifier qu’aucun fichier sensible n’est suivi
- 9 Créer le script automatique gitpush.sh
- 10 Ajouter la commande dans Home Assistant
- 11 Créer l’automatisation Home Assistant
- 12 Tester depuis Home Assistant
- 13 Gérer une erreur d’authentification SSH
- 14 Gérer une erreur non-fast-forward
- 15 Réappliquer le .gitignore
- 16 Bonnes pratiques
- 17 Conclusion
Intro:
Dans cet article, je vous guide pas à pas pour mettre en place une sauvegarde automatique de votre configuration Home Assistant vers un dépôt GitHub.
L’objectif est simple : conserver un historique propre de ses fichiers de configuration, retrouver facilement une ancienne version et sécuriser son installation domotique en cas de mauvaise manipulation.
Cette méthode ne remplace pas les sauvegardes complètes de Home Assistant, mais elle est très pratique pour suivre les modifications des fichiers YAML, des scripts, des automatisations, des tableaux de bord ou des fichiers personnalisés.
Prérequis
Avant de commencer, il faut disposer de :
- Home Assistant OS ou Home Assistant Supervised avec accès au dossier
/config. - L’add-on Terminal & SSH ou un accès SSH équivalent.
- Éventuellement l’add-on Studio Code Server pour modifier les fichiers plus confortablement.
- Un compte GitHub.
- Un dépôt GitHub, privé de préférence.
- Quelques notions de base en ligne de commande.
L’accès au terminal est indispensable, car nous allons initialiser un dépôt Git directement dans le dossier de configuration de Home Assistant.
Créer un dépôt GitHub
Connectez-vous à GitHub, puis créez un nouveau dépôt.
Je conseille de choisir un dépôt privé, afin d’éviter d’exposer publiquement des fichiers liés à votre installation domotique.
Lors de la création du dépôt, vous pouvez le laisser vide :
- sans README ;
- sans fichier
.gitignore; - sans licence.
Cela évite les conflits lors du premier envoi depuis Home Assistant.
Exemple d’URL SSH du dépôt :
git@github.com:VOTRE_COMPTE/VOTRE_DEPOT.git
Remplacez bien VOTRE_COMPTE et VOTRE_DEPOT par vos propres informations GitHub.
Préparer l’accès SSH vers GitHub
Pour que Home Assistant puisse envoyer automatiquement les modifications vers GitHub, le plus propre est d’utiliser une clé SSH dédiée.
Dans le terminal Home Assistant, exécutez :
mkdir -p /config/.ssh
chmod 700 /config/.ssh
ssh-keygen -t ed25519 -C "homeassistant-github" -f /config/.ssh/id_ed25519 -N ""
chmod 600 /config/.ssh/id_ed25519
chmod 644 /config/.ssh/id_ed25519.pub
Affichez ensuite la clé publique :
cat /config/.ssh/id_ed25519.pub
Copiez tout le contenu affiché, puis ajoutez cette clé dans GitHub.
Deux possibilités existent :
- l’ajouter dans les clés SSH de votre compte GitHub ;
- l’ajouter dans les Deploy keys du dépôt, avec l’option Allow write access activée.
Pour un usage dédié à Home Assistant, la solution Deploy key est généralement plus propre, car elle limite cette clé à un seul dépôt.
Créer le fichier .gitignore
Dans le dossier /config, créez un fichier nommé .gitignore.
Ce fichier permet d’exclure les fichiers sensibles, volumineux ou inutiles.
Voici une base adaptée à Home Assistant :
# On ignore tout par défaut
*
# On garde l'arborescence des dossiers
!*/
# Fichiers de configuration et scripts utiles
!*.yaml
!*.yml
!*.md
!*.sh
!*.py
!*.js
!*.css
!*.html
!*.csv
!*.dash
!*.png
!*.jpg
!*.jpeg
!.gitignore
# Fichiers sensibles
/secrets.yaml
/.storage/
/.ssh/
/.cloud/
# Bases de données et fichiers temporaires
*.db
*.db-*
*.log
*.log.*
home-assistant.log*
OZW_Log.txt
# Fichiers générés ou caches
/deps/
/tts/
/__pycache__/
Le point le plus important est de ne pas envoyer secrets.yaml sur GitHub.
Ce fichier contient souvent des mots de passe, des tokens, des adresses IP, des clés API ou d’autres informations sensibles.
Initialiser le dépôt Git dans Home Assistant
Placez-vous dans le dossier /config :
cd /config
Initialisez le dépôt Git :
git init
git branch -M main
Configurez l’identité utilisée pour les commits :
git config user.email "votre_email@gmail.com"
git config user.name "Votre Nom"
Ajoutez le dépôt GitHub distant :
git remote add origin git@github.com:VOTRE_COMPTE/VOTRE_DEPOT.git
Vérifiez que le dépôt distant est bien configuré :
git remote -v
Faire le premier commit manuel
Avant d’automatiser la sauvegarde, il faut faire un premier envoi à la main.
cd /config
git add -A
git status
git commit -m "Premier commit Home Assistant"
git push -u origin main
Si tout est correctement configuré, les fichiers autorisés par le .gitignore apparaissent maintenant dans votre dépôt GitHub.
Vérifier qu’aucun fichier sensible n’est suivi
Avant d’aller plus loin, il est important de vérifier que les fichiers sensibles ne sont pas suivis par Git.
Exécutez :
git ls-files | grep -E 'secrets.yaml|\.storage|\.ssh|\.db|\.log'
Si la commande ne retourne rien, c’est parfait.
Si un fichier sensible apparaît, retirez-le du suivi Git sans le supprimer du disque :
git rm --cached secrets.yaml
git rm -r --cached .storage
git commit -m "Suppression des fichiers sensibles du suivi Git"
git push origin main
Créer le script automatique gitpush.sh
Créez maintenant un fichier /config/gitpush.sh.
nano /config/gitpush.sh
Collez le contenu suivant :
#!/usr/bin/env bash
set -euo pipefail
LOG_FILE="/config/gitpush-debug.log"
{
echo "----------------------------------------"
echo "Sauvegarde GitHub Home Assistant"
echo "Date : $(date +'%Y-%m-%d %H:%M:%S')"
cd /config
export HOME=/config
export GIT_SSH_COMMAND="ssh -i /config/.ssh/id_ed25519 -o IdentitiesOnly=yes -o StrictHostKeyChecking=accept-new"
git config user.email "votre_email@gmail.com"
git config user.name "Votre Nom"
git add -A
if git diff --cached --quiet; then
echo "Aucun changement à sauvegarder."
exit 0
fi
git commit -m "Sauvegarde auto - $(date +'%Y-%m-%d %H:%M:%S')"
git push origin main
echo "Sauvegarde terminée avec succès."
} >> "$LOG_FILE" 2>&1
Rendez le script exécutable :
chmod +x /config/gitpush.sh
Testez-le manuellement :
/config/gitpush.sh
Consultez ensuite le fichier de log :
cat /config/gitpush-debug.log
Ce script présente plusieurs avantages :
- il journalise les actions dans
/config/gitpush-debug.log; - il ne crée pas de commit vide s’il n’y a aucun changement ;
- il utilise explicitement la clé SSH dédiée ;
- il envoie les modifications vers la branche
main.
Ajouter la commande dans Home Assistant
Dans configuration.yaml, ajoutez :
shell_command:
gitpush: "bash /config/gitpush.sh"
Redémarrez Home Assistant ou rechargez la configuration YAML si votre installation le permet.
Créer l’automatisation Home Assistant
Vous pouvez maintenant créer une automatisation pour lancer la sauvegarde automatiquement.
Par exemple, pour exécuter la sauvegarde toutes les nuits à 03h30 :
alias: GitHub - Sauvegarde automatique Home Assistant
description: "Envoie automatiquement la configuration Home Assistant vers GitHub."
trigger:
- platform: time
at: "03:30:00"
condition: []
action:
- service: shell_command.gitpush
mode: single
À chaque exécution, Home Assistant lancera le script, créera un commit si des fichiers ont changé, puis enverra les modifications vers GitHub.
Tester depuis Home Assistant
Pour tester sans attendre l’heure prévue, allez dans Outils de développement, puis dans l’onglet Services.
Recherchez le service :
shell_command.gitpush
Lancez le service, puis vérifiez le dépôt GitHub.
Vous pouvez également consulter le fichier de log :
cat /config/gitpush-debug.log
Gérer une erreur d’authentification SSH
Si le git push échoue avec une erreur de permission, testez la connexion SSH :
ssh -T -i /config/.ssh/id_ed25519 git@github.com
Si GitHub ne reconnaît pas la clé, vérifiez que la clé publique affichée avec cette commande :
cat /config/.ssh/id_ed25519.pub
est bien ajoutée dans GitHub.
Gérer une erreur non-fast-forward
Cette erreur peut arriver si vous avez modifié le dépôt directement depuis GitHub.
Au lieu de forcer immédiatement l’envoi, commencez par récupérer les modifications distantes :
cd /config
git pull --rebase origin main
git push origin main
Évitez autant que possible cette commande :
git push -f origin main
Elle force l’écrasement de l’historique distant et peut supprimer des modifications présentes sur GitHub.
Si vous devez vraiment forcer l’envoi, préférez :
git push --force-with-lease origin main
Cette commande reste à utiliser avec prudence, mais elle est plus sûre qu’un simple git push -f.
Réappliquer le .gitignore
Si un fichier était déjà suivi par Git avant l’ajout du .gitignore, il continuera à être suivi même s’il est ensuite ajouté dans les exclusions.
Pour réappliquer proprement le .gitignore, exécutez :
cd /config
git rm -r --cached .
git add -A
git commit -m "Réapplication du .gitignore"
git push origin main
Vérifiez ensuite les fichiers suivis :
git status
git ls-files
Bonnes pratiques
Quelques règles simples permettent d’éviter les mauvaises surprises :
- utilisez un dépôt GitHub privé ;
- n’envoyez jamais
secrets.yaml; - n’envoyez jamais le dossier
.storage; - n’envoyez jamais le dossier
.ssh; - gardez une vraie sauvegarde Home Assistant en complément ;
- vérifiez régulièrement que les commits se font bien ;
- consultez
/config/gitpush-debug.logen cas de doute ; - évitez de modifier directement les fichiers sur GitHub si Home Assistant est la source principale.
GitHub est très pratique pour suivre l’évolution des fichiers de configuration, mais ce n’est pas une sauvegarde complète de Home Assistant.
Les sauvegardes natives restent indispensables pour restaurer rapidement l’ensemble du système.
Conclusion
Votre Home Assistant est maintenant capable d’envoyer automatiquement sa configuration vers GitHub.
À chaque modification importante, un commit permet de garder une trace claire de ce qui a changé. C’est particulièrement pratique après une mise à jour, une modification d’automatisation ou un gros nettoyage de configuration.
Cette méthode apporte une vraie sécurité supplémentaire : en cas d’erreur, il devient plus facile de comparer les versions, revenir en arrière ou simplement comprendre ce qui a été modifié.
C’est une solution simple, fiable et très utile pour garder une installation Home Assistant propre, suivie et maîtrisée.
