Aller au contenu principal

Commandes workspace

Le dépôt expose un package.json à la racine pour piloter l'ensemble des actions (Buildroot OS, domotic local, central de supervision, docserver) depuis un point unique.

Principe

Depuis la racine du projet :

npm run <commande>

Si vous êtes dans un autre dossier, utilisez un préfixe absolu :

npm --prefix /var/workspaces/supervisor/apps/leukOS run <commande>

Aide rapide

npm run help

Commandes OS (Buildroot)

CommandeRôle
npm run os:depsVérifie les dépendances hôte requises pour Buildroot.
npm run os:fetchTélécharge Buildroot.
npm run os:configApplique le defconfig par défaut.
npm run os:menuconfigOuvre menuconfig Buildroot.
npm run os:boardsListe les defconfigs disponibles.
npm run os:buildCompile l'image OS (defconfig par défaut).
npm run os:build:rpi02wBuild pour Raspberry Pi Zero 2 W.
npm run os:build:rpi3bplusBuild pour Raspberry Pi 3 B+.
npm run os:build:rpi4Build pour Raspberry Pi 4.
npm run os:build:rpi5Build pour Raspberry Pi 5.
npm run os:build:intel-nucBuild pour Intel NUC.
npm run os:build:amd64Build pour x86-64.
npm run os:build:arm64Build pour ARM64 générique.
npm run os:cleanNettoyage partiel (target/images, conserve la toolchain).
npm run os:clean:allNettoyage complet (.build).

Commandes Domotic local (domotic/hub)

CommandeRôle
npm run hub:runLance le hub avec config.yaml.
npm run hub:run:osLance le hub avec config.os.yaml.
npm run hub:buildCompile le binaire bin/leukos-hub.
npm run hub:testExécute les tests Go.
npm run hub:tidyNettoie/maj go.mod et go.sum.

:::info Prérequis Go Les commandes domotic locales nécessitent Go installé sur la machine (sinon go: not found). :::

Vérification Home Assistant MQTT Discovery

Un script de vérification rapide est disponible pour valider que le hub publie bien l'availability et les payloads MQTT Discovery:

cd /var/workspaces/supervisor/apps/leukOS/domotic/hub
./scripts/verify-ha-discovery.sh

Variables optionnelles:

BROKER_HOST=127.0.0.1 \
BROKER_PORT=1883 \
DISCOVERY_PREFIX=homeassistant \
BASE_TOPIC=leukos \
WAIT_SECONDS=8 \
./scripts/verify-ha-discovery.sh

Prérequis système: mosquitto_sub (et mosquitto_pub pour le test optionnel), timeout.

Historique persistent de republication Discovery

Le hub persiste désormais chaque tentative de homeassistant.republish_discovery dans storage_dir/republish_history.json (succès et erreurs).

Lecture via API hub:

curl http://localhost:8123/api/homeassistant/republish-history

Filtrage/pagination:

curl "http://localhost:8123/api/homeassistant/republish-history?status=error&limit=50&offset=0"

curl "http://localhost:8123/api/homeassistant/republish-history?status=success&q=admin&from=2026-08-01&to=2026-08-20&limit=50&offset=0"

Réponse:

  • items: entrées triées de la plus récente à la plus ancienne.
  • total: nombre total d'entrées correspondant au filtre.
  • limit, offset: fenêtre courante.

Chaque entrée contient at, status, message, actor, source, remote_addr.

Intégrité anti-altération:

  • prev_hash et hash sont calculés côté hub pour chaîner les entrées.
  • L'API vérifie la chaîne avant lecture/export et renvoie 409 si incohérence.
  • En complément, un journal append-only immuable est maintenu dans storage_dir/republish_history.audit.jsonl (une ligne JSON par événement, jamais réécrit).

Filtres supportés:

  • status: success, error, blocked
  • q: recherche texte (message, actor, source, remote_addr)
  • from, to: bornes temporelles (RFC3339 ou YYYY-MM-DD)
  • limit, offset: pagination

Accès:

  • endpoint réservé au rôle admin quand l'auth est activée (403 sinon).

Export serveur signé:

curl -OJ "http://localhost:8123/api/homeassistant/republish-history/export?format=json&limit=100"
curl -OJ "http://localhost:8123/api/homeassistant/republish-history/export.sha256?format=json&limit=100"

Formats: json ou csv.

Le endpoint export inclut aussi l'en-tête X-Content-SHA256.

