Smart Home Automation with and

Steven Goodwin Smart Home Automation with Linux and Raspberry Pi Copyright © 2013 by Steven Goodwin This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation, broadcasting, reproduction on microfilms or in any other physical way, and transmission or information storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now known or hereafter developed. Exempted from this legal reservation are brief excerpts in connection with reviews or scholarly analysis or material supplied specifically for the purpose of being entered and executed on a computer system, for exclusive use by the purchaser of the work. Duplication of this publication or parts thereof is permitted only under the provisions of the Copyright Law of the Publisher’s location, in its current version, and permission for use must always be obtained from Springer. Permissions for use may be obtained through RightsLink at the Copyright Clearance Center. Violations are liable to prosecution under the respective Copyright Law. ISBN-13 (pbk): 978-1-4302-5887-2 ISBN-13 (electronic): 978-1-4302-5888-9 Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to proprietary rights. While the advice and information in this book are believed to be true and accurate at the date of publication, neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or omissions that may be made. The publisher makes no warranty, express or implied, with respect to the material contained herein. President and Publisher: Paul Manning Lead Editor: Michelle Lowman Developmental Editor: Douglas Pundick Technical Reviewer: Steve Potts, Michael Still Editorial Board: Steve Anglin, Mark Beckner, Ewan Buckingham, Gary Cornell, Louise Corrigan, Morgan Ertel, Jonathan Gennick, Jonathan Hassell, Robert Hutchinson, Michelle Lowman, James Markham, Matthew Moodie, Jeff Olson, Jeffrey Pepper, Douglas Pundick, Ben Renow-Clarke, Dominic Shakeshaft, Gwenan Spearing, Matt Wade, Tom Welsh Coordinating Editor: Anamika Panchoo Copy Editor: Laura Lawrie Compositor: SPi Global Indexer: SPi Global Artist: SPi Global Cover Designer: Anna Ishchenko Distributed to the book trade worldwide by Springer Science+Business Media New York, 233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail [email protected], or visit www.springeronline.com. Apress Media, LLC is a California LLC and the sole member (owner) is Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc. is a Delaware corporation. For information on translations, please e-mail [email protected], or visit www.apress.com. Apress and friends of ED books may be purchased in bulk for academic, corporate, or promotional use. eBook versions and licenses are also available for most titles. For more information, reference our Special Bulk Sales–eBook Licensing web page at www.apress.com/bulk-sales. Any source code or other supplementary materials referenced by the author in this text is available to readers at www.apress.com. For detailed information about how to locate your book’s source code, go to www.apress.com/source-code/. To mum and dad—for the first automated home I had; where clothes washed themselves, and food cooked itself!

And to Holly—for making her parents wish that they, too, had an automated home!

Contents at a Glance

About the Author ���������������������������������������������������������������������������������������������������������������� xv About the Technical Reviewers ���������������������������������������������������������������������������������������� xvii Acknowledgments ������������������������������������������������������������������������������������������������������������� xix Introduction ����������������������������������������������������������������������������������������������������������������������� xxi

■■Chapter 1: Appliance Control: Making Things Do Stuff �����������������������������������������������������1 ■■Chapter 2: Appliance Hacking: Converting Existing Technology �������������������������������������53 ■■Chapter 3: Media Systems: Incorporating the TV and the HiFi ����������������������������������������87 ■■Chapter 4: Home Is Home: The Physical Practicalities ��������������������������������������������������123 ■■Chapter 5: Communication: Humans Talk. Computers Talk �������������������������������������������153 ■■Chapter 6: Data Sources: Making Homes Smart �����������������������������������������������������������189 ■■Chapter 7: Control Hubs: Bringing It All Together ����������������������������������������������������������217 ■■Chapter 8: Raspberry Pi ������������������������������������������������������������������������������������������������275

Index ���������������������������������������������������������������������������������������������������������������������������������297

v

Contents

About the Author ���������������������������������������������������������������������������������������������������������������� xv About the Technical Reviewers ���������������������������������������������������������������������������������������� xvii Acknowledgments ������������������������������������������������������������������������������������������������������������� xix Introduction ����������������������������������������������������������������������������������������������������������������������� xxi

■■Chapter 1: Appliance Control: Making Things Do Stuff �����������������������������������������������������1 X10...... 1 About X10...... 1 General Design...... 3 Device Modules...... 6 Stand-Alone Controllers...... 14 Gateways and Other Exotic Devices...... 19 Computer Control...... 21 Z-Wave...... 26 System Design...... 26 Bypassing NDAs...... 26 ZigBee...... 28 Linux Software...... 28 The Differences with Z-Wave...... 28 C-Bus...... 29 About C-Bus...... 29 Differences Between X10 and C-Bus...... 29 Devices...... 30 Controllers...... 31 Gateways...... 31

