Files
pilot/docs/architecture_v2.md
Gilles Soulier c5381b7112 Pilot v2: Core implementation + battery telemetry
Major updates:
- Complete Rust rewrite (pilot-v2/) with working MQTT client
- Fixed MQTT event loop deadlock (background task pattern)
- Battery telemetry for Linux (auto-detected via /sys/class/power_supply)
- Home Assistant auto-discovery for all sensors and switches
- Comprehensive documentation (AVANCEMENT.md, CLAUDE.md, roadmap)
- Docker test environment with Mosquitto broker
- Helper scripts for development and testing

Features working:
 MQTT connectivity with LWT
 YAML configuration with validation
 Telemetry: CPU, memory, IP, battery (Linux)
 Commands: shutdown, reboot, sleep, screen (dry-run tested)
 HA discovery and integration
 Allowlist and cooldown protection

Ready for testing on real hardware.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-30 06:23:00 +01:00

100 lines
2.8 KiB
Markdown

<!-- Codex created 2025-12-29_0224 -->
# Architecture v2 (Rust)
## Vue d'ensemble
- Binaire Rust unique par OS (Linux/Windows).
- Modules separes pour MQTT, telemetry, commands, HA discovery.
- Backends OS selectionnes via YAML.
## Diagramme ASCII
[config.yaml] -> [runtime] -> [mqtt client] <-> [broker]
| |-> discovery/status/capabilities
| |-> publish states
| |-> receive commands
|
+-> [telemetry providers]
+-> [commands providers]
+-> [ha discovery]
+-> [platform backends]
## Structure du projet (reference)
```
pilot-v2/
Cargo.toml
src/
main.rs
lib.rs
config/
mqtt/
ha/
telemetry/
commands/
platform/
linux/
windows/
runtime/
security/
```
## Contrat MQTT (stable)
Base topic: `pilot/<device>/...`
### Topics
- `pilot/<device>/availability` : online/offline (LWT recommande)
- `pilot/<device>/status` : JSON (version, os, uptime, last_error, backends)
- `pilot/<device>/capabilities` : JSON (features actives)
- `pilot/<device>/state/<name>` : capteurs et etats systeme
- `pilot/<device>/cmd/<action>/set` : commandes
### QoS / retain
- Discovery: retain=true, qos=1
- States: retain configurable (defaut true), qos=0 ou 1 selon config
- Commands: retain=false, qos=0
- Availability: retain=true (LWT possible), qos=1
### Home Assistant discovery
- Prefix: `homeassistant`
- Discovery payloads conformes HA (device_info, unique_id, state_topic, availability_topic, command_topic).
- Lien discovery -> topics v2 (state/cmd).
## Schema JSON (exemples)
- status:
- `{ "version": "2.0.0", "os": "linux", "uptime_s": 1234, "last_error": "", "backends": {"power":"logind", "screen":"gnome_busctl"} }`
- capabilities:
- `{ "telemetry": ["cpu_usage","cpu_temp","memory"], "commands": ["shutdown","reboot","sleep","screen"], "gpu": false }`
## Flux MQTT (Mermaid)
Telemetry:
```mermaid
flowchart LR
subgraph Agent
T[Telemetry Providers] --> M[MQTT Client]
end
M -->|state/<name>| B[Broker MQTT]
M -->|status/capabilities| B
M -->|availability| B
B -->|Discovery| H[Home Assistant]
```
Commandes:
```mermaid
flowchart LR
H[Home Assistant] -->|cmd/<action>/set| B[Broker MQTT]
B -->|cmd/<action>/set| M[MQTT Client]
M --> C[Command Handlers]
C --> P[Platform Backend]
P -->|result/state| M
M -->|state/<name>| B
```
## Traits internes
- `TelemetryProvider` : read() -> map name->value
- `PowerControl` : shutdown/reboot/sleep/hibernate
- `ScreenControl` : screen_on/screen_off
## Plateformes
- Linux: logind/polkit ou sudoers, gnome busctl ou x11 xset.
- Windows: winapi_session ou external_tool (limite service vs session).
<!-- Codex modified 2025-12-29_0224 -->