Internet of Things (untitled project)

The software, running in my bedroom

Overview:

While current IoT products provide a wide variety of inexpensive hardware to play with, the apps provided by each manufacturer are generally primitive. Most hardware components suffer from specific apps with limited functionality that don't allow hardware from one vendor to communicate automatically with others.

Even ignoring the issue of multiple applications, I find most existing IoT software to be disappointing - basic programs use the metaphor of a TV remote control (on your phone, over the internet, etc) where you specifically control each device manually; more advanced programs allow custom events and triggers to be programmed in, but are usually complicated, expensive, or ugly.

Even other platforms, such as CastleOS or Derek Low's BRAD seem to be stuck on this idea. While their videos are certainly impressive, it ignores the potential of what computing is capable of - they still have to manually press buttons on a remote, or speak events into a computer to trigger them.

In comparison, my platform is designed around an entirely different paradigm, artificial intelligence, in which devices should be automatically controlled based on what a program believes should happen given specific data.

Differences:

Specific examples of the differences between the two ideas can be found below. While I haven't implemented all of these ideas yet, research into hardware and software leads me to believe that they are all possible and practical, and most importantly, inexpensive.

Examples:

Goal: A user wants a fresh cup of coffee when they wake up each day

Current solution: coffee makers have timers, allowing you to enter a time when a cup of coffee will be automatically prepared.

Cons:

Alternatives:


Goal: Lights in a room should turn on when someone is in a room, and turn off when they leave (occupancy sensing)

Current solution: occupancy (motion) sensors

Cons:

Alternatives:


Goal: An alarm clock should wake a user up, without allowing them to sleep in

Current solution: loud alarm clocks, alarm clocks with challenges (walk across the room, scan a barcode somewhere, do some math, etc)

Cons:

Alternatives:

Features:

In addition to the general ideas listed above, my system has a number of additional features. These include:

Attractive Hardware:

Unlike most other home automation touch screens out there, I use an Amazon Kindle Fire HDX. The software can be deployed to just about any device, but the Kindle Fire HDX features several notable features that make it particularly attractive, including:

Phone Integration:

The software pulls data off of your cell phone as it runs.

Self-healing:

Personal experience with lots of IoT hardware (and computers in general) has led me to believe that most hardware is unreliable. Just ask this guy. Or this guy.

If a hardware failure occurs (or a sensor starts reporting totally invalid data), my software has manual override buttons on it to disable remote control of a device (and coerce a sensor to a specific reading, so other things that relied on it won't be affected).

In the event that a piece of hardware or software on my network fails, the node is automatically restarted (either by killing and restarting the process or rebooting the necessary hardware using relays/mFi). If an error can't be solved automatically (ISP failure, cable unplugged, etc), highly specific error messages are sent to me, letting me know exactly what has to be done to fix the problem. These include, but are not limited to:

Notifications are only sent if a problem can't be solved automatically. In the event that it can, the issue is written to the debug log (hidden by default). Notifications aren't limited to just screen messages though - severe errors can cause lightbulbs to flash or sounds to play, if a critical error occurs.

Current hardware support:

INSTEON

Philips Hue

Ubiquiti Networks mFi

Arduino


While everything I do could probably be done with a single system, I've gone out of my way to pick the best hardware for particular tasks. In particular:

Screenshots / Images:

Normal View (with fully customizable background image)

Bedroom control panel (visible after tapping the screen)

Alarm clock going off - note that it'll start up again if you don't get out of bed shortly. Getting out of bed also automatically silences the alarm. Events are automatically copied from my calendar, and are set to wake me up two hours in advance (to include travel time and getting ready), but only on the first appointment of the day

Error Message (deliberately caused)

Night mode - the screen is almost completely dark if set to display a black screen and dimmed fully

Remote control mode - the currently playing item is displayed. Controls exist for Netflix, iTunes, and VLC (the correct remote is automatically opened based on what app is running). Cover art is displayed if available.

Intercepting events on OS X to dim the lights if a movie goes full screen

Node.js network sniffer - listens and displays real time traffic for 433MHz and INSTEON traffic