---
tags: [VPS, home-assistant, shogun, supervision, yunohost]
created: 2026-11-10
---

# VPS-SHOGUN_HOMEASSISTANT — mise en place supervision HA

## Contexte

Home Assistant installé par GRK sur shogun.ovh (app Yunohost `homeassistant`, Core **2026.10.4~ynh1**), accessible en local sur `127.0.0.1:8123` et en public via `homeassistant.shogun.ovh` (derrière le SSO Yunohost → 302). Objectif : donner à OpenCode un accès supervision (état, intégrations en erreur, logs) sans exposer de secret.

**Réseau** : shogun n'est **pas** un datacenter — il est sur le LAN `192.168.100.31/24` (gateway `.100.1` = box), le dongle ZBranch (`ttyUSB0`) y est branché physiquement. GRK a changé de box → l'ancien sous-réseau `192.168.1.x` n'existe plus.

## Ce qui a été fait

### 1. Compte dédié `bot-oc` (Yunohost + HA)

Yunohost n'a **pas de rename user** → suppression de `opencode` + création de `bot-oc` :

```bash
yunohost user delete opencode --purge --force
yunohost user create bot-oc -F "OpenCode" -p "$MDP" -d shogun.ovh
yunohost user permission add homeassistant.main bot-oc
yunohost user group add admins bot-oc    # sous-catégorie user, PAS user update --group
```

- **Permission `homeassistant.main`** : exigée par le provider `command_line` de HA (`ynh_ldap-auth.sh` filtre `permission=cn=homeassistant.main`).
- **Groupe `admins`** YNH → le script LDAP renvoie `group=system-admin` → **compte admin HA** (Repairs, system_log, config_entries accessibles). ⚠️ `admins` est **global** YNH : droit SSO admin sur toutes les apps de shogun, pas seulement HA.

### 2. Auth HA (mécanisme vérifié dans le source du venv)

- Provider unique : `command_line` → `ynh_ldap-auth.sh` (LDAP 127.0.0.1) : credentials + permission + groupe.
- **WebSocket `auth` n'accepte que `access_token`** (schéma `AUTH_MESSAGE_SCHEMA` de `websocket_api/auth.py`) — username/password = flux OAuth HTTP (`/auth/login_flow` → `/auth/token`), non automatisé ici.
- Le token **Long-Lived Access Token** a été créé **dans l'UI** par GRK (profil → bas de page), pas par script.
- Endpoint local : `ws://127.0.0.1:8123/api/websocket` (**pas** `/websocket` qui renvoie 404 sur cette config).

### 3. Secrets (coffre pass, VPS principal)

| Entrée | Contenu |
|---|---|
| `opencode/bot-oc-ldap` | mdp LDAP du compte `bot-oc` |
| `opencode/ha-shogun-token` | Long-Lived Access Token HA (renommé depuis la racine pour cohérence) |

Injection systématique par substitution ; côté shogun, transit par fichier `/tmp` 600 (lu après sudo), jamais en argv ni affiché, supprimé en fin de parcours.

### 4. Supervision (étape 2)

- **Script** `~/.opencode/bin/ha-status.sh` : service systemd + API (`/api/config`) + repairs + ratio `unavailable` + error_log, en **1 seul appel SSH** (token en stdin chiffré, `trap` de nettoyage). Strictement lecture seule.
- **Commande TUI** `/ha-status` (`~/.opencode/commands/ha-status.md`) : rend le rapport + verdict 2-3 lignes.
- **Skill** `shogun-admin` mis à jour (bloc Home Assistant + pièges Yunohost 12).

### 5. Problèmes traités (étape 3)

| Sujet | Action | Résultat |
|---|---|---|
| **Updates HACS bloquées** | relance `update.install` ×2 | ✅ `Bubble-Card v3.4.3` + `weather-radar-card v4.0.0` installées |
| **Repair `http.yaml_still_present_after_migration`** (casse en HA **2027.2**) | backup `configuration.yaml`, retrait du bloc `http:` redondant (le `.storage/http` a `yaml_migration_done: True`, port 8123 + proxies préservés), `check_config` = valid, **restart HA** | ✅ **résolu** (0 repair au boot), backup `.httpfix-*` conservé |
| **34 entités ZHA unavailable** | analyse device registry + erreurs | ✅ **clos = hors tension** : `PR-01`/`PR-03` coupées (normal). Les 74 `DeliveryError` = 1 seul device (détecteur frient SMSZB-120, batterie/signal). Les 5 autres prises répondent. |
| **Caméras ONVIF** (`192.168.1.x`) | scan LAN `192.168.100.x` (box, NAS `.10`, RPi `.32`) | 🟡 **caméras débranchées, laissées tel quel** — le flow ONVIF re-valide la MAC par contact réel, impossible de changer le host hors-ligne. À reconfigurer au branchement sur `.100.51/52`. |
| **mdp caméras** (`admin/…`) | exposé en clair dans une sortie de session | **laissé tel quel** (LAN non exposé, config déjà dans `.storage`) — décision GRK. |
| **4 Repairs initiaux** | détail vérifié | `deprecated_method` (install Core dépréciée) + `hacs.removed` (bar-card abandonné) = **info sans deadline, ignore OK** ; `synology_dsm.missing_backup_setup` (NAS pas de backup) + le `http.yaml` traité. |

## Pièges rencontrés (relevés pour le skill)

- SSH **parallèle** → fail2ban shogun : rester séquentiel.
- Secret distant avant sudo → chemin `/root` refusé (user `shogun`) → **`/tmp` 600**.
- Heredoc script + sudo sur le même stdin → yunohost vole le stdin des sous-commandes → **fd3** (`exec 3<&0`, redirection `<&3`).
- 1ʳᵉ tentative delete `opencode` en erreur LDAP (`No such object`) à cause du parallélisme → auto-résolu à la 2ᵉ passe (`success: True`, gitea/wikijs intacts vérifiés).
- Venv HA : `/var/www/homeassistant/venv/bin/python` (aiohttp dispo, **websockets absent** → client WS via `aiohttp`).
- `reload_core_config` **ne ré-exécute pas** `async_load_config` de l'intégration `http` → un repair créé au *boot* ne se résorbe qu'après un **vrai restart** du service.

## Backlog (non bloquant)

1. **Caméras ONVIF** : au branchement sur `192.168.100.51/52`, reconfig via flow `user→configure` (revalide la MAC). Entrées actuellement en `setup_retry`.
2. **DNS intermittent dnsmasq** (`Timeout while contacting DNS servers` ponctuel → erreurs HACS/alerts) : bénin mais récurrent. Pistes : exclure le scan PTR horaire de HA, ou `dns-forward-max`. Sujet déjà identifié le 01/11.
3. **`homeassistant.deprecated_method`** : installation **Core** dépréciée (blog HA 05/2025) — migration Container/OS à long terme, rien d'urgent.
4. **`hacs.removed` bar-card** : repo abandonné mais carte toujours utilisée → sans risque immédiat.
5. **Détecteur frient SMSZB-120** : `DeliveryError` récurrents → batterie/signal à vérifier.
6. **`synology_dsm.missing_backup_setup`** : NAS sans backup configuré pour l'intégration — à revalider selon le besoin réel.

## Voir aussi

[[03_PROJETS/VPS-SHOGUN]] · [[04_NOTES/VPS-SHOGUN_APT-DNS]] · skill [[80_CONFIG/IA_SKILLS/Shogun-admin]]