Bonsoir à tous,
Un post à double usage, à la fois un mini tuto pour parvenir à créer ce partage et une petite question car bien que cela marche bien cela ne marche pas dans le cas de modules complémentaires.
Objectifs:
Créer un dossier externe au container Home Assistant pour qu’il ne soit pas intégré dans les backup complet (dans mon cas les enregistrements vidéos et des medias ). Opération toujours faisable avec un backup partiel, mais lors de mon dernier crash le backup partiel ne m’a pas permis de repartir rapidement sur une config opérationnel…Je préfères donc rester sur un backup complet, mais sauvegarder plusieurs giga de média ne m’intéresse pas non plus…
L’idée est donc de créer un dossier hors du docker et de le rendre accessible à HA.
Prérequis :
- un accès SSH root lien
- un accès samba/SMB lien ( perso je préfère le faire mais modif dans windows avec un np++)
Mise en garde:
Attention, ce procédé nécessite d’être refait (c’est assez rapide) après chaque update du core et peut entrainer un redémarrage en mode sans échec si les dossiers concernés ne sont pas commenté dans le configuration.yaml avant update.
Mon problème
Le dossier marche bien, il est bien accessible via les script, j’arrive à y enregistrer mes fichiers / vidéos, j’arrive à y accéder via script, via les médias, mais je n’arrive pas à y accéder à partir des autres modules (VSCode / RClone backup / …) Et c’est là que j’ai besoin d’aide … Alors toutes idée est la bienvenue
Tuto Procédure
01 - Identification du container
- Se connecter en SSH en root ( utiliser putty par exemple; ne pas utiliser le module de HA, il ne peut se connecter que dans le container)
- lister les containers
docker ps -a --no-trunc
- identifier le container de homeassistant et noter l’id complet (exemple : d77239076f25d3b84088cda27a6397bbc… environ une trentaine de car)
on le notera CONTAINER_ID pour la suite
02 - Création dossier
HAOS est constitué de plusieurs partitions. Dans mon cas (x86), la partition la plus étendu avec les data est /dev/sda8 et elle est naturellement montée par HA dans le dossier /mnt/data
donc tout dossier que vous y créerez sera sur cette partition et le dossier sera persistant.
Dans mon cas, j’ai créé un dossier de stockage et un sous dossier pour les videos de surveillances
mkdir /mnt/data/external_data
mkdir /mnt/data/external_data/cam_video_records
03 - Copie du fichier de config du container
Perso je préfère bosser sur le fichier dans en environnement plus conviviale que vi, mais si vous maitrisez, pas besoins de faire de copie.
Objectif : copier le fichier config.v2.json dans le dossier share de HA
docker cp /var/lib/docker/containers/CONTAINER_ID/config.v2.json CONTAINER_ID:/share/config.v2.json
(en pensant à remplacer le CONTAINER_ID par votre id homeassistant)
04 - Edition du fichier
Ouvrir le fichier via SMB
\\HOMEASSISTANT\share\config.v2.json
- perso je commence par faire un backup …
- j’ouvre via np++ et je fait un JSFormat (ou pretty format, ou autre ) pour une meilleur lisibilité
- identifier la section « MountPoints »
- y injecter le montage de notre dossier
"MountPoints": {
...
},
"/external_data": {
"Source": "/mnt/data/external_data",
"Destination": "/external_data",
"RW": true,
"Name": "",
"Driver": "",
"Type": "bind",
"Propagation": "rprivate",
"Spec": {
"Type": "bind",
"Source": "/mnt/data/external_data",
"Target": "/external_data"
},
"SkipMountpointCreation": false
}
- minifier et enregistrer le json
05 - Réinjection du fichier de config
(Via SSH/putty en mode root, en pensant à toujours remplacer le CONTAINER_ID par votre id homeassistant)
- on commence par arrêter le container
docker stop CONTAINER_ID
- on le recopie en 2 endroits pour écraser le fichier actif et le fichier persistant qui est réinjecté au reboot
docker cp CONTAINER_ID:/share/config.v2.json /var/lib/docker/containers/CONTAINER_ID/config.v2.json
docker cp CONTAINER_ID:/share/config.v2.json /mnt/data/docker/containers/CONTAINER_ID/config.v2.json
- et on reboot ( sans reloader le container)
reboot
06 - Réglages configuration.yaml
- Editez le fichier de configuration de HA ( via le module VSCode par exemple) pour donner droit d’acces au dossier et injecter celui-ci dans les medias :
homeassistant:
# chemin authorisé pour lecture ecriture :
allowlist_external_dirs:
- /external_data/ # acces au root /mnt/data/external_data
#additionnal media directories
media_dirs:
external_storage: /external_data/
- redémarrer HA ( après une verif de fichier de config)
- votre dossier sera accessible par home assistant
Lors d’une mise à jour de HA, le fichier config.v2.json est écrasé et doit être remodifié
Par contre, pas de créa de dossier à refaire car persistant y compris leur contenu.
Attention, au redémarrage, le fichier configuration.yaml pointant un dossier inexistant, le fichier sera considéré comme erroné et le système bootera en mode sans échec.
A - UPDATES option 1
- avant la mise à jour , commenter les entrées du fichier configuration concernés
homeassistant:
# chemin authorisé pour lecture ecriture :
allowlist_external_dirs:
#- /external_data/ # acces au root /mnt/data/external_data
#additionnal media directories
media_dirs:
#external_storage: /external_data/
- enregistrer et lancer l’update
- après reboot , refaire la manip de modification du fichier config.v2.json via SSH/putty en mode root
- décommenter le fichier configuration.yaml
- rebooter
B - UPDATES option 2
- se connecter en direct à HA (pas via ngnix ou tunnel ou autre car comme le fichier de configuration va merder et que le système va se lancer en mode sans échec, il faut pouvoir voir quand la maj est finie malgré le mode dégradé.
- lancer l’update en mode brutal
- attendre la fin de la maj et le redémarrage mode sans échec
- ouvrir une session SSH en mode root (putty)
- faire la procédure d’édition et remplacement du fichier de config
- reboot
C - UPDATES question BONUS
Existe t-il un moyen de modifier / une syntaxe du fichier configuration.yaml pour y intégrer une sorte de try()catch() ?
Cela permettrait de ne pas avoir à ce prendre la tête avec les lignes à commenter ou le risque de démarrage en mode sans échec …
Ma configuration
System Information
version | core-2024.8.1 |
---|---|
installation_type | Home Assistant OS |
dev | false |
hassio | true |
docker | true |
user | root |
virtualenv | false |
python_version | 3.12.4 |
os_name | Linux |
os_version | 6.6.33-haos |
arch | x86_64 |
timezone | Europe/Paris |
config_dir | /config |
Home Assistant Community Store
GitHub API | ok |
---|---|
GitHub Content | ok |
GitHub Web | ok |
GitHub API Calls Remaining | 5000 |
Installed Version | 1.34.0 |
Stage | running |
Available Repositories | 1391 |
Downloaded Repositories | 19 |
HACS Data | ok |
Home Assistant Cloud
logged_in | false |
---|---|
can_reach_cert_server | ok |
can_reach_cloud_auth | ok |
can_reach_cloud | ok |
Home Assistant Supervisor
host_os | Home Assistant OS 12.4 |
---|---|
update_channel | stable |
supervisor_version | supervisor-2024.08.0 |
agent_version | 1.6.0 |
docker_version | 26.1.4 |
disk_total | 439.4 GB |
disk_used | 15.5 GB |
healthy | true |
supported | true |
host_connectivity | true |
supervisor_connectivity | true |
ntp_synchronized | true |
virtualization | |
board | generic-x86-64 |
supervisor_api | ok |
version_api | ok |
installed_addons | Advanced SSH & Web Terminal (18.0.0), Cloudflared (5.1.17), Frigate (0.14.0), Home Assistant Google Drive Backup (0.112.1), Let’s Encrypt (5.0.27), MariaDB (2.7.1), Mosquitto broker (6.4.1), Nginx Proxy Manager (1.0.1), Node-RED (18.0.5), Rclone Backup (3.3.1), Samba share (12.3.2), Studio Code Server (5.15.0) |
Dashboards
dashboards | 3 |
---|---|
resources | 10 |
views | 30 |
mode | storage |
Recorder
oldest_recorder_run | 10 août 2024 à 09:53 |
---|---|
current_recorder_run | 12 août 2024 à 19:33 |
estimated_db_size | 160.98 MiB |
database_engine | sqlite |
database_version | 3.45.3 |