vii ■ Contents

Lighting Control...... 31 Hue...... 32 Insteon...... 34 Lifx...... 34 Night Lights...... 34 Sheding Light...... 35 Networked Devices...... 36 Ethernet Devices...... 36 Networking Primer...... 37 CCTV Cameras...... 43 Stand-Alone BitTorrent Clients...... 45 Infrared Remote Control...... 45 All-in-One Remotes...... 46 IR Relays...... 46 IR Control...... 50 Conclusion...... 51 ■■Chapter 2: Appliance Hacking: Converting Existing Technology...... 53 Software Hacks...... 53 NSLU2...... 53 Developing on the Slug...... 55 Hacking Game Consoles...... 55 Hardware Hacks...... 60 Linksys NSLU2...... 60 LEGO Mindstorms...... 62 Arduino as an I/O Device...... 63 Joysticks for Input...... 82 Other Input Controllers...... 83 Hacking Laptops...... 83 Your Own Powered Devices...... 84 Conclusion...... 86

viii ■ Contents

■■Chapter 3: Media Systems: Incorporating the TV and the HiFi...... 87 The Data Chain...... 87 Extracting the Data...... 87 Storage...... 93 Stand-Alone NAS Systems...... 93 NAS with Media Playback...... 96 Configuring a Linux Box...... 96 Media Extenders...... 99 Stand-Alone Hardware...... 99 Just Linux...... 104 Remote Control and UPnP...... 106 A Brief History of UPnP...... 106 High-Level Separation of UPnP...... 109 Distribution...... 114 Local Processing versus Remote Processing...... 114 AV Distribution...... 114 Wiring Looms...... 116 Wireless AV Distribution...... 117 Matrix Switchers...... 117 Control...... 118 Local Control...... 118 Remote-Control Methods...... 119 Conclusion...... 121 ■■Chapter 4: Home Is Home: The Physical Practicalities...... 123 Node0...... 123 Function and Purpose...... 123 Determining the Best Room...... 124 Building the Rack...... 127 Servers...... 128 Server Capacity...... 128

ix ■ Contents

Server Extensibility...... 129 Types of Server...... 129 Power Consumption...... 132 Server Coordination...... 135 UPS...... 136 Backups...... 140 Hiding Your Home...... 142 Adding to Your Home...... 144 General Considerations...... 144 Wired Network...... 146 Wireless Points...... 148 Audio Cabling...... 148 Other Access Points?...... 150 Conclusion...... 151 ■■Chapter 5: Communication: Humans Talk. Computers Talk...... 153 Why Comms?...... 153 IP Telephony...... 154 Skype...... 154 Asterisk...... 154 E-mail...... 155 Preparing E-mail in Linux...... 155 Sending E-mail...... 155 Autoprocessing E-mails...... 156 Security Issues...... 159 Voice...... 160 The Software for Voice Recognition...... 160 Remote Voice Control...... 165 Speech Synthesis...... 166 Piecemeal Samples...... 169 Web Access...... 171 Building a Web Server...... 171 x ■ Contents

SMS...... 179 Processing with a Phone...... 179 Custom Numbers and APIs...... 182 Conclusion...... 188 ■■Chapter 6: Data Sources: Making Homes Smart...... 189 Why Data Is Important...... 189 Legalities...... 189 Distribution...... 193 Public Data...... 193 TV Guides...... 193 Train Times...... 194 Road Traffic...... 196 Weather...... 196 Radio...... 200 CD Data...... 202 News...... 204 Other Public Sources...... 207 Private Data...... 207 Calendar...... 208 Accessing Webmail through POP3...... 209 Twitter...... 211 Facebook...... 213 Automation...... 213 Timed Events...... 213 Error Handling...... 216 Conclusion...... 216 ■■Chapter 7: Control Hubs: Bringing It All Together...... 217 Integration of Technologies...... 217 The Teakettle: An Example...... 218 Minerva...... 220

xi ■ Contents

Overview...... 220 Linux Users Are Not HA Users...... 222 Device Abstractions...... 223 Conduits...... 227 Messaging Conduits...... 229 Message Relays...... 234 Time-Based Messaging...... 234 Location-Based Messaging...... 236 Cosmic...... 237 To Yaks...... 239 Living Modes...... 240 Routines...... 241 Minty...... 243 The Universal Remote Control...... 244 Web Applets...... 246 Manifest...... 263 Marple...... 265 Utility Scripts...... 267 Topology Ideas...... 269 Networking...... 269 Wiring Looms...... 271 Conclusion...... 273 ■■Chapter 8: Raspberry Pi...... 275 The Raspberry Pi within HA...... 275 Obvious Benefits...... 276 Towards Full Local Control...... 276 The Joy of Community...... 277 The Drawbacks...... 278 Typical Projects...... 280 The Telephone...... 280 Child Minding...... 280 xii ■ Contents

