Publié Arrow up right Modifié Arrows round Haut Arrow bar to up Status checklist Documentation folders Dépôt de code source code tag Licence license Page photo du projet camera Étiquette d'article ou de page tag Catégorie box Check checkmark Écriture en cours writing Point important Arrow right

epy is a geek.net
Informatique et bidouilles, libres

Publié le

# Diaporama automatique

L’idée de départ

Pour les besoins d’une association de moto dont je faisais partie, il était prévu d’afficher sur un écran des photos et vidéos des actions de l’association.

Les contraintes sont:

  • Facilité d’installation pour une personne totalement néophyte
  • Facilité de modification des fichiers affichés pour des utilisateurs (restreints)
  • Peu ou pas de maintenance

Le matériel

La faible maintenance et la facilité d’installation mènent au choix de la Raspberry Pi comme support d’affichage, avec sa sortie HDMI et ses applications toutes prêtes (cf paragraphe suivant)

L’écran sera une simple TV récente (Full HD de préférence)

Puis toute l’automatisation souhaitée repose sur un serveur web sur internet, une appli web et un script python fait-maison [1]

Ce dernier ne fait pas encore le café, il ne publie pas tout seul la liste des fichiers pour le moment, mais cela viendra !

Les logiciels

Coté afficheur

Il existe quelques images Raspbian (Raspberry Pi OS) avec des solutions logicielles plus ou moins compliquées, j’ai retenu Raspberry Slideshow par Binary Emotions

Un de ses OS Raspberry fait défiler des photos ou des vidéos et l’autre (Raspberry Digital Signage) des pages web, très utile pour un écran de monitoring comme Monitoring screen ;) ;)

N’hésitez pas à soutenir son travail en achetant une licence (à vie) pour bénéficier de certaines fonctionnalités très intéressantes !

J’avais envisagé de faire mon petit logiciel sur une image légère de raspberry OS mais devant le travail à accomplir pour un résultat médiocre (je ne maitrise pas encore les logiciels utilisant le serveur graphique d’un GNU/Linux) je me suis rabattu sur une solution tout faite. La sienne était la plus simple et celle demandant le moins de bricolages pour le résultat souhaité.

Le code intégré à l’image Raspberry Slideshow peut lire les images sur un support USB, sur un stockage public ou privé (services de stockage en ligne) ou une liste d’url de fichiers servie par un serveur web dans un fichier texte sur le web aussi;

C’est cette dernière option qui m’intéresse !

Au démarrage, la Raspberry connectée à Internet (obligatoire au premier boot) ira lire ce fichier grâce à sa configuration et récupérer les images indiquées.

Il est possible de lui refuser de les copier sur son stockage interne, c’est peut-être recommandé pour la durée de vie et l’espace disponible nécessaire sur ce support contenant déjà l’OS.

Si elle ne parvient pas à lire le fichier contenant la liste des liens HTTPS, elle affichera les images de sa clé USB, copiée sur son stockage interne. C’est une très bonne solution pour afficher une image d’erreur de la connexion ou un diaporama par défaut !

Coté publication

L’autre logiciel qui mérite plus d’attention et d’amour est Piwigo, une galerie de photos en PHP qui existe depuis très longtemps (feu PhpwebGallery) et qui fait énormément de choses très intéressantes pour ce projet:

  • Gestion d’albums de photos
  • Classement des photos par album et/ou tags
  • Redimensionnement automatique des fichiers en photos de plusieurs dimensions
  • Gestion de multiples utilisateurs
  • Des plugins, dont un pour que chaque utilisateur publie son album
  • Une API web pour interroger la galerie par d’autres moyens, comme une appli mobile, un logiciel de retouche photo [2] .. un script !

Le script Python que j’ai conçu va donc:

  • interroger l’API Piwigo afin de récupérer les images associées à un tag défini dans sa configuration
  • récupérer la liste dans le désordre des versions Full HD des photos (format correspondant aux dimensions de la TV d’affichage)
  • générer un petit fichier texte publié en ligne, accessible par la Raspberry

Utilisation

Il n’y a rien d’autre à faire que publier des photos, les associer au tag prédéfini et lancer régulièrement le script !

A chaque fin de diaporama, si on ne l’empêche pas dans sa configuration, Raspberry Slideshow va aller vérifier s’il y a une nouvelle liste et se mettre à jour. Sinon il reprend le diaporama.

En cas de problème d’accès internet, le nouveau diaporama sera celui de secours ou l’image d’incident. Il suffira de réparer l’accès puis redémarrer la Raspberry ! Très simple pour une personne qui héberge notre solution dans son local mais n’est pas du métier.

Quelques lignes de config

Le fichier media.conf qui doit être présent sur un media USB pour le premier boot doit contenir les paramètres suivants:

# REFRESHABLE CONTENT:

# Server-managed inventory.
serverlist: http://example.com/slideshow.txt

# Remote media refresh.
# Values yes|no.
# If you 1) use only images and 2) don’t use remote media or don’t need remote media list to be re-read during the playback,
# please set this to no: images playback will be continuous without the blanks needed to check remote changements.

media.refresh: yes

Je partage ma trouvaille du soir, les quelques lignes de configuration de systemd sur le serveur web afin d’exécuter le script python qui génère le fichier et le script bash qui le déplace au bon endroit:

/etc/systemd/system/listgenerator.service

[Unit]
Description=Script generating text list for Raspberry slideshow

[Service]
Type=oneshot
# oneshot permet d'utiliser plusieurs ExecStart lancés l'un après l'autre
WorkingDirectory=/path-to/scripts/piwigo-slideshow
ExecStart=/path-to/.local/bin/pipenv run python3 listGenerator.py
ExecStart=/path-to/scripts/piwigo-slideshow/move.sh

[Install]
WantedBy=multi-user.target

/etc/systemd/system/listgenerator.timer

[Unit]
Description=Run slideshow list generator

[Timer]
OnCalendar=weekly
RandomizedDelaySec=720
Persistent=True

[Install]
WantedBy=listgenerator.service

Ne pas oublier les commandes d’activation:

# systemctl daemon-reload
# systemctl enable --now listgenerator.service

Et pour vérifier la présence du timer et la date de sa prochaine exécution

# systemctl list-timers --all

La génération du fichier est maintenant automatique (une fois par semaine, à régler au besoin) et le déplacement du fichier l’est aussi !

Les défauts

Les défauts temporaires ou définitifs de cette solution:

  • Pour le moment, nous ne gérons pas les vidéos; Piwigo ne gérant que les photos il faudra faire la même chose avec un autre logiciel en ligne. -corrigeable-
  • Le script ne publie pas encore le fichier texte tout seul -corrigé-
  • Il n’est pas encore exécuté automatiquement ou régulièrement et seulement par un admin du serveur. -corrigé-
  • La solution Rasperry Slideshow définit sans changement possible qu’elle envoie les photos puis les vidéos .. Elle manque de souplesse sur certains points, la copie des fichiers en local serait mieux sur un support USB .. Il faudrait forker la solution pour corriger cela …
[1]https://gitea.epyisageek.net/Epy/piwigo-slideshow
[2]https://www.darktable.org/2019/03/darktable-261-released/

Retour en haut