# Analyse v1 (etat des lieux) ## Objectif - Agent MQTT de pilotage PC pour Home Assistant. - Publie des capteurs (CPU, RAM, batterie, GPU, IP) et expose des commandes (shutdown, reboot, ecran, frequence CPU). ## Technologies et dependances - Python 3 - paho-mqtt - psutil - pynvml (GPU, selon variante) - systemd (service Linux) ## Points d'entree / scripts - `main.py` : variante desktop + GPU temp/memoire, shutdown. - `main_prog.py` : variante laptop (Lenovo), shutdown/reboot/ecran/freq CPU + telemetrie + slider. - `main-lenovo-bureau.py` : variante desktop (CPU/RAM), shutdown. - `mqtt_unvai.py` : publie availability=offline puis se termine. - `mqtt_pilot.service` : service systemd pointant vers `main_prog.py`. ## MQTT (topics et payloads) Les topics sont hardcodes et varient selon le script. ### Variante main_prog.py (device_name = yoga14) - Discovery: `homeassistant//yoga14//config` (retain=true) - Commandes: - `pilot/yoga14/shutdown/set` payload OFF -> shutdown - `pilot/yoga14/reboot/set` payload OFF -> reboot - `pilot/yoga14/screen/set` payload ON/OFF -> busctl (GNOME) - `pilot/yoga14/cpu_frequency_slider/set` payload float GHz -> write /sys - States: `pilot/yoga14//state` (retain=true) - Availability: `pilot/yoga14//available` (retain=true) ### Variante main.py / main-lenovo-bureau.py (hostname dynamique) - Discovery: `homeassistant////config` (retain=true) - Commandes: - `pilot//shutdown/available` payload OFF -> shutdown - States: `pilot//` (retain=true) - Availability: `pilot///available` (retain=true) Auth/TLS/LWT: Non trouve (pas de TLS ni LWT, username/password vides). ## Commandes systeme - Shutdown : `sudo shutdown -h now` - Reboot : `sudo reboot` - Ecran : `busctl --user set-property ... PowerSaveMode i 1/0` - Frequence CPU : ecriture `/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed` ## Service systemd - Fichier: `mqtt_pilot.service` - ExecStart: `/home/gilles/pilot/monenv/bin/python3 /home/gilles/pilot/main_prog.py` - Restart: on-failure - ExecStopPost: `mqtt_unvai.py` (publie offline) ## Config - Hardcode dans les scripts (broker, topics, device_name, intervals). - Pas de .env ou YAML. ## Points faibles - Securite: pas d'auth/TLS, commandes privilegiees, pas d'allowlist. - Config: hardcodee, duplication entre scripts. - MQTT: pas de LWT, pas de QoS explicite, pas de schema de payload formalise. - Observabilite: logs stdout simples, pas de tests. ## Ce que la v2 doit corriger - Contrat MQTT unique et documente. - Config YAML centralisee. - Auth/TLS optionnel, allowlist et validation des payloads. - LWT + status + capabilities. - Separation Linux/Windows avec backends.