npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

iobeam-client

v0.10.1

Published

Client library for connecting to iobeam

Readme

iobeam NodeJS Library

iobeam is a data platform for connected devices.

This is a NodeJS library for sending data to iobeam. For more information on the iobeam, please check out our documentation.

Please note that we are currently invite-only. You will need an invite to generate a valid token and use our APIs. (Sign up here for an invite.)

Before you start

Before you can start sending data to the iobeam backend, you'll need a project_id and project_token (with write-access enabled) for a valid iobeam account. You can get these easily with our command-line interface (CLI) tool or by accessing your project settings from our web app.

Installation

To install, simply use npm:

npm install iobeam-client

Then to include in a project:

var iobeam = require('iobeam-client');

By default, an installation script attempts to decide if Babel should be used (i.e. for Node versions older than 4.0.0). If you would like to force Babel to be used even with newer versions of Node (e.g. when using the library as part of a web app), add the following to your package.json:

"iobeam": {
    "es5": true
}

Overview

This library allows NodeJS clients to send data to the iobeam backend.

At a high-level, here's how it works:

  1. Build an iobeam client object with your project_id and project_token

  2. Make sure your device is registered, either generating a device_id in code or via another method (e.g., our CLI or REST APIs).

  3. Create a DataStore object for groups of related time-series.

  4. Add rows to the DataStore for readings at a timestamp.

  5. When you're ready, send your data to the iobeam backend

Getting Started

Here's how to get started, using a basic example that sends temperature data to iobeam. (For simplicity, let's assume that the current temperature can be accessed with getTemperature()).

(Reminder: Before you start, create a user account, project, and project_token (with write access) using the iobeam APIs, CLI or web app. Write down your new project_id and project_token.)

iobeam Initialization

There are several ways to initialize the iobeam client. All require that you have project_id and project_token before hand.

Without a registered device_id

Perhaps the most natural way is to let the device register itself. There are two ways to register a device_id:

(1) Let iobeam generate one for you:

var builder = new iobeam.Builder(PROJECT_ID, PROJECT_TOKEN)
                    .saveToDisk()
                    .register();
var iobeamClient = builder.build();

(2) Provide your own (must be unique to your project):

// Just specifying the device id:
var device = new iobeam.Device('my_desired_id');
// Specifying a device id, name, and type:
var device = new iobeam.Device('my_desired_id', 'device_name', 'device_type');

// Register it during initialization
var builder = new iobeam.Builder(PROJECT_ID, PROJECT_TOKEN)
                    .saveToDisk()
                    .register(device);
var iobeamClient = builder.build();

With the saveToDisk() call, the device_id will be saved to disk at the path (optionally) provided (default is to use the current directory). On future calls, this on-disk storage will be read first. If the file exists and no id is provided to register(), the one from the file will be used. If the file exists and a different id is provided, the old one will be replaced.

With a registered device_id

If you have registered a device_id (e.g. using our CLI), you can pass this in the constructor and skip the registration step.

var builder = new iobeam.Builder(PROJECT_ID, PROJECT_TOKEN)
                    .saveToDisk()
                    .setDeviceId(DEVICE_ID);
var iobeamClient = builder.build();

You must have registered some other way (CLI, website, previous installation, etc) for this to work.

Advanced: not saving to disk

If you don't want the device_id to be automatically stored for you, simply exclude the saveToDisk() call while building:

var builder = new iobeam.Builder(PROJECT_ID, PROJECT_TOKEN).register();
var iobeamClient = builder.build();

This is useful for cases where you want to persist the ID yourself (e.g. in a settings file), or if you are making clients that are temporary. For example, if you are writing a proxy for other devices, those devices will provide the id needed for the iobeam client.

Tracking Time-series Data

To track data, you'll need to create a iobeam.DataStore object that can be used to track one or more series of data. To initialize, you create the DataStore with the series it will track:

// conditions will be a `iobeam.DataStore` and `iobeamClient` will keep track of it.
var conditions = iobeamClient.createDataStore(["temperature", "humidity"]);

The columns are a list of strings. You should group series that are collected on the same measurement cycle together. For example, if you collect temperature and humidity every 10s, you should group them together; however, if you also collect another metric only every 30s, that should get its own DataStore. Then, when you have a measurement, add it to the store as an object, where values are keyed by the series they belong to:

var now = Date.now();
conditions.add(now, {temperature: getTemperature(), humidity: getHumidity()});

You can exclude fields in some rows, but if you find this happens more often than not, you should consider reorganizing your stores.

Connecting to the iobeam backend

You can send your data stored in iobeamClient to the iobeam backend easily:

iobeamClient.send();

This call is asynchronous, and you can optionally provide a callback for when it returns. The callback will be passed several arguments: (1) an error if there was one and (2) the DataStore that was sent.

iobeamClient.send(function(error, datastore) {
    if (!error) {
        console.warn(error);
    }
});

The callback will be called once per request sent. Each DataStore that the client tracks is a separate request.

Full Example

Here's the full source code for our example:

var iobeam = require('iobeam-client');

// Constants initialization
PROJECT_ID = ...  // int
PROJECT_TOKEN = ... // String
...

// Init iobeam
var builder = new iobeam.Builder(PROJECT_ID, PROJECT_TOKEN)
                    .saveToDisk()
                    .register();
var iobeamClient = builder.build();

// Data store initialization
var conditions = iobeamClient.createDataStore(["temperature", "humidity"]);

...

// Data gathering
var now = Date.now();
conditions.add(now, {temperature: getTemperature(), humidity: getHumidity()});

...

// Data transmission
iobeamClient.send(function(error, datastore) {
    if (!error) {
        console.warn(error);
    }
});