baudcast

0.0.1 • Public • Published

baudcast

dependencies

A socket-based, realtime messaging API; designed for the internet of things.

baudcast is a node module that allows machine-to-machine (M2M) communication of internet-connected devices over a simple and configurable REST API.

No registration/setup required, just start baudcasting and receiving key-value data right away.

Installation

Open your app's folder in the terminal and run the following command:

$ npm install baudcast

Usage

baudcast can be easily configured to use custom endpoints and response templates.

As an example, the HAPI-REST API specification has been implemented with baudcast:

var app = require('express')();
var bodyParser = require('body-parser');
var server = require('http').Server(app);
var client = require('redis').createClient();
var baudcast = require('baudcast')(server, client);
 
app.use(bodyParser()); // necessary for handling POST variables
 
app.get('/', function(req, res) { res.send('<i>baudcasting</i> things...'); });
 
 
/* set up endpoint to make a baudcast */
app.post('/baudcast/for/:thing', baudcast.route.makeNewBaudcast);
app.get('/baudcast/for/:thing', baudcast.route.makeNewBaudcast); // GET works too
 
/* set up endpoint to get last baudcast */
app.get('/get/last/baudcast/from/:thing', baudcast.route.getLastBaudcast);
 
/* set up endpoint to get last 800 baudcasts */
app.get('/get/baudcasts/from/:thing', baudcast.route.getBaudcasts);
 
 
/* set up custom response template */
var template = {
    verb: {
        get: 'getting',
        create: 'creating'
    },
 
    respondSuccess: function (action, resourceType, data) {
        var response = {
            this: "succeeded",
            by: this.verb[action],
            the: resourceType,
            with: data
        };
 
        return response;
    },
 
    respondFailure: function(why, apiErrorCode) {
        var response = {
            this: "failed",
            with: apiErrorCode || 500,
            because: why
        };
 
        return response;
    }
};
 
baudcast.useTemplate(template);
 
 
app.listen(3000);
server.listen(8888);
console.log('Server on port 3000, socket on port 8888...');

baudcasting

Simply call the following URL(as set up in the code) to make a new baudcast:

http://{some-host}:3000/baudcast/for/{thing}?foo=bar&baz=qux

The server will respond with:

{
    "this": "succeeded",
    "by": "creating",
    "the": "baudcast",
    "with": {
        "thing": "{thing}",
        "created": 1402642240997,
        "content": {
            "foo": "bar",
            "baz": "qux"
        }
    }
}

The POST method can also be used to baudcast valid JSON data.

Getting baudcasts

The last 800 baudcasts made by a thing over the last 24 hours can be retrieved by calling the following URL:

http://{some-host}:3000/get/baudcasts/from/{thing}

The server will return an array of baudcasts in the following form:

{
    "this": "succeeded",
    "by": "getting",
    "the": "baudcasts",
    "with": [
        {
            "thing": "{thing}",
            "created": 1402642240997,
            "content": {
                "hello": "again"
            }
        },
        {
            "thing": "{thing}",
            "created": 1402640319211,
            "content": {
                "hello": "world"
            }
        }
    ]
}

The latest baudcast made by a thing can be retrieved by making a call to the following URL:

http://{some-host}:3000/get/last/baudcast/from/{thing}

The server will return a single baudcast in the following form:

{
    "this": "succeeded",
    "by": "getting",
    "the": "baudcast",
    "with": {
        "thing": "{thing}",
        "created": 1402642240997,
        "content": {
            "foo": "bar",
            "baz": "qux"
        }
    }
}

Apart from the API endpoints, a device can also subscribe to a thing (or publish a new baudcast) using the popular socket.io framework.

To use baudcast with js, just include the socket.io script:

<script src="https://cdn.socket.io/socket.io-1.0.4.js"></script>

and use the following code:

var socket = io('http://{some-host}:8888');
 
socket.emit('subscribe', '{thing}'); // you can subscribe to as many things you like
 
socket.on('baudcast', function(baudcast) {
    // do your magic here
    console.log(baudcast);
 
});
 
socket.emit('baudcast', '{another-thing}', {ping: 'pong'});

Each baudcast received, for a subscribed thing will be an Object of the form:

{
    thing: "{thing}",
    created: 1402642240997,
    content: {
        foo: "bar",
        baz: "qux"
    }
}

API

for(thing, content)

This function makes a new baudcast for a thing.

from(thing, callback)

This function executes callback(baudcast) everytime a thing makes a new baudcast.

route.makeNewBaudcast(req, res)

This is the app handler for making a new baudcast. This supports POST as well as GET variables.

route.getLastBaudcast(req, res)

This is the handler for retrieving the most recent baudcast made by a thing. Since baudcasts are realtime and ephemeral, they are only stored for 24 hours.

route.getBaudcasts(req, res)

This is the handler for retrieving all the baudcasts made by a thing. Again, because baudcasts are ephemeral, only the last 800 baudcasts are stored.

useTemplate(newTemplate)

This function is used to specify the response template of the REST API. Note that it's argument is a JSON object that should contain the methods respondSuccess and respondFailure, whose signatures should follow guidelines in the example.

Examples

Simple wireless control of Arduino LED

/baudcast/

    Package Sidebar

    Install

    npm i baudcast

    Weekly Downloads

    0

    Version

    0.0.1

    License

    MIT

    Last publish

    Collaborators

    • nilakshdas