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.
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.
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.
Not all coffee makers support different schedules based on days of the week. A user might sleep in on weekdays.
If a user is late / sleeps in, a cup of coffee is wasted (or cold)
Some coffee makers only have one timer - multiple users in a household is unsupported.
A motion sensor (or better yet, a door sensor) could determine when a user has woken up, based on the first motion event in the morning (many houses have alarm systems with motion sensors)
This could be combined with a timer (i.e. make coffee 10 minutes after the user has gotten out of bed)
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
Lights often turn off when people are still in a room, but do not move enough to constantly trigger a motion sensor (using the bathroom, reading, browsing the internet).
People generally get frustrated by this, and solve this issue by setting increasingly long countdowns for motion sensors.
This defeats the purpose of using them to save energy really quickly.
A door sensor is paired with a motion sensor. If the door is opened, a user has X seconds to move before the lights automatically turn off.
If motion is detected in a room while a door is closed, the lights will stay on indefinitely.
In the event that motion isn't sufficient enough to trip a sensor, additional data can be used as input to a motion sensor. From experience, using a computer's screen saver countdown (X minutes since last keypress / mouse movement) is sufficient to cover almost all circumstances.
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)
Current solutions still don't offer guarantees that a user is awake. Many people, myself included, will fulfill the minimum requirements to stop the alarm and then go back to sleep.
Alarms don't handle the case where a user wakes up ahead of time, and forgets to turn off their alarm (after heading elsewhere). This annoys other family members.
A user can often forget to set an alarm. An event might exist only on their calendar, but they might forget to actually set their alarm clock that night.
A pressure sensor is placed underneath a user's bed - in the event that they get back into bed within X minutes of an alarm going off, it should start ringing again.
If a user isn't in bed (or they woke up ahead of time), the system can detect this and not ring a loud alarm. An instant message could be sent as a notification if the user is on their phone / computer, with progressively more severe alerts if the user doesn't respond in time
A program that automatically sets alarms, based off of reading a user's calendar. An alarm clock is set for the first event of the day, and alerts are sent via phone or computer if the user is already awake.
In addition to the general ideas listed above, my system has a number of additional features. These include:
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:
High Resolution Screen (7" 1920x1200 IPS) - this excludes pretty much every digital photo frame, and most commercial touch screens.
Equally sized bezels - the Kindle looks like a picture frame, with its unbranded front and even bezels. Devices like iPads / Nexus 7s do not.
Cheap and easily obtained. This excludes industrial screens, but the Kindle can just be purchased at Best Buy.
The screen is almost completely black if the backlight is off. Useful for night mode.
By performing actions autonomously, it's a rare event that someone has to actually touch the screen. Compare this to most other systems, in which users have to use their phones to adjust lights (Hue).
I find using voice control to be awkward, so I've never had the desire to implement it. However, it wouldn't be difficult to write code to mimic touchscreen button presses using your voice.
The software pulls data off of your cell phone as it runs.
Going to bed and your phone isn't charging? It'll tell you.
Receive a bunch of calls from someone you know in the middle of the night? It'll wake you up. One call? It'll suppress it, in case it was a mistake.
Email with something important (subject: URGENT!!!) - it'll wake you up.
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:
The wireless access point is down
The router is down
The modem is down
The house doesn't have power
The whole system has failed (rails/nginx are down)
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:
Used for wall switches, door / motion sensors, and dimmers, where changing a light switch isn't a problem.
Generally the best option for lighting, bar none. While many companies offer 3 wire, 600W dimmers (the most common type), INSTEON supports most non-standard solutions, including 2 wire (older homes), higher capacity (1800W), different colored wall plates (for WAF), and different switch types (toggle, paddle switch).
Disclaimer: I have no experience with their light bulbs - they could be really good or terrible, but they'll still have all the same flaws as Hue (listed below).
Used where RGB lighting is desired, or where changing a wall switch is non-trivial (no neutral wire, existing 3 way switch, etc).
Ubiquiti Networks mFi
Unlike other controllable outlets (INSTEON), mPower supports both turning things on and off and monitoring their power consumption (useful for determining what an appliance is actually doing, as opposed to whether or not it's turned on / off).
An awesome solution if you need to control a bunch of items individually. Nobody else makes power bars with 8 outlets - buying the equivalent from WeMo would be $480, whereas you can buy an mPower Pro for under $100 from Ubiquiti.
In the event that no company offers a specific type of sensor, my software supports custom Arduino-based sensors. This is currently utilized for pressure, luminance, and temperature (common in thermostat modules, but uncommon as standalone units), none of which have cheap, readily-available sensors.
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:
I rejected INSTEON's outlets / plug in modules, because they don't show power consumption. I also rejected their Hub in favour of their PLM, as their PLM has almost no risk of being hacked. Security isn't perfect if someone physically wants to camp out near your house, but it's basically impenetrable remotely (due to the fact that the PLM is never connected to the internet).
I rejected Belkin's WeMo for security reasons, along with LIFX. Despite the reduced cost for WiFi devices (by not requiring the purchase of a base station), I'm doubtful that any WiFi-connected devices will ever be secure.
I don't understand the appeal behind Nest Protect, even if it worked correctly. You can buy these things for a whole $22 each, which are rated to last 10 years without needing to replacing the battery. I also don't see any use for controlling a smoke detector over the internet.
I try to avoid Philips Hue bulbs where possible, unless I specifically want RGB LEDs (in which case get them).
I don't like the awkwardness associated with trying to turn them off and on (you can't turn them off from a light switch and expect to turn them on from your phone).
Philips offers the Hue Tap as a solution, which I think is a bad one - your existing light switch is still unusable, and now you have a weird thing on the wall with several buttons.
I eventually solved this by writing code to override the functionality of an INSTEON wall switch to send Hue commands. Single tap up or down to adjust the INSTEON ceiling lights, double tap it up or down to adjust my floor lamp Hues.
Their security appears to be excellent (wireless communication is done via a hub, which by default has no remote access). If the mesh network is ever hacked, almost no data is exposed (the bulbs can only communicate with other bulbs and the base station - they have no knowledge of the outside world or your WiFi password)
The cost per bulb makes them a poor choice if you have to outfit a whole room (or a chandelier).
However, they deserve credit for the ease of installation (literally just screwing in a lightbulb), as well as in-store availability (Apple Stores, Best Buy, etc).
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