MisterHouse is an active, community-driven, open source home automation project
King of the House
MisterHouse offers a practical approach to home automation – if you are ready to get creative and you know a little Perl.
The explosion of Internet of Things (IoT) devices and technologies has renewed interest in a topic that has actually been percolating within the hacker subculture for years: home automation. Why not let your computer serve as a "brain" for your house, turning on and off light switches, adjusting the thermostat, or opening the curtains at the perfect time of day to optimize passive solar energy. Creative coders have been asking themselves these questions since long before the first Raspberry Pi and Arduino boards fell into the hands of amateur home designers.
One tool that has been around for many years as an aid for home automation is a practical and easy-to-learn utility called MisterHouse. MisterHouse offers a structure, and a simple user interface, for Perl scripts that provide home automation functions. You need to know a little about Perl programming to use MisterHouse, but you don't need to be an expert in electronic circuits or embedded systems programming.
Bruce Winter first released MisterHouse to the Usenet newsgroup: comp.home.automation
on April 1, 1999. MisterHouse started out as a way for Bruce to manage the environment of his passive solar and south-facing, earth-bermed home. He also built custom curtain controllers, which MisterHouse controlled while monitoring sunlight level, outdoor temperature, and indoor temperature to control the curtains, fans, and a furnace.
Of course, automation technology has changed significantly since 1999, and you might be thinking that MisterHouse would be showing signs of age, but the simple, flexible design of MisterHouse makes it easy to accommodate new technologies. To quote my favorite author, Samuel Clemens: "The report of my death was an exaggeration." MisterHouse Version 4.x is just around the corner, and new protocols and features have been added to equip MisterHouse for the IoT era, including support for Nest, MQTT, Pushbullet, Philips Hue, Z-Wave, and a lot more.
Bruce Winter is still involved with MisterHouse, and an active community of users and developers now contribute to the project. Lieven Hollevoet set up the main GitHub repository for MisterHouse [1], which allows users easy access to the code.
What Is It?
At the most basic level, home automation is nothing more than communication. A controller sends a command to a device. The device then listens for the command and executes the instruction. The device transmits information about its state to the controller. The controller then listens for information on the state of the device, and, if the state changes in some predefined way, it sends a command to the device to take an action.
Several protocols exist for managing the communication between controllers and devices on a home network. Earlier versions of MisterHouse made extensive use of the X10 automation protocol to communicate with X10-compatible home devices. Such devices include power switches, temperature sensors, doorbell chimes, and electric light sockets. MisterHouse still supports X10, but a number of alternative automation protocols exist today; MisterHouse has added support for KNX/EIB, Insteon, UPB, Z-Wave, ZigBee, and a very long list of other devices.
MQTT has recently gained popularity as a "machine-to-machine Internet-of-Things connectivity protocol" [2]. The MQTT protocol is now an OASIS standard, and many new-age IoT devices support MQTT. This article will show you how to use MQTT to receive information from a weather station device. If you want to automate a device that isn't designed to operate as a client for X10, MQTT, or another automation protocol, another option is to set up a single-board system, such as an Arduino or a Raspberry Pi, to act as the communication client that then controls the device using an electrical circuit.
One of MisterHouse's strengths is its ability to get different technologies to play together nicely. The community is also working on speech-to-text, as well as integration with other smart home and IoT services, such as Wink, Nest, and SmartThings. Often, these codebases show up in a forked MisterHouse project while the developer works on the development code. When completed, the MisterHouse pieces are merged back into the stable code.
How It Works
MisterHouse has an extensive library of support functions to handle timers, triggers, an object's state, and devices. Yet at MisterHouse's core is a rather simple loop. At startup, MisterHouse reads in all the device and user code and initializes each device, which adds some polling code to check for data to MisterHouse's main loop.
The device code also adds the device's objects to MisterHouse for use in the user code. Example objects are lamp, temperature sensors, weather information, or garage doors. Next MisterHouse drops into the main loop, where it does some housekeeping, polls each device, then runs the user code. User code can then access the state of any object and make a decision based on the object's state, timers, or other information MisterHouse has available.
MQTT [2] is a publish/subscribe technology. Under Linux, I am using Mosquitto as the MQTT broker. The broker allows you to publish and subscribe to topics, which allows many-to-many communication.
On an MQTT network, a topic defines a device, task, or area of interest that will be a subject for communication over the network. For instance, as you will learn later in this article, home weather information might be a topic that defines a category of communication for the network. Choosing a topic name is a lot like choosing paths in a filesystem. For example: your living room ceiling lamp might be: home/livingroom/ceiling/lamp
. You create the topics in a manner that makes sense to you.
In addition to the full path, MQTT subscriptions support wildcards in the form of: home/livingroom/#
. The #
is the wildcard, and it allows you to subscribe to everything in the living room which might be: home/livingroom/table/lamp
, home/livingroom/floor/lamp
or home/livingroom/hutch/lights
.
When a device on an MQTT network "subscribes" to a topic, it listens for commands and information related to that topic. The subscription process creates a kind of virtual channel for passing commands and status information related to the topic. Devices publish information when they send an update, such as when a light switch has been turn on or off.
MisterHouse sets up its subscription to a topic when it initializes a new MQTT object. Then, main MisterHouse polls for messages on topics to which it is subscribed. A status message might announce that the garage door has opened or the temperature of the house has changed. The loop also monitors the clock, waiting to activate any commands that might be configured to execute at a specific time. MisterHouse can then publish commands to the MQTT item's topic to control the specific device, such as telling a lamp to turn on.
MisterHouse will run better with more RAM, more disk space, and a faster processor. My main MisterHouse system currently runs on a 1GHz x86 with 512MB of RAM and a 300GB disk. I also run a DHCP server, a local DNS, local NTP, Samba, Apache, mail, and various cronjobs on the server. Most of the time, the computer runs idle, but it does use some swap.
Installing MisterHouse
Once you have the prerequisites (see the box called "Prerequisites,") installing MisterHouse is not too difficult. All the same, I have provided a link to a VM tarball with MisterHouse installed and configured so you won't have to install everything to try it out [3]. (See the box called "Using the VM and VMware Player.")
Using the VM and VMware Player
If you want to jump into using MisterHouse without too much trouble, try the VM I've set up at http://ushomeautomation.com/MH/debianvm.tgz, which is roughly 3GB in size. After you've installed the VMplayer from VMware [4], download and untar the file (tar xvf debianvm.tgz
) into your VMware directory. Then, start up your VMplayer, select Open a Virtual Machine, select the path to the new VM directory debianvm
, select the file debianvm.vmx
, and click Okay. This should start up VMware, and it should ask you if you are copying or moving the VM. Choose to copy and VMware will perform its reconfiguration. Everything else is installed and configured. The root password is root
and the password for mh
is mh
. (These credentials are extremely insecure, so I recommend changing both right away!)
Also note that this entire server has loose security. So, don't set this up directly on the Internet and expect it to last more than five seconds before it's pwned. I've taken the liberty of disabling a number of services and performing the installation and the necessary configuration steps. I have also set up the first Ethernet (eth0
) as a DHCP client. There is an additional interface (eth0:1
), which is hard-coded to the IP address 192.168.255.44. This configuration should allow you to connect through either IP address. To find the DHCP IP address at the VM's console, log in as mh
and type: ip addr show eth0
. You should get back the IP address delivered to the eth0
interface from your local DHCP server.
Prerequisites
MisterHouse doesn't need much to run but it does have requirements. These requirements are for a basic to moderate MisterHouse setup and might grow once you start adding some features. Because MisterHouse is written in Perl, it will run on any recent Linux distribution that has Perl 5.
To run MisterHouse, you will need:
- Linux (any distribution is fine; I'm using Debian, but I also have Ubuntu and an ancient Fedora server still running)
- 8GB hard disk minimum (MisterHouse needs about 500MB with extra Perl modules; the rest is for Linux)
- 256MB RAM minimum
- Interfaces: Serial, USB, IP
- Perl (version 5.10 minimum)
- Git (optional but recommended)
If you don't have the luxury of using a VM, you can open a shell as user root and add the user mh
by entering the following command:
useradd -G dialout -c "Misterhouse" -p mh mh
Then, log in as the user mh
:
su - mh
Make the local mh
directories with:
mkdir -p local/code local/data
Download the stable MisterHouse software
git clone http://github.com/hollie/misterhouse.git
or use:
wget http://github.com/hollie/misterhouse/archive/stable.zip unzip stable.zip
Download and untar the sample startup script and user code with the following:
wget http://ushomeautomation.com/MH/mh-samples.tgz tar xvf mh-sample.tgz
Use your package manager to install the mosquitto
and mosquitto-client packages
, then use the CPAN Perl module archive to install the Net::MQTT modules (BEANZ/Net-MQTT-1.143260.tar.gz
or later).
After you follow the preceding steps, everything will be put into the correct places. So, you don't need to worry about moving anything.
Buy this article as PDF
(incl. VAT)
Buy Linux Magazine
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters
Support Our Work
Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.
News
-
Latest Cinnamon Desktop Releases with a Bold New Look
Just in time for the holidays, the developer of the Cinnamon desktop has shipped a new release to help spice up your eggnog with new features and a new look.
-
Armbian 24.11 Released with Expanded Hardware Support
If you've been waiting for Armbian to support OrangePi 5 Max and Radxa ROCK 5B+, the wait is over.
-
SUSE Renames Several Products for Better Name Recognition
SUSE has been a very powerful player in the European market, but it knows it must branch out to gain serious traction. Will a name change do the trick?
-
ESET Discovers New Linux Malware
WolfsBane is an all-in-one malware that has hit the Linux operating system and includes a dropper, a launcher, and a backdoor.
-
New Linux Kernel Patch Allows Forcing a CPU Mitigation
Even when CPU mitigations can consume precious CPU cycles, it might not be a bad idea to allow users to enable them, even if your machine isn't vulnerable.
-
Red Hat Enterprise Linux 9.5 Released
Notify your friends, loved ones, and colleagues that the latest version of RHEL is available with plenty of enhancements.
-
Linux Sees Massive Performance Increase from a Single Line of Code
With one line of code, Intel was able to increase the performance of the Linux kernel by 4,000 percent.
-
Fedora KDE Approved as an Official Spin
If you prefer the Plasma desktop environment and the Fedora distribution, you're in luck because there's now an official spin that is listed on the same level as the Fedora Workstation edition.
-
New Steam Client Ups the Ante for Linux
The latest release from Steam has some pretty cool tricks up its sleeve.
-
Gnome OS Transitioning Toward a General-Purpose Distro
If you're looking for the perfectly vanilla take on the Gnome desktop, Gnome OS might be for you.