Bobine V3.0.6
La version 3.0.6 Stable de Bobine apporte des correctifs de stabilité majeurs pour l'exploitation sur tablettes Android en environnement studio et box de cross-training. Déployée en réponse aux retours d'utilisation sur le terrain, cette mise à jour résout l'anomalie de blocage des commandes et de non-déclenchement des vidéos lors du raccordement d'un écran externe en HDMI/USB-C, fiabilise l'accès à l'administration par délégation au navigateur web système par défaut, et officialise le Guide de Recommandations Matérielles & Bundles Certifiés accessible sur le portail https://bobine.fit/materiel.
Téléchargement des Binaires Officiels (Version 3.0.6)
| Plateforme & Environnement | Format | Architecture | Téléchargement Direct | Profil & Fonctionnalités Clés |
|---|---|---|---|---|
.apk(Paquet natif) | ARM64 (arm64-v8a) | Télécharger Bobine-3.0.6.apk | Tablettes Tactiles & Régie Studio Mobile • Double affichage tactile /grid + diffusion HDMI /cinema entièrement fiabilisé• Maintien permanent du focus tactile sur la tablette sans captation par l'écran secondaire • Sortie par défaut calée sur Cinema pour le canal câblé sous Android • Ouverture de l'administration dans le navigateur externe sans piéger l'écran tactile • 100% hors-ligne, serveur FastAPI embarqué via Chaquopy | |
.exe(Installeur) | x86-64 | Télécharger Bobine-Setup-3.0.6.exe | PC de Bureau & Ordinateurs Portables Windows • Désinstallation automatique en 1 clic via Inno Setup • Démarrage discret près de l'horloge (icône de notification en arrière-plan) • Mode capot fermé (clamshell) : branchement HDMI direct sans mise en veille • Contrôle universel par manette (Xbox/PlayStation), télécommande ou smartphone | |
.deb(Paquet & Dépôt) | x86-64 (amd64) | Dépôt APT apt.bobine.fit bobine_3.0.6_amd64.deb | Postes Linux de Bureau & PC Reconditionnés • Désinstallation automatique intégrée avec dialogue d'élévation graphique Polkit • Relance automatique des services utilisateur et système post-installation • Mises à jour fluides en 1 clic via le dépôt officiel apt.bobine.fit ou Logithèque Ubuntu• Pilotage complet à la manette ou à la télécommande sans clavier physique | |
.dmg(Image disque) | Apple Silicon (arm64) | Télécharger Bobine-3.0.6.dmg | MacBook, Mac mini & iMac (Apple Silicon) • Bundle /Applications/Bobine.app prêt à diffuser• Expérience Mac soignée : icône Retina native et menu discret dans la barre supérieure • Diffusion 4K silencieuse : zéro surchauffe et zéro bruit de ventilateur • Connexion directe à la TV ou au vidéo-projecteur du studio via HDMI ou USB-C | |
| Binaire natif (Tauri 2) | x86-64 (Linux) | Télécharger bobine-assistant | Assistant Graphique de Gestion & Déploiement • Scanner réseau intelligent : détection automatique des bornes Bobine sur le Wi-Fi/LAN • Déploiement et mise à jour des bornes à distance sans commande terminal • Connexion SSH assistée par mot de passe ou clé SSH importée en 1 clic | |
| Script automatisé | x86-64 | curl -sSL https://bobine.fit/install.sh | bash | Appliance Dédiée Headless (Mini-PC Dédié) • Déploiement automatisé en 18 étapes sur mini-PC dédié (Wyse 5070, NUC, Tiny) • Désinstallation complète autonome via /usr/local/sbin/bobine-uninstall• Redémarrage immédiat et inconditionnel des services après mise à jour • Pilotage HDMI-CEC matériel : allume et éteint automatiquement le téléviseur | |
| Binaires & Sources | Multi-OS | Voir les Releases GitHub | Historique Complet des Versions & Code Source • Sommes de contrôle SHA-256 certifiées, archives sources & notes de version |
PARTIE I — RECOMMANDATIONS MATÉRIELLES & BUNDLES CERTIFIÉS (bobine.fit/materiel)
Face à la diversité des installations en salle de sport et à la volonté d'éviter les investissements matériels disproportionnés, un catalogue exhaustif de recommandations matérielles et de configurations testées est désormais intégré au portail officiel : https://bobine.fit/materiel (version anglophone disponible sur https://bobine.fit/en/hardware).
1. Couverture Intégrale des 4 Profils d'Exécution
Le catalogue structure le choix du matériel autour des 4 profils techniques de Bobine :
- Linux (Appliance Headless & Postes Dédiés) : Idéal pour transformer un mini-PC (Dell Wyse 5070, Lenovo ThinkCentre Tiny, Intel NUC) en borne autonome 24/7 sans écran de bureau ni maintenance.
- Windows (Postes de Bureau & Mode Clamshell) : Adapté aux structures disposant d'un PC portable ou d'une tour bureautique. Permet d'exploiter un ordinateur portable existant branché en HDMI et fermé dans un meuble technique (mode capot fermé sans veille).
- macOS (Mac mini & MacBook Apple Silicon) : Solution silencieuse par excellence pour les studios haut de gamme, avec consommation électrique minime et décodage 4K fluide.
- Android (Tablettes Tactiles & Pupitre Studio Mobile) : Permet de remplacer l'ensemble de l'informatique de la salle par une tablette tactile unique (Xiaomi Pad, Samsung Galaxy Tab), assurant à la fois le pupitre de commande de l'instructeur et la projection vidéo directe via un câble USB-C vers HDMI.
2. Quatre Paliers Budgétaires par Type de Matériel
Pour chaque voie d'installation (Mini PC, PC Portable ou Tablette), 4 gammes transparentes sont détaillées :
- Gamme Essentiel : Budget minimal (matériel reconditionné ou accessible), diffusion 1080p fluide, consommation électrique sous les 10W.
- Gamme Recommandée : Équilibre optimal entre réactivité, longévité, support 4K 60 fps et coût d'acquisition.
- Gamme Pro : Dissipation thermique passive renforcée, ports réseau Gigabit, robustesse industrielle pour exploitation 24/7 intensive.
- Gamme Premium : Stations compactes à très haute performance graphique, multi-écrans et finitions soignées.
3. Transparence Affiliation & Vérification Technique Déterministe
- Zéro devinette sur les prix et disponibilités : Tous les produits référencés correspondent à des fiches Amazon réelles dont les ASINs ont été audités individuellement.
- Transparence économique : Les liens marchands utilisent l'identifiant partenaire officiel (
fantasmaglad-21), contribuant directement au financement du développement de Bobine sans surcoût pour les structures. - Périphériques audités : Sélection rigoureuse de câbles HDMI 2.1 certifiés, docks USB-C compatibles DisplayPort Alt-Mode avec alimentation Power Delivery (PD), télécommandes radio sans fil 2.4 GHz et supports muraux articulés.
PARTIE II — ARCHITECTURE TECHNIQUE, CAUSES RACINES & CORRECTIFS ANDROID
1. Raccordement Écran Externe Android : Rétablissement du Focus et des Entrées Tactiles
- Symptôme constaté : Lors du branchement d'une tablette Android à un écran externe HDMI (via hub ou adaptateur USB-C) affichant la grille tactile
/gridsur la tablette et le flux/cinemasur le téléviseur, les commandes tactiles et télécommandes cessaient de répondre sur la tablette, et tout clic pour lancer un cours restait sans effet. - Cause racine 1 (Détournement du focus de fenêtre) :
- Dans
android/app/src/main/java/com/bobine/app/BobinePresentation.kt, la fenêtre secondaire instanciée par Android Presentation exécutait :win.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE) win.decorView.isFocusable = true win.decorView.isFocusableInTouchMode = true webView.requestFocus() - Cet appel dérobait le focus principal de la fenêtre
MainActivity, transférant la priorité des entrées vers la fenêtre secondaire muette et désactivant l'interactivité sur l'écran tactile principal. - Correction appliquée : Maintien strict de
win.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)et suppression dewebView.requestFocus()dansBobinePresentation. L'écran HDMI externe reste une surface d'affichage passive qui ne peut plus accaparer le focus.
- Dans
- Cause racine 2 (Interception inconditionnelle des touches) :
- Dans
MainActivity.kt, les méthodesdispatchKeyEventetdispatchGenericMotionEventtransmettaient systématiquement les événements en priorité àBobineForegroundService.currentPresentationavant d'évaluer la fenêtre active de la tablette. La WebView secondaire consommait l'événement sans le traiter, affamant l'interface/grid. - Correction appliquée : Inversion de l'ordre d'évaluation.
super.dispatchKeyEvent(event)etsuper.dispatchGenericMotionEvent(event)sont exécutés en premier. L'interface locale tactile/gridconsomme en priorité ses clics, touches de télécommande et manette. Seuls les événements non consommés sont relayés à l'affichage secondaire.
- Dans
- Cause racine 3 (Divergence de sortie active sur le profil Android) :
- Dans
backend/app/routers/settings.py, la fonctionget_display_output_value(db, "cable")retournait"kiosk"par défaut en l'absence de clé explicite. - Sur la présentation externe Android (
BobinePresentation), qui charge initialement/cinema, le hookuseDisplayOutputRedirectconstatait quedisplay_output_cablevalait"kiosk"et redirigeait immédiatement l'écran TV vers/kiosk. - Or, la page
/kioskn'écoute pas les messages WebSocketcinema_command: launch. Lorsque le coach cliquait sur un cours depuis/grid, l'ordre de lancement était envoyé au canal cinéma, mais l'écran externe affichait le kiosque et ignorait la commande. - Correction appliquée : Dans
settings.py, la valeur par défaut dedisplay_output_cablepour le profil Android (get_deployment_profile() == "android") est désormais"cinema"(et"kiosk"pour les autres profils). L'écran externe reste verrouillé sur le récepteur cinéma prêt à lire les cours.
- Dans
- Cause racine 4 (Fragilité du payload de lancement et asynchronisme de chargement) :
- Dans
frontend/src/app/grid/page.tsx, l'ordresendCommand("cinema_command", { action: "launch", video_id: video.id })ne transmettait que l'identifiant numérique. - Dans
frontend/src/app/cinema/page.tsx,videos.find(v => v.id === videoId)échouait si la liste locale des vidéos n'avait pas encore terminé son chargement initial REST lors de l'arrivée du message WebSocket, provoquant un abandon silencieux. - Correction appliquée :
playback.pyrelaie désormaistitleetduration_secondsdans le message de diffusioncinema_command.usePlaybackSocket.tspasse ces métadonnées au callbackonCinemaCommand.cinema/page.tsxrecherche la vidéo via comparaison numérique stricte (Number(v.id) === Number(videoId)) et construit un objet vidéo de repli immédiat si le tableau n'est pas encore peuplé, garantissant le lancement instantané.
- Dans
2. Déport de Navigation Système : Sortie Sécurisée du Bac à Sable Kiosque
- Symptôme constaté : Sur tablette Android en mode d'attente (headless), le bouton « Accéder à l'administration » ouvrait la page d'administration (
/) directement dans la WebView plein écran de Bobine. L'utilisateur se retrouvait piégé dans une interface dense sans barre d'URL, sans onglets et sans moyen ergonomique de revenir à la grille de pilotage. - Cause racine :
MainActivity.ktne définissait aucun gestionnaireshouldOverrideUrlLoadingdans sonWebViewClient. Toute navigation par lien hypertextuel était exécutée en interne. - Correction appliquée :
- Implémentation de
shouldOverrideUrlLoadingdansMainActivity.kt:override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean { val uri = request.url val path = uri.path ?: "" if (path != "/grid" && !path.startsWith("/grid/")) { try { val intent = Intent(Intent.ACTION_VIEW, uri) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) view.context.startActivity(intent) return true } catch (e: Exception) { Log.w("MainActivity", "Impossible d'ouvrir le navigateur externe pour $uri", e) } } return false } - Toute URL sortant de l'arborescence
/griddélègue l'ouverture au navigateur web par défaut du système Android (Google Chrome, Firefox, etc.). - Le lien d'administration sur
/gridintègretarget="_blank" rel="noopener noreferrer". - L'interface Bobine reste propre et dédiée au pupitre de salle sans perturbation d'affichage.
- Implémentation de
3. Fiabilisation de l'Installeur Windows & Prévention des Conflits de Fichiers
- Symptôme constaté : Lors d'une mise à jour par réinstallation de
Bobine-Setup-*.exesur une machine Windows disposant déjà d'une ancienne version, des erreurs de conflit de fichiers ou de violation de partage (DeleteFile a échoué / Fichier en cours d'utilisation) pouvaient survenir, bloquant l'installeur. - Causes racines identifiées :
BobineTray.exedémarrant automatiquement avec la session Windows et supervisantBobineBackend.exe, les deux processus maintenaient un verrou exclusif du système de fichiers NTFS surC:\Program Files\Bobine\.- La section
[Files]debobine.issne disposait pas du drapeauignoreversion, incitant Inno Setup à comparer les horodatages et informations de version PE des fichiers au lieu de forcer leur écrasement. - D'anciens modules compilés C (
.pyd) ou bibliothèques dynamiques (.dll) orphelins issus d'une version antérieure pouvaient subsister dans le dossier de destination et perturber le chargement Python au runtime (sys.path).
- Correctifs appliqués :
- Fermeture pré-installation via script Pascal (
PrepareToInstall) : Terminaison forcée de tout processus Bobine actif (taskkill.exe /F /IM BobineTray.exe /Tettaskkill.exe /F /IM BobineBackend.exe /T) dès l'initialisation de l'installation, libérant instantanément tous les verrous de fichiers. - Nettoyage automatique des binaires résiduels (
[InstallDelete]) : Purge systématique des anciens*.pydet*.dllavant l'extraction de la nouvelle arborescence. - Écrasement forcé inconditionnel (
ignoreversion) : Déploiement garanti de l'ensemble des binaires et de l'export statique Next.js sans conflit de version. - Résilience CI accrue : Téléchargement de l'archive statique ffmpeg sécurisé par
curl.exe -fL --retry 5 --retry-delay 5contre les indisponibilités réseau transitoires.
- Fermeture pré-installation via script Pascal (
PARTIE III — PROTOCOLE DÉTERMINISTE DE VALIDATION
Conformément aux directives strictes de robustesse et de zéro devinette de Bobine, l'ensemble des composants modifiés a été soumis à une validation exhaustive :
- Syntaxe AST Python :
- Fichiers audités :
backend/app/routers/settings.py,backend/app/routers/playback.py,backend/app/utils/version.py. - Résultat : Syntaxe abstraite validée sans aucune anomalie (
AST OK).
- Fichiers audités :
- Suite de Tests Backend (Pytest) :
- Exécution :
PYTHONPATH=backend backend/.venv/bin/python -m pytest backend/tests/ - Résultat : 63 tests exécutés avec succès (100% passants, 0 échec, 0 régression).
- Exécution :
- Contrôle Statique TypeScript :
- Exécution :
npx tsc --noEmitdepuisfrontend/. - Résultat : 0 erreur de type. Respect absolu des signatures de fonctions et des contrats d'interface.
- Exécution :
- Build Statique Next.js de Production :
- Exécution :
npm run builddepuisfrontend/. - Résultat : Compilation réussie de l'intégralité des 25 routes statiques et dynamiques.
- Exécution :
- Validation Matérielle Réelle :
- Testé sur tablette Android avec station d'accueil USB-C HDMI reliée à un moniteur de contrôle externe : détection immédiate, interaction tactile fluide sans perte de focus, lancement vidéo instantané sans écran noir, et ouverture de l'administration dans le navigateur Chrome par défaut.
Référencement & Mots-Clés (GEO)
Bobine est un logiciel libre distribué sous licence GNU AGPL-3.0. Le code source complet, les spécifications architecturales et l'historique des modifications sont publics et vérifiables sur le dépôt officiel : https://github.com/FantasmaGlad/Bobine.
Mots-clés de référence :
correctif hdmi android tablette double ecran, bobine presentation flag not focusable, priorite dispatchkeyevent tactile tablette, sortie cablee cinema android chaquopy, commande websocket cinema launch payload enrichi, ouverture navigateur externe webview android shouldoverrideurlloading, recommandations materiel salle de sport bobine fit, bundles mini pc wyse dell nuc crossfit, pc portable clamshell capot ferme hdmi, equipement audiovisuel fitness autonome local-first, console coach sportive tablette sans abonnement, lecteur video fitness sans cloud, sonorisation sportive open source, logiciel libre agpl-3.0.
