Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédenteDernière révisionLes deux révisions suivantes | ||
technique:raspitv-accueil [2021/04/29 23:36] – francoisa | technique:raspitv-accueil [2022/01/26 11:35] – [Installation du code pour planning sur le Raspberry - raspitv] guillaumed | ||
---|---|---|---|
Ligne 5: | Ligne 5: | ||
* Une appli d' | * Une appli d' | ||
* Cette appli sert à stocker des réservations de salles : [[https:// | * Cette appli sert à stocker des réservations de salles : [[https:// | ||
- | * 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, | ||
+ | * RaspiTV : une appli qui vient piocher les infos dans Booked et les affiche de manière personnalisée | ||
+ | |||
+ | ===== Préparation - Installation ===== | ||
+ | |||
+ | - Installation de l' | ||
+ | - Sur un Raspberry, installation du système [[.: | ||
+ | - Sur le même Raspberry, installation du [[.: | ||
+ | - Connexion entre le RaspiTV et l' | ||
+ | |||
+ | ===== Installation du code pour API sur le serveur Web - Booked ===== | ||
+ | < | ||
+ | |||
+ | apt-get install git curl python3-pip | ||
+ | mkdir -p / | ||
+ | https:// | ||
+ | pip3 install flask flask_restful mysql.connector | ||
+ | |||
+ | </ | ||
+ | |||
+ | Correction des paramètres de connexions à la base de données (dans .env) issus du fichier / | ||
+ | |||
+ | Et lancement de l'API : | ||
+ | |||
+ | < | ||
+ | ./ | ||
+ | |||
+ | </ | ||
+ | |||
+ | Test local de l'API : | ||
+ | |||
+ | < | ||
+ | curl http:// | ||
+ | |||
+ | </ | ||
+ | |||
+ | Doit renvoyer la date de dernière mise à jour de la base : | ||
+ | |||
+ | < | ||
+ | " | ||
+ | |||
+ | </ | ||
+ | |||
+ | Ensuite on va rajouter nginx comme proxy devant (pour pouvoir gérer le HTTPS) ; on rajoute dans ''/ | ||
+ | < | ||
+ | # On redirige vers l'API booked en python | ||
+ | location /v1/ { | ||
+ | include proxy_params; | ||
+ | proxy_pass http:// | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | On relance nginx ('' | ||
+ | < | ||
+ | curl https:// | ||
+ | </ | ||
+ | |||
+ | Pour finir, on va rendre l'api Flask accessible uniquement sur la machine locale (car là, elle est encore joignable sur http:// | ||
+ | |||
+ | Pour vérifier, on peut tenter de '' | ||
+ | |||
+ | ===== Installation du code pour planning sur le Raspberry - raspitv ===== | ||
+ | |||
+ | < | ||
+ | apt-get install git curl python3-pip | ||
+ | |||
+ | mkdir /srv && cd /srv | ||
+ | |||
+ | https:// | ||
+ | |||
+ | pip3 install flask weasyprint requests | ||
+ | |||
+ | </ | ||
+ | |||
+ | Modifier les paramètres d' | ||
+ | |||
+ | Et lancer le service pour vérifier que la connexion fonctionne | ||
+ | |||
+ | ===== Config .env en production ===== | ||
+ | |||
+ | < | ||
+ | PRODENV=" | ||
+ | |||
+ | # Utilisé sur le serveur Web | ||
+ | APIBKD_DB=" | ||
+ | APIBKD_USER=" | ||
+ | APIBKD_PWD=" | ||
+ | APIBKD_ADDRESS=" | ||
+ | |||
+ | # Utilisé sur le raspi | ||
+ | API_URL=" | ||
+ | # DEBUG : jour fixe | ||
+ | MYDAY=" | ||
+ | |||
+ | DELAYSLEEP=60 | ||
+ | |||
+ | </ | ||
===== Comment ça marche ? ===== | ===== Comment ça marche ? ===== | ||
Ligne 29: | Ligne 126: | ||
</ | </ | ||
+ | |||
==== Installation et services en détail de l'API ==== | ==== Installation et services en détail de l'API ==== | ||
- | - le code est placé dans / | + | - le code est placé dans / |
- Personnaliser le .env (issu du .env.example) pour se connecter à la base de données. | - Personnaliser le .env (issu du .env.example) pour se connecter à la base de données. | ||
Ligne 37: | Ligne 135: | ||
- installer le service **apibkd.service** | - installer le service **apibkd.service** | ||
- | - le service doit alors répondre aux requêtes web : http:// | + | - le service doit alors répondre aux requêtes web : [[http:// |
+ | |||
+ | Voir procédure technique : [[https:// | ||
2) Du côté du Raspberry, un script permanent diffuse un diaporama à partir d' | 2) Du côté du Raspberry, un script permanent diffuse un diaporama à partir d' | ||
Ligne 45: | Ligne 145: | ||
==== Installation et services en détail de la diffusion sur la TV ==== | ==== Installation et services en détail de la diffusion sur la TV ==== | ||
- | - le code est placé dans / | + | - le code est placé dans / |
- Personnaliser le **.env** | - Personnaliser le **.env** | ||
Ligne 54: | Ligne 154: | ||
- le fichier / | - le fichier / | ||
+ | |||
+ | Voir [[: | ||
+ | |||
+ | ==== 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 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' | ||
+ | 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' | ||
+ | |||
+ | </ | ||
+ | |||
+ | Pour info, par défaut, le nouveau planning est généré sous forme d' | ||
+ | |||
+ | Le fichier '' | ||
+ | |||
+ | 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 " | ||
+ | |||
+ | ===== 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. | ||
+ | |||
+ | < | ||
+ | systemctl disable rs.service | ||
+ | |||
+ | </ | ||
+ | |||
+ | Une tâche cron est créée selon les besoins d' | ||
+ | |||
+ | < | ||
+ | 15 8 * * Mon, | ||
+ | 0 10 * * Mon, | ||
+ | 15 13 * * Mon, | ||
+ | 0 14 * * Mon, | ||
+ | 0 17 * * Mon, | ||
+ | |||
+ | </ | ||
+ | |||
+ | 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. | ||