Affichage dynamique avec Raspberry et LibreOffice Impress, dans un réseau Samba

De Wiki Dane (ex wikitice)
Aller à : navigation, rechercher

Le principe

La sortie HDMI du Raspberry est connectée à l'entrée (HDMI ou DVI) d'un écran de l'affichage dynamique.

Lors de son démarrage, le Raspberry lance automatiquement, à son démarrage, un script qui se charge de récupérer, sur un partage Samba du réseau, le diapo à projeter à l'écran ; LibreOffice Impress est alors lancé par le raspi en boucle sur ce diaporama.

Toutes les 20 secondes, le Raspberry compare la version du diapo projeté à celle présente sur le partage Samba : si une mise à jour a été réalisée par l'administrateur de l'affichage dynamique, cette nouvelle version est téléchargée puis projetée à l'écran.

Comment s'administre le dispositif ?

  • La (ou les) personne(s) responsable(s) de l'affichage dynamique doit :
    • disposer d'un PC intégré au réseau Samba, avec LibreOffice Impress (version >= 4) d'installer.
    • avoir les droits d'accès en écriture sur le partage Samba qui contiendra le diaporama à projeter.
    • avoir créer un raccourci sur son bureau vers le diaporama à projeter du partage Samba.
  • L'administration du dispositif se résume alors à :
    • Ouvrir le diaporama en cliquant sur le raccourci bureau.
    • Faire les modifications souhaitées dans le diaporama.
    • Fermer LibreOffice et valider la demande de confirmation d'enregistrement qui s'affiche à l'écran.

20 secondes plus tard, l'affichage dynamique est mis à jour sur l'ensemble des écrans qui projettent ce diaporama.

Remarques :
- Il est important que l'administrateur ferme LibreOffice Impress pour enregistrer son diaporama afin que le raspberry puisse le télécharger convenablement (et éviter des problèmes de " fichier locké") et pour que d'autres personnes du réseau puissent l'administrer (sinon, le diaporama s'ouvrira seulement en lecture seule ...)
- Grâce à LibreOffice Impress, l'administrateur a la possibilité de masquer/afficher certaines diapositives de son diaporama : ce qui lui permet de très rapidement changer l'apparence du diaporama projeté tout en travaillant sur un unique diaporama.

Les limites du dispositifs

L'affichage dynamique présenté dans cet article est très simple à administrer mais très rudimentaire :

  • Lors d'une mise à jour du diaporama, LibreOffice Impress est redémarré : cette opération, qui dure quelques secondes, est visible des utilisateurs (il est toutefois possible de la masquer à l'aide d'un économiseur d'écran comme xscreensaver, voir annexe).
  • Sous LibreOffice Impress, à chaque changement de diapositives, un petit sablier apparaît pendant une fraction de seconde en bas à gauche de l'écran (mais est quasi imperceptible à l'oeil).
  • La solution décrite ici ne permet pas de planifier la projection de(s) diaporama(s) dans la journée, semaine, mois ... : pour modifier l'affichage, l'administrateur du dispositif doit intervenir en effectuant un enregistrement sur son diaporama Libre Office Impress.

