Slide 1

Slide 1 text

Home Automation Done completely with Javascript

Slide 2

Slide 2 text

The Basics Components 1.A controller/driver (Power Electronic Switch) 2.Logic circuit for controller/driver 3.Software interface for logic circuit 4.Server-Client, or Socket based model (the API) 5.User Interface

Slide 3

Slide 3 text

What we will use Controller : BeagleBone Black A microcomputer board (like Raspberry Pi), with multiple pinouts, running on an ARM processor. Regular Debian/Ubuntu Linux OS. Language (HW control): BoneScript A Node.js plugin developed especially for boards like BBB which provides a JS interface to turn current to the pins of a BBB on or off (or read the current for input PINS). BoneScript is similar to the Arduino language.

Slide 4

Slide 4 text

What we will use Language (API) : Socket.io or Node.js REST If we directly access a webpage hosted on the BBB, we can use socket.io, or we can create a RESTful API on the BBB. Language (UI): AngularJS We can use any MVC or pure JS too. This is the frontend for the given REST API on the BBB to control the states of the switches.

Slide 5

Slide 5 text

How switching works  Power Electronics – Controlling Electrical appliances with Electronics  Common switches - BJT, MOSFET, TRIAC, DIAC  A 5V-1A cirtuit can control a 220V-15A circuit.

Slide 6

Slide 6 text

How switching works

Slide 7

Slide 7 text

BoneScript Setting a PIN output to high current var b = require('bonescript'); b.pinMode('USR0', b.OUTPUT); b.digitalWrite('USR0', b.HIGH);

Slide 8

Slide 8 text

BoneScript Read input current from a PIN var b = require('bonescript'); b.pinMode('P8_19', b.INPUT); b.digitalRead('P8_19', printStatus); function printStatus(x) { console.log('x.value = ' + x.value); console.log('x.err = ' + x.err); }

Slide 9

Slide 9 text

BoneScript Blink a LED var b = require('bonescript'); var led = "USR3"; var state = 0; b.pinMode(led, 'out'); toggleLED = function() { state = state ? 0 : 1; b.digitalWrite(led, state); }; timer = setInterval(toggleLED, 100); stopTimer = function() { clearInterval(timer); }; setTimeout(stopTimer, 3000);

Slide 10

Slide 10 text

Basic home automation with Bonescript Connect LEDs on some of the PINS of the BBB Create a webpage on the BBB Make buttons on the page. Each button calls a digitalWrite function corresponding to connected LEDs. On page load read PIN states and updates button accordingly. Red color for off, Green for on (or something similar). Connect the BBB to WLAN/Internet. Access IP of BBB from Laptop/Mobile, click the buttons and watch the LEDs go ON and OFF. *** Make a video, or show live demo of this if WiFi available ***

Slide 11

Slide 11 text

Why this isn’t practically applicable ? HAVE TO open the particular webpage on the particular IP. Who remembers URLs and IPs ? No App for mobile, have to do via browser. Clients cannot be built for devices that do not have JS support.

Slide 12

Slide 12 text

Solution : REST Api We will create a simple REST API using Node.js and Express 4. var express = require('express'); var app = express(); app.get('/switch/fan/:state', function(req, res) { if (req.params.state === 1) // digitalWrite high to the required PIN else // digitalWrite low to the required PIN }); app.listen(8080);

Slide 13

Slide 13 text

Solution : REST Api We make REST calls from the client to turn the fan off or on http://bbb.ip/switch/fan/0 -- **to turn off the fan** http://bbb.ip/switch/fan/1 -- ** to turn on the fan** Now we can make whatever client we want (MVC client app, or Android/iOS app, or even a command line based noGUI app).

Slide 14

Slide 14 text

AngularJS frontend  Create buttons with asynchronous calls to rest API  Responsive UI + Material/Bootstrap themes. Such design, much awesome.  Can also turn into Android/iOS clients using Ionic etc.

Slide 15

Slide 15 text

GPIO/I2C run through  General Purpose I/O – Kernel interface to control currents over sysfs.  Some info on why using C/C++ or shell to actually control the currents is more efficient than Python/Node.