Ceci est une ancienne révision du document !
Raspberry TV-Accueil
Le projet repose sur l'utilisation conjointe de 2 outils :
- Une appli d'enregistrement de réservations : Booked. Appli libre forkée et disponible ici : https://github.com/effgarces/BookedScheduler
- Cette appli sert à stocker des réservations de salles : https://ladoc.cemea.org/dsi/booked_an
- Un raspberry connecté à une TV sur lequel est installé :
- RS : RaspberrySlideShow, un système de diffusion de diaporama
- RaspiTV : une appli qui vient piocher les infos dans Booked et les affiche de manière personnalisée
Préparation - Installation
- Installation de l'appli Booked dans un serveur web : Procédure d'installation
- Sur un Raspberry, installation du système Raspberry SlideShow
- Sur le même Raspberry, installation du code RaspiTV
- Connexion entre le RaspiTV et l'appli Booked avec les bons paramètres
Installation du code pour API sur le serveur Web - Booked
apt-get install git curl python3-pip mkdir -p /srv/raspitv && cd /srv/raspitv git clone https://code.cemea.org/francois.audirac/raspitv.git pip3 install flask flask_restful python-connector
Correction des paramètres de connexions à la base de données (dans .env) issus du fichier /var/www/booked/config.php
Et lancement de l'API :
./apibkd.py
Test local de l'API :
curl http://127.0.0.1:5000/v1/lastupdate
Doit renvoyer la date de dernière mise à jour de la base :
"2020-09-30 22:24:46"
Installation du code pour planning sur le Raspberry - raspitv
apt-get install git curl python3-pip mkdir /srv && cd /srv git clone https://code.cemea.org/francois.audirac/raspitv.git pip3 install flask weasyprint requests
Modifier les paramètres d'accès dans le.env (URL au serveur web).
Et lancer le service pour vérifier que la connexion fonctionne
Config .env en production
PRODENV="1" # Utilisé sur le serveur Web APIBKD_DB="sallesbkd_database" APIBKD_USER="apibkd_readonly" APIBKD_PWD="motdepassesecret" # Utilisé sur le raspi IPWEB="10.1.9.26" # DEBUG : jour fixe MYDAY="2020-09-28" DELAYSLEEP=60
Comment ça marche ?
1) Booked fonctionne sur le mode d'une appli Web avec PHP & une base de données MySQL dont la structure reste technique.
Une partie du code du projet propose à l'aide d'un script Python-Flask apibkd.py (lancé par le script runapi.sh) une API qui affiche les événements voulus sur une URL dans un fichier JSON donné :
http://ip_booked:5000/v1/YYYY-MM-DD renvoie des infos du jour :
{ "titre": "D4", "description": "", "organisateur": "Edwige MASSON", "datedebut": "2021-04-26 09:00:00", "datefin": "2021-04-26 17:00:00", "nbpers": "", "salle": "Salle 15", "series_id": 49, "reservation_instance_id": 38 },
Installation et services en détail de l'API
- le code est placé dans /srv/raspitv depuis le dépot cloné : https://code.cemea.org/francois.audirac/raspitv
- Personnaliser le .env (issu du .env.example) pour se connecter à la base de données.
- installer le service apibkd.service qui va lancer /srv/raspitv/runapi.sh qui va lancer apibkd.py
- le service doit alors répondre aux requêtes web : http://ip_booked:5000/v1/YYYY-MM-DD et http://ip_booked:5000/v1/lastupdate qui renvoie la date de dernière modification de la base de données.
Voir procédure technique : https://ladoc.cemea.org/doku.php?id=dsi:tv_diffus_raspberrys#depot_git_et_installation
2) Du côté du Raspberry, un script permanent diffuse un diaporama à partir d'images contenues dans des dossiers distants.
Le code du projet propose un script plangen.py qui vient régulièrement chercher les modifications issues de Booked et générer une image planning.png à partir d'un fichier HTML + CSS. Ce fichier placé dans /var/lib/rs/ sera donc affiché au milieu des images diffusées. Si aucun événement n'est programmé, le planning est noir.
Installation et services en détail de la diffusion sur la TV
- le code est placé dans /srv/raspitv depuis le dépot cloné : https://code.cemea.org/francois.audirac/raspitv
- Personnaliser le .env (issu du .env.example) pour adapter des paramètres de diffusion
- Personnaliser le fichier /var/lib/rs/media.conf pour personnaliser les paramètres de connexion au serveur/cloud : accès aux images distantes
- installer le service raspitv.service qui va lancer /srv/raspitv/raspitvdiff.sh qui va générer le planning (plangen.py) et lancer la diffusion du diaporama.
- le fichier /etc/crontab est personnalisé pour varier les périodes d'affichage avec : extinction d'écran + arrêt diffusion / démarrage écran + départ diffusion
Voir procédure technique de mise en place du raspiTV
Déroulement des étapes sur le raspberry rpi1
1) lors du démarrage (rpi ou service raspitv), lancement de rapitvdifff.sh : si le planning est absent, on copie un planning noir pour avoir au moins une image à diffuser (TODO : mettre autre chose = logo CEMEA ?)
2) On stoppe le diaporama (il est peut-être lancé) et on arrête la diffusion sur HDMI.
3) On lance plangen.py pour générer le planning qui est généré régulièrement selon les modifications. Ce programme est sensé tourner en permanence.
4) On ouvre la diffusion sur HDMI et 3 secondes après on lance le diaporama.
5) à intervalles réguliers (9h, 17h, week-end), on arrête la diffusion sur HDMI et le diaporama. Et le matin on relance la diffusion et le diaporama (rs).
Utilisation - vérifications - commandes
En cas de modification du code, voici les étapes à respecter pour relancer le diaporama :
systemctl stop rs # service qui diffuse le diaporama systemctl stop raspitv # service de génération du diaporama systemctl start raspitv.service # service qui stoppe l'affichage, stop le diapo, relance le nouveau planning, puis relance l'affichage et relance le diaporama # Pour éteindre / allumer la diffusion sur HDMI vcgencmd display_power 0 # éteindre vcgencmd display_power 1 # pour allumer l'écran
Pour info, par défaut, le nouveau planning est généré sous forme d'image “planning.png
” dans le dossier /var/lib/rs/
à partir des fichiers modele.html et modele.css.
Le fichier planning.html
est aussi le fichier final généré actualisé avant transformation en image.
Il est possible de consulter la liste des images diffusées en utilisant :
journalctl -u rs.service # dernier log : q pour quitter ou journalctl -fu rs.service # pour avoir le flux en continu : Ctrl + C pour quitter.
Parcourir le fichier de log avec les flèches du clavier ou espace (pgdown) et “q” pour quitter le fichier.