evrythng-pubsub.js

The evrythng-pubsub.js SDK is a plugin to be used in combination with evrythng.js to allow applications to directly subscribe and publish to MQTT topics for each resource.

These plugins help communicate with the Pub/Sub Broker instead of the usual HTTP REST API.

šŸ“˜

Note

evrythng-pubsub.js is compatible with Node.js and browsers, choosing WS or MQTT or a combination.


Installation

Installation of evrythng-pubsub.js is like evrythng.js, but the library name is evrythng-pubsub instead of evrythng.

šŸ“˜

Note

You must install evrythng.js before you can use this plugin.

Install with Dependencies

<!-- evrythng.js SDK -->
<script src="https://d10ka0m22z5ju5.cloudfront.net/js/evrythng/5.2.0/evrythng-5.2.0.js"></script>

<!-- evrythng-pubsub.js SDK -->
<script src="https://d10ka0m22z5ju5.cloudfront.net/js/evrythng-pubsub/1.0.0/evrythng-pubsub-1.0.0.js"></script>

Including the library in a Node.js application and performing initialization is identical to including and initilizing evrythng.js. However, because this is a plugin, be sure to apply it to the base SDK using use():

const evrythng = require('evrythng');
const PubSub = require('evrythng-pubsub');

evrythng.use(PubSub);

Setup

Before the MQTT or WebSocket connection can be used, be sure to choose the right options using PubSub.setup(). Clients must always connect to the mqtts://mqtt.evrythng.com domain for MQTT or wss://ws.evrythng.com domain for Web Sockets.

PubSub.setup({
  apiUrl: 'mqtts://mqtt.evrythng.com:8883/mqtt',
  reconnectPeriod: 1000,
  keepAlive: 50
});

Function Reference

The evrythng-pubsub.js SDK adds new methods to existing resources, accessed through the same scopes. These are:

.subscribe(callback);  // Subscribe to resource updates.

.unsubscribe();  // Unsubscribe from a resource.

.publish(value);  // Publish a new value or object to a resource.

We show some common examples below to help illustrate this pattern:

const thngId = 'UGM4xF47eDsaQKRwRhdHpnbg';
const key = 'temperature_celsius';
const actionType = 'scans';

const thngResource = operator.thng(thngId);

// Update a Thng
thngResource.publish({ name: 'Some New Name' });

// Subscribe to a Thng property's updates
thngResource.property(key).subscribe(console.log);

// Update a Thng property's value
thngResource.property(key).publish(23.5);

// Create a Thng action
thngResource.action(actionType).publish();

// Subscribe to all actions
operator.action('all').subscribe(console.log);

// Unsubscribe from Thng property updates
thngResource.property(key).unsubscribe();