Le contexte
On a tous le meme probleme : allumer un PC a distance, ca marche bien (Wake-on-LAN, cartes Tuya, smart plugs…). Mais l’eteindre proprement, c’est une autre histoire.
De mon cote, j’ai essaye les cartes WiFi Tuya — une qui envoie le magic packet WOL, et une autre branchee directement entre la carte mere et le bouton power du PC. Pour allumer, impeccable. Pour eteindre… disons que c’est aleatoire.
Gladys n’a pas d’integration native pour eteindre un PC (pas de script, pas de SSH). Comme pour la chatiere Sure Petcare, la solution c’est un petit agent MQTT qui tourne sur le PC et attend les ordres.
Encore une fois, developpe avec Claude Code. Le script complet a ete code, teste et deploye en une session.
L’architecture
Scene Gladys Mosquitto PC Windows
("Envoyer message MQTT") ─────► (broker MQTT) ─────────► agent.py
│
◄─────────────────────────────────────┘
reponse JSON + statut online/offline
Un script Python (~35 Mo RAM, 0% CPU) qui :
-
Se connecte a votre broker Mosquitto
-
Ecoute un topic MQTT pour les commandes
-
Execute l’action demandee (shutdown, restart, lock, test)
-
Repond en JSON et maintient un statut online/offline (LWT)
Ce qu’il faut
-
Gladys avec l’integration MQTT configuree (Mosquitto)
-
Python 3.10+ installe sur le PC Windows a controler
-
Le PC et le NAS/broker sur le meme reseau local
Commandes disponibles
| Payload MQTT | Effet |
|---|---|
test |
Repond avec hostname, OS, heure — ne fait rien au PC |
shutdown |
Eteint le PC (delai configurable, 5s par defaut) |
restart |
Redemarre le PC |
lock |
Verrouille la session Windows |
cancel |
Annule un shutdown/restart en cours |
La commande test est indispensable pour valider que votre scene Gladys fonctionne sans risquer d’eteindre le PC sur lequel vous etes en train de travailler…
Etape 1 : Installer l’agent sur le PC
Creez un dossier sur le PC, par exemple C:\pc-shutdown-agent\.
requirements.txt :
paho-mqtt>=2.0
Installer la dependance :
pip install -r requirements.txt
agent.py — le code complet est sur GitHub :
david-digitis/pc-shutdown-agent
Copiez agent.py dans votre dossier.
Etape 2 : Configurer
Creez un fichier .env a cote de agent.py :
# Nom du PC (utilise dans les topics MQTT)
PC_NAME=pc-bureau
# IP de votre broker Mosquitto (votre NAS, Raspberry Pi, etc.)
MQTT_HOST=192.168.x.x
MQTT_PORT=1883
# Delai avant extinction (en secondes, vous laisse le temps d'annuler)
SHUTDOWN_DELAY=5
Le PC_NAME est important : c’est lui qui determine les topics MQTT. Si vous avez plusieurs PC, chacun a son propre nom et ses propres topics.
Etape 3 : Tester
cd C:\pc-shutdown-agent
python agent.py
Vous devriez voir :
2026-03-22 08:45:39 [INFO] PC Shutdown Agent v1.1 — pc_name=pc-bureau
2026-03-22 08:45:39 [INFO] MQTT broker: 192.168.x.x:1883
2026-03-22 08:45:39 [INFO] Connected to MQTT 192.168.x.x:1883
2026-03-22 08:45:39 [INFO] Subscribed to pc-agent/pc-bureau/command
2026-03-22 08:45:39 [INFO] TEST ping received
2026-03-22 08:45:39 [INFO] Agent running — waiting for commands...
Depuis votre broker (ou via docker exec si Mosquitto est en Docker) :
# Envoyer un test
mosquitto_pub -t "pc-agent/pc-bureau/command" -m "test"
# Voir la reponse
mosquitto_sub -t "pc-agent/pc-bureau/response" -C 1
Reponse :
{
"action": "test",
"status": "ok",
"pc_name": "pc-bureau",
"hostname": "Corsair-Bureau",
"platform": "Windows-11-10.0.26200-SP0",
"time": "2026-03-22T06:53:09.076466+00:00"
}
Etape 4 : Scene Gladys
Creez une scene avec l’action « Envoyer un message MQTT » :
-
Topic :
pc-agent/pc-bureau/command -
Message :
shutdown
Conseil : commencez avec
testcomme message pour valider le cablage, puis passez ashutdownquand vous etes sur.
Vous pouvez declencher cette scene depuis le dashboard, un bouton, une autre scene (mode nuit, mode absent…), ou ce que vous voulez.
Etape 5 : Demarrage automatique (optionnel)
Pour que l’agent se lance tout seul au demarrage de Windows sans fenetre console, le repo inclut un install.bat qui cree un raccourci dans le dossier Startup de Windows.
Il utilise pythonw (Python sans console) pour que ce soit completement silencieux.
Alternative manuelle : creer un raccourci dans %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\ qui pointe vers pythonw C:\pc-shutdown-agent\agent.py.
Plusieurs PC
Deployez le meme script sur autant de PC que vous voulez. Changez juste PC_NAME dans le .env de chaque machine :
# PC du bureau
PC_NAME=pc-bureau
# → topic: pc-agent/pc-bureau/command
# PC de la chambre
PC_NAME=pc-chambre
# → topic: pc-agent/pc-chambre/command
Chaque PC a ses propres topics, pas de conflit.
Topics MQTT — resume
| Topic | Direction | Contenu |
|---|---|---|
pc-agent/{PC_NAME}/command |
Gladys → PC | Commande (shutdown, test, etc.) |
pc-agent/{PC_NAME}/response |
PC → Gladys | Reponse JSON |
pc-agent/{PC_NAME}/status |
PC → Gladys | online / offline (automatique via LWT) |
Consommation
-
RAM : ~35 Mo
-
CPU : ~0% (dort sur une socket, ne se reveille que quand il recoit une commande)
-
Reseau : 1 connexion TCP persistante vers le broker MQTT
Points techniques
-
Utilise
paho-mqttv2 avec CallbackAPIVersion.VERSION1 — la v2 a un bug de reconnexion en boucle avec Mosquitto (session taken over) -
loop_start()au lieu deloop_forever()— plus stable -
Chargeur
.envintegre (pas besoin depython-dotenv) -
LWT (Last Will and Testament) : si l’agent plante ou si le PC s’eteint brutalement, Mosquitto publie automatiquement
offlinesur le topic status -
Le delai de 5 secondes avant extinction vous laisse le temps d’envoyer
cancelen cas d’erreur
Limitations
-
Windows seulement pour le moment (les commandes Linux sont presentes dans le code mais pas testees)
-
Pas de Wake-on-LAN integre — c’est un agent qui tourne sur un PC allume, donc par definition il ne peut pas allumer un PC eteint. Pour le WOL, utilisez vos solutions existantes (Tuya, smart plug, ou un script WOL sur votre NAS)
Code source
GitHub : david-digitis/pc-shutdown-agent
MIT License — faites-en ce que vous voulez.
Teste sur un NAS Synology DS1520+ (Mosquitto en Docker) + PC Windows 11 avec Gladys v4.