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 🙏

© 2024 – Pkg Stats / Ryan Hefner

ionode

v0.0.11

Published

API to control an ION lamp (by lava).

Downloads

3

Readme

Ionode - Control your ION lamp from Node!

So we heard you've got an ION. And perhaps you want to control that ION from your PC, Raspberry Pi, or legendary Gibson. Now is your time to shine.

Getting Started

First off, make sure you're using a Bluetooth 4.0 compatible adapter with your computing device of choice. If you're looking for recommendations, we've tested with this guy extensively: http://www.iogear.com/product/GBU521/ You'll also need to ensure that your user has permission to interact with the Bluetooth adapter. If you're lazy, feel free to run your node scripts with sudo.

Installation

First, you'll need a recent version of Node.js installed on your system. If you're setting Node.js up on your Raspberry Pi, we recommend following the guide here:

https://learn.adafruit.com/raspberry-pi-hosting-node-red/setting-up-node-dot-js

Once you've got Node.js up and running, it's as simple as...

sudo apt-get install bluetooth bluez-utils libbluetooth-dev
mkdir ion && cd ion && npm install ionode
sudo node node_modules/ionode/examples/basic/set_color_loop.js

Basic usage

var ionode = require('ionode');
// creates an ION object that will connect to the ION named 'ion'
var ion = ionode.createLamp('ion');

ion.connect();

ion.on('ready', function() {
  console.log('init complete, ion ready');

  // set mood to digital rain
  ion.setMood('digitalrain', function(err) {
    if (!err) {
      console.log('set mood digitalrain!');
    }
  });
});

Events

ION objects inherit from EventEmitter. The following events can be captured.

var ion = ionode.createLamp('ion');

// when ION is seen, this is called
ion.on('discovered', function() {
  console.log('ion discovered');
});

// when ION first connects, but before it's ready (initialized) this is called
ion.on('connected', function() {
  console.log('ion connected');
});

// ION disconnected
ion.on('disconnected', function() {
  console.log('ion disconnected');
});

// ionode is currently attempting to reconnect to ION
ion.on('reconnecting', function() {
  console.log('ion reconnecting');
});

// a general ION error occurred
ion.on('error', function(err) {
  console.log('ion error: ' + err);
});

// called when ION is tapped and changes moods
ion.on('mood_changed', function(moodName) {
  console.log('mood changed to ' + moodName);
});

// called when ION completes initialization and is ready to be controlled
ion.on('ready', function() {
  console.log('init complete, ion ready');
});

ion.connect();

Connection

After creating your ion object using 'createLamp', simply call connect.

ion.connect();

Disconnecting is achieved as one would imagine.

ion.disconnect();

ion.getName()

Returns ION's current name (if valid).

ion.isConnected()

Returns true/false if ION is connected (but not necessarily ready).

ion.isReady()

Returns true/false if ION is ready to control.

ion.setAutoReconnect(autoReconnect)

If autoReconnect is true, ionode will automatically try to reconnect if ION becomes disconnected.

ion.renameDevice(newName, [callback])

Give the specified ION a new name. Callback returns 2 parameters:

  1. error (null if no error)
  2. new name (the name just set)
