Git Product home page Git Product logo

node-cubesensors-cloud's Introduction

node-cubesensors-cloud

A node.js module to interface with the cloud service for CubeSensors.

Before Starting

You will need to activate your CubeSensor hub and send an email to the folks at CubeSensors to request a consumer key and a consumer secret.

Install

npm install cubesensors-cloud

API

Load

var CubesensorsAPI = require('cubesensors-cloud');

Get Authorized Request Tokens

Once you have the consumer key and consumer secret, you now need to generate a request token. With a request token, you can redirect the user to the CubeSensors website, where they can login and authorize access. The goal is to get two parameters that are needed to use the REST API: oAuthAccessToken, and oAuthAccessSecret. This need be done only once.

The steps are:

  1. Create a client with the consumerKey and consumerSecret.

  2. Use the authorize method to get the oAuthToken, oAuthTokenSecret, and a redirectURL.

  3. Ask the user to go to authorize the application at the redirectURL. If so, the CubeSensors website will display the oAuthVerifier.

  4. Create a client using the consumerKey, consumerSecret, oAuthToken, oAuthTokenSecret, and oAuthVerifier.

  5. Use the authorize method to get the oAuthAccessToken and oAuthAccessSecret.

In other words, you run this code twice, updating the clientState variable each time:

var clientState = { consumerKey       : '...'
                  , consumerSecret    : '...'
                  , oAuthToken        : null
                  , oAuthTokenSecret  : null
                  , oAuthVerifier     : null
                  , oAuthAccessToken  : null
                  , oAuthAccessSecret : null
                  };

var client = new CubesensorsAPI.CubesensorsAPI(clientState).on('error', function(err) {
  console.log('background error: ' + err.message);
}).authorize(function(err, state, redirectURL) {
  if (!!err) return console.log('authorization failed: ' + err.message);

  if (!!state) clientState = state;

  if (!!redirectURL) {
    // redirect user to redirectURL
    // if the user authorizes access, the browser will display the oAuthVerifier code
  }
});

REST API

var util = require('util')
  ;

var clientState = { consumerKey       : '...'
                  , consumerSecret    : '...'
                  , oAuthAccessToken  : '...'
                  , oAuthAccessSecret : '...'
                  };

var client = new CubesensorsAPI.CubesensorsAPI(clientState).on('error', function(err) {
  console.log('background error: ' + err.message);
})..getDevices(function(err, devices) {
  var device, i, then;

  if (!!err) return console.log('getDevices failed: ' + err.message);

  var infocb = function(device) {
    return function(err, info) {
      if (!!err) return console.log('getDeviceInfo ' + device.uid + ' failed: ' + err.message);

      console.log('>>> device ' + device.name + ' (' + device.uid + ') info');
      console.log(util.inspect(info, { depth: null }));
    };
  };

  var statecb = function(device) {
    return function(err, state) {
      if (!!err) return console.log('getDeviceState ' + device.uid + ' failed: ' + err.message);

      console.log('>>> device ' + device.name + ' (' + device.uid + ') state:');
      console.log(util.inspect(state, { depth: null }));
    };
  };

  var historycb = function(device) {
    return function(err, history) {
      var i, state;

      if (!!err) return console.log('getDeviceHistory ' + device.uid + ' failed: ' + err.message);

      console.log('>>> device ' + device.name + ' (' + device.uid + ') history: ' + history.length + ' entries');
      for (i = 0; i < history.length; i++) {
        state = history[i];
        console.log('>>> history entry #' + i);
        console.log(util.inspect(state, { depth: null }));
      }
    };
  };

  then = new Date().getTime() - (6 * 60 * 1000);
  for (i = 0; i < devices.length; i++) {
    device = devices[i];
    console.log('>>> device #' + i);
    console.log(util.inspect(device, { depth: null }));

    this.getDeviceInfo(device.uid, infocb(device))
        .getDeviceState(device.uid, statecb(device))
        .getDeviceHistory(device.uid, then, undefined, historycb(device));
  }
});

Finally

Enjoy!

node-cubesensors-cloud's People

Contributors

mrose17 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.