Photo Frames...... 281 Weather Stations...... 281 Raspberry Pi as a USB Host...... 281 As a Device Host...... 282 Proximity Sensing...... 283 Coffee Machine...... 283 Clock Radio...... 284 Without Mains Power...... 284 Installation...... 284 Software...... 284 Hardware...... 285 Interfacing With Hardware...... 286 Hardware Caution...... 286 With the GPIO...... 287 With the Arduino...... 290 With SPI...... 293 With Arduino Shields...... 294 Software Options...... 295 Conclusion...... 296

Index ���������������������������������������������������������������������������������������������������������������������������������297

xiii

About the Author

Steven Goodwin (London, England) has been involved in science and technology from an early age, building his first synthesizer while still in his teens. Since then, his projects have been wide and varied. He has built robots, musical instruments, chess sets, and has a house that can be controlled from the Internet where he is able to e-mail his PVR and control his light switches from work. The growth of his desire for home automation led to the creation of the “Minerva” project, an open source suite of tools and protocols that made it possible to combine many different technologies, allowing them to interact in new and interesting ways. It is a project for which he is still the lead architecture and developer. He is also an active member of the Linux, Free Software, and Open Source communities, having spoken at many conferences, including UKUUG, FOSDEM, NotCon, and the BBC Backstage OpenTech event. His articles have appeared in over 50 magazines, covering topics from programming to management (even including magic and beer!). He is also the author of two industry-standard textbooks for the games industry. Currently, Steven is funding his passion for technology through the development of the SGX 3D engine, and his work with startups in London.

xv

About the Technical Reviewers

Steve Potts Steve Potts graduated from Manchester University, England with a Bachelor’s degree in Applied Computing and continued to study a Master’s degree in Computing for Commerce and Industry at the Open University, UK. His career has a foundation in the defense industry, squeezing an immense amount of failure-resistant software into a remarkably small footprint, which migrated into developing for handheld devices, mobile Internet, and the e-commerce web. He is an accomplished technical editor, having worked on Java, XHTML, PHP, Wireless, and social media publications, including Apress’s own “Building Online Communities” as well as the first edition of “Smart Home Automation with Linux.” Steve is delighted to hold the rewarding position of Software Engineer at BBC Sport in Salford, where he is responsible for delivering over 2.5 million data fragments per year to over 16 million unique devices per week, pushing the boundaries of better data faster. He is still continuing to refit his house with home automation technology.

Michael Still works at Rackspace, where he works on the Open Source OpenStack project as part of the Private Cloud team. He spends most of his time hacking on the libvirt virtualization layer in nova. Before joining Rackspace in 2012, Michael spent six years as a Site Reliability Engineer at Google and one year as an Operations Engineer at Canonical. In both roles, he was responsible for maintaining and improving web systems with millions of users. He was also the director for linux.conf.au 2013, the largest Open Source conference in Australia. Michael holds a Bachelor of Engineering with first class honors from the University of Cranberra in Australia, where he lives with his wife, three kids, and a ludicrous number of pets. In his spare time, he enjoys reading bad science fiction and working on OpenStack development.

xvii

Acknowledgments

For every word I’ve written, six have been discarded. Such is the nature of writing. For every ten programs I’ve downloaded, tried, and tested, nine have been discarded. Such is the nature of software. Finding a perspicuous overlap has been a long and arduous task, and one that I’d wish for no one to suffer in solitude. Fortunately, I didn’t . . . To those enduring the role of first-line support to my restless questions and curiosity, I thank you. Phil Downer, Mal Lansell, and Frank Scott will be collecting their magniloquent medals in due course! The greatest of thanks go to those developers, reviewers, evangelists, and forum posters over whose shoulders we’ve all peered to learn and discover, with those active on UKHA_D, GLLUG, Lonix, FAB, and TULS having all played their part. Thanks also to those manufacturers that have supplied me with test hardware to verify my assumptions about their wares. They include Kevin Toms from Phillips for early access to Hue and its SDK, Dr. Chris Dodge, Technical Director at RedRat Ltd, Alan Quinby of Keene Electronics Ltd, Benjamin Gilbert at Anders electronics, and Melanie Jeuken at Marmitek for the crystal-clear images of all the X10 kit. Also to Chris Vine at IntelliSoftware Ltd and Darren Daws at Txtlocal Ltd for allowing me to send junk text messages through their systems until I got it right! My thanks also to Michelle Lowman, Douglas Pundick, Anamika Panchoo, Laura Lawrie, and their respective editorial teams at Apress for fixing my mistakes before my readers realize I’ve made them! To my network of friends, colleagues, and associates: Janey Barnett, Darren Bolland, Dean Butcher, Barbara Cassani, David Eade, Martin Frost, Ed and Margaret Grabowski, Raffaella Garavini, Lucas Grange, Justine Griffith, Phillip Hart, Mike Knight, Kathryn McAnulty, Andy Leigh, Phil Lunt, Nat Morris, Colin Murphy, Shane O’Neill, Duncan Parkes, Cveta Rahneva, Tracey Spencer, Steve Shipton, Michał Skorupka, John Southern, Fiona Stewart, Bruno Baillorge and Josiane Baillorge Valverde, Dave Wall, and Betsy Weber. All without whom . . . And, as always, to my family. Grandma, Shirley and Ken, Juliette and Dean and George and Matilda, Melanie and Dan and Grace and Rose, Mum and Dad, Angela and Colin, and Holly (who’s probably still not old enough to understand it!)

