Panda transforme un Raspberry Pi et un écran tactile en tableau de bord mural pour la maison : météo et vigilance, agenda, minuteurs de cuisine, radios et musique, courses et repas, phases de lune, transports, domotique… Le tout piloté au doigt, extensible par un store d'addons (Abeille), et entièrement auto-hébergé : aucune donnée ne quitte votre réseau, hormis les appels aux services que vous configurez.
- Serveur Python / Flask, interface JavaScript sans framework
- Écran 1024×600, Chromium plein écran via labwc (Wayland) + Squeekboard
- SDK d'addons stable (
kiosk_api 1.x) : les applications s'installent, se mettent à jour et se développent sans toucher au socle - Interface tout en icônes vectorielles : chaque tuile porte le logo officiel de son application (SVG embarqué, net à toute taille et disponible hors-ligne) ; le reste de l'interface utilise les icônes Tabler pour un rendu cohérent, sans emoji.
| Élément | Recommandé |
|---|---|
| Carte | Raspberry Pi 5 (Pi 4 possible) |
| Écran | Tactile HDMI 1024×600 (IPS) |
| Stockage | microSD A2 32 Go |
| OS | Debian 13 « Trixie » (ou Raspberry Pi OS basé Trixie), 64-bit Lite |
Flashez l'OS Lite (sans bureau) avec Raspberry Pi Imager. Dans les options : nom d'hôte, créez votre utilisateur, Wi-Fi si besoin, activez SSH.
ssh <votre-user>@<ip-du-pi>
sudo apt update && sudo apt -y upgradegit clone https://github.com/TheWorms/panda.git
cd pandaLancez le script avec votre utilisateur courant (pas root ; il demande sudo au besoin). Par défaut il installe tout : service Flask et session écran (labwc + Chromium + Squeekboard, lancés au démarrage sur tty1).
bash install/install.sh
sudo rebootAu redémarrage, l'écran affiche Panda directement.
Options (variables d'environnement) :
NO_KIOSK=1 bash install/install.sh # service Flask seul, sans l'affichage
NO_SPLASH=1 bash install/install.sh # sans le thème de démarrage Plymouth
NO_CLIP=1 bash install/install.sh # sans wl-clip-persist (évite la toolchain Rust)Sans écran (usage navigateur), utilisez NO_KIOSK=1 et ouvrez
http://<ip-du-pi>:8090.
- Définissez le code PIN demandé à l'écran (verrouillage du kiosk).
- ⚙ Paramètres → Sécurité : définissez le mot de passe admin et désactivez « accès admin sans mot de passe » (actif par défaut au début).
- ⚙ Réglages → heure : vérifiez « NTP actif · heure synchronisée ✓ ».
- ⚙ Apparence : thème, police, mise en veille de l'écran.
Dans ⚙ Réglages → URL du store :
https://raw.githubusercontent.com/TheWorms/abeille/main/
Touchez Tester, puis ouvrez le Store depuis l'accueil pour installer des applications.
Configurer un addon. Chaque tuile installée porte une icône ⚙ : touchez-la pour ouvrir son panneau de configuration (URL du service, jeton d'accès, options…), renseignez les champs puis Enregistrer (et Tester si le bouton est présent). La configuration est relue à chaud, sans redémarrage. Pour les addons liés (ex. cuisine/KitchenOwl), un seul réglage suffit : les addons associés héritent de la même connexion.
Astuce — jetons longs. Pour coller un token API sans le saisir sur l'écran tactile, depuis un autre poste :
ssh -t <votre-user>@<ip-du-pi> 'python3 ~/panda-cfg.py'Menu interactif qui découvre les addons configurables ; les champs sensibles (token, clé, mot de passe) sont saisis en invisible.
bash install/backup-data.sh
# → ~/panda-data-AAAA-MM-JJ.tar.gz (config, PIN, addons installés, états)Rangez cette archive ailleurs que sur le Pi.
cd panda && git pull
bash install/install.sh # idempotent : ne touche jamais vos données| Symptôme | Piste |
|---|---|
| Écran noir au boot | systemctl status panda panda-kiosk ; journalctl -u panda-kiosk -n 50 |
/healthz muet |
curl -s http://127.0.0.1:8090/healthz sur le Pi |
| Store refuse d'installer | URL du store + Tester dans ⚙ Réglages |
| Heure fausse après coupure | ⚙ Réglages → « ↻ Resynchroniser » |
| Écran ne se rallume pas | WAYLAND_DISPLAY=wayland-0 wlr-randr |
Un addon = un dossier : manifest.json (+ ui.js, + backend.py). Le socle
charge l'interface (window.PandaAddons.<id>.render(el, sdk, tile)), monte le
backend sous /addons/<id>/api/*, fournit un state JSON persistant (≤ 64 Ko)
et des hooks d'arrière-plan. Contrat gelé kiosk_api 1.x : voir
docs/sdk-addons.md et le dépôt Abeille.
Le store est signé (Ed25519) : modèle de confiance et hébergement d'un
store personnel dans docs/store-signing.md.
GPL-3.0 — voir LICENSE.
