Created
November 19, 2016 10:53
-
-
Save Drenerdo/2585068f494498326915829633cebc7c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*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