Skip to content

Instantly share code, notes, and snippets.

@thisandagain
Created October 27, 2012 02:01
Show Gist options
  • Save thisandagain/3962645 to your computer and use it in GitHub Desktop.
Save thisandagain/3962645 to your computer and use it in GitHub Desktop.
Pumpkin-O-Meter
/**
* Pumpkin-o-meter
*
* @package pumpkin
* @author Andrew Sliwinski <andrew@diy.org>
*/
/**
* Dependencies
*/
var request = require('request'),
argv = require('optimist')
.usage('Usage: $0 -apikey [string] -domain [string] -i [seconds]')
.demand(['apikey','domain'])
.default('i', 0.5)
.argv;
/**
* Phidget
*/
var phidget = require('phidget');
var servo = new phidget.servo();
function servoToPosition(deg, callback) {
servo.attach(function (err) {
servo.setEngaged(0, true, function (err) {
servo.setPosition(0, deg, function (err) {
servo.close(callback);
});
});
});
}
function checkChartbeat (callback) {
request({
method: 'get',
uri: 'http://api.chartbeat.com/live/quickstats/v3/',
qs: {
apikey: argv.apikey,
host: argv.domain
},
json: {}
}, function (err, response, body) {
if (err) return callback(err);
try {
callback(null, body.visit.avg);
} catch (e) {
callback(e);
}
});
}
function translate (value, leftMin, leftMax, rightMin, rightMax) {
leftSpan = leftMax - leftMin;
rightSpan = rightMax - rightMin;
valueScaled = (value - leftMin) / leftSpan;
return rightMin + (valueScaled * rightSpan);
}
// ----------------------------
// ----------------------------
setInterval(function () {
checkChartbeat(function (err, metric) {
if (err) {
console.log('Dashboard: ' + err);
} else {
var position = translate(metric, 0, 100, 65, 150);
servoToPosition(position, function (err) {
console.log('Visitor Average: %d | Position: %d', metric, position);
});
}
});
}, argv.i * 60000);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment