🛠 Logger Python température + qualité Wi-Fi avec gestion de pannes réseau

Raspberry Pi Zero 2 W (2021) — Fiche carte · avance · Schéma : IMG-zero-2w-avance-2-logger-temperature-wifi.svg — Zero 2 W envoyant périodiquement température et RSSI vers un serveur local, gestion d'erreurs brcmfmac, file d'attente en mémoire.

Objectifs

Construire le service de supervision adapté AUX DEUX DÉFAUTS DOCUMENTÉS de la Zero 2 W : le throttling à 85 °C et le radio instable (erreurs « brcmfmac ... failed: -5 », coupures suivies après l'upgrade Bookworm — raspberrypi/firmware#1962). Le programme doit donc survivre au réseau : timeouts courts, capture des erreurs, boucle qui ne meurt jamais, et journalisation locale.

Matériel

Code complet

#!/usr/bin/env python3
"""Température SoC + RSSI Wi-Fi vers un tableau de bord local.
Pensé pour la Zero 2 W : throttling à 85 °C et radio 2,4 GHz capricieux."""
import subprocess, time
import requests

WLAN = "wlan0"
URL = "http://192.168.1.10:8080/ingest"

def soc_temp_c:
    # vcgencmd parle au GPU : lecture fiable (les zones sysfs traînent).
    out = subprocess.check_output(["vcgencmd", "measure_temp"], text=True)
    return float(out.split("=")[1].split("'")[0])   # "temp=48.3'C"

def wifi_rssi:
    out = subprocess.run(["iw", "dev", WLAN, "station", "dump"],
                         capture_output=True, text=True).stdout
    for line in out.splitlines:
        if "signal" in line:
            return int(line.split[1])   # dBm : > -70 bien, < -85 marginal
    return None

while True:
    payload = {"host": "zero2w", "temp_c": soc_temp_c, "rssi_dbm": wifi_rssi}
    try:
        requests.post(URL, json=payload, timeout=5)
    except requests.RequestException as e:
        # Les micro-coupures brcmfmac arrivent : on journalise, on continue.
        print("upload rate:", e, flush=True)
    time.sleep(60)

Service systemd (redémarrage auto si le process meurt vraiment) avec « Restart=on-failure » et « RestartSec=10 ».

Vérification attendue

Le serveur reçoit un POST par minute avec température et RSSI. Test de robustesse : couper le Wi-Fi côté box (« sudo ip link set wlan0 down ») — le script affiche « upload rate » puis reprend dès le retour du réseau sans redémarrage. En charge CPU, on observe la corrélation température↔fréquence dans les données.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels