Aller au contenu principal

API locale (REST)

Le daemon expose un serveur HTTP REST léger, implémenté directement sur les sockets POSIX (LocalApi), écoutant sur 0.0.0.0:8080. C'est l'interface qu'utilise l'IHM Qt et tout client local.

:::info Autonomie Cette API fonctionne indépendamment du réseau et du hub. Même si la connexion centrale est perdue, l'écran tactile du node continue de piloter le matériel. :::

Points d'entrée

MéthodeCheminDescription
GET/Instantané complet du node (JSON).
GET/statusÉtat courant (relais, vannes, compteurs).
GET/syncInstantané de synchronisation desired/reported des entités locales.
GET/sqliteDump SQLite local enrichi avec topology.boards (chaque device expose device_type).
POST/relay/<id>/<action>Commande un relais : on, off, toggle.
POST/valve/<id>/<action>Commande une vanne : open, close.
POST/valve/<id>/<action>/<seconds>Ouvre une vanne pour une durée donnée.
POST/sync/desired/<domain>/<id>/<state>Écrit un état désiré puis applique localement (relay, valve).
POST/sync/reported/<domain>/<id>/<state>/<version>Met à jour l'état reporté (ACK edge) avec version monotone.

Exemples

# Lire l'état complet
curl http://<node>:8080/status

# Allumer le relais 1
curl -X POST http://<node>:8080/relay/1/on

# Basculer le relais 2
curl -X POST http://<node>:8080/relay/2/toggle

# Ouvrir la vanne 3 pendant 120 secondes
curl -X POST http://<node>:8080/valve/3/open/120

# Fermer la vanne 3
curl -X POST http://<node>:8080/valve/3/close

# Lire la vue de synchronisation desired/reported
curl http://<node>:8080/sync

# Définir l'état désiré d'un relais
curl -X POST http://<node>:8080/sync/desired/relay/1/on

# Reporter un état appliqué depuis une carte edge
curl -X POST http://<node>:8080/sync/reported/relay/1/on/12

Format de réponse

Les réponses GET renvoient un instantané JSON produit par Node::state_json(), reflétant l'état de tous les relais, vannes et compteurs.

Pour /sqlite, le bloc topology.boards contient la liste des cartes/devices connectés. Chaque device y expose désormais systématiquement device_type (ex: controller, bridge, displayer).

Implémentation

LocalApi::start(bind, port, error) crée le socket, l'attache et lance un thread d'écoute. Chaque requête est routée vers la surface de commande de Node (cmd_relay, cmd_valve), ce qui garantit une source de vérité unique pour l'état, partagée avec MQTT et le scheduler.

La synchronisation desired/reported est persistée dans SQLite (sync_state) pour permettre la reprise après reboot et la réconciliation avec les cartes embarquées.