technique:raspitv-accueil

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
Dernière révisionLes deux révisions suivantes
technique:raspitv-accueil [2021/04/29 23:25] – créée francoisatechnique:raspitv-accueil [2022/01/26 11:35] – [Installation du code pour planning sur le Raspberry - raspitv] guillaumed
Ligne 3: Ligne 3:
 Le projet repose sur l'utilisation conjointe de 2 outils : 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 +  * Une appli d'enregistrement de réservations : Booked. Appli libre forkée et disponible ici :  [[https://github.com/effgarces/BookedScheduler|https://github.com/effgarces/BookedScheduler]] 
-      * Cette appli sert à stocker des réservations de salles : https://ladoc.cemea.org/dsi/booked_an +      * Cette appli sert à stocker des réservations de salles : [[https://ladoc.cemea.org/dsi/booked_an|https://ladoc.cemea.org/dsi/booked_an]] 
-  * Un raspberry connecté à une TV qui vient piocher les infos dans Booked et les affiche de manière personnalisée+  * Un raspberry connecté à une TV sur le port HDMI 4 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 : [[:dsi:booked_an|Procédure d'installation]] 
 +  - Sur un Raspberry, installation du système [[.:raspberryslideshow|Raspberry SlideShow]] 
 +  - Sur le même Raspberry, installation du [[.:raspitv-accueil|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 ===== 
 +<code> 
 + 
 +apt-get install git curl python3-pip 
 +mkdir -p /srv/raspitv && cd /srv/raspitv 
 +https://code.cemea.org/cemea-an/raspitv.git 
 +pip3 install flask flask_restful mysql.connector 
 + 
 +</code> 
 + 
 +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 : 
 + 
 +<code> 
 +./apibkd.py 
 + 
 +</code> 
 + 
 +Test local de l'API : 
 + 
 +<code> 
 +curl http://127.0.0.1:5000/v1/lastupdate 
 + 
 +</code> 
 + 
 +Doit renvoyer la date de dernière mise à jour de la base : 
 + 
 +<code> 
 +"2020-09-30 22:24:46" 
 + 
 +</code> 
 + 
 +Ensuite on va rajouter nginx comme proxy devant (pour pouvoir gérer le HTTPS) ; on rajoute dans ''/etc/nginx/sites-enabled/salles'' la suite : 
 +<code> 
 + # On redirige vers l'API booked en python 
 + location /v1/ { 
 + include proxy_params; 
 + proxy_pass http://127.0.0.1:5000; 
 +
 +</code> 
 + 
 +On relance nginx (''systemctl reload nginx'') puis on vérifie que cela marche bien : 
 +<code> 
 +curl https://salles.cemea.lan/v1/lastupdate 
 +</code> 
 + 
 +Pour finir, on va rendre l'api Flask accessible uniquement sur la machine locale (car là, elle est encore joignable sur http://sonip:5000), en modifiant le .env avec ''APIBKD_ADDRESS=127.0.0.1'' puis en relançant l'API. 
 + 
 +Pour vérifier, on peut tenter de ''curl http://ipdesalles:5000/v1/lastupdate'' : si on obtient une "connection refused", c'est qu'on a bien enlevé l'accès direct à l'API booked sur le LAN 
 + 
 +===== Installation du code pour planning sur le Raspberry - raspitv ===== 
 + 
 +<code> 
 +apt-get install git curl python3-pip 
 + 
 +mkdir /srv  && cd /srv 
 + 
 +https://code.cemea.org/cemea-an/raspitv.git 
 + 
 +pip3 install flask weasyprint requests 
 + 
 +</code> 
 + 
 +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 ===== 
 + 
 +<code> 
 +PRODENV="1" 
 + 
 +# Utilisé sur le serveur Web 
 +APIBKD_DB="sallesbkd_database" 
 +APIBKD_USER="apibkd_readonly" 
 +APIBKD_PWD="motdepassesecret" 
 +APIBKD_ADDRESS="127.0.0.1" 
 + 
 +# Utilisé sur le raspi 
 +API_URL="https://salles.cemea.lan" 
 +# DEBUG : jour fixe 
 +MYDAY="2020-09-28" 
 + 
 +DELAYSLEEP=60 
 + 
 +</code>
  
 ===== Comment ça marche ? ===== ===== Comment ça marche ? =====
Ligne 13: Ligne 110:
 Une partie du [[https://code.cemea.org/francois.audirac/raspitv|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é : Une partie du [[https://code.cemea.org/francois.audirac/raspitv|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 :+[[http://ip_booked:5000/v1/YYYY-MM-DD|http://ip_booked:5000/v1/YYYY-MM-DD]] renvoie des infos du jour :
 <code> <code>
  
Ligne 29: Ligne 126:
  
 </code> </code>
 +
 +==== 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|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|http://ip_booked:5000/v1/YYYY-MM-DD]] et [[http://ip_booked:5000/v1/lastupdate|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|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. 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. 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|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 [[:dsi:tv_diffus_raspberrys#depot_git_et_installation|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 :
 +<code>
 +
 +systemctl stop rs # service qui lance le diaporama selon les options de
 +systemctl stop raspitv # service de génération du diaporama
 +systemctl start raspitv.service # service qui relance le nouveau planning, puis relance l'affichage et relance le diaporama avec photos
 +systemctl start raspitvoff.service # service qui éteint et stop tout
 +systemctl start raspitvplan.service # service qui relance le diaporama avec le planning seul, sans photos.
 +# Pour éteindre / allumer la diffusion sur HDMI
 +vcgencmd display_power 0 # éteindre
 +vcgencmd display_power 1 # pour allumer l'écran
 +
 +</code>
 +
 +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 :
 +
 +<code>
 +journalctl -u rs.service # dernier log : q pour quitter
 +ou
 +journalctl -fu rs.service # pour avoir le flux en continu : Ctrl + C pour quitter.
 +
 +</code>
 +
 +Parcourir le fichier de log avec les flèches du clavier ou espace (pgdown) et "q" pour quitter le fichier.
 +
 +===== Gestion des horaires et diffusion du planning et images =====
 +
 +Seuls 3 services seront utilisés et démarrés :
 +
 +  * raspitv : planning et photos
 +  * raspitvplan : planning seul
 +  * raspitvoff : extinction
 +
 +Ces services interagissent avec rs et le script python.
 +
 +Le service de diaporama rs par défaut est désactivé pour ne pas se lancer au démarrage du raspi.
 +
 +<code>
 +systemctl disable rs.service
 +
 +</code>
 +
 +Une tâche cron est créée selon les besoins d'allumage dans /etc/cron.d/raspitv contenant :
 +
 +<code>
 +15 8 * * Mon,Tue,Wed,Thu,Fri root systemctl start raspitvplan.service
 +0 10 * * Mon,Tue,Wed,Thu,Fri root systemctl start raspitv.service
 +15 13 * * Mon,Tue,Wed,Thu,Fri root systemctl start raspitvplan.service
 +0 14 * * Mon,Tue,Wed,Thu,Fri root systemctl start raspitv.service
 +0 17 * * Mon,Tue,Wed,Thu,Fri root systemctl start raspitvoff.service
 +
 +</code>
 +
 +Le planning seul est ici affiché du lundi au vendredi de 8h15 à 10h et de 13h15 à 14h.
 +
 +Le planning avec images est affiché du lundi au vendredi de 10h à 13h15 et de 14h à 17h.
 +
 +Il est stoppé en dehors de ces horaires.
  
  
  • technique/raspitv-accueil.txt
  • Dernière modification : 2024/04/02 15:08
  • de 127.0.0.1