Traduit de English par IA ·
Le blocage de l’écran n’y est pour rien. Classique économie d’énergie Wi-Fi sur la puce Broadcom du Pi ; j’ai eu le même problème avec un Pi 3B+ dans un local de pompage. Le Pi ne se met pas en veille, c’est le Wi-Fi qui le fait, et les paquets entrants sont retardés ou perdus. Ton client paho envoie un ping toutes les 60 s, la réponse n’arrive pas à temps, Hermetry ne voit rien pendant le keepalive et ferme la session, d’où keepalive_timeout. Ta connexion SSH réveille la radio, ce qui explique que tout revienne à ce moment-là.
Vérifie :
iw wlan0 get power_save
Power save: on
Pour le désactiver durablement sous Bookworm avec NetworkManager :
sudo tee /etc/NetworkManager/conf.d/wifi-powersave.conf <<EOF
[connection]
wifi.powersave = 2
EOF
sudo systemctl restart NetworkManager
(2 signifie désactivé.) Si tu utilises une image plus ancienne avec dhcpcd, place iw wlan0 set power_save off dans un script exécuté une fois le réseau démarré.
Fais aussi en sorte que ton client se reconnecte automatiquement : client.reconnect_delay_set(1, 120) et loop_forever ou loop_start, pour qu’une courte coupure se rétablisse d’elle-même.
Screen blanking won’t do it. Classic Wi-Fi power saving on the Pi’s Broadcom chip, I had the same with a Pi 3B+ in a pump house. The Pi doesn’t sleep, the Wi-Fi does, and incoming packets get delayed or lost. Your paho client sends a ping every 60 s, the answer doesn’t come back in time, Hermetry sees nothing within the keepalive and closes the session, hence keepalive_timeout. Your SSH wakes the radio up, which is why everything comes back then.
Check it:
iw wlan0 get power_save
Power save: on
Turn it off for good on Bookworm with NetworkManager:
sudo tee /etc/NetworkManager/conf.d/wifi-powersave.conf <<EOF
[connection]
wifi.powersave = 2
EOF
sudo systemctl restart NetworkManager
(2 means disabled.) If you’re on an older image with dhcpcd, put iw wlan0 set power_save off in a script that runs after the network is up.
Also make your client reconnect on its own: client.reconnect_delay_set(1, 120) and loop_forever or loop_start, so a short drop fixes itself.

