This commit is contained in:
Lucas Pleß 2013-02-13 00:12:44 +01:00
parent ee8aba9b87
commit 201edd7a9b
4 changed files with 72 additions and 38 deletions

17
app.js
View File

@ -6,7 +6,9 @@ var express = require('express')
, cosm = require('./cosm.js')
, osc = require('./osc.js');
var cosmClient = new cosm([91755, 70632], 'orKBBdLAKuKJU-RxqmZpZB6q0baSAKxBTVhKdjhUNkdyVT0g');
var cosmStreams = [ 70632 ];
var cosmClient = new cosm(cosmStreams, 'orKBBdLAKuKJU-RxqmZpZB6q0baSAKxBTVhKdjhUNkdyVT0g');
var oscClient = new osc('localhost', 8000);
@ -27,13 +29,17 @@ app.configure('development', function () {
});
app.get("/", function(req, res) {
res.render('index', { title: 'COSM display' });
res.render('index', { title: 'COSM display', streams: cosmStreams });
});
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
console.log("bla" + data);
});
cosmClient.getStreams(cosmStreams, function(object) {
socket.emit('gotstream', object);
});
});
@ -42,9 +48,10 @@ server.listen(app.get('port'), function () {
});
// this event is send by cosm client when new data arrives (just when values changed)
// this event is send by cosm client when new data arrives (just when values changes)
cosmClient.on('changedvalue', function(object) {
console.log("changedvalue: " + JSON.stringify(object));
oscClient.send('/cosm/' + object.stream + "/" + object.displayname, object.value);
io.sockets.emit('changedvalue', object);
});

66
cosm.js
View File

@ -2,13 +2,14 @@ var restify = require('restify')
, util = require('util')
, EventEmitter = require('events').EventEmitter;
var COSM = function(streams, key) {
// constructor function
function Cosm(streams, key) {
var self = this;
var streams = streams;
var interval = 1000;
self._streams = streams;
self._interval = 5000;
var jsonClient = restify.createJsonClient({
self._jsonClient = restify.createJsonClient({
url: 'http://api.cosm.com',
headers: { 'X-ApiKey': key },
version:'*'
@ -20,7 +21,7 @@ var COSM = function(streams, key) {
for(var i=0; i<streams.length; i++) {
jsonClient.get('/v2/feeds/' + streams[i] + ".json", function(err, req, res, obj) {
self._jsonClient.get('/v2/feeds/' + self._streams[i] + ".json", function(err, req, res, obj) {
if(err || obj.datastreams == null) {
console.error("error getting stream: " + err)
return;
@ -50,7 +51,7 @@ var COSM = function(streams, key) {
var address = streams[i] + ":" + dataStream.id;
if(recentvalues[address] != currentValue) {
if(true || recentvalues[address] != currentValue) {
self.emit('changedvalue', object);
}
@ -62,24 +63,49 @@ var COSM = function(streams, key) {
});
}
}, interval);
function isNumber(value) {
if ((undefined === value) || (null === value)) {
return false;
}
if (typeof value == 'number') {
return true;
}
return !isNaN(value - 0);
}
}, self._interval);
}
util.inherits(COSM, EventEmitter);
util.inherits(Cosm, EventEmitter);
module.exports = COSM;
Cosm.prototype.getStreams = function(streams, callback) {
var self = this;
for(var i=0; i<streams.length; i++) {
self._jsonClient.get('/v2/feeds/' + streams[i] + ".json", function(err, req, res, obj) {
if(err || obj.datastreams == null) {
console.error("error getting stream: " + err)
return;
}
var object = {
id: streams[i],
description: obj.description,
lat: typeof obj.location === 'undefined' ? 'undefined' : obj.location.lat,
lon: typeof obj.location === 'undefined' ? 'undefined' : obj.location.lon,
location: typeof obj.location === 'undefined' ? 'undefined' :obj.location.name,
title: obj.title
};
if(callback != 'undefined') callback(object);
});
}
};
module.exports = Cosm;
function isNumber(value) {
if ((undefined === value) || (null === value)) {
return false;
}
if (typeof value == 'number') {
return true;
}
return !isNaN(value - 0);
}

View File

@ -8,7 +8,6 @@
"dependencies": {
"express": "3.1.0",
"jade": "*",
"cosm": "*",
"socket.io": "*",
"restify": "*",
"node-osc": "*"

View File

@ -7,26 +7,26 @@ block content
div.container
div.row
for nr in [ 1,2,3]
for nr in streams
div.cell
div.kasten
h3 Freakduino + Netrad SBM-20
table
tr
td Location:
td Montreal
td --
tr
td Elevation:
td 8m
td --
tr
td Latitude:
td 51.6693413745977
td --
tr
td Longitude:
td -1.28627210855484
td --
tr
td Update:
td 23 Jun 2012 08:01:47
td --
div.mapbox(id="map#{nr}")
@ -48,14 +48,16 @@ block content
}
$(function() {
loadMap(document.getElementById("map1"), -34.397, 150.644);
loadMap(document.getElementById("map2"), -34.397, 150.644);
loadMap(document.getElementById("map3"), -34.397, 150.644);
});
var socket = io.connect('http://localhost');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
socket.on('gotstream', function(data) {
console.log("got stream: " + data);
});
socket.on('changedvalue', function(data) {
console.log("changedvalue: " + data);
});