Mes passions, le boulots, mes coups de gueule...




Déclencher une action selon les éphémérides du lever et coucher du Soleil

Categorie : Domotique, Geek, Informatique, Linux, Raspberry Pi · par 19 Mar 2017

Introduction

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.

Sunwait

Présentation

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.

Installation

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.

Utilisation

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

Fonctionnement

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.

Exemples

$ 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.

Automatisation dans un cron

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.

Références

https://meanderingpi.wordpress.com/sunwait/

Laisser un commentaire