Aller au contenu principal

Node — Vue d'ensemble

Un node est un Raspberry Pi transformé en automate autonome. Il exécute un daemon C++17 (nodes/agent) et, en option, une IHM tactile Qt6 (nodes/ui).

Anatomie logicielle

L'orchestrateur Node

La classe Node est le cœur : elle câble tous les gestionnaires entre eux et exécute la boucle de contrôle déterministe. C'est l'unique objet auquel s'adressent l'API, le client MQTT et le scheduler.

Elle expose une surface de commande partagée :

bool cmd_relay(const std::string& id, const std::string& action);
bool cmd_valve(const std::string& id, const std::string& action, int seconds);
std::string state_json() const; // instantané complet du node

Les gestionnaires

GestionnaireRôle
GpioManagerAccès bas niveau aux lignes GPIO via libgpiod (/dev/gpiochip0).
RelayManagerPilotage des relais (actifs à l'état bas), persistance de l'état.
ValveManagerVannes avec fermeture de sécurité automatique (300 s par défaut).
MeterManagerComptage d'impulsions (débit, énergie…), valeur cumulée persistée.
SchedulerDéclenchements planifiés (cron journalier : minute + heure).
WatchdogWatchdog matériel (/dev/watchdog, rearmé toutes les ~15 s).
LocalDbPersistance SQLite (/var/lib/leukos/node.db).
MqttClientPublication d'état et réception de commandes via MQTT.
LocalApiServeur HTTP REST local (0.0.0.0:8080).

La boucle de contrôle

Le daemon tourne en boucle à intervalle fixe (poll_interval_ms, 250 ms par défaut) :

  1. Lecture des entrées (compteurs, contacts).
  2. Application de la logique (fermeture auto des vannes, déclenchements du scheduler).
  3. Mise à jour de l'état et persistance des changements.
  4. Publication périodique de l'état sur MQTT (~2 s).

Le watchdog matériel garantit le redémarrage si la boucle se bloque.

Configuration

Le node se configure via /etc/leukos/node.json : identifiant, relais, vannes, compteurs, plannings, paramètres MQTT et intervalle de boucle.

Pour aller plus loin

  • Daemon C++ — détail des gestionnaires et de la boucle.
  • API locale — les points d'entrée REST du port 8080.
  • MQTT — topics et intégration avec le hub.
  • IHM Qt — l'interface tactile locale.