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 | |||
technique:raspitv-accueil [2022/01/26 11:35] – [Installation du code pour planning sur le Raspberry - raspitv] guillaumed | technique:raspitv-accueil [2024/04/02 15:08] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Raspberry TV-Accueil ====== | + | **Cette |
- | + | ||
- | Le projet repose sur l' | + | |
- | + | ||
- | | + | |
- | | + | |
- | * Un raspberry connecté à une TV sur le port HDMI 4 sur lequel | + | |
- | * 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 ? ===== | + | |
- | + | ||
- | 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:// | + | |
- | + | ||
- | [[http:// | + | |
- | < | + | |
- | + | ||
- | { | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | }, | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | ==== Installation et services en détail de l'API ==== | + | |
- | + | ||
- | - le code est placé dans / | + | |
- | + | ||
- | - Personnaliser le .env (issu du .env.example) pour se connecter à la base de données. | + | |
- | + | ||
- | - installer le service **apibkd.service** | + | |
- | + | ||
- | - 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' | + | |
- | + | ||
- | Le code du projet propose un script **plangen.py** | + | |
- | + | ||
- | ==== Installation et services en détail de la diffusion sur la TV ==== | + | |
- | + | ||
- | - le code est placé dans /srv/raspitv | + | |
- | + | ||
- | - Personnaliser le **.env** | + | |
- | + | ||
- | - Personnaliser le fichier **/ | + | |
- | + | ||
- | - installer le service **raspitv.service** | + | |
- | + | ||
- | - 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 : | + | |
- | + | ||
- | | + | |
- | | + | |
- | * 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. | + | |
- | + |