—Steven Goodwin

xix

Introduction

Home Automation is anything that your home does for you that makes living there more enjoyable or productive. A Smart Home is one that appears to apply intelligence to make that happen. To my friends, family, and visitors, my home is both smart and automated; I can e-mail my light switches, receive tweets from my CD player, and have a personalized TV guide e-mailed to me every day. To me, my home is a collection of existing open source software, some consumer-level hardware, and small pieces of glue code that make them all interact. The magic happens in the way they are combined, and it’s those secrets that I’ll be exposing in this book. The most cogent phrase in this field is probably “the devil is in the details.” Home Automation (HA) requires small confirmed tools that do a single, specific, job in much the same way that Unix utility software does one job, and does it well. Consequently, our decision to adopt Linux as the underlying is no accident. Unlike the monolithic approach of Windows, we have large repositories of open source software that perform these individual jobs—SMS handling, media playback, X10 control, e-mail, web servers, speech synthesis, and everything in between is freely available—and, most importantly, interoperable. Throughout the book I shall reference many different technologies and languages that I consider to be the most suitable to the task in hand. In some cases, this will refer to old technology that is no longer cutting-edge, as those are the devices that have been made to work effectively with Linux through (primarily) developer support. The glue code makes use of Perl, PHP, C++, and Bash. Each has been chosen according to the merits of the language and which modules made the task easier, and not with any presupposed advocacy. The book begins by covering appliance control, and the whys, wherefores, and how to’s of controlling devices such as your kettle, CCTV, light switches, and TV from a computer. A multitude of technologies including X10, C-Bus, ZWave, ZigBee, and Hue are covered and explained. We continue by looking at other devices that you can build, adapt, or hack yourself from existing technology. The Arduino, for example, can be employed as part of an automated doormat that reminds you to take your umbrella when the weather forecast spells rain, or can remind you that today is the day that the rubbish is collected. We then look at media systems, discovering how to automate and replace the aging combination of VCR and TV guide by using UPnP, NAS, and computer-oriented solutions. They can automatically suggest TV shows, sending their recommendations to your e-mail inbox or mobile phone, and provide a method of recording them by the same means. Afterward, we look at the technical considerations necessary when running a computer 24-7, the methods of wiring a home network, and preparing your home for the patter of tiny silicon feet! This is followed by the use and installation of communication protocols, which allow anything in your home to talk to anything else, and is our first step toward true technology homogeneity. The final proverbial straight consists of the data sources that provide the information to make our home appear intelligent, and the software and processes necessary to combine everything learned into a unified whole. The specifics. The glue code. The details that make the magic work!

xxi ■ Introduction

The coda then details the Raspberry Pi. Although the machine itself can be used anywhere a Linux machine can (and therefore the whole book is about the Raspberry, even if not explicitly detailed as such), this chapter concentrates on those elements that are specific to the Pi. After all, it’s only one year since its release; it has become a media darling and Linux computer that the lay public aren’t afraid of, introducing new users and programmers to a technological future that they can be part of. Its small size and low price point mean that many devices that couldn’t be sensibly automated before are now connected to the Internet and home servers. My final chapter covers installation, hardware interfacing, software methodologies, and more ideas than you can shake a proverbial stick at! I should like to end on a note of carefree abandon—learn to steal! Once you’ve learned the pieces of the puzzle, and how to combine them, there is very little new to invent. Every new idea you discover is a mere permutation of the old ideas. And ideas are free! Every cool feature discussed on TV shows, or presented in the brochures or web sites of commercial HA companies, can be taken, adapted, and implemented with the information presented here using very little effort. And then you will graduate from automated home, to smart home, to personalized smart home!

xxii