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

Raspberry Pi Zero 2 W (2021) — Ficha de placa · 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.

Objetivos

Construir el servicio de supervisión adaptado A LOS DOS DEFECTOS DOCUMENTADOS de la Zero 2 W: el throttling a 85 °C y la radio inestable (errores « brcmfmac ... failed: -5 », cortes seguidos tras la actualización a Bookworm — raspberrypi/firmware#1962). El programa debe, por tanto, sobrevivir a la red: tiempos de espera cortos, captura de errores, bucle que nunca muere y registro local.

Hardware

Código completo

#!/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)

Servicio systemd (reinicio automático si el proceso muere realmente) con « Restart=on-failure » y « RestartSec=10 ».

Verificación esperada

El servidor recibe un POST por minuto con temperatura y RSSI. Prueba de robustez: cortar el Wi-Fi desde el router (« sudo ip link set wlan0 down ») — el script muestra « upload rate » y se reanuda tan pronto como vuelve la red sin reinicio. Bajo carga de CPU, se observa la correlación temperatura↔frecuencia en los datos.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales