skyline-iot-events
v1.0.5
Published
Firebase pubsub wrapper
Readme
Skyline Iot Events
Allows multiple devices to talk to each other by subscribing and triggering events. Uses Firebase to implement PubSub.
Install
If you are using node or a javscript build process (browserify or webpack), just use the NPM module.
>> npm install --save skyline-iot-eventsOtherwise, it also just works on any static HTML page. Just add a script reference to one of the builds in the /dist folder.
<script src='skyline-iot-events/dist/iotEvents.min.js'></script> Methods
Three methods are exposed to handle pubsub
iotEvents.trigger(key, payload)- Fire off an event of type 'key'. The payload is just an object, but please be a good citizen and at least add asourceproperty.iotEvents.subscribe(key, callback)- Listen for a device to call.trigger()on the specifiedkey, your callback will be invoked with the triggeringpayloadas the first argument.iotEvents.unsubscribe(key, callback)- Stop listening to IOT events of the specified key.iotEvents.subscribe('log', callback)- A quick little backdoor to listen to every event. Note: the first argument to your callback is aneventnot just thepayload.
Example Usage
Check out the /demo folder for actual working examples... but here's the gist:
You could have a Raspberry PI running node.js to control your lights
var iotEvents = require('skyline-iot-events');
var handleLightToggle = function(payload) {
var newValue = payload.status === "on" ? true : false;
setLightValue(newValue);
broadcastStatus();
};
var broadcastStatus = function() {
var status = myLight.value ? "on" : "off"
var payload = { source: "node-server", status: status };
iotEvents.trigger("light-status", payload);
};
iotEvents.subscribe("toggle-light", handleLightToggle);
var setLightValue = function(newValue) {
// device specific code to actually toggle light bulbs...
myLight.value = newValue;
}Then you could have a static HTML file (no server required!) that includes a reference to one of the builds in the /dist folder.
// === Turn the light on and off ===
var toggleLight = function(status) {
var payload = { source: "html-page", status: status };
window.iotEvents.trigger("toggle-light", payload);
}
document.getElementById('turn-on-btn').onclick = function() { toggleLight("on"); }
document.getElementById('turn-off-btn').onclick = function() { toggleLight("off"); }
// === Real time display of the light's status ===
/*
* There may be other things toggling the light, so we can see the
* realtime status (w/ web sockets) by subscribing to the event
*/
var showLightStatus = function(payload) {
document.getElementById("light").innerHTML = payload.status;
};
// subscribe to events (fired from the node server in this example
window.iotEvents.subscribe('light-status', showLightStatus);