Il y a quelques temps, je cherchais à déclencher des actions en fonction de l’heure du coucher et du lever du soleil ; ceci afin de simuler une présence chez moi.
Concrètement, je voulais piloter une prise électrique 433MHz pour allumer et éteindre un petit luminaire situé près d’une fenêtre.
Après de nombreuses recherches sur divers scripts qui m’auraient permis de réaliser ceci, je suis tombé sur un petit utilitaire en ligne de commande qui permet de réaliser cette tâche très facilement : sunwait de Dan Risacher.
On va commence par aller voir quelle est la dernière version de l’utilitaire sur le site du développeur :
http://www.risacher.org/sunwait/
Ici, le code n’a semble-t-il plus été mis à jour depuis le 08 décembre 2004.
Nous allons rapatrier l’archive dans notre dossier home ~/
avec la commande wget
:
$ cd ~/
$ wget http://www.risacher.org/sunwait/sunwait-20041208.tar.gz
Puis, nous allons désarchiver le fichier téléchargé :
$ tar xvzf sunwait-20041208.tar.gz
On se place dans le dossier nouvellement créé :
$ cd sunwait-20041208/
On compile le code avec la commande :
$ make
Et on copie le tout dans le dossier des binaires des programmes locaux :
$ sudo cp sunwait /usr/local/bin
Une fois que cette dernière opération est réalisée, on peut tester l’utilitaire :
$ sunwait -p 50.850340N 4.351710E
Où 50.850340N et 4.351710E représentent la latitude et la longitude de Bruxelles en valeurs décimales.
On peut, par exemple, les trouver sur ce site.
Voici la commande pour afficher l’aide :
$ sunwait -h
Ce qui nous retourne ceci :
usage: sunwait [options] [sun|civ|naut|astr] [up|down] [+/-offset] [latitude] [longitude] latitude/longigude are expressed in floating-point degrees, with [NESW] appended example: sunwait sun up -0:15:10 38.794433N 77.069450W This example will wait until 15 minutes and 10 seconds before the sun rises in Alexandria, VA The offset is expressed as MM, or HH:MM, or HH:MM:SS, and indicates the additional amount of time to wait after (or before, if negative) the specified event. options: -p prints a summary of relevant times -z changes the printout to Universal Coordinated Time (UTC) -V prints the version number -v increases verbosity These options are useful mainly when used with the '-p' option -y YYYY sets the year to calculate for -m MM sets the month to calculate for -d DD sets the day-of-month to calculate for -h prints this help
Et on affiche les éphémérides pour le lever et le coucher du soleil avec la commande :
$ sunwait -p 50.850340N 4.351710E
On obtient par exemple :
Using location: 50.850340N, 4.351710E Date: 19 Mar 2017 Local time: 2:21 Day length: 12:14 hours With civil twilight 13:16 hours With nautical twilight 14:34 hours With astronomical twilight 15:54 hours Length of twilight: civil 0:31 hours nautical 1:09 hours astronomical 1:50 hours Current specified time zone: CET (1 from UTC) Sun transits meridian 1250 CET Sun rises 0644 CET, sets 1855 CET Civil twilight starts 0611 CET, ends 1928 CET Nautical twilight starts 0532 CET, ends 2007 CET Astronomical twilight starts 0452 CET, ends 2047 CET
Une fois exécuté, l’utilitaire va attendre jusqu’à ce que l’heure de l’évènement astronomique soit atteinte pour l’endroit indiqué.
Puis, les autres commandes sont exécutées.
$ sunwait sun up -1:10:00 50.850340N 4.351710E && echo 'Bonjour !'
On exécute sunwait
1 heures et 10 minutes avant le lever du soleil à Bruxelles
Dès que l’événement se produit, on écrit Bonjour ! à l’écran.
$ sunwait sun down 2:15:00 50.850340N 4.351710E && echo 'Bonne nuit !'
On exécute sunwait
2 heures et 15 minutes après le coucher du soleil à Bruxelles
Dès que l’événement se produit, on écrit Bonne nuit ! à l’écran.
Dans mon exemple du début, je cherchais à allumer et éteindre une lampe tous les jours au coucher du soleil.
Voir cet article pour la commande sans fil en 433MHz.
On va donc utiliser le cron
pour effectuer ces tâches :
$ sudo crontab -e
On utilisera le chemin complet pour définir les actions :
00 15 * * * /usr/local/bin/sunwait sun down -0:15:00 50.850340N 4.351710E ; /home/pi/433Utils/RPi_utils/./codesend XXXXXXX > /dev/null 2>&1 00 15 * * * /usr/local/bin/sunwait sun down +2:00:00 50.850340N 4.351710E ; /home/pi/433Utils/RPi_utils/./codesend YYYYYYY > /dev/null 2>&1
Ici, tous les jours à 15h00, on lance les 2 actions : allumer et éteindre la lampe.
La première (allumage) 15 minutes avant le coucher du soleil.
La seconde (extinction) 2 heures après le coucher du soleil.
XXXXXXX
est le code correspondant au bouton ON de la télécommande.
YYYYYYY
est le code correspondant au bouton OFF de la télécommande.
NB: sunwait ne bloque pas les autres lignes/actions du cron.