J’utilise depuis peu le protocole XPL avec l’interface RFXCOM pour écouter les messages transmis par l’alarme Visonic. Il est disponible sous Linux avec les librairies XPL-Perl. Pour exécuter des actions domotiques, il peut être pratique de savoir s’il fait jour ou nuit.
Pour cela, j’ai écrit un script Perl qui calcule l’heure du coucher et du lever de soleil en fonction des coordonnés GPS. Je me base sur les librairies Perl Astro::Sunrise et DateTime::Event::Sunrise.

Pour rappel, les librairies peuvent s’installer à l’aide d’une simple commande Bash :
perl -MCPAN -e 'install DateTime::Event::Sunrise'

Le script Perl :

#!/usr/bin/perl -w
 
##
# Script by Clément Storck
# http://clement.storck.me
##
 
use Astro::Sunrise;
use DateTime::Event::Sunrise;
use Time::Local;
 
my $Sunrise;
my $Sunset;
my %dttime = ();
my ($Second, $Minute, $Hour, $Day, $Month, $Year, $WeekDay, $DayOfYear, $IsDST) = localtime(time);
$Year += 1900;
$Month++;
my $Latitude = 48.31;
my $Longitude = 7.43;
my $Timezone = 2;
 
($Sunrise, $Sunset) = sunrise($Year,$Month,$Day,$Longitude,$Latitude, $Timezone,0,0,1);
 
print "Sunset : ",$Sunset,"\n";
print "Sunrise : ",$Sunrise,"\n";
print "Heure actuelle : ",$Hour,":",$Minute,"\n";
 
#Coupe en heure et minute dans un tableau
@tabSunset = split(/\:/, $Sunset);    #Heure : $tabSunset[0];   #Minutes : $tabSunset[1];
@tabSunrise = split(/\:/, $Sunrise);
 
print "\nNb de seconde depuis 1970 jusqu'a maintenant : \n";
my $secondNow = timelocal($Second,$Minute,$Hour,$Day,$Month,$Year);
print $secondNow;
 
print "\nNombre de seconde depuis 1970 jusqu'au coucher du soleil : \n";
my $secondSunset = timelocal(0,$tabSunset[1],$tabSunset[0],$Day,$Month,$Year);
print $secondSunset;
 
print "\nNombre de seconde depuis 1970 jusqu'au lever du soleil : \n";
my $secondSunrise = timelocal(0,$tabSunrise[1],$tabSunrise[0],$Day,$Month,$Year)+86400;
print $secondSunrise,"\n";
 
if(($secondNow > $secondSunset) && ($secondNow < $secondSunrise)){
	print "Il fait nuit\n";
}
else{
	print"Il fait jour\n";
}
 
1;