Le matériel nécessaire

  • Un (ou plusieurs) écran(s) dédié(s) à l'affichage dynamique. Ces écrans doivent disposer d'une entrée DVI ou HDMI ou VGA (il faudra dans ce cas disposer d'un adapteur HDMI/VGA).

Attention toutefois aux écrans de télévision car selon les modèles, certains écrans TV se mettent automatiquement en veille (même si un signal est présent sur son entrée HDMI) et/ou ne détectent pas automatiquement le signal émis par le raspberry, si ce dernier est démarré avant l'écran.
Pour éviter ces soucis, il est préférable d'utiliser un écran conçu pour faire de l'affichage dynamique.

  • Un Raspberry 2 par écran, avec la connectique nécessaire pour le relié au réseau Samba (cable ethernet ou clé wifi sii borne wifi) et à l'écran (cable HDMI/DVI ou cable HDMI/HDMI). La carte SD est supposée de 8Go.
  • Un serveur Samba (Se3 dans cet article).
  • Un minuteur pour prise électrique afin d'éteindre et d'allumer à heure fixe le Raspberry (et l'écran), chaque jour.

Attention toutefois si l'écran est un écran de télévision car certains modèles ne détectent pas automatiquement le signal émis par le raspberry, si ce dernier est démarré avant l'écran. Si ce cas se présente, l'écran devra être soit laissé constamment allumé, soit branché sur un minuteur différent de celui du raspberry et réglé à une heure d'allumage légèrement inférieure.

Création du partage Samba

  • À partir de la page d'administration Web du se3, créer un partage. Dans cet article, il sera nommé affichage_dynamique.
  • Ajouter le(s) compte(s) utilisateur(s) qui administrera l'affichage dynamique de l'établissement et donner les droits de lecture/écriture sur ce partage.

Dans cet article, ce compte a pour identifiants : admin_affichage et mdp_admin_affichage

  • Déposer dans le partage créé le diaporama à projeter. Dans cet article, on suppose qu'il est accessible à :
\\affichage_dynamique\eleves\diapo_eleves.odp

Remarques:

  • Dans cet article, par soucis de simplicité, on suppose que tous les écrans de l'affichage dynamique projettent le même diaporama, nommé « diapo_eleves.odp » mais il serait tout à fait possible de créer plusieurs diaporamas (diapo_profs.odp, diapo_self.odp ...) projetés chacun sur des écrans différents.
  • Il peut parfois apparaître des erreurs Samba lors du téléchargement du diaporama par le raspi (NT_STATUS_FILE_LOCK_CONFLICT ou NT_STATUS_IO_TIMEOUT).

Ces erreurs semblent apparaître lorsque le diaporama est resté ouvert ("locké") pendant que le raspi le télécharge. Pour éviter ce type d'erreur, il est conseillé après une modification du diaporama de fermer LibreOffice et de confirmer la demande d'enregistrement.
Par ailleurs, il peut être aussi utile de désactiver l' "opportunistic locking" (activé par défaut sur les serveurs Samba) en ajoutant au partage affichage_dynamique sur le serveur Samba, les deux options suivantes :

oplocks = no

posix locking = no

Configuration du diaporama à projeter

  • Depuis un compte administrateur de l'affichage dynamique, lancer LibreOffice Impress puis ouvrir le fichier diapo_eleves.odp du partage affichage_dynamique.
  • Paramétrer les options suivantes (en les adaptant, selon vos convenances) :
    • menu Diaporama → Transition :
      • Passer à la diapositive suivante automatiquement après 11 secondes.
      • Appliquer à toutes les diapositives.
    • menu Diaporama → Paramètres du diaporama :
      • Type : Auto : 00:00:00 (pour que le diapo boucle sur lui-même).

Afin d'éviter des bandes noires sur l'écran, régler le format du diaporama à celui de l'écran.
Pour cela, se rendre dans le menu Format → Pages… → Format, choisir le format des écrans (16/9 en général).

Configurer la carte SD du Raspberry 

Sur un PC GNU/Linux :

  • Télécharger la dernière version de Raspbian Jessie, disponible à l'adresse suivante :
https://www.raspberrypi.org/downloads/
  • Insérer la carte SD sur le PC. Ne pas la monter.
  • Installer Raspbian Jessie sur la carte SD 8Go. En tant que root, adapter la commande suivante :
dd bs=4M if=nom-image-raspbian-jessie.img of=/dev/mmcblk0  # /dev/mmcblk0 désigne la carte SD

Cette commande prend environ 5 minutes.

Configurer le Raspberry 

  • Insérer la carte SD précédente dans le Raspberry.
  • Démarrer le Raspberry.
  • Se rendre dans le menu Préférences -> Raspberry Pi Configurations puis :
    • Dans la rubrique Localisation, configurer la Locale, Timezone et Keyboard en français.
    • Dans la rubrique System, changer le nom du raspberry : choisir un nom indiquant sa localisation géographique (pi-hall-entree par exemple).
    • Changer le mot de passe du compte pi (important, sinon toute personne du réseau pourrait se connecter via ssh avec le compte pi et son mot de passe par défaut ).
    • Agrandir la partition à toute la carte SD.
    • Valider les modification et accepter le redémarrage du raspberry.
  • Affecter une adresse IP fixe à votre raspi (en la réservant via le dhcp du réseau ou en la configurant fixe dans le fichier /etc/network/interfaces du raspi).
  • Configurer l'accès à Internet du raspi afin que son heure soit correcte : si le réseau dispose d'un serveur DHCP, cela se limite en général à définir (si nécessaire) les paramètres proxy.

Cette configuration du proxy peut se faire en ajoutant, dans le fichier /home/pi/.profile, les caractéristiques du proxy.

sudo nano /home/pi/.profile

Par exemple, pour un proxy en 172.20.1.1:3128, ajouter à la fin du fichier :

export http_proxy="http://172.20.1.1:3128"
export https_proxy="http://172.20.1.1:3128"
export no_proxy="localhost,127.0.0.1,172.20.0.0/16"
  • Redémarrer le raspberry et vérifer l'accès à Internet via le navigateur web Epiphany de Jessie.
  • L'image de Raspbian Jessie pouvant dater de plusieurs mois, la mettre jour :
sudo apt-get update
sudo apt-get dist-upgrade
  • Paramétrer Libre Office Impress en français :
sudo apt-get install libreoffice-l10n-fr
  • Installer le client Samba, nécessaire pour récupérer le diaporama du partage Samba :
sudo apt-get install smbclient
  • Pour éviter que les utilisateurs visionnent le bureau LXDE du Raspberry au démarrage et à chaque fermeture/réouverture de LibreOffice Impress, il est possible d'utiliser l'application feh pour projeter en permanence une image en plein écran et en arrière fond.
sudo apt-get install feh
  • Déposer l'image à projeter dans le répertoire suivant :
cd /home/pi/Pictures
  • Par exemple, il pourrait être projeté une image décrivant ce sur quoi repose le dispositif :

Splash screen miniature.png

Cela permettrait de sensibiliser les élèves aux solutions libres.

wget http://wiki.dane.ac-versailles.fr/images/8/8a/Splash_screen_miniature.png
  • Créer le script de lancement automatique du diapo.
nano /home/pi/script_lanceur_diapo.sh

Copier/coller le contenu de ce script, en l'adaptant à votre réseau :


#!/bin/sh

USER="pi"
IP_SE3="x.y.z.i"

# Pour le débugguage : fichiers de log journalier (les raspi redémarrant chaque jour)
# exec 1> "/home/$USER/sorties.log" 2> "/home/$USER/erreurs.log"

# Pour éviter que l'écran ne s'éteigne au bout d'un certain temps       
xset s off         
xset -dpms

# On affiche l'image d'arrière fond pour "masquer" le bureau LXDE de Raspbian.
feh -Z -F -Y "/home/$USER/Pictures/Splash_screen_miniature.png" &

# Initialisation des variables
VERSION_OLD="toto"
PID=""

# On attend 15 secondes que wicd configure le réseau
sleep 15

# On teste toutes 20 secondes si une nouvelle version du diapo est disponible sur le partage et on met à jour si nécessaire ...
while true; do
	
	# On rècupère la date de dernière modification du diaporama, sur le partage Samba
	VERSION_NEW=$(smbclient //IP_SE3/affichage_dynamique -U admin_affichage%mdp_admin_affichage -c 'ls \eleves\diapo_eleves.odp' | cut -f 1 | awk '{print $4 $5 $6 $7 $8}')
   
	# Si la diapo sur le partage est plus récent que celui projeté actuellement, on re-télécharge la nouvelle version du diapo puis on la projette
	if [ "$VERSION_NEW" != "$VERSION_OLD" ]
	then
		# On ferme le diapo projeté
		kill "$PID"

		# On attend 2 secondes avant de passer à la suite
		sleep 2

		# On nettoie le répertoire affichage_dynamique avant d'y mettre la nouvelle version du diaporama
		rm -rf "/home/$USER/affichage_dynamique"
		mkdir "/home/$USER/affichage_dynamique"
		
                smbclient //$IP_SE3/affichage_dynamique -U admin_affichage%mdp_admin_affichage -c 'get \eleves\diapo_eleves.odp /home/pi/affichage_dynamique/diapo_eleves_temp.odp'

		sleep 2

                # On relance le diapo uniquement si le téléchargement s'est bien passé, sinon on affiche un message d'erreur
		if [ -e "/home/$USER/affichage_dynamique/diapo_eleves_temp.odp" ]
		then
			mv -f "/home/$USER/affichage_dynamique/diapo_eleves_temp.odp" "/home/$USER/affichage_dynamique/diapo_eleves.odp"
			VERSION_OLD="$VERSION_NEW"
		else
			cp -f "/home/$USER/diapo_erreur.odp" "/home/$USER/affichage_dynamique/diapo_eleves.odp"
		fi
		
		# On attend 1 seconde avant de passer à la suite (ce qui fait que les utilisateurs visionnent l'image d'arrière fond pendant 5 secondes au total avant la projection du nouveau diaporama ...)
		sleep 1
		
                # On relance libreoffice avec la nouvelle version du diapo
		libreoffice --norestore --show "/home/$USER/affichage_dynamique/diapo_eleves.odp" &
        	PID=$(echo "$!");  
        
        	# On attend 15 secondes avant la prochaine synchro
		sleep 15
		
	else	
		# Pas de mise à jour du diapo : on attend 20 secondes avant de re-vérifier la synchro
		sleep 20
	fi
done
  • Restreindre les droits sur ce script (qui contient en clair le mot de passe du compte administrateur de l'affichage dynamique ...)
chmod 700 /home/pi/script_lanceur_diapo.sh
  • Pour avertir l'administrateur d'éventuels problèmes réseaux, créer avec LibreOffice Impress une diapositive contenant un message d'erreur du type : "Impossible de télécharger le diaporama sur le réseau" : le Raspberry l'affichera s'il ne parvient pas à télécharger diapo_eleves.odp sur le partage Samba

Enregistrer cette diapositive au chemin suivant :

/home/pi/diapo_erreur.odp
  • Tester le script :
bash /home/pi/script_lanceur_diapo.sh

Modifier le diaporama diapo_eleves.odp du partage Samba et vérifier que l'affichage est actualisé environ une minute plus tard.
Si tout est fonctionnel, arrêter le script avec la séquence de touche "CTRL + C"

  • Créer un lanceur automatique au démarrage du Raspberry, pour le script précédent :
mkdir -p /home/pi/.config/autostart
nano /home/pi/.config/autostart/lanceur_diapo.desktop
  • Y insérer le contenu suivant :
[Desktop Entry]
Type=Application
Name=Affichage
Exec=lxterminal -e /home/pi/script_lanceur_diapo.sh

Tester la configuration du Raspberry 

  • Connecter le Raspberry à un écran via un cable HDMI/DVI (ou HDMI/HDMI).
  • Connecter le Raspberry au réseau Samba via le cable ethernet (ou la clé wifi, si une borne wifi existe ...).
  • Démarrer le Raspberry et vérifier que le diaporama déposé sur le partage se lance automatique en plein écran et en boucle.
  • Sur un PC du réseau Samba, s'identifier avec les identifiants de l'administrateur de l'affichage dynamique puis modifier le diaporama du partage affichage_dynamique.
  • Vérifier, environ 20 secondes plus tard, que l'écran projette la nouvelle version du diapo.

Démarrer et éteindre automatiquement l'affichage dynamique

La carte réseau du Raspi ne dispose pas de la fonction "Wake on Lan" pour le démarrer par le réseau mais il est possible d'utiliser un minuteur de prise électrique pour l'allumer et l'éteindre automatiquement chaque jour, à heures fixes.
Toutefois, pour éviter une extinction "brutale" par coupure électrique, il est préférable de planifier dans crontab une extinction du raspi avec la commande poweroff.

sudo crontab -e

Par exemple, si le minuteur coupe à 20h, éteindre le raspi à 19h :

00  19 *   *   *    /sbin/poweroff

Cloner la carte SD configurée sur d'autres cartes SD 8Go, pour les autres écrans

Une fois la carte SD précédente fonctionnelle, il est possible de la cloner sur d'autres cartes SD 8Go, pour d'autres écrans.

Diminuer la taille de la partition avant clonage

Le clonage de la carte SD est très simple sous GNU/Linux avec la commande dd, pourvu que la carte SD que l'on souhaite cloner ait une taille inférieure ou égale à celle destinée à accueillir l'image. Deux cartes SD de même taille n'ont pas forcément exactement le même nombre d'octets ... Pour éviter des soucis pendant le clonage, nous allons réduire légerement la taille de la carte SD "modèle", avec gparted :

  • Installer sur votre client GNU/Linux l'application gparted qui permet d'agrandir/réduire des partitions :
apt-get update
apt-get install gparted
  • Lancer gparted et réduire légèrement (100 Mo par exemple) la partition de la carte SD "modèle" destinée à être clonée.

Créer une image de votre carte SD modèle :

  • Insérer la carte SD 8Go configurée précédemment. Ne pas la monter.
  • Sur un PC GNU/Linux, en tant que root :
dd bs=4M if=/dev/mmcblk0 of=/home/users/raspi_affichage_dynamique.img

Cette commande dure environ 5 minutes pour une carte SD de 8Go.

  • Une fois l'invite de commande de retour, retirer la carte SD.

Cloner cette image sur tous les raspis pilotant l'affichage dynamique de l'établissement

  • Insérer une nouvelle carte SD 8Go. Ne pas la monter.
  • Sur un PC linux, en tant que root :
dd bs=4M if=/home/users/raspi_affichage_dynamique.img of=/dev/mmcblk0

Cette commande dure environ 10 minutes pour une carte SD de 8Go.

  • Tester la carte clonée et la personnaliser :

- Insérer la carte SD clonée dans un raspberry puis démarrer le raspi.
- Se rendre dans le menu Préférences -> Raspberry Pi Configurations puis, dans la rubrique System, changer le nom du raspberry.
- Si le raspberry est destiné à projeter un autre diaporama que diapo_eleves.odp, par exemple diapo_self.odp, saisir cette commande :

sudo sed -i -e "s/diapo_eleves/diapo_self/g" /home/pi/script_lanceur_diapo.sh

- Si l'IP du raspi est fixe et définie dans le fichier /etc/network/interfaces, la changer. Sinon, redémarrer le raspi puis la réserver dans le dhcp du réseau.
- Redémarrer le raspi.
- Vérifier que le nouveau nom du raspi a bien été pris en compte en consultant les deux fichiers suivants :

sudo nano /etc/hostname
sudo nano /etc/hosts

- Lancer LibreOffice Impress puis le fermer.

  • Répéter ce clonage pour toutes les cartes équipant les Raspberry de votre affichage dynamique.

Annexe

Dans le dispositif décrit dans cet article, les utilisateurs visionnent le redémarrage de LibreOffice Impress à chaque mise à jour du diaporama.
Il est possible de masque ce redémarrage en utilisant un économiseur d'écran (xscreensaver) qu'on activerait avant la fermeture de LibreOffice Impress puis désactiverait quelques secondes après son relancement.

L'utilisation d'un économiseur d'écran pouvant introduire de l'instabilité, cette nouvelle solution peut se révéler moins sure sur le long terme.

  • Installer l'économiseur d'écran xscreensaver :
sudo apt-get install xscreensaver
  • Configurer xscreensaver : lancer l'interface de configuration de xscreensaver (menu "Préférences" puis "Economiseur d'écran") puis régler les paramètres suivants :
    • Dans le menu "Avancé" -> Manipulation d'images, cocher "Choisir une image Aléatoires" puis saisir le chemin /home/pi/Pictures
    • Dans le menu Modes d'affichage, sélectionner le mode Ripples : un aperçu de votre image apparaît dans la fenêtre miniature à droite.
    • Pour modifier les caractéristiques de ce mode, se rendre dans "Paramétres" puis effectuer les réglages selon convenance.

Remarque :
Le mode "Ripples" de xscreensaver réalise un effet "pluie" sur cette image. Le mode "GLSlideshow" du paquet xscreensaver-gl-extra permet d'afficher une image en mode diaporama, sans aucun effet. Malheureusement, ce mode n'est pas fonctionnel sur le raspberry.

  • Créer le script de lancement automatique du diapo.
nano /home/pi/script_lanceur_diapo.sh
  • Puis Copier/coller le contenu de ce script, en l'adaptant à votre réseau :

#!/bin/sh

USER="pi"
IP_SE3="x.y.z.i"

# Pour le débugguage : fichiers de log journalier (les raspi redémarrant chaque jour)
# exec 1> "/home/$USER/sorties.log" 2> "/home/$USER/erreurs.log"

# Pour éviter que l'écran ne s'éteigne au bout d'un certain temps       
xset s off         
xset -dpms

# Activation de l'économiseur d'écran pour masquer le bureau lxde de Raspbian
xscreensaver-command -activate

# Initialisation des variables
VERSION_OLD="toto"
PID=""

# On attend 15 secondes que wicd configure le réseau
sleep 15

# On teste toutes 20 secondes si une nouvelle version du diapo est disponible sur le partage et on met à jour si nécessaire ...
while true; do
	
	# On rècupère la date de dernière modification du diaporama, sur le partage Samba
	VERSION_NEW=$(smbclient //IP_SE3/affichage_dynamique -U admin_affichage%mdp_admin_affichage -c 'ls \eleves\diapo_eleves.odp' | cut -f 1 | awk '{print $4 $5 $6 $7 $8}')
   
	# Si la diapo sur le partage est plus récent que celui projeté actuellement, on re-télécharge la nouvelle version du diapo puis on la projette
	if [ "$VERSION_NEW" != "$VERSION_OLD" ]
	then
		
                # Avant de fermer le diaporama, on active l'économiseur d'écran.
                xscreensaver-command -activate
                sleep 2
                
                # On ferme le diapo projeté
		kill "$PID"

		# On attend 2 secondes avant de passer à la suite
		sleep 2

		# On nettoie le répertoire affichage_dynamique avant d'y mettre la nouvelle version du diaporama
		rm -rf "/home/$USER/affichage_dynamique"
		mkdir "/home/$USER/affichage_dynamique"
		
                smbclient //$IP_SE3/affichage_dynamique -U admin_affichage%mdp_admin_affichage -c 'get \eleves\diapo_eleves.odp /home/pi/affichage_dynamique/diapo_eleves_temp.odp'

		sleep 1

                # On relance le diapo uniquement si le téléchargement s'est bien passé, sinon on affiche un message d'erreur
		if [ -e "/home/$USER/affichage_dynamique/diapo_eleves_temp.odp" ]
		then
			mv -f "/home/$USER/affichage_dynamique/diapo_eleves_temp.odp" "/home/$USER/affichage_dynamique/diapo_eleves.odp"
			VERSION_OLD="$VERSION_NEW"
		else
			cp -f "/home/$USER/diapo_erreur.odp" "/home/$USER/affichage_dynamique/diapo_eleves.odp"
		fi
		
		# On attend 1 seconde avant de passer à la suite (ce qui fait que les utilisateurs visionnent l'image d'arrière fond pendant 5 secondes au total avant la projection du nouveau diaporama ...)
		sleep 1
		
                # On relance libreoffice avec la nouvelle version du diapo
		libreoffice --norestore --show "/home/$USER/affichage_dynamique/diapo_eleves.odp" &
        	PID=$(echo "$!");  
        
        	# On masque la réouverture de LibreOffice Impress en attendant 12 secondes avant de désactiver l'économiseur d'écran
		sleep 12
		xscreensaver-command -deactivate
                sleep 2

	else	
		# Pas de mise à jour du diapo : on attend 20 secondes avant de re-vérifier la synchro
		sleep 20
	fi
done

Pour aller plus loin ......

On peut aller un peu plus loin avec ce script.

- Piloter l'allumage et l'extinction de téléviseur
- Donner à l'administrateur du diaporama la possibilité de gérer certain paramètres tel que :
-- L'heure d'allumage et d'extinction par défaut
-- Laisser le téléviseur éteint pendant plusieurs jours
-- Mettre une adresse mail pour être averti des changements d'horaires (si il y en a)
- Pas d'allumage le dimanche
- Pas d'allumage le samedi sauf si spécifié dans le fichier configuration.txt
- Le script cherche aussi plusieurs extensions possible à diffuser (pps ppt pptx ppsx odp)
- L'image diffusé pendant le chargement est prise au hasard entre 1.png et 16.png dans (Pictures/feh/) 

Le Raspberry étant pourvu d'un port GPIO on peut donc piloter une prise de courant via un relais. quelques infos sur ce blog

Pour permettre à l'administrateur du Diaporama de 'piloter' le téléviseur on va créer au même endroit que le diaporama un fichier texte "configuration.txt" Que l'administrateur pourra à sa guise modifier.

############################################################################################################################
### Ce fichier permet de modifier  l'heure d'allumage et l'heure d'extinction du téléviseur 				####
### 										                      			####
### Pour spécifier une heure de début et de fin  pour un jour bien précis formater une      				####
###  ligne ainsi  @jj:mm:aa:HH:MM:HH:MM:nmbr  ce qui représente 							####
### @jour:moi:année:heure de début : minute de début :heure de fin:minute de fin:nombre de jour d'arret			####
### exemple si je veux que le téléviseurs'allume à 7h00 et s'éteigne à 20h00 le 12 mars 2015 je créé une ligne		####
### @12:03:15:07:00:20:00:-												####
###si je veux que le téléviseur reste éteint pendant les vacances (14 jours) à partir du 19/12/2015			####
### @19:12:15:-:-:-:-:14												####
### ATTENTION de bien enregistrer ce fichier au format texte    (configuration.txt) 					####
###															####

exemples
défini des nouveaux horaires pour le 13/03/2015
@13:03:15:07:00:20:00:-
défini des nouveaux horaires pour le 12/12/2015
@12:12:15:07:05:20:02:-
défini 15 jours d'arret à partir du 16/12/2015
@16:12:15:-:-:-:-:16
############################################################################################################################

configuration par defaut (à modifier selon votre convenance)
####################
@emailadmin:emaildeladministrateur@free.fr
@-:-:-:07:30:18:00:-
####################

vacances scolaire 2016-2017
############################
@23:12:16:-:-:-:-:11  
@11:02:17:-:-:-:-:15
@08:04:17:-:-:-:-:15
@01:05:17:-:-:-:-:1
@08:05:17:-:-:-:-:1
@25:05:17:-:-:-:-:1
@08:07:17:-:-:-:-:55
############################
et quelques modifications prévus
@14:12:16:17:02:17:03:-
@21:12:16:09:00:09:15:-
@22:12:16:10:30:12:45:-

Une fois ce fichier créé, le script le télécharge tous les jours à 2h00 du matin et modifie les horaires si il y en a. Envoie un mail à l'admin si des modifications sont détectées.


Les 2 petits scripts python à rajouter avec le lanceur du diaporama (pris sur le blog cité plus haut) Pour éteindre

sudo nano fermer-circuit.py
#! /usr/bin/python
import RPi.GPIO as GPIO ## Import GPIO library
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD) ## Use board pin numbering
GPIO.setup(7, GPIO.OUT) ## Setup GPIO Pin 7 to OUT
GPIO.output(7,False) ## Turn off GPIO pin 7

Pour allumer

sudo nano ouvrir-circuit.py
#! /usr/bin/python
import RPi.GPIO as GPIO ## Import GPIO library
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD) ## Use board pin numbering
GPIO.setup(7, GPIO.OUT) ## Setup GPIO Pin 7 to OUT
GPIO.output(7,True) ## Turn on GPIO pin 7

Il faut aussi installer 2 paquets pour l'envoie de mail le tutos complet Sur ce Blog

	
sudo apt-get install mailutils mpack
sudo apt-get install ssmtp

editer le fichier de conf

sudo nano /etc/ssmtp/ssmtp.conf

Et renseigner comme ceci

root=monLogin@gmail.com
mailhub=smtp.gmail.com:587
hostname=srvweb
AuthUser= monLogin@gmail.com
AuthPass=monbeauPaSsWoRd
FromLineOverride=YES
UseSTARTTLS=YES

Enfin le script complet revisité


#!/bin/bash

USER=$('whoami')

#version 21.12.2016 avec gestion horaire et email

IP_SE3="10.37.15.200"

user="admin"
password="0370032j"
partage="docspartages"
fichier="diaporama_accueil."
chemin="/administratif/diaporama_accueil/"
horaire="configuration.txt"



testdateetheure(){
joursemaine=$(date +%a)
jour=$(date +%d);
mois=$(date +%m);
annee=$(date +%y);
heure=$(date +%H);
minute=$(date +%M);
}

# Pour le débugguage : fichiers de log journalier (les raspi redémarrant chaque jour)
# exec 1> "/home/$USER/sorties.log" 2> "/home/$USER/erreurs.log"

# Pour éviter que l écran ne s éteigne au bout d'un certain temps       
xset s off
xset -dpms

email(){

echo "$message" | mail -s "Information  Ecran de Diffusion" $destinataire
}
 
checkextention () {
			# on test les différentes extentions possible
        _test_extention="pps ppt pptx ppsx odp" ;
        for extention in ${_test_extention} ; do
		RECHERCHE=$(smbclient //$IP_SE3/$partage -U $user%$password -c 'ls '$chemin$fichier$extention''| cut -f 1 | awk '{print $1}' )
	
                if  [ "$RECHERCHE" != "NT_STATUS_NO_SUCH_FILE" ] 
                then
ext=$extention;
break;
else 
echo "Le fichier n'existe pas!";

fi

              done
}

imagealeatoire () {
min=1
max=5
number=$[($RANDOM % ($[$max - $min] + 1)) + $min]
}



changefeh (){
killall -9 feh
HOME=/home/$USER/ DISPLAY=:0 feh -Z -F -Y /home/$USER/Pictures/feh/$number.png &

}


testheuredebutfin (){
# test la date et l heure actuel
testdateetheure




if [ "$joursemaine" = "dim." ];then 
sleep 86280
testheuredebutfin
fi

#télécharge le nouveau fichier horaire

rm -f /home/'$USER'/'$horaire';
	smbclient //$IP_SE3/$partage -U $user%$password -c 'get '$chemin''$horaire' /home/'$USER'/'$horaire' ';

##echo défini horaire par défault
				heuredebut=$(cat /home/$USER/$horaire |grep @-:-:- |cut -d: -f4);
				minutedebut=$(cat /home/$USER/$horaire |grep @-:-:- |cut -d: -f5);
				heurefin=$(cat /home/$USER/$horaire |grep @-:-:- |cut -d: -f6);
				minutefin=$(cat /home/$USER/$horaire |grep @-:-:- |cut -d: -f7);

				##echo défini les nouveaux horaires si des horaires spécifiques pour ce jour ou pour le surlendemain ont été spécifiés dans le fichier configuration.txt
				demain=$(($jour+1));
				destinataire=$(cat /home/$USER/$horaire |grep @emailadmin |cut -d: -f2);
				horairenews=$(cat /home/$USER/$horaire |grep @$jour:$mois:$annee |cut -d: -f1);
				jourdarretdemain=$(cat /home/$USER/$horaire |grep @$demain:$mois:$annee |cut -d: -f8);
				jourdarret=$(cat /home/$USER/$horaire |grep @$jour:$mois:$annee |cut -d: -f8);
				heuredebutdemain=$(cat /home/$USER/$horaire |grep @$demain:$mois:$annee |cut -d: -f4);
				minutedebutdemain=$(cat /home/$USER/$horaire |grep @$demain:$mois:$annee |cut -d: -f5);
				heurefindemain=$(cat /home/$USER/$horaire |grep @$demain:$mois:$annee |cut -d: -f6);
				minutefindemain=$(cat /home/$USER/$horaire |grep @$demain:$mois:$annee |cut -d: -f7);


					if [ "$heuredebutdemain" != "-" ];then
					message=" Demain $demain:$mois:$annee  Heure d allumage = $heuredebutdemain H $minutedebutdemain : Heure d extinction =  $heurefindemain H $minutefindemain ";
					email
					fi
					if [ "$jourdarretdemain" != "-" ];then
					message=" L ecran de diffusion restera eteint pendant $jourdarretdemain a  partir du $demain:$mois:$annee ";
					email
					fi


			if  [ "$horairenews" = "@"$jour  ];then
				heuredebut=$(cat /home/$USER/$horaire |grep @$jour:$mois:$annee |cut -d: -f4);
				minutedebut=$(cat /home/$USER/$horaire |grep @$jour:$mois:$annee |cut -d: -f5);
				heurefin=$(cat /home/$USER/$horaire |grep @$jour:$mois:$annee |cut -d: -f6);
				minutefin=$(cat /home/$USER/$horaire |grep @$jour:$mois:$annee |cut -d: -f7); 
					if [ "$jourdarret" != "-" ];then
					pause=$((86400 * $jourdarret-1800));
					message="L ecran restera eteint pendant $jourdarret jours soit pendant $pause secondes"
					email
					sleep $pause;
					testdateetheure;
					fi	
			else

					if [ "$joursemaine" = "sam." ];then
					sleep 171000;
					testdateetheure;
					fi

			fi
}




testdateetheure
testheuredebutfin

			#on defini l'image aleatoire
	imagealeatoire
			# On affiche l image  d arrière fond pour masquer le bureau LXDE de Raspbian.
	changefeh	

# Initialisation des variables
VERSION_OLD="toto"
PID=""


			# On attend 15 secondes que wicd configure le réseau
sleep 15

			# On teste toutes les 20 secondes si une nouvelle version du diapo est disponible sur le partage et on met à jour si nécessaire ...
while true; do
# On test les differentes version de diaporama possible
	checkextention
	
	#echo "on test la date et l'heure actuelle "
	
	testdateetheure
	
	#echo "si il est 1 heure du matin on vérifie les horaire d allumage et d'extinction du jour" 
	
		
	if [ "$heure" = "02" ];then
		if [ "$minute" = "00" ];then
		sleep 65
		testheuredebutfin
		fi
	fi
	
	#echo "si l heure actuelle correspond  à l heure d'allumage on allume le téléviseur"
	if [ "$heure" = "$heuredebut" ];then
		if [ "$minute" = "$minutedebut" ];then
		# message="Pour debug - Il est $heure H $minute allumage de l ecran de diffusion"
		# email
		python -u /home/$USER/ouvrir-circuit.py
		sleep 65		
		fi
	fi
	
	#echo "si l heure actuelle correspond  à l heure d'extinction on eteint le téléviseur"
	if [ "$heure" = "$heurefin" ];then
		if [ "$minute" = "$minutefin" ];then
		# message="Pour debug : Il est $heure H $minute extinction de l ecran de diffusion"
		# email
		python -u /home/$USER/fermer-circuit.py
		sleep 65		
		fi
	fi
	
		#echo   "On rècupère la date de dernière modification du diaporama, sur le partage Samba"
	VERSION_NEW=$(smbclient //$IP_SE3/$partage -U $user%$password -c 'ls '$chemin$fichier$ext'' | cut -f 1 | awk '{print $4 $5 $6 $7 $8}')
	
			
   
			# Si la diapo sur le partage est plus récent que celui projeté actuellement, on re-télécharge la nouvelle version du diapo puis on la projette
	if [ "$VERSION_NEW" != "$VERSION_OLD" ]
	then
			# On ferme le diapo projeté
			#on defini l'image aleatoire
			
	imagealeatoire
			# On affiche l image  d arrière fond pour masquer le bureau LXDE de Raspbian.
	changefeh	
			
		kill "$PID"

		#echo On attend 2 secondes avant de passer à la suite
		sleep 2

		#echo "On nettoie le répertoire affichage_dynamique avant d y mettre la nouvelle version du diaporama"
		rm -rf "/home/"$USER"/affichage_dynamique"
		mkdir "/home/"$USER"/affichage_dynamique"
	
		#echo On télécharge la nouvelle version du fichier
	
                smbclient //$IP_SE3/$partage -U $user%$password -c 'get '$chemin$fichier$ext' /home/'$USER'/affichage_dynamique/diaporama_accueil_temp.'$ext''

		sleep 2

      #echo "On relance le diapo uniquement si le téléchargement s est bien passé, sinon on affiche un message d erreur"
		if [ -e "/home/"$USER"/affichage_dynamique/diaporama_accueil_temp."$ext ]
		then
			mv -f "/home/"$USER"/affichage_dynamique/diaporama_accueil_temp."$ext "/home/"$USER"/affichage_dynamique/diaporama_accueil."$ext
			VERSION_OLD="$VERSION_NEW"
		else
			cp -f "/home/"$USER"/erreur_diapo.ppt" "/home/"$USER"/affichage_dynamique/diaporama_accueil.ppt"
		fi
		
		# On attend 1 seconde avant de passer à la suite (ce qui fait que les utilisateurs visionnent l image d arrière fond pendant 5 secondes au total avant la projection du nouveau diaporama ...)
		sleep 1
	
                # On relance libreoffice avec la nouvelle version du diapo
                echo libreoffice --norestore --show /home/$USER/affichage_dynamique/diaporama_accueil.$ext &
 				libreoffice --norestore --show /home/$USER/affichage_dynamique/diaporama_accueil.$ext &
        		PID=$(echo "$!");

        	# On attend 15 secondes avant la prochaine synchro
		sleep 15
		
	else	
		# Pas de mise à jour du diapo : on attend 30 secondes avant de re-vérifier la synchro
		sleep 30
	fi
done