Skip to content

Instantly share code, notes, and snippets.

@Drenerdo
Created November 19, 2016 10:53
Show Gist options
  • Save Drenerdo/2585068f494498326915829633cebc7c to your computer and use it in GitHub Desktop.
Save Drenerdo/2585068f494498326915829633cebc7c to your computer and use it in GitHub Desktop.
/*jslint node:true,vars:true,bitwise:true,unparam:true */
/*jshint unused:true */
/*
The Local Temperature Node.js sample application distributed within Intel® XDK IoT Edition under the IoT with Node.js Projects project creation option showcases how to read analog data from a Grover Starter Kit Plus – IoT Intel® Edition Temperature Sensor, start a web server and communicate wirelessly using WebSockets.
MRAA - Low Level Skeleton Library for Communication on GNU/Linux platforms
Library in C/C++ to interface with Galileo & other Intel platforms, in a structured and sane API with port nanmes/numbering that match boards & with bindings to javascript & python.
Steps for installing MRAA & UPM Library on Intel IoT Platform with IoTDevKit Linux* image
Using a ssh client:
1. echo "src maa-upm http://iotdk.intel.com/repos/1.1/intelgalactic" > /etc/opkg/intel-iotdk.conf
2. opkg update
3. opkg upgrade
Article: https://software.intel.com/en-us/html5/articles/iot-local-temperature-nodejs-and-html5-samples
*/
var webSocketUrl = "wss://api.artik.cloud/v1.1/websocket?ack=true";
var device_id = "dt2feb5964dd8e4f7f8332e2ebe97a1898";
var device_token = "your_device_token";
var isWebSocketReady = false;
var ws = null;
var WebSocket = require('ws');
/**
* Gets the current time in millis
*/
function getTimeMillis(){
return parseInt(Date.now().toString());
}
/**
* Create a /websocket device channel connection
*/
function start() {
//Create the websocket connection
isWebSocketReady = false;
ws = new WebSocket(webSocketUrl);
ws.on('open', function() {
console.log("Websocket connection is open ....");
register();
});
ws.on('message', function(data, flags) {
console.log("Received message: " + data + '\n');
});
ws.on('close', function() {
console.log("Websocket connection is closed ....");
});
}
/**
* Sends a register message to the websocket and starts the message flooder
*/
function register(){
console.log("Registering device on the websocket connection");
try{
var registerMessage = '{"type":"register", "sdid":"'+device_id+'", "Authorization":"bearer '+device_token+'", "cid":"'+getTimeMillis()+'"}';
console.log('Sending register message ' + registerMessage + '\n');
ws.send(registerMessage, {mask: true});
isWebSocketReady = true;
}
catch (e) {
console.error('Failed to register messages. Error in registering message: ' + e.toString());
}
}
/**
* Send one message to ARTIK Cloud
*/
function sendData(temp){
try{
ts = ', "ts": '+getTimeMillis();
var data = {
"currentTemp": temp
};
var payload = '{"sdid":"'+device_id+'"'+ts+', "data": '+JSON.stringify(data)+', "cid":"'+getTimeMillis()+'"}';
console.log('Sending payload ' + payload);
ws.send(payload, {mask: true});
} catch (e) {
console.error('Error in sending a message: ' + e.toString());
}
}
var B = 3975;
var mraa = require("mraa");
//GROVE Kit A0 Connector --> Aio(0)
var myAnalogPin = new mraa.Aio(0);
/*
Function: startSensorWatch(socket)
Parameters: socket - client communication channel
Description: Read Temperature Sensor and send temperature in degrees of Fahrenheit every 4 seconds
*/
function startSensorWatch(socket) {
'use strict';
setInterval(function () {
var a = myAnalogPin.read();
console.log("Analog Pin (A0) Output: " + a);
//console.log("Checking....");
var resistance = (1023 - a) * 10000 / a; //get the resistance of the sensor;
//console.log("Resistance: "+resistance);
var celsius_temperature = 1 / (Math.log(resistance / 10000) / B + 1 / 298.15) - 273.15;//convert to temperature via datasheet ;
//console.log("Celsius Temperature "+celsius_temperature);
var fahrenheit_temperature = (celsius_temperature * (9 / 5)) + 32;
console.log("Fahrenheit Temperature: " + fahrenheit_temperature);
socket.emit("message", fahrenheit_temperature);
sendData(fahrenheit_temperature);
}, 15000);
}
console.log("Sample Reading Grove Kit Temperature Sensor");
//Create Socket.io server
var http = require('http');
var app = http.createServer(function (req, res) {
'use strict';
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('<h1>Hello world from Intel IoT platform!</h1>');
}).listen(1337);
var io = require('socket.io')(app);
start();
//Attach a 'connection' event handler to the server
io.on('connection', function (socket) {
'use strict';
console.log('a user connected');
//Emits an event along with a message
socket.emit('connected', 'Welcome');
//Start watching Sensors connected to Galileo board
startSensorWatch(socket);
//Attach a 'disconnect' event handler to the socket
socket.on('disconnect', function () {
console.log('user disconnected');
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment