Making Smart Homes Smarter with Javascript
@joel__lord
#ConFoo
About me
- Javascript Junkie
- Tinkerer
- Technology enthusiast
@joel__lord
#ConFoo
@joel__lord
#ConFoo
About me
I <3 gadgets
@joel__lord
#ConFoo
The IoT World
- One app per device
- Warning: Your device will look messy
@joel__lord
#ConFoo
Wink Ecosystem
- Connect various devices from various providers within a single application
- They have a REST API
@joel__lord
#ConFoo
Wink Demo
@joel__lord
#ConFoo
Let's make this smarter
- Robots are Wink's macros
@joel__lord
#ConFoo
More smarts
- Making the ecosystem smarter
- Integrating with external applications
@joel__lord
#ConFoo
Introducing IFTTT
IFTTT is a free web-based service that allows users to create chains of simple conditional statements, called "recipes", which are triggered based on changes to other web services such as Gmail, Facebook, Instagram, and Pinterest. IFTTT is an abbreviation of "If This Then That"
-Wikipedia
@joel__lord
#ConFoo
IFTTT Demo
<Insert funny gif invoking demo gods here>
@joel__lord
#ConFoo
More smarter !
- Let's make it smarter
- We need more control over connected things
@joel__lord
#ConFoo
More smarter !
- Need variables
- Need functions
- Need more integrations
@joel__lord
#ConFoo
Introducing WinkJS
- REST API
- Uses OAUTH
- More or less standard API objects
@joel__lord
#ConFoo
Introducing WinkJS
Door Lock object
{
last_reading: {
locked: true
},
desired_state: {
}
}
@joel__lord
#ConFoo
Introducing WinkJS
Thermostat Object
{
last_reading: {
temperature: "18.5",
units: "C"
},
desired_state: {
}
}
@joel__lord
#ConFoo
Introducing WinkJS
Lightbulb Object
{
last_reading: {
brightness: 0.5,
powered: true
},
desired_state: {
}
}
@joel__lord
#ConFoo
WinkJS Demos
A simple example
var Wink = require("wink");
var apiCredentials = require("./credentials");
var wink = new Wink(apiCredentials);
wink.on("ready", function() {
var light = wink.getDeviceByName("WinkPresentationLight1");
light.off();
});
@joel__lord
#ConFoo
WinkJS Demos
Yet another Twitter integration
//Web server
var express = require("express");
var app = express();
var server = require("http").createServer(app);
var twit = require("twit");
var keyword = "#confoo";
var Wink = require("../lib");
var apiCredentials = require("./credentials");
var twitterCredentials = require("./twitterCredentials");
var wink = new Wink(apiCredentials);
//Web socket
var port = 3333;
//Start server
server.listen(port, function () {
console.log("Server started on port " + port);
});
//Twitter Stream listener
var t = new twit(twitterCredentials);
var stream = t.stream("statuses/filter", {track: keyword});
var lights = [];
var winkReady = false;
wink.on("ready", function(devices) {
console.log("ready");
winkReady = true;
lights.push(wink.getDeviceByName("WinkPresentationLight1"));
lights.push(wink.getDeviceByName("WinkPresentationLight2"));
});
stream.on("tweet", function (tweet) {
console.log("Got tweet");
if (winkReady) {
var lightIndex = Math.round(Math.random());
console.log("Toggling light #" + lightIndex);
lights[lightIndex].toggle();
}
});
@joel__lord
#ConFoo
Thank You !
Questions?
Follow me on Twitter for the slides