Skip to content

Instantly share code, notes, and snippets.

@felixge

felixge/alarm.js Secret

Created September 28, 2011 21:50
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save felixge/1a40a207cf6132f77efa to your computer and use it in GitHub Desktop.
Save felixge/1a40a207cf6132f77efa to your computer and use it in GitHub Desktop.
#!/usr/bin/env node
var sprintf = require('printf');
var exec = require('child_process').exec;
var alarmHour = parseInt(process.argv[2], 10);
var alarmMinute = parseInt(process.argv[3], 10);
if (isNaN(alarmHour) || alarmHour < 0 || alarmHour > 23) {
throw new Error('invalid hour: ' + alarmHour);
}
if (isNaN(alarmMinute) || alarmMinute < 0 || alarmMinute > 59) {
throw new Error('invalid minute: ' + alarmMinute);
}
var powerHour = alarmHour;
var powerMinute = alarmMinute;
if (powerMinute > 5) {
powerMinute -= 5;
} else {
powerMinute = 60 + powerMinute - 5;
powerHour -= 1;
}
var powerCmd = sprintf(
'pmset repeat wakeorpoweron MTWRFSU %02d:%02d:00',
powerHour,
powerMinute
);
exec(powerCmd, function(err) {
if (err) {
throw err;
}
console.log(sprintf('Set alarm for %02d:%02d', alarmHour, alarmMinute));
console.log(sprintf('Set wakup for %02d:%02d', powerHour, powerMinute));
process.setuid('felix');
});
var file = '/Volumes/HDD/Music/iTunes/iTunes\ Music/Donovan/Donovan\'s\ Greatest\ Hits/08\ Colours.mp3';
var spawn = require('child_process').spawn;
var async = require('async');
var vlcPath = '/Applications/VLC.app/Contents/MacOS/VLC';
var interval = setInterval(function() {
var now = new Date;
var hour = now.getHours();
var minute = now.getMinutes();
if (hour == alarmHour && minute == alarmMinute) {
console.log(sprintf('Set alarm for %02d:%02d', alarmHour, alarmMinute));
play(file);
clearInterval(interval);
}
}, 1000);
function play(file) {
console.log('playing', file);
var vlc = spawn(vlcPath, [
'-R',
'--sout=#transcode {acodec = alac channels = 2, samplerate = 44100}: raop{host=10.0.1.13,volume=255}',
file
]);
vlc.stdout.setEncoding('utf8');
vlc.stderr.setEncoding('utf8');
async.log(vlc.stdout.on.bind(vlc.stdout), 'data');
async.log(vlc.stderr.on.bind(vlc.stderr), 'data');
vlc.on('exit', function() {
console.log('vlc exit', arguments);
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment