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
technique:raspitv-accueil [2022/01/26 11:35] – [Installation du code pour planning sur le Raspberry - raspitv] guillaumedtechnique:raspitv-accueil [2024/04/02 15:08] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
-====== Raspberry TV-Accueil ====== +**Cette page est obsolèteVeuillez accéder au contenu à son nouvel emplacement : [[https://bibliotech.cemea.org/books/outils-technique/page/raspitv-accueil|raspitv-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|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]] +
-  * 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 ? ===== +
- +
-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 [[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|http://ip_booked:5000/v1/YYYY-MM-DD]] renvoie des infos du jour : +
-<code> +
- +
-    { +
-        "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 +
-    }, +
- +
-</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. +
- +
-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