Tableau de bord Android TV / tablette (paysage) du Liège Hackerspace : caméras UniFi, météo, musique moOde, prochains départs TEC et SNCB. Tourne comme écran d'accueil d'une box.
./gradlew assembleRelease # → app/build/outputs/apk/release/app-release.apkInstaller le build release sur la box : en debug, l'app est ~50× plus lente (le chargement des horaires TEC passe de 0,4 s à 20 s).
Réglages privés dans local.properties (ignoré par git, jamais dans ce dépôt public) :
tec.apiKey=… # clé GTFS-RT TEC (https://gtfsrt.tectime.be)
camera.porte=rtsps://…:7441/…?enableSrtp # URLs RTSPS UniFi Protect (contiennent le jeton)
camera.sas=rtsps://…:7441/…?enableSrtp
nuki.token=… # jeton de l'API HTTP du bridge Nuki (état de la porte)Sans nuki.token, l'app se compile mais la tuile Porte affiche « Nuki ? ».
Réglages locaux (moOde, bridge Nuki, météo) : app/src/main/java/be/lghs/lab/Config.kt.
À modifier : dashboard/transport.json, directement sur
GitHub. L'app le relit au démarrage puis toutes les heures, sans réinstallation.
tec.stops: quais TEC (stop_iddu GTFS, un quai = un sens).lines: lignes à afficher à ce quai → libellé de destination ; une ligne absente n'est pas affichée. Ordre = priorité : un bus passant par plusieurs quais est affiché au premier où sa ligne est listée.sncb.routes: trains directs entre deux gares (noms iRail).
Trouver un quai : stops.txt du GTFS TEC.
Le flux temps réel TEC ne contient que des retards : l'app a besoin de l'horaire théorique
des quais. La GitHub Action dashboard-tec.yml le
régénère (dashboard/tec_*.csv, generated.json, à ne pas éditer) à chaque modification
de transport.json et chaque lundi. Après un push, attendre la fin de l'Action (onglet
Actions) : sans horaires, les bus d'un nouveau quai n'apparaissent pas.
L'app garde en cache la dernière version valide et embarque dashboard/ comme valeurs par
défaut. En local : python3 tools/extract_tec_schedule.py [TEC-GTFS.zip].
L'app se déclare écran d'accueil (HOME) : elle démarre à l'allumage et sur la touche Home.
adb connect <ip-de-la-box>
adb install -r app/build/outputs/apk/release/app-release.apk
adb shell cmd package set-home-activity be.lghs.lab/.MainActivitySur Android TV / Google TV, le launcher d'origine a une priorité système et garde la
touche Home : il faut le désactiver (réversible avec pm enable).
# Android TV
adb shell pm disable-user --user 0 com.google.android.tvlauncher
# Google TV
adb shell pm disable-user --user 0 com.google.android.apps.tv.launcherx
adb shell pm disable-user --user 0 com.google.android.tungsten.setupwraithSecours si l'app n'est pas launcher : démarrage au boot, qui demande depuis Android 10 l'autorisation d'affichage par-dessus les autres apps :
adb shell appops set be.lghs.lab SYSTEM_ALERT_WINDOW allowSortir vers les réglages Android : touche Menu/Réglages de la télécommande, ou appui long sur OK. La touche Retour ne quitte pas l'écran d'accueil.
| Donnée | Source | Rafraîchissement |
|---|---|---|
| Caméras | UniFi Protect, RTSP (port 7447, converti depuis l'URL RTSPS) | continu |
| Porte | Bridge Nuki, /lockState (vert : verrouillée et fermée, sinon cadre rouge) |
5 s |
| Livraison | Code livreur, décompte, « proche » en évidence | 15 s |
| Musique | moOde : MPD (idle) + renderers Spotify/AirPlay/Deezer |
instantané / 2 s |
| Bus | GTFS-RT TEC (retards) + horaires générés | 30 s |
| Trains | iRail | 60 s |
| Météo | Open-Meteo | 10 min |
| Arrêts / trajets | dashboard/ de ce dépôt |
1 h |