- Package HA : 8 scripts d'effets (calmes et « boum ») et une automatisation webhook local_only avec liste blanche stricte - Page web autonome (HTML/CSS/JS ES5) tenant sur un écran de lecteur MP3 - Mini APK Android (WebView verrouillée) compilé sans Gradle - Modèles + config.local.env non versionné : aucune valeur réelle (IP, ID du webhook, entité, prénom) dans le dépôt ; deploy.sh génère et déploie, android/build.sh injecte la configuration Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
57 lines
2.2 KiB
Bash
Executable File
57 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Génère les fichiers réels à partir des modèles et les déploie sur Home Assistant.
|
|
#
|
|
# ./deploy.sh --render-only génère seulement dist/ (rien n'est envoyé)
|
|
# ./deploy.sh génère dist/, copie sur HA, vérifie la config
|
|
# et recharge scripts + automatisations
|
|
#
|
|
# Les valeurs réelles viennent de config.local.env (non versionné, voir
|
|
# config.example.env). Le rechargement utilise HA_TOKEN dans .env.
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")"
|
|
|
|
[ -f config.local.env ] || { echo "config.local.env manquant (copier config.example.env)" >&2; exit 1; }
|
|
set -a; . ./config.local.env; set +a
|
|
|
|
echo "== génération de dist/"
|
|
rm -rf dist && mkdir -p dist/packages dist/www/led
|
|
python3 - <<'EOF'
|
|
import os, re, shutil, pathlib
|
|
valeurs = {k: os.environ[k] for k in ("HA_IP", "HA_PORT", "WEBHOOK_ID", "ENTITE", "PRENOM")}
|
|
fichiers = ["packages/led_chambre.yaml"] + [str(p) for p in sorted(pathlib.Path("www/led").iterdir())]
|
|
for src in fichiers:
|
|
dst = os.path.join("dist", src)
|
|
if src.endswith((".yaml", ".html", ".json", ".svg")):
|
|
texte = open(src, encoding="utf-8").read()
|
|
for k, v in valeurs.items():
|
|
texte = texte.replace("__%s__" % k, v)
|
|
reste = sorted(set(re.findall(r"__[A-Z_]+__", texte)))
|
|
if reste:
|
|
raise SystemExit("marqueurs non remplacés dans %s : %s" % (src, reste))
|
|
open(dst, "w", encoding="utf-8").write(texte)
|
|
else:
|
|
shutil.copyfile(src, dst)
|
|
print(" ", dst)
|
|
EOF
|
|
|
|
[ "${1:-}" = "--render-only" ] && exit 0
|
|
|
|
echo "== copie vers $SSH_HOST"
|
|
scp -q dist/packages/led_chambre.yaml "$SSH_HOST:/config/packages/led_chambre.yaml"
|
|
ssh "$SSH_HOST" 'mkdir -p /config/www/led'
|
|
scp -q dist/www/led/* "$SSH_HOST:/config/www/led/"
|
|
|
|
echo "== vérification de la configuration"
|
|
ssh "$SSH_HOST" 'ha core check'
|
|
|
|
echo "== rechargement"
|
|
if [ -f .env ]; then
|
|
set -a; . ./.env; set +a
|
|
for d in script automation; do
|
|
curl -s -m 30 -o /dev/null -w " $d.reload -> %{http_code}\n" -X POST \
|
|
-H "Authorization: Bearer $HA_TOKEN" "http://$HA_IP:$HA_PORT/api/services/$d/reload"
|
|
done
|
|
else
|
|
echo " pas de .env : recharger à la main (Outils de développement → YAML → Scripts et Automatisations)"
|
|
fi
|