ion.renameDevice('roflcopter', function(err, newName) {
  if (!err)
    console.log('success!');
}

ion.setMood(moodName, callback)

Sets the mood to the mood name provided. Callback returns 2 parameters:

  1. error (null if no error)
  2. new mood name (the mood just set)
ion.setMood('lava', function(err, newMoodName) {
  if (!err)
    console.log('success!');
}

See the end of this document for all possible moods.

ion.setMoodConfig(moodName, optionName, [callback])

Used for configs that have no value to be set. For instance, the Light mood supports several of these configs. Callback consists of only an error parameter (null if no error).

ion.setMoodConfig('light', 'bluesky', function(err) {
  if (!err)
    console.log('beautiful blue skies');
});

See the end of this document for all possible mood configs.

ion.setMoodConfig(moodName, optionName, value, [callback])

Used for configs that expect a value to be set. Callback consists of only an error parameter (null if no error).

ion.setMoodConfig('digitalrain', 'speed', 255, function(err) {
  if (!err)
    console.log('lickity split!');
});

See the end of this document for all possible mood configs.

ion.setMoodConfig(moodName, optionName, value1, value2, [callback])

Currently only used for setting color of a mood. The first value is hue (0-360) with the second being saturation (0-255). Callback consists of only an error parameter (null if no error).

ion.setMoodConfig('digitalrain', 'color', 240, 255, function(err) {
  if (!err)
    console.log('proud to be blue');
});

See the end of this document for all possible mood configs.

ion.getMoodConfig(moodName, optionName, [callback])

Returns the current value of the mood config. Callback returns 2 parameters:

  1. error (null if no error)
  2. new mood name (the mood just set)
ion.getMoodConfig('rainbow', 'speed', function(err, val) {
  if (!err)
    console.log('rainbow speed is set to ' + val);
}

ion.getRotation(callback)

Returns the current list of moods in the ION's rotation list (which can be modified via the mobile app). Callback consists of 2 parameters:

  1. error (null if no error)
  2. array of mood names

ion.saveMoodConfigs([callback])

Stores the current mood's configs to flash memory. After saving, power cycling ION will result in the same state of the mood being restored. Callback consists of only an error parameter (null if no error).

ion.saveMoodConfigs(function(err) {
  if (!err)
    console.log('damn, that is some fine saving');
}

ion.restoreCurrentMoodConfigsToDefault([callback])

Returns the current mood's configs back to the factory default and commits to flash. Callback consists of only an error parameter (null if no error).

ion.restoreCurrentMoodConfigsToDefault(function(err) {
  if (!err)
    console.log('a fresh start');
}

Raw Mode

Raw mode allows you to manipulate each pixel to your heart's content. Ionode uses an internal buffer to hold onto LED state. Only after calling setRawShow() will your changes appear (unless you use setRawClearAll or setRawFillColor, those update immediately).

ion.setRawLED(ledIndex, {r: ?, g: ?, b: ?})

ledIndex can range between 0-39. Each 10 indicies corresponds to a vertical row of LEDs on ION, for a total of "4 sides".

The second parameter must be an object containing an r, g, and b value.

// the lonely red pixel
ion.setRawLED(0, {r: 255, g: 0, b: 0});

ion.setRawShow([callback])

After using setRawLED(), your changes can be sent and displayed on your ION by using setRawShow(). Callback consists of only an error parameter (null if no error).

ion.setRawShow(function(err) {
  if (!err)
    console.log('pretty colors');
});

ion.setRawClearAll([callback])

This call will set all LEDs to the 'off' state and immediately update ION. Callback consists of only an error parameter (null if no error).

ion.setRawClearAll(function(err) {
  if (!err)
    console.log('it all goes dark');
});

ion.setRawFillColor({r: ?, g: ?, b: ?}, [callback])

This call will set all LEDs to the rgb values specified and immediately update ION. Callback consists of only an error parameter (null if no error).

ion.setRawFillColor({r: 0, g: 0, b: 255}, function(err) {
  if (!err)
    console.log('not effing blue enough');
});

ion.beginWeatherUpdates(latitude, longitude)

Tells ionode to begin sending weather data to ION every 15 minutes for the Weather and Thermometer moods.

ion.beginWeatherUpdates("43.00", "-83.00");

ion.showNotification(notificationName, hue, brightness, saturation, speed, duration, sticky, [callback])

Displays a notification on ION. Callback consists of only an error parameter (null if no error). Parameters are as follows:

  • notificationName ('halo', 'spin', or 'glow')
  • hue (0-360)
  • brightness (0-255)
  • saturation (0-255)
  • speed (0-255)
  • duration (0-10) seconds
  • sticky (true/false) if the notification must be acknowledged by tapping the top or calling clearNotification()
// a friendly green bouncing disc
ion.showNotification('halo', 120, 255, 255, 40, 3, false, function(err) {
  if (!err)
    console.log('it bounces!');
});

ion.clearNotification([callback])

Clears a sticky notification (if active). Callback consists of only an error parameter (null if no error).

ion.clearNotification(function(err) {
  if (!err)
    console.log('and now back to your regularly scheduled programming');
});

Mood List

  • off
  • light
  • flame
  • digitalrain
  • rainbow
  • weather
  • thermometer
  • hourglass
  • lava
  • lines
  • plasma
  • sparkle
  • spiral
  • fireworks
  • strobe
  • pulse
  • rave
  • whirlpool
  • volume

Mood Config options

Off

  • n/a

Light

  • candle (no parameters)
  • incandescent (no parameters)
  • fluorescent (no parameters)
  • bluesky (no parameters)
  • sunlight (no parameters)
  • brightness (0-255)
  • color (0-360 hue, 0-255 saturation)
  • lowglow (0-disabled, 1-enabled)

Flame

  • color (0-360 hue, 0-255 saturation)
  • inferno (0-disabled, 1-enabled)
  • enablesound (0-disabled, 1-enabled)

Light

  • candle (no parameters)
  • incandescent (no parameters)
  • fluorescent (no parameters)
  • bluesky (no parameters)
  • sunlight (no parameters)
  • brightness (0-255)
  • color (0-360 hue, 0-255 saturation)
  • lowglow (0-disabled, 1-enabled)

DigitalRain

  • color (0-360 hue, 0-255 saturation)
  • speed (0-255)

Rainbow

  • speed (0-150)
  • brightness (0-255)
  • reverse (0-disabled, 1-enabled)

Weather

  • forecast (0-disabled, 1-enabled)

Thermometer

  • forecast (0-disabled, 1-enabled)

Hourglass

  • time (0-65535 seconds)
  • color (0-360 hue, 0-255 saturation)

Lava

  • color (0-360 hue, 0-255 saturation)
  • speed (0-255)

Lines

  • color (0-360 hue, 0-255 saturation)
  • speed (0-255)

Plasma

  • color (0-360 hue, 0-255 saturation)
  • speed (0-150)
  • soundenabled (0-disabled, 1-enabled)

Sparkle

  • color (0-360 hue, 0-255 saturation)
  • speed (0-150)
  • sparklebrightness (0-255)

Spiral

  • color (0-360 hue, 0-255 saturation)
  • speed (0-255)
  • brightness (0-255)

Fireworks

  • dominantcolor (0-360 hue, 0-255 saturation)
  • enablecolor (0-disabled, 1-enabled)
  • speed (0-255)
  • frequency (0-255)
  • soundenabled (0-disabled, 1-enabled)

Strobe

  • color (0-360 hue, 0-255 saturation)
  • colorenabled (0-disabled, 1-enabled)
  • interval (0-255)

Pulse

  • speed (0-255)
  • soundenabled (0-disabled, 1-enabled)

Rave

  • speed (0-255)
  • dominantcolor (0-360 hue, 0-255 saturation)
  • bassboost (0-disabled, 1-enabled)

Whirlpool

  • speed (0-255)
  • dominantcolor (0-360 hue, 0-255 saturation)
  • bassboost (0-disabled, 1-enabled)

Volume

  • n/a