Curious about the Internet of Things and Home Automation and want to dig into it yourself, without knowing where to start?
Following my previous post, What is this (hot topic) ‘Internet of Things’?, an introduction to what Internet of Things (IoT) is all about, this guide will direct you through your first steps of how to get started with IoT and home automation. There is lot’s of great how-to tutorials out there covering various topics, products etc, and I have no attention to write yet another detailed tutorial on any of these subjects. However what I personally find missing is a great overview when you need to get started. And that’s what I aim to cover. What are the options? Which products do you need and what are the alternatives? Is there anything particular you need to know? What skills do you need? There is a lot of those questions that is hard to grasp when you are new to this broad and general subject.
So the goal with this guide is to assist you with your first steps of getting started with IoT, help you choose the appropriate path (for you) and to avoid typical pitfalls for beginners. I will also gather a bunch of useful links to various helpful resources and great tutorials.
I will take you through three important steps in the decision process and try to sort out what is what.
- Choose your project type: Of-the-shelve products vs. DIY projects
- Select the core technology: How will your units communicate with each other, which protocol/transmission method should they use
- Determine what hardware and software you need: Which components is needed and what are they used for
Step 1: Choose your type of project
One of the first things you need to do is to decide what your limitations are, how much time & money you intend to spend and what your end goal with the project is. Basically we can divide projects into any of these two following categories:
1) Consumer friendly with of-the-shelf products, and
2) Do It Yourself-projects with custom hardware builds.
Typically the first category does not require any programming skills, should you make do with the functionality provided out-of-the-box. This (normally) covers features like read temperatures, dim lights, schedule when to turn on/off lights and similar. Should your needs extends to more advanced features than that you will need to assume that (at least some) programming skills is necessary.
The choice of project type is primarily about simplicity vs complexity, time vs cost and limitations vs control/possibilities. It will be a tradeoff whichever you choose. But it is also possible to mix them as you like. Either you start with the of-the-shelf products and then switch over to the DIY-track, when you are ready. Or you let some parts of your system be of-the-shelf and other parts DIY. It’s entirely up to you.
Before going full throttle with a full Internet of Things project, I would recommend starting small and keeping it simple. That is, restrict your scope to only cover a single home automation set-up (to begin with), and keep the number of sensors/actuators to a minimum. And remember; it should be fun!
Consumer-Friendly Of-The-Shelf Products
This segment is all about choosing ready-made products which makes it easy to get started and achieve results. However as these are ready-made products, and targeted towards consumers, the price tends to get higher. And you will give up control (more or less) and the number of options will be restricted to what products each supplier and/or technology offers. The key aspects of of-the-shelves products is that they are limited in control and functionality, costs more but requires less time than DIY. And since they are consumer products you should expect quite good esthetics as well.
Do It Yourself (DIY)
DIY projects is where it gets really interesting and the possibilities are endless. Oftentimes you could get a somewhat lower cost by doing it yourself. And you have great control and full flexibility to customize to your specific needs. However, those benefits comes at a price; then time you need to spend and the requirement on your skills. I would personally say it’s more rewarding to do it yourself, but in the end it is your time and skills that sets the bar. DIY is about full control, lots of possibilities, lower cost, and with the tradeoff for more time consuming projects and higher complexity. And you will need programming skills, at least of some kind.
Step 2: Choose Your Communication Technology
Home automation and IoT is about devices communicating with each other. To enable this they need a mutual communication protocol. Within home automation these can typically be divided inte wired and wireless communication technologies. Wired is of course not as convenient as wireless while being (relatively) much cheaper, however they both have their pros and cons. So lets have a look at some of the most popular options.
Not interested in knowing how each technology works and why I came to the conclusion I did? Ok, then you could skip directly to the summary and conclusion.
Purely Wired Systems
1-Wire is a pure wired system that provides low-speed data signaling over long distances at low cost. Due to the requirement of physical wiring, this technology is (typically) disqualified in consumer-oriented home-automation set-ups. However as a signal bus between a gateway/micro-controller and severals sensors, this is a very cost effective solution. 1-Wire also have support for single wire earth return (requires only one actual physical wire).
X10 was initially wired, but today has support for wireless technology as well. X10 is an open protocol. When using the wired option (communication over the power lines) there is some limitations to take into consideration, something effectively making this option less practical.
KNX is a professional grade protocol with wireless support as well as multiple wired options (such as power line, TP cables etc). The fact that this is a professional grade protocol is reflected by the higher price level. For a large and advanced setup KNX offers a lot of possibilities.
Insteon is a proprietary system with both wired (power line) and wireless options. Insteon systems also have support for the X10 protocol which makes this a flexible option. The appliances are consumer-oriented and is of-the-shelves products. Uses mesh-networks.
Standardized Wireless Systems
ZigBee and Z-Wave is two very similar standardized and widely adopted wireless protocols with support for mesh network topology. Since ZigBee is an open standard the electronics can be provided by any supplier, while Z-Wave have their communication circuits produced by Signa Electronics. This means that ZigBee might have a slight advantage when it comes to costs thanks to some supplier competition, while Z-Wave might be slightly more expensive and offer better reliability and compatibility. At least theoretically.
Both ZigBee and Z-WAVE technologies is generally comparable to each other and offers roughly the same key features; wireless, energy efficient, long range (thanks to mesh topology they can cover distances of several hundreds of meters), easy-to-use, no requirement for a gateway* and with acknowledgement of sent commands. Each technology has several hundreds of companies backing them so there is no shortage of compatible units for either camp. Another benefit is the possibility to create your own units (using a Sigma transceiver circuit for Z-Wave or any circuit of your choice following the IEEE 802.15.4 specification, such as the Atmel “ZigBit”, specification for ZigBee). ZigBee can operate both on the unlicensed 2.4 GHz band (worldwide) or the 915 MHz (Americas and Australia) and 868 MHz (Europe) bands, while Z-Wave always operates at 868 Mhz. Generally speaking, a lower bandwidth increases the potential signal distance, giving 2.4 Ghz ZigBee (theoretically) inferior performance compared to the ~900Mhz ZigBee or the 868 Mhz Z-Wave. This would typically mean an indoor range of 10-20m for these devices and about 100m outdoors (theoretically up to 1500m in a very best case scenario with free line-of-sight, maximum power output, perfect conditions etc). Worth mentioning is the benefit of the mesh network topology that compensates for the limitation in effective range (simply explained; each device can forward the signal to the next device, creating a chain of devices where the limitation in range is between each two devices, which should give four units in a straight line indoors at least 30 m of effective range).
Z-Wave is supported by companies like Fibaro and D-Link, two companies with a clear consumer focus, as well as by other companies like Honeywell. ZigBee is supported by brands like Philips, LG and Belkin. Many companies additionally support both technologies, like Samsung, Verizon, Logitech, GE Appliances and Greenwave Systems etc. To learn more about the differences, check out this comparison between ZigBee, Z-Wave, Thread and WeMo.
* You can connect a switch and a light source without the need for a internet connected gateway, this however is quite limited and does not really falls within the home automation category.
Additional Wireless Systems
In addition to the standardized wireless protocols there is also other alternatives, proprietary systems operating in the 433mhz frequency band, like the System Nexa etc. Even tough being proprietary protocols there might be several manufacturers of compatible products, much like the Tellstick Net which can control devices based on System Nexa as well as systems from several other manufacturers. Many of these systems is generally cheaper than more qualified and flexible solutions like ZigBee and Z-wave. However for simpler set-ups, these consumer-oriented and affordable devices might be a good fit (you could pick up a starter kit with a Tellstick Net, three wall plugs and some additional appliances for about $150). These systems have an range of up to 30m (and significantly less with obstacles such as walls etc). There is products like Zipabox Duo that can control both these 433mhz-systems as well as Z-wave systems at the same time. One drawback with the 433 Mhz systems is normally the lack of two-way communication (which means the systems simply fires away a command and hopes it will be received, while the more advanced systems like Z-Wave/ZigBee actually acknowledges a successful transmission). This is something that might be important to consider depending on which type of system you intend to build (a light bulb that stays lit might not be that big of a deal, while a digital lock that remains locked when your kids stands in the cold freezing is whole other story, or when the door sensor missed en opening of the front door during the night and failed to activate your intrusion alarm). The 433Mhz line of products is all about easy-of-use and low cost. A typical use case for this technology is remote controlled lightning and wall sockets and it is within this area you will find the majority of the products.
Some manufacturers, like Philips and D-Link, has chosen WiFi as the transmission method for their appliances. As this is a widely used and common technology it does not require any dedicated (and often costly) gateways. One significant drawback is the fact that WiFi is a quite power hungry and is not particularly cheap. And the greatest benefit of WiFi is the higher bandwidth, when compared to the other alternatives, however when building a network of small and cheap sensors and actuators there is seldom a need for any significant amounts of data to be sent over the network.
Bluetooth is a medium data rate and medium power consumption protocol. Not well suited in sensors networks as it requires paring with a master device (one-to-one). Also the higher power consumption makes it less suitable for sensor netowrks.
Bluetooth Low Energy (BLE) is a very low data rate and very low power protocol. These RF chips can run for years on an AA battery and so are used for things like heart rate sensors. BLE is supported by the latest mobile phones and laptops and so a phone or laptop could control the device, for example a LED lamp. BLE could also be used presence-awareness (for example using the iBeacon technology) which could be interesting in a home automation/IoT set-up.
For DIY projects you also have the option to build your own wireless communication system based on nRF24L01P (or any other cheap wireless transceiver) as well as creating your own multi-technology gateway (why not support Wifi, Z-Wave and ZigBee in the same box?).
Summary and Conclusion
Ok, so there is a lot of options (and the list above is by no means exhaustive), so we need to come to some sort of conclusion and narrow down the options.
I would rule out X10, even tough it is old and proven as well as having both wired and wireless support, mostly because it feels a bit outdated. KNX gets ruled out due to the unmotivated higher cost (and in some regards the lack of consumer focus). 1-Wire gets ruled out because it is solely wired (even though it still earns its place when it comes to short range connectivity between sensors and gateways, especially in DIY projects).
Personally I would look at either ZigBee or Z-Wave, if I was looking for a more capable and flexible system, or something similar to System Nexa (a low priced, simple and consumer oriented proprietary system in the 433Mhz frequence band) if I was looking for a simpler set-up. Insteon could also be an option, however it is neither as cheap as “System Nexa” nor as flexible and widely supported as ZigBee/Z-Wave (but might make sense if you fancy the one-supplier-has-it-all approach).
Since there is gateways supporting both 433Mhz and Z-Wave (like Zipabox Duo and Telldus Znet Lite) this would be a very good solution for beginners as you could start in a small scale. A first step would be to simply remote controlling some parts of your lightning using cheap 433Mhz products (like remote controls and wall sockets). Then you could add the gateway to make the set-up a bit smarter as well as adding the ability to control the devices from a smartphone (and now you can attach sensors, like a thermometer). Then, when you feel up for the task you can bring it to the next level and begin interconnecting each device with one another (make devices react on each other and possibly perform statistical analysis on the aggregated data). At this stage you could also bring more advanced Z-Wave products into the mix.
Step 3: Choosing Hardware/Products For Your Build
If you intend to stay with of-the-shelve products, and not even build your own gateway* or low-cost HTPC, you could skip directly to step 3b. Do you intend to build a DIY-project, or is generally interested in learning about the cheap single-board computers and micro-controllers, or intend to (at some stage) build your own gateway, NAS, HTPC, TOR Proxy etc, then the step 3a is for you.
* Even if you aim for a of-the-shelf project, you can in some cases significantly reduce the initial cost of the gateway by building your own single-board computer based gateway using relatively cheap hardware (say $90-100 instead of $300-550).
Step 3a: Singe-Board Computer vs Micro-Controller Unit
If you opt for a DIY project you need to choose a “maker platform” (hardware) to base your build upon. To simplify things a bit we could categorize these DIY maker platforms as either a A) single-board computer (SBC) or a B) micro-controller unit (MCU). In either case we are talking about quite small and powerful solutions, both of which are relatively cheap and power conservative. The actual choice of a single-board computer or a micro-controller unit depends on what type of project your are building and what your specific needs are.
If you need to run a full computer operating system (could be Android, Rasbian, Windows 10 or Ubuntu, it depends on the board) you should go for a single-board computer like the Raspberry Pi (or any of the many alternatives). The same goes if you need other computer-like functionality, such as; running a GUI, install custom software, need some significant processing power, or if you simply have the need for a specific programming language/platform (such as NodeJS). The downside with these boards is the cost and less options for GPIO. The upside is greater flexibility and more power, and quite frankly, you will get a hell of a lot for your money. Take the Orange Pi single-board computer, a beefed up Raspberry Pi, sports the following features; 1 GB of RAM, wifi, gigabit ethernet, quad core processor running at 1,6 Ghz, SATA-support etc. All this in packade small enough to fit in your palm, and with a cost of about $39. Personally, I think that is amazing! Best of all, these computers typically draw 5 watts of power (or less), something I find pretty darn good (as it would require twelve of these to even draw as much power as one typical lightbulb).
Most SBCs is not as powerful as the Orange PI. A typical limitation is the LAN which often is 10/100 Mbit. And in most cases there is only a SD card reader for storage, no S-ATA connectivity. And USB is often limited to a few ports, which only supports the USB 2.0 standard. Also WiFi is by no means attached by default (though not that expensive to add via USB). So you need to pay special attention to what your explicit connectivity needs is. Performance of the LAN would under normal circumstances not pose a problem, the lack of WiFi could on the other hand be a significant limitation. The same goes for the performance and number of physical USB ports. Adding a lot of peripherals requires a more powerful power unit for the SBC, and the CPU will be a bottleneck when trying to squeeze maximum performance out of the USB 2.0 standard.
A SBC is, kind-of, also a MCU. Like an MCU a SBC will normally have GPIO and much of the same abillities, just with more power and additional options. So a SBC would make a good simple development board, especially if you want to write your program/sketch in a specific language (Arduino “sketches” is written i C, while SBC’s typically can run any programming language you want). There are good libraries for Python, LUA and NodeJS, and even .NET/C#.
The micro-controllers could be divided into two sub-groups. First we have the standard classic Arduino-type medium sized development boards, which have a bunch of GPIOS (inputs and outputs, I will come back to that later) and with support for common “shields” (add-ons) that extends the base platform with additional functionality such as PWM controller, Wifi, ethernet, SD card reader etc.
Then we have the smaller sized (“tiny”) development boards (which often have very limited number of GPIO’s and comes with a significantly smaller package and lowered power consumption).
There is also various other models of these MCU developments boards (such as the “mega” with far more GPIO pins), however in most cases either the standard sized Aurduino or the “tinys” would do just fine for your project. Also worth mentioning is the many brands of Arduino boards (thanks to open-source hardware), as well as the phenomenon with Ardunio-compatible boards (not actually Ardunio per see, but compatible with Ardunino shields). Additionally there is development boards that is not really compatible with Ardunio itself (such as with the shields), while still being compatible with the Ardunio IDE (the development environment). Neither of these options is crucial for this guide so we leave them out to keep things simple.
When single-board computers more or less are full-fledged computers (albeit not as powerful as your everyday laptop), the micro-controllers on the other hand typically are small dedicated devices with a specific purpose of controlling physically connected hardware. Instead of running an operating system and additional software, MCU’s are equipped with a small optimized “bootloader” (think of it as an micro-OS) and a single dedicated program (think of it as a command/script on your computer). For Arduino these programs are called “sketches” and are programmed through a PC via USB using the Arduino IDE (which can be used to program any Arduino-compatible MCU).
One common limitation is the lack data communication capabilities (such as wifi and LAN), which effectively makes these devices unable to single-handed communicate over a local network or the internet, unless they are extended with a network “shield” (LAN or wifi). It would also be possible to connect to a host PC to add networking capabilities, however this would probably take away most of the benefits of these low-cost low-power devices. Although MCUs typically are dependent on a host computer for programming, there is some extra powerful models with the possibility to “program over the air” thanks to on-board network capabilities, such as the Arduino Yun (which basically is a standard Arduino with an built-in wifi-module/”shield”), the Arduino Zero (with LAN) and the Adafruit Huzzah (which is a very tiny, cheap and capable wifi micro-controller). MCU’s also lack any real processing power. This makes them suitable for reacting to sensors and controlling other hardware, but not suitable to analyze data.
There is also additional wireless communication circuits like the NRF24L01 (custom wireless communication) or generic wifi-circuits that could be attached to any MCU to add network capabilities, though we leave them out-of-scope at this stage for simplicities sake.
Shared Feature – GPIO
Common features between both single-board computers and micro-controller units is the GPIO (General Purpose Input Output) pins. Basically what GPIO is about is reading or controlling the physical state of a pin on the board. Digitally this could be either switching a LED diode on or off (output), or check wether a button is triggered or not (input). On analogue ports this could be reading the intensity of resistance from a thermal sensor (input), or adjusting the intensity of a light bulb (output). Each pin can often be configured as either input or output, but never both at the same time.
There is also more advanced techniques for digital IO, such as; PWM (Pulse Width Modulation) which is a way to switch on and of a signal multiple times in a short time and thus be able to control the perceived intensity (think of it as a “dimmer”) of a LED or to control the RPM of a engine, I2C which is a serial bus interface enabling multiple units/sensors to connect using the same shared wires (similar to 1-Wire, with I2C having greater speed and requires additional wires), to even more advanced digital interfaces like UART and SPI (different to I2C in being full-duplex/two-way synchronous serial communication, typically in a master-slave arrangement).
One common key difference between SBCs and MCUs is that SBCs (typically) only support digital input/output while MCUs tend to support both analogue and digital input/output. MCUs also typically have a greater focus on input/output and therefore have a greater number of GPIO pins.
A Short Recap
Single-board computers: when you need an full OS, a GUI or other computer-like functionality. Suitable for building a NAS, a HTPC, a small web browsing PC, a Tor-proxy or why not building your own internet connected IoT gateway.
Micro-controller unit: when you need a cheap, power efficient solution w/o OS and significant computing power. Suitable for most hardware-builds like robots, home automation etc.
Offline MCU: when you can keep the board connected to a PC at all times, or when you do not need to send data back to another device. Suitable for building a automatic plant watering system or a robot.
Online MCU: when you need to send data back to another device/network or when you want the convenience to be able to program the board through a network (w/o the need for a direct USB PC connection). Suitable for building a remote unit reporting sensor data to a database/IoT-framework.
Step 3b: The Products You Need
What You Need For a Of-The-Shelve Type Project
Choosing the appropriate components for your of-the-shelf system:
In every home automation system you will need some sort of gateway, the “heart” of the system. Depending on technology this could be products like Fibaro Home Center 2, Zipato Zipabox, Tellstick Net, Digi XBee or Nexa Gateway.
Then you needs some sensors and/or actuators. This could be temperature sensors, water moisture sensor, wall outlets, branching outlets, dimmers, pumps, engine/stepper motors etc.
Finally you will probably want some sort of software/application to control your devices. In simple scenarios this would be an app to control your lights, but it could also bee considerably more advanced than that. When you go for an of-the-shelve set-up the manufacturer typically provide you with the software needed, and this should be sufficient for your first project (many even provide the ability to control devices through your smartphone).
What You Need For a DIY Type Project
You will need some sort of gateway, the “heart” of your system. The gateway will have two responsibilities; 1) send data back and forth to the internet, and 2) communicate with your sensors and actuators.
You will probably want to base this gateway on a single-board computer, such as the Raspberry Pi (check out this buyers guide to choose your first “Pi”). Depending on your chosen communication technology you will need to extend the Raspberry Pi with additional hardware (could be wifi USB dongle, RazBerry or XBee for example)
Node-RED, which is based on NodeJS, is a great way to get started with Raspberry Pi as it lets you “visually code” your solutions. (The Raspberry Pi will support Python out-of-the-box if you prefer this, but then you will have to do without Node-RED). And to make things even easier, there is a ready made image called The Thingbox, which is great for beginners as it is a complete installation of Rasbian (the OS for the Raspberry Pi) along with NodeJS and Node-RED. Everything you need to get started (software wise) as simple as download, install and you are done.
Even tough not necessary, I would also recommend connecting things to an online IoT framework as it will make it a lot easier to control eg. using your smartphone. Here we have Ubidots which is really simple to use (and is supported in Node-RED). And like icing on the cake; there is a pedagogical and simple-to-follow tutorial on how to combine Raspberry Pi, Node-RED and Ubidots. Just follow a few steps and your are done. It can’t be much easier than that.
So, what you need up to this point is basically only:
- A Raspberry Pi
- The Thingbox image
- An Ubidots account
- To follow the Ubidots + Node-RED tutorial
Then you need some sensors and/or actuators. This could be temperature sensors, water moisture sensors, relays, wall outlets, branching outlets, dimmers, LED’s, pumps, engine/stepper motors etc. This could be either of-the-shelf products based on Z-wave or ZigBee, or stand-alone hardware sensors like DHT22 Temperature and Humidity Sensor as well as simple buttons and LEDs.
Finally you will probably want some sort of software/application to control your devices. As we already have Ubidots in our setup you already have some means of controlling your devices. And with their API it is easy to extend with your own custom software to control and or visualize your devices data.
In addition to the Thingbox-solution (with Node-RED and Ubidots), there is lots of other great options. Python is natively supported by Raspberry Pi out-of-the-box, for NodeJS there is many great libraries for simple GPIO control, for netDuino you have a .NET library, and the Jonny-Five is a great NodeJS library which supports multiple development boards like Raspberry Pi, Arduino many more.
Next Step: Choosing Sensors & Actuators and How to Begin With Hardware Development
Now that you have have decided on the core parts of your system it is time to getting into the real action. That is start getting values from sensors and make things happen at (or around) your home. The next post will show a birds eye view on the different type of sensors and actuators that you could use and what they could be used for.
Additionally a brief introduction to cover the basics of hardware development will be part of the next post (for those interested in general, or specifically opted for a DIY project). Like in this post I will not get into the details how to actually do these projects, but rather point you into the right direction to get started as well as to mention some typical pitfalls for beginners.
Inspiration – To Give You an Idea How to Get Started
In the meantime, the following is some inspiration on different projects you could get your hands on if interested in hardware development.
Raspberry Pi Hacks
12 Raspberry Pi projects: http://www.alphr.com/raspberry-pi/raspberry-pi-2/1000043/best-raspberry-pi-2-projects-14-cool-things-microcomputer
RetroPie nintendo clone: http://1.cdn.eprofits.com/AHCV4wwjEBW8gH0CHBDzpeVQwjhS9MP6F0qnaZHKby2w1j7yJ63s7W_1TJ_hz2gCblZbsfuc55c-yKh-eknicg/1417-the-coolest-diy-projects-of-the-google-raspberry-pi-community-1.jpg
A robot (nuff said): http://latestcomputergadgets.com/wp-content/uploads/2015/03/raspberry_pi_robot.jpg
Good looking case: http://i.kinja-img.com/gawker-media/image/upload/s–Sq2EsLGj–/c_fit,fl_progressive,q_80,w_636/714162336531572655.jpg
Handheld Raspberry Pi: http://www.bitrebels.com/wp-content/uploads/2012/12/raspberry-pi-laptop-assembly-1.jpg
Onion Pi (Tor proxy): https://www.raspberrypi.org/wp-content/uploads/2013/06/onionpi.jpg
Altoids tin computer: http://cdn.instructables.com/FLY/713V/HAQ33LE0/FLY713VHAQ33LE0.MEDIUM.jpg
Raspbery Pi Cluster: http://cmg.soton.ac.uk/static/images/news/2012raspberry/raspberry-soton.jpg
A robot: http://i.ytimg.com/vi/zjCoQ5W0wE0/maxresdefault.jpg
Another type of robot: http://cdn.instructables.com/FDW/NYYO/HQVLDKEI/FDWNYYOHQVLDKEI.LARGE.jpg
Quad copter (“drone”): http://www.engblaze.com/wp/wp-content/uploads/diy-drones-quadcopter.jpg
Flamethrowing(!) Jack-O’-Lantern: http://www.instructables.com/id/Flamethrowing-Jack-O-Lantern/
Automated greenhouse: http://www.instructables.com/id/Backyard-Automated-Greenhouse/
DIY home security system: http://i.ytimg.com/vi/dRCnccv_dVE/maxresdefault.jpg
20 cool Ardunio projects: http://www.instructables.com/id/20-Unbelievable-Arduino-Projects/
Added a reference to Your First Raspberry Pi: A Buyer’s Guide.