#!/usr/bin/perl use DateTime ; my $target_wake_up = shift ; my $song = shift ; $song ||= "/mp3/Rhapsody/Dawn of Victory/Rhapsody - 02 Dawn of Victory.mp3" ; my $now = DateTime->now( time_zone=>'PRC' ) ; $target_wake_up =~ m/(\d+):(\d+)(?:\:(\d\d))?(\wm)?/ or die "Give me a time like '5:30' or '3:15pm' or '18:22:33'." ; my $sec = $3 || 0 ; my $pm = $4 ; my $wake = DateTime->new( hour=>$1, minute=>$2, second=>$sec, year=>$now->year, month=>$now->month, day=>$now->day, time_zone=>'PRC', ) ; if( $pm eq 'pm' && $wake->hour < 12 ) { $wake->add( hours=> '12' ) ; } if( $now->hour > $wake->hour ) { $wake->add( days => '1' ) ; } my $day = ( $wake->day == $now->day ) ? 'today' : 'tomorrow' ; print "Set to play " . '"' . ( reverse split( /\/|\./, $song ) )[1] . '"' . " $day at " . scalar( $wake->strftime( '%I' ) + 0 ) . ":" . $wake->strftime( '%M %p' ) . ".\n" ; my $seconds_dur = $wake->subtract_datetime_absolute( $now ) ; my $minutes_to_wake = ( $seconds_dur->seconds / 60 ) % 60 ; my $hours_to_wake = int( $seconds_dur->seconds / 3600 ) ; print "Sleeping $hours_to_wake hours, $minutes_to_wake minutes...\n" ; sleep( $seconds_dur->seconds ); while (1) { print "RING! \n" ; system( '/home/msittig/bin/play', $song ) ; sleep( 300 ); }