Commit Graph

19 Commits

Author SHA1 Message Date
07b0b8c1b5 Relire wifi_channel toutes les 10s pour mise à jour auto après switch_band.sh 2026-07-20 19:32:09 +02:00
c5cba6a318 Lire wifi_channel depuis /etc/wifibroadcast.cfg au démarrage (robustesse) 2026-07-20 19:02:41 +02:00
f978bf31dd Simplifier overlay — afficher THROTTLED seulement si throttling actif 2026-07-20 18:55:20 +02:00
84527b9820 Ajouter affichage de la bande (2.4GHz/5GHz) dans l'overlay 2026-07-20 18:51:36 +02:00
bb8facba69 Revert "Désactiver garbage collection automatique pour éliminer les freezes périodiques MJPEG"
This reverts commit f23eb628a3.
2026-07-19 23:50:02 +02:00
f23eb628a3 Désactiver garbage collection automatique pour éliminer les freezes périodiques MJPEG
GC Python génération 0 (seuil 700 objets) peut déclencher des pauses
d'arrêt-du-monde (~1-2s) périodiquement quand l'encodage JPEG crée beaucoup
d'objets temporaires NumPy. Désactiver le GC automatique pendant l'exécution
élimine ces jitters, en particulier les freezes observés toutes les ~11s.

Cleanup propre à l'arrêt via gc.collect() manuel.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VmaVcCrWp2QG7hkEDk15Cv
2026-07-19 23:46:03 +02:00
f8364b703f Ajustements visuels pyramide RSSI : base plate, largeur réduite, remplissage inversé
- Réduction largeur sommet : pyr_w 70 → 49 px (-30%)
- Base plate : min_bottom_ratio=0.35 évite la pointe fine
- Remplissage inversé : i >= (N - fill_count) pour progression bas→haut
- Signal faible = segment bas s'allume seul ; signal fort = remplissage vers haut

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VmaVcCrWp2QG7hkEDk15Cv
2026-07-19 22:34:32 +02:00
3927264eea Ajuster pyramide RSSI : réduire à 6 segments et remonter
- N : 10 → 6 segments (garder les 6 du bas, plus fins)
- pyr_h : 90 → 54 pixels (proportionnel, même hauteur segment)
- margin_top : 10 → 6 pixels (remonte la pyramide)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VmaVcCrWp2QG7hkEDk15Cv
2026-07-19 22:01:19 +02:00
e0fd4a64bf Ajouter overlay RSSI (pyramide inversée) au flux MJPEG
- Thread rssi_loop() : lecture API JSON locale (127.0.0.1:8103), parse flux video rx pour extraire RSSI moyen des antennes
- Fonction draw_rssi_pyramid() : pyramide inversée (base large en haut, pointe en bas), 10 segments, remplissage proportionnel au RSSI
- Code couleur : vert (RSSI > -60 dBm), cyan (-60 à -70 dBm), rouge (< -70 dBm)
- Positionnement : haut à droite du frame
- Reconnexion automatique en cas de redémarrage wfb-server-gs
- Intégration dans capture_loop après draw_overlay()

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VmaVcCrWp2QG7hkEDk15Cv
2026-07-19 21:54:37 +02:00
b472c70ea2 fix: MJPEG server threaded (evite le blocage mono-client, backlog TCP) 2026-07-18 15:37:28 +02:00
0620d9a8a7 fix: sideband socket IPv4 pur (tunnel WFB-NG point-a-point, dual-stack peu fiable) 2026-07-18 15:35:06 +02:00
24ae29b0d7 fix: socket sideband UDP 5602 en dual-stack IPv4+IPv6
Le socket AF_INET seul ne recevait pas les stats Pi Zero envoyées en IPv6
via Mycelium. Passage en AF_INET6 + IPV6_V6ONLY=0 pour accepter les deux
familles sur un seul socket (Freebox IPv4 en dev, Mycelium IPv6 en prod).
2026-07-01 16:56:20 +02:00
a9e4f913ec fix: reconnexion continue au flux GStreamer au lieu d'un timeout fixe
L'ancienne sonde abandonnait définitivement après 15s et restait bloquée
en mode synthétique même quand le flux réel arrivait juste après (latence
Mycelium variable, attente du premier keyframe H.264). Remplacé par un
thread de fond (gstreamer_watcher) qui retente en continu et bascule la
source active dès qu'une frame valide est lue, y compris après une perte
de flux en cours de route. Démarrage MJPEG immédiat, plus d'attente bloquante.
2026-07-01 16:18:38 +02:00
1c945fc921 fix: augmenter le timeout de sonde GStreamer à 15s (4s insuffisant)
Le décodeur H.264 a besoin du temps d'attendre le premier keyframe/SPS-PPS,
surtout via Mycelium où la latence est plus élevée qu'en local. 4s faisait
parfois basculer en mode synthétique alors que le flux réel arrivait juste après.
2026-07-01 15:56:27 +02:00
4857adb8da fix: pipeline GStreamer dual-stack IPv4+IPv6 pour réception flux Pi Zero
Le flux RTP arrive maintenant via Mycelium en IPv6, mais udpsrc bindé
sur "::" seul ne reçoit pas les paquets IPv4 (pas de dual-stack sur ce
Jetson, IPV6_V6ONLY actif). Fusion de deux udpsrc (0.0.0.0 + ::) via
funnel pour accepter Freebox (dev, IPv4) et Mycelium (prod, IPv6).
2026-07-01 15:36:11 +02:00
09a789f20c fix: clés JSON sideband alignées sur payload Pi Zero
temp → temp_c, cpu → cpu_pct pour correspondre exactement
au format {ts, width, height, fps, encoder, bitrate_kbps,
temp_c, cpu_pct, throttled, uptime_s} émis par le Pi Zero.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 18:10:13 +02:00
74aa62b1cc feat: thread sideband UDP 5602 + overlay stats Pi Zero sur MJPEG
Reçoit JSON Pi Zero (width, height, fps, encoder, temp, cpu, throttled)
toutes les secondes via UDP 5602. Affiche un overlay cv2 semi-transparent
(fond noir 55%) en haut à gauche de chaque frame MJPEG :
  ligne 1 : "1280x720 | 15fps | hw | 56.2C"
  ligne 2 : "CPU 42% | ok / THROTTLED"
Variable globale _pi_stats protégée par _stats_lock (threading.Lock).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 17:47:40 +02:00
0d628d0431 feat: YOLOv8 + MJPEG dans receive_cam.py, fallback synthétique numpy
- Inférence yolov8n.pt sur chaque frame GStreamer
- Fallback frame noir numpy si Pi Zero absent (pas de download)
- Timeout 4s sur sonde GStreamer via thread dédié
- MJPEG annoté exposé sur port 5601

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 20:08:54 +02:00
2dda633412 feat: réception flux H.264 Pi Zero → MJPEG Jetson
- receive_cam.py : pipeline GStreamer UDP 5600 → MJPEG HTTP 5601
- CLAUDE.md : Pi Zero IP, ports 5600/5601, commandes de session caméra

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 18:50:59 +02:00