Télécommande LED pour chambre d'enfant via Home Assistant
- 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>
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user