Interface web pour surveiller et contrôler un Raspberry Pi en temps réel. Dashboard drag-and-drop · Bluetooth complet · WebSocket natif · Mode simulation intégré.
git clone https://github.com/D-Goth/NeoBerry.git
cd NeoBerry
bash install_neoberry.shLe script se ré-élève seul en sudo — pas besoin de le préfixer. Il installe les dépendances système, crée le virtualenv, génère le .env et configure le service systemd.
# Démarrer
bash run_neoberry.sh --start
# Accès
http://<IP_DU_PI>:5000Connexion avec votre compte Linux (authentification PAM).
git clone https://github.com/D-Goth/NeoBerry.git
cd NeoBerry
python3 -m venv venv
source venv/bin/activate
pip install flask flask-login flask-socketio gunicorn psutil python-dotenv requests
bash run_neoberry.sh --devAccès : http://localhost:5000
Identifiants dev : admin / neoberry
GPIO, Bluetooth et PAM sont automatiquement simulés si non disponibles.
Aucune erreur — le mode simulation s'active seul à la détection.
Toutes les commandes utilisent bash script.sh — le script se ré-élève en sudo automatiquement pour les actions qui en ont besoin.
bash run_neoberry.sh --start # Démarrer
bash run_neoberry.sh --stop # Arrêter
bash run_neoberry.sh --restart # Redémarrer
bash run_neoberry.sh --status # État du service
bash run_neoberry.sh --logs # Logs en direct (Ctrl+C pour quitter)
bash run_neoberry.sh --update # git pull + redémarrage automatique
bash run_neoberry.sh --dev # Mode développement (sans root)
bash run_neoberry.sh --help # Aide- Widgets drag-and-drop et redimensionnables (GridStack.js)
- Layout sauvegardé dans
localStorage, restauré au rechargement - Bouton "Reset layout" pour revenir à la disposition par défaut
- Contrôle des 26 pins BCM (GPIO 2–27)
- Clic gauche → bascule HIGH / LOW
- Clic droit → bascule mode output / input
- Pins optimisés pour usage tactile (tablette, téléphone)
- Badge simulation si RPi.GPIO absent
- 4 jauges doughnut animées — Charge CPU, T° CPU, Charge RAM, T° Carte
- Gradient dynamique : bleu (0%) → vert → jaune → orange → rouge → violet (100%)
- Fréquence CPU en MHz (psutil / vcgencmd / sysfs)
- Swap utilisé/total avec barre de progression
- Détection throttling et sous-tension (vcgencmd, RPi uniquement)
- Top 5 processus CPU + RAM avec barres visuelles
- Upload / Download en temps réel
- Liste des interfaces réseau avec IP
- Statut connexion internet
- 3 jauges : capacité disque %, débit écriture, débit lecture
- Même gradient que les jauges système
- Détection automatique : sysfs (UPS HAT) → INA219 (I2C) → PoE HAT → simulation
- Niveau %, tension, courant, puissance
- Icône batterie animée (charge en cours)
- Graphique historique de tension (Chart.js)
- Modale dédiée, accessible depuis la topbar
- Scan des appareils proches en temps réel (push WebSocket)
- Pairing avec trust automatique
- Connexion / déconnexion
- Gestion de la liste des appareils jumelés
- Envoi de données via RFCOMM (Serial Port Profile)
- Indicateur RSSI, icônes par type d'appareil
- Mode simulation avec appareils fictifs
- Update RPi — lance
apt-get upgradeen arrière-plan (pastille verte) - Reboot RPi — redémarre le Pi (pastille orange)
- Shutdown RPi — éteint le Pi (pastille rouge)
- Restart NeoBerry — redémarre uniquement le service (pastille cyan)
- Liens GitHub et Black-Lab.fr avec effet rainbow
- OS, hostname, architecture, uptime, date dernière MAJ
- PAM — comptes Linux système (production)
- Fallback dev —
admin / neoberrysi PAM indisponible
| v1 | v2 | |
|---|---|---|
| Temps réel | Polling HTTP toutes les 3s | WebSocket push toutes les 2s |
| CSS | 13 fichiers séparés | 1 fichier main.css unifié |
| Navigation | Scroll infini | Dashboard drag-and-drop |
| Bluetooth | Toggle + jauge vide | Module complet BlueZ/dbus |
| Stockage | Absent | 3 jauges + débit I/O |
| Surveillance | CPU/RAM/Temp | + Fréquence, Swap, Throttling, Top procs |
| Batterie | Basique | Auto-détection multi-sources + graphique |
| Scripts | sudo ./script.sh |
bash script.sh (auto-sudo) |
| Serveur | Werkzeug / eventlet | Gunicorn gthread (stable) |
| Horloge | Widget page | Topbar avec jours de la semaine |
| Paquet | Rôle |
|---|---|
| Flask | Framework web |
| Flask-SocketIO | WebSocket temps réel |
| flask-login | Gestion sessions |
| gunicorn | Serveur WSGI production (worker: gthread) |
| psutil | Métriques système |
| python-pam | Authentification PAM (optionnel via pip, disponible via apt) |
| python-dotenv | Variables d'environnement |
| RPi.GPIO | GPIO (RPi uniquement, ignoré sinon) |
| requests | Requêtes HTTP |
⚠️ Pas d'eventlet. NeoBerry v2 utilise le modethreadingde Flask-SocketIO avec Gunicorngthread. Eventlet cause des erreursAssertionError: write() before start_response— ne pas l'installer.
# Base
python3 python3-pip python3-venv git
# Bluetooth (BlueZ dbus — non installable via pip)
python3-dbus python3-gi bluetooth bluez bluez-tools
# GPIO
python3-gpiozero
# PAM
libpam0g-dev python3-pamNeoBerry/
├── install_neoberry.sh ← Installateur (auto-sudo, systemd, groupes)
├── run_neoberry.sh ← Gestionnaire service (start/stop/dev/logs…)
├── requirements.txt
├── DEV_READ.md ← Guide développeur
└── app/
├── app.py ← Flask + SocketIO + routes REST
├── .env.example
├── core/
│ ├── auth.py ← PAM + fallback dev
│ ├── battery.py ← Multi-sources : sysfs / INA219 / PoE / sim
│ ├── bluetooth.py ← BlueZ/dbus + simulation
│ ├── gpio.py ← RPi.GPIO + simulation
│ ├── network.py ← Bande passante + interfaces
│ ├── storage.py ← Disque + I/O
│ └── system.py ← CPU, RAM, temp, freq, swap, throttling, procs
├── static/
│ ├── css/main.css ← Design system (#FF1654, glassmorphisme, tokens)
│ └── js/
│ ├── app.js ← WebSocket, horloge topbar, toasts, actions
│ ├── dashboard.js← GridStack + persistance layout
│ ├── bluetooth.js← Modale Bluetooth complète
│ └── widgets/
│ ├── gpio.js
│ ├── system.js
│ ├── network.js
│ ├── storage.js
│ ├── battery.js
│ └── info.js
└── templates/
├── login.html
└── index.html
| Événement | Sens | Déclencheur | Contenu |
|---|---|---|---|
system_snapshot |
Serveur → Client | Connexion | État complet initial |
metrics |
Serveur → Client | Toutes les 2s | CPU, RAM, temp, réseau, disque, batterie |
gpio_state |
Serveur → Client | Après toggle | { pin, state } broadcast |
bt_device_found |
Serveur → Client | Scan actif | Appareil détecté |
bt_connection_change |
Serveur → Client | Événement BT | { address, connected } |
gpio_toggle |
Client → Serveur | Clic pin | { pin, state } |
Fichier app/.env (généré automatiquement par install_neoberry.sh) :
# Clé secrète Flask — générée aléatoirement à l'installation
NEOBERRY_SECRET=xxxxx
# Environnement
FLASK_ENV=production
# Credentials fallback dev (PAM indisponible uniquement)
# NEOBERRY_DEV_USER=admin
# NEOBERRY_DEV_PASS=neoberrysudo: ./run_neoberry.sh: commande introuvable
# Utiliser bash, pas ./
bash run_neoberry.sh --startLogs d'erreur AssertionError: write() before start_response
# Eventlet installé par erreur — le désinstaller
source venv/bin/activate
pip uninstall eventlet -y
bash run_neoberry.sh --restartBadge WebSocket rouge / "Déconnecté"
bash run_neoberry.sh --logs
# Chercher la cause dans les logs, souvent lié à eventlet (voir ci-dessus)Bluetooth inaccessible
sudo systemctl status bluetooth
sudo usermod -aG bluetooth $USER
# Reconnexion de session nécessaireGPIO : permission refusée
sudo usermod -aG gpio $USER
# Redémarrage nécessairePAM refuse la connexion
# Vérifier que l'utilisateur existe bien sur le système Linux
id $USER
# En mode dev (sans PAM) : utiliser admin / neoberryTempérature affiche 0°C ou —
# Normal sur VM — vcgencmd n'existe que sur RPi
# Sur le Pi, vérifier :
vcgencmd measure_tempCC BY-NC 4.0 — Creative Commons Attribution-NonCommercial 4.0 International
Vous êtes libre de partager et d'adapter ce projet à condition de :
- citer l'auteur original (D-Goth / Black-Lab)
- ne pas en faire un usage commercial
Voir le fichier LICENSE · Texte complet de la licence