CHAPTER 4 ■ HOME IS HOME 148 Power is always an issue in HA installations, because there’s never enough where you need it. Unless you are able to self-build, you won’t have a choice as to where the sockets are or how many you have. You can always cheat the issue by converting any existing sockets into multigang units or by adding a spur from an upstairs light to provide a couple of sockets in the loft. This not only gives you the opportunity of adding a small secure filesystem in the loft, but it means you can use the space to store X10 DIN Rail devices where they are out of the way and don’t add the heat in Node0 itself. ■ Note Don’t pack DIN rails too closely to each other because the heat can induce problems in operation. The recommended minimum separation is 20mm. Additional power conduits are also useful for lighting driveways and powering electric garage doors. In the former case, you need only a low-power (around 12v) supply, which can also be used for water fountains, flood lights, outdoor Christmas trees, cameras, and PIRs. They can also help power sensors, such as the VAL-1 vehicle alerts that indicate when a car is approaching the garage or driveway. You can even install two to correctly determine the direction of travel, as we suggested for the Arduino door mat in Chapter 2. ■ Note If your electric garage doors take ten seconds to open, for example, but your sensor is only in range when you’re five seconds away from the door, you will need to employ a custom RF gateway circuit to trigger the door earlier. There are also the high-powered devices, such as the garage doors, and mains sockets in a shed or garage for power tools. These are generally coated in rubber for isolation against the elements. In all cases, consult an electrician and the laws of your country before installing electrical equipment outside! ■ Note You could also use the driveway sensors to switch on the porch light, ready for your arrival. Conclusion There is clearly more to a home network installation than a few cables and a network card. By carefully considering all the possible functions of the home ahead of time, you can ensure you run enough cables, of the right type, to each room in the house. Even then, you might still run out. Also, by aggregating as much of the technology in one place as possible, you create a central hub called Node0. This physical proximity allows you to place IR transmitters and control cables between devices and ensure that everything can be controlled from a single area. Again, plan the purpose and features of this area so that everything fits in and (importantly) has a method to access the machine’s panels, plugs, sockets, and power. C H A P T E R 5 ■ ■ ■ 149 Communication Humans Talk. Computers Talk. It is often said that language is the invention that makes all others possible. Within the world of technology, language is the protocol that makes all others live. Writing software for a stand-alone machine is all very nice, but when it manages to interface with the outside world, interface with another program across a network, or control an external piece of hardware, it seems so much more satisfying. Controlling even the simplest of robots with a computer is infinitely more impressive to the layperson (and many geeks!) than the demonstration of an optimized implementation of marching cubes. 1 Having already covered a number of devices in Chapter 1 that are able to talk with external hardware, I’ll now cover human-computer communication and demonstrate how we can interact with one machine or piece of software and have it control another somewhere else. This includes the use of e- mail, SMS, and web pages. However, the onset of new technology is relentless, and with devices such as the iPhone offering a broadband 2 experience, its use as a device for voice calls, SMS, or e-mail is very much reduced. Why Comms? There are four methods of communication within the technology arena: • Computer-to-computer • Human-to-human 1 The marching cubes algorithm represents a method of extracting a polygonal mesh from voxel space and was a feature of the 1987 SIGGRAPH conference. 2 Broadband in its truest sense of “always on” and with no connection to its actual transfer speed. However, iPhone users can enable tethering and use the mobile broadband share dock when at home to make use of their local WiFi router. CHAPTER 5 ■ COMMUNICATION 150 • Computer-to-human • Human-to-computer These are all important to us for different reasons. The first was covered in Chapter 1 and allows devices to be controlled automatically according to some time- or logic-based programming. Human-to-human communications are those that take place every day but can now be facilitated by technology. Before the advent of the telephone, our only form of real-time communication was face- to-face. Now we have e-mail, Internet relay chat (IRC), instant messaging (IM), and SMS to perform the same task. All remove the “face” element. We have also streamlined our existing communication mediums. Telephones, which were once low quality and hardwired to a physical location, are now mobile. Through Voice over IP (VoIP) technology, you can make use of the (near) free cost of the Internet to provide financial savings and, when combined with mobile technology, facilitates the amusing situation where using a mobile phone is used to order pizza online through a web page, when it would have been normally used to call them! When we talk of computer-to-human communication, we are looking at reports and information about the house that the computer sends to us, as appropriate. In the simplest of cases, this might be the daily wake-up call or an e-mail containing the day’s TV schedule. In more complex scenarios, it could be a full report of the computers in the house and how they are performing. 3 And finally, human-to-computer communication takes place most often and involves us telling the machine what we want to do via e-mail, SMS, or a web page. To be a truly smart and automated house, this list would include haptic interfaces. That is, we don’t need to issue an explicit command to tell the computer what to do, but it knows by studying the environment. For example, it would know to switch on the lights when the front door has been opened and shortly afterward the inside doormat sensor closes, because it had realized that someone is entering the house. You’ve already built similar haptic functionality in Chapter 2, so I’ll cover explicit communications in this chapter. IP Telephony IP telephony or VoIP communications are commonplace and an expected feature of any smart home. For most, however, a VoIP installation will be a private one, existing only on personal laptops or desktop machines owing to the personal nature of phone communication. But it can be used in combination with voice recognition to provide an intriguing (if error prone) means of data input and a way to add an internal home intercom system. Skype In the same way that Hoover has become synonymous with vacuum cleaner and Google now is a verb meaning to search, Skype is the byword for VoIP. Begun in 2003 and released as freeware, Skype has provided clients for Linux, Mac, and Windows, each with varying degrees of functionality and with all versions allowing you to make free calls to other Skype users and subsidized voice calls to mobile numbers and landlines, like any standard phone. Most allow you to log in with the same account from 3 If you have several machines, software such as Nagios can automatically monitor services and applications, sending messages and updating web pages upon failure. CHAPTER 5 ■ COMMUNICATION 151 several different locations, meaning you can install Skype onto each terminal in the house with the same house-oriented phone number so that you can send and receive calls from any room in the house. With additional hardware, you can adopt a hands-free approach thereby moving between rooms during the conversation, such as to check on the dinner, for example, returning you to the roaming possibilities that have existed since the introduction of cordless phones in the 1980s! Asterisk Asterisk is another software-based phone solution that also includes support for VoIP, mobile, and landline calls. Its benefit to us is that it’s free software in the truest sense of the word and can support many protocols, since it is a full private branch exchange (PBX) and can support highly configurable call forwarding, voice mail, conferencing, and phone menus (so you can implement your own “Press 1 to turn your lights on” system!). As with Skype, you will need a service-providing gateway to connect the IP- based protocols to the phone network in general. This is a paid-for service and can be bought from many places, including Skype itself with its own Skype-to-Asterisk module. The simplest way to install the mass of code that is Asterisk is currently through FreePBX, but even that is only worth the time if you have a large enough house to make shouting an impossibility or you’re keen users of the phone, since you can get more solid communication through e-mail or the web (now both available on most phones) or SMS. E-mail E-mail is now the lifeblood of personal and professional life the world over. It is very easy to send and receive messages from anyone at any time—too easy, in fact, as the state of most spam folders will testify! But it is here to stay, so we can add e-mail to the list of protocols our house will support, allowing us to send messages to our video, light switches, or TV and for our house to send messages back. Preparing E-mail in Linux The travel path of an e-mail is the same everywhere and consists of three parts: • Mail transfer agent (MTA): The MTA is also known as the e-mail server and is the software that communicates with other MTAs over the Simple Mail Transfer Protocol (SMTP) to route the e-mail messages it receives to the correct recipient, noting the destination address and passing it to the server on that machine. • Mail retrieval: This is the method by which e-mail is transferred from the mail server and onto the client. The transfer of this data occurs through either Post Office Protocol (POP) or Internet Message Access Protocol (IMAP). In our case, these will be on the same machine since we’ll run our own MTA, but they needn’t be since we could also download our Google Mail to our local machine for processing, as I’ll cover in Chapter 6. • Mail user agent (MUA): This is the client software used to actually read the e-mail as well as send it. This includes large GUI applications such as Thunderbird, web mail solutions such as AtMail, and smaller console-based ones such as Mutt. CHAPTER 5 ■ COMMUNICATION 152 Although corporate drones will bleat incessantly about the benefits of Exchange as an MTA (http://en.wikipedia.org/wiki/Comparison_of_mail_servers), you have four primary e-mail servers to choose from and many more MUAs than simply Outlook. Furthermore, because of the design of Linux (and Unix-like systems in general), you can automatically process incoming mail with great flexibility and issue noninteractive commands to send replies. Each MTA has benefits and features the others don’t. The big four—Exim, qmail, Postfix, and Sendmail—each has its own advocates and detractors. I personally use Exim because it has a guided install and “just worked” afterward. For alternate opinions there is a wiki page covering the latest versions of these packages, along with some commercial offerings. I'll wait here while you install one of them. Sending E-mail After installing the server and testing it by sending yourself (and a second user) an e-mail or two, you can begin the short task of writing an automatic send script. This is the easiest thing to do with Linux and involves the mail command, which sends e-mail with any number of additional headers and settings. Here, you need only an abstraction script such as the following: #!/bin/bash SUBJECT=$1; shift TOADDR=$1; shift MSG=$* echo "$MSG" | mail -s "$SUBJECT" "$TOADDR" which can be called with this: xmitemail "Hello" "steev@workaddress.com" "I bet you didn't think this would work!" This command will send the simplistic e-mail shown and can be either invoked by typing it on the command line triggering it from a daily crontab or run as a consequence of some other household event. For example, someone coming through the front door (using the Arduino door mat from Chapter 2) could issue such as e-mail, or it could be sent as a warning when one of the hard disks get too full. I have subverted the original interface to mail here, because it will be more usual for users to invoke the command in the manner shown earlier. However, there will be times when you want to revert to the original usage of mail by allowing the script to accept any input from STDIN. This requires the three-line replacement shown here to usurp MSG: if [ $# -eq 0 ]; then while read LINE ; do MSG="$MSG""^M""$LINE" doneelse MSG=$* fi Note the ^M character, which is entered into editors like vi with Ctrl+V followed by Ctrl+M. Now the message can now be fed in from a file, like this: cat filename | xmitemail "Here's the file" "steev@myworkaddress.com" . voice calls, SMS, or e-mail is very much reduced. Why Comms? There are four methods of communication within the technology arena: • Computer-to-computer • Human-to-human 1 The marching. make use of their local WiFi router. CHAPTER 5 ■ COMMUNICATION 150 • Computer-to-human • Human-to-computer These are all important to us for different reasons. The first was covered. Chapter 1 and allows devices to be controlled automatically according to some time- or logic-based programming. Human-to-human communications are those that take place every day but can now be facilitated