Contrôle d'intégrité:

curl http://localhost:8123/api/homeassistant/republish-history/integrity

Réponse:

  • mutable_ok: cohérence du snapshot JSON principal.
  • immutable_ok: cohérence de la chaîne append-only.
  • immutable_entries: nombre d'entrées vérifiées.

Console Ops (UI)

Le frontend expose une vue dédiée d'audit: /ops/republish-history.

Fonctions:

  • filtres status/date/recherche,
  • pagination (Charger plus),
  • export JSON/CSV,
  • export JSON/CSV signé côté serveur (.sha256) pour audit.

Commandes UI Domotic (domotic/web)

CommandeRôle
npm run web:installInstalle les dépendances npm du frontend.
npm run web:devLance Vite en mode développement.
npm run web:buildBuild de production du frontend.
npm run web:previewPrévisualise le build web.

Commandes Central (central)

CommandeRôle
npm run central:upDémarre la stack centrale (saturn, venus, mercure, kafka, web, CoreDNS) connectée à PostgreSQL/Elasticsearch externes.
npm run central:downArrête la stack centrale.
npm run central:logsAffiche les logs de la stack centrale.
npm run central:psAffiche l'état des services centraux.
npm run central:web:installInstalle les dépendances npm du frontend central.
npm run central:web:devLance le frontend central en dev.
npm run central:web:buildBuild de production du frontend central.

Commandes Docker projet

Ces commandes pilotent la stack Docker du projet via scripts/docker-project.sh (compose central + override dev). Par défaut elles s'appliquent à tous les services.

CommandeRôle
npm run docker:upDémarre tous les conteneurs.
npm run docker:createCrée les conteneurs sans les démarrer.
npm run docker:recreateRecrée et démarre les conteneurs (--force-recreate).
npm run docker:stopStoppe les conteneurs.
npm run docker:downSupprime tous les conteneurs de la stack.
npm run docker:dowAlias de docker:down.

Application à un service précis:

npm run docker:up -- saturn
npm run docker:create -- venus-web
npm run docker:recreate -- saturn
npm run docker:stop -- saturn
npm run docker:down -- saturn

Sans paramètre, l'action s'applique à toute la stack du projet.

Commandes Config centralisée (config/)

CommandeRôle
npm run config:env:generateGénère les fichiers .env dev (alias de config:env:generate:dev).
npm run config:env:generate:devGénère les .env depuis config/yaml/dev.yml.
npm run config:env:generate:prodGénère les .env depuis config/yaml/prod.yml.
npm run config:env:generate:allGénère dev + prod.

Le workflow recommandé est :

  1. Modifier les sources YAML dans config/yaml/.
  2. Régénérer les .env.
  3. Lancer la stack (central:up) qui régénère déjà le profil dev.

Commandes Infra Generator (infra/)

CommandeRôle
npm run infra:generate:compose -- --tech <tech> --env <env>Génère un docker-compose depuis infra/definitions/<tech>.<env>.yml.
npm run infra:generate:systemd -- --tech <tech> --env <env>Génère des units systemd depuis la même définition.
npm run infra:generate:k8s -- --tech <tech> --env <env>Génère des manifests Kubernetes depuis la même définition.

Exemples :

npm run infra:generate:compose -- --tech elastic --env dev
npm run infra:generate:systemd -- --tech kafka --env dev
npm run infra:generate:k8s -- --tech postgresql --env dev

Commandes Docserver (docserver)

CommandeRôle
npm run doc:devDémarre le docserver en Docker (build + watch).
npm run doc:dev:downArrête et supprime les conteneurs docserver dev.
npm run doc:dev:restartRedémarre le conteneur docserver dev.
npm run doc:logsSuit les logs Docker du docserver.
npm run doc:buildLance un build Docusaurus dans le conteneur.

Commande globale

CommandeRôle
npm run build:allChaîne : OS -> hub -> web -> docs.

Exemples usuels

# Lister les cibles OS
npm run os:boards

# Compiler l'OS pour RPi4
npm run os:build:rpi4

# Démarrer le front domotic local
npm run web:install
npm run web:dev

# Démarrer la supervision centrale
npm run central:up

# Régénérer la config d'env depuis YAML
npm run config:env:generate

# Générer un docker-compose infra pour Kafka
npm run infra:generate:compose -- --tech kafka --env dev

# Rebuilder la documentation
npm run doc:build