technique:raspitv-accueil

Différences

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

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Dernière révisionLes deux révisions suivantes
technique:raspitv-accueil [2021/04/29 23:52] francoisatechnique:raspitv-accueil [2022/01/26 11:35] – [Installation du code pour planning sur le Raspberry - raspitv] guillaumed
Ligne 5: Ligne 5:
   * 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]]   * 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|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 40: Ligne 137:
 - 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. - 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+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.
Ligne 58: Ligne 155:
 - 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 - 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 https://ladoc.cemea.org/doku.php?id=dsi:tv_diffus_raspberrys#depot_git_et_installation+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 ==== ==== Déroulement des étapes sur le raspberry rpi1 ====
Ligne 72: Ligne 169:
 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). 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+===== Utilisation - vérifications - commandes =====
  
 En cas de modification du code, voici les étapes à respecter pour relancer le diaporama : En cas de modification du code, voici les étapes à respecter pour relancer le diaporama :
 <code> <code>
  
-systemctl stop rs # service qui diffuse le diaporama +systemctl stop rs # service qui lance le diaporama selon les options de 
-systemctl start rs # service qui relance le diaporama+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> </code>
  
-Pour info, par défaut, le nouveau plnning est généré sous forme d'image "''planning.png''" dans le dossier ''/var/lib/rs/''+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é avant transformation en image.+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 : Il est possible de consulter la liste des images diffusées en utilisant :
  
 <code> <code>
-journalctl -u rs.service+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> </code>
Ligne 95: Ligne 200:
 Parcourir le fichier de log avec les flèches du clavier ou espace (pgdown) et "q" pour quitter le fichier. Parcourir le fichier de log avec les flèches du clavier ou espace (pgdown) et "q" pour quitter le fichier.
  
-Pour info, par défaut, le nouveau plnning est généré sous forme d'image "''planning.png''" dans le dossier ''/var/lib/rs/''+===== 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 fichier ''planning.html''  est aussi le fichier final généré avant transformation en image.+Le planning avec images est affiché du lundi au vendredi de 10h à 13h15 et de 14h à 17h.
  
-systemctl stop raspitv # service qui vérifie et génère le nouveau planning s'il a changé+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