Building a (Siri Controllable) Raspberry Pi Thermostat

When it first came out, I was really enamoured with the nest thermostat. The idea of a remotely-accessible, app-controlled thermostat appealed to the gadgeteer in me, but the price and lack of flexibility (it really wanted to be left alone to learn and do its own thing, as opposed to being controlled by a fixed schedule), plus my propensity to tinker, led me to build my own.

For a long while I had an Arduino-based thermostat running in my house, but I wasn't very happy with it. Writing code for the Arduino isn't always very fun (for me), especially when you want it to be web-accessible.

Then came the Raspberry Pi.

This is what I had always wanted: a little full-blown computer with a bunch of GPIO pins. It runs Linux, which means you can leverage all the great software you're already using elsewhere, and you're free to use your programming language and web technologies of choice when building the software.

Overview

The basic idea of the PiThermostat is this: The Raspberry Pi reads the current temperature from a Dallas 18B20 temperature sensor, and then turns on/off the relevant relays on a linked Relay Board. That relay board can either control the direct wires from your existing thermostat, or can control the A/C power to an outlet, etc. This gives you full flexibility to replace an existing central HVAC thermostat, or just control a window A/C unit. I have two thermostats running, one in each of those configurations.

Parts List

This is the current parts list:

Setting Up the Raspberry Pi

  1. Download the latest version of Raspbian from raspberrypi.org.
  2. Install the image to your SD card.
  3. Connect your Raspberry Pi to the network, wait for it to boot, then SSH to it.
  4. Run raspi-config and configure your Pi as desired, changing passwords, etc.
  5. Turn your Pi off.
  6. Wire up your temperature sensor. I used GPIO pin GPIO04 (hardware pin #7). See the pinout here
  7. Wire up your relay board. I used GPIOGEN0 - GPIOGEN3 to control relays 1-4, respectively.
  8. Install the software to run the PiThermostat code as explained under 'Setting up the Pi' over on the project Github site

Controlling the Thermostat From the Web

By default, the rails app powering the thermostat runs on the web. Just point your browser to that IP Address / URL and you can set the temperature, set schedules, override schedules, etc. Just make sure you setup the thermostat on the rails console first.

Controlling the Thermostat From An App

The rails server has a full REST API for handling a native app. I've hacked together a few UIs to manage my thermostats, but none are polished enough to be worth releasing. If you write one I'd love to know.

Controlling the Thermostat From Siri

This is where things get even cooler. First, go install Homebridge, which basically involves installing node.js and editing a single config file.

Once Homebridge is installed, go get the accessory file for the PiThermostat, and install it into your accessories folder. Then edit your config, restart Homebridge, and boom, you should be able to tell Siri to "Make the thermostat colder." If you have an Apple Watch, you can even do it from your wrist, Dick Tracy style.

The Cashflow

In Stephen King's, The Langoliers, we are introduced to the creatures that consume the past, preventing us from ever returning to it. Merciless devourers, they relentlessly follow us all through time, ingesting history, insatiably pursuing us in an eternal chase.

As the story progresses, the main characters find themselves face to face with these gluttons, and they must do their best to outrun them; winning the race is their only hope.

As a micro-business owner I awake most days with the weight of an awareness on my shoulders; I must to attempt to evade my own kind of Langolier, the ravenous and unquenchable monster of Cashflow.

Each day I travel down the rough-shodden and mostly gravel road of business, always trying to get away from the beast.

From time to time I am able to find a bicycle to ride. Landing a new deal yields strength for pedaling, at least until the tires run flat or the chain snaps.

When the rusty wheels skitter to a halt I may take a moment to catch my breath and look behind me to appreciate the distance that I have put between me and the leviathan that pursues me.

Though while I may wait, he never stops.

Relentless in his pursuit, I jog ahead, legs burning from the journey, looking for another ride; I might even take a skateboard if I find it. Anything to keep moving, and stay ahead of him.

When I stand still, I can hear the churning of his teeth and the bones breaking in his mouth. I can feel his steps in the ground.

There are times he has been close. So close that I could smell the stench of debt on his breath. Close enough to see the blood dripping from his lips as he devours everyone in his path. I have been separated from those I cared about as we tried to outrun him together.

You can't fight the Cashflow. You can try to slow it down, or get ahead of it. You might find yourself, as I have, on the ground, the gravel ripping into your back while you throw everything you can find at it in an attempt to satiate it for just long enough to get back on your feet and get away. You might even manage to succeed, to get back up, hitch a much needed ride, and put a little distance between you and the savage.

If things go well for you, you may find yourself moving quickly down the road, putting so much distance between you and the monster that you can't see him anymore. You may find a ride that carries you for years.

But no matter how far ahead of that devourer you are, when you stand still and the wind is blowing gently from behind, you will still hear that churn, still remember that crunch, and still feel those steps. Your pulse will quicken, your muscles will tense, and you will be reminded: you can never stop, because if you do, he will find you.

Thwump

Thwump.

The first time you feel it your blood goes cold. The hair on the back of your neck might stand up. Your pulse almost certainly rises quickly, which does nothing to help.

You sit perfectly still. You're probably holding your breath, but you don't realize it. Like your rising pulse, this also does nothing to help.

You wait expectantly, but nothing happens.

You go back to what you were doing. Maybe you were working at your desk, or mending a garment, or working in the garage. As you work on the task at hand, the thwump fades away, and your current task regains your focus.

Then it happens again: Thwump.

Any hope you had that the first occurrence was a fluke, or perhaps just a figment of your imagination, is gone. That thwump truly happened; there can be no doubt about it. If the first thwump made your blood run cold, the second fills it with icebergs.

Those thwumps that you felt were right in the center of your chest, or maybe a little to the left. They were about as hard as someone flicking your sternum, but it came from the inside.

That thwump was your heart, and that thwump was not a normal heartbeat.

At this point you are almost certainly wondering if you're having a heart attack. You're not, but it's hard to imagine that one would feel any different.

You're probably breaking out in a sweat, and as frightened as you have ever been. If you're young, you're wondering how this could be happening to you at this age. In any case, as you sit at your desk you're wondering if this cubicle is going to be the last thing you'll ever see.

But, like the first one, the second thwump fades, and time passes. The third one follows at another random interval, maybe shortly after the second, perhaps not for several hours.

That first day, you'll probably only experience a few. If you haven't already gone to the emergency room by the evening of the first day, you'll probably sleep that night, though rather fitfully. The lack of sleep the next day does nothing to help the symptoms.

If you haven't made a cardiologist appointment (thwump) by the next morning, it won't be long before you do.

When you have your appointment with the cardiologist, you'll receive an EKG that says everything is normal. You'll wonder if the cardiologist understands what normal actually means.

Your cardiologist will ask you to explain your "symptoms", perhaps asking in such a way as to imply that you probably don't even have a heart in that chest anyway. You'll feel stupid, because when this first happened you were sure you're dying, but here you are a few days later an, honestly, you feel pretty okay.

You'll do a stress test, which involves running on a treadmill with a series of electrodes taped to your chest monitoring your heart while you run. It might even involve an ultrasound of your heart at the same time.

You'll wear a "halter pack", which is a heart monitor that you wear all day under your clothes, gathering data. You'll have a button to press every time you experience your "symptoms." You'll press the button several times, but those thwumps never seem to happen at quite the frequency they do when you aren't wearing the monitoring equipment.

A few days or weeks later, your cardiologist will come into the room with a smile to let you know that "everything is fine" and that it's "probably just PVCs.” She'll say just in that way that makes you pretty sure she's wondering why you're in this office in the first place.

"There's really nothing to worry about. They aren't harmful. Cut back on caffeine, alcohol, and stress. Get more sleep and exercise."

You have three kids and thwump your own business, and now your heart seems to need to remind you randomly that it's still in your chest, though frankly, it'd rather be doing something else. Stress? What stress?

Oh the way home you're wondering how you're going to adj-thwump-just.

For the next few days you'll probably find yourself sitting in your chair for a long while, just waiting for that next thwump to kick you in the chest.

Eventually you really do adjust. When you survive enough thwumps without any obvious side effects, you start to believe your cardiologist. You Google PVC too much, read too many articles, but start to realize that you probably will survive this thwump just fine.

Hopefully, you find some ways to cut back on stress and increase sleep and exercise. Prayer, meditation, and relaxation techniques are actually very helpful in this regard.

While you might be able to adjust to these irregular heartbeats, it's impossible to get used to the feeling of your heart kicking you in the chest when you least expect it.

If you're able to make some lifestyle changes, you can go weeks or months without experiencing that kick. You might even start to forget that it can happen.

Then, one day, when you're making your coffee in the morning, you'll be reminded of your mortality in the way know one else around you will know.

Thwump.


While taken from my own experiences, people with PVCs can experience a wide array of symptoms, and for some people the condition can be debilitating. Thankfully that has not been the case for me up to this point.

I have found that there are 2 main contributors to my PVCs: lack of sleep, and anxiety, the latter of which is often amplified by the former.

Getting regular sleep has taken on a new priority for me, which has meant giving up on certain things I'd rather do to ensure that I don't miss out on a good night's rest whenever possible.

Dealing with stress and anxiety is a large enough topic that it deserves its own post, but I can summarize my approach by saying that I now take specific steps to try to get ahead of anxiety rather than waiting for symptoms to crop up and force my hand.

If you suffer with PVCs and feel the isolation that can come along with that, I hope you'll find someone to talk to. If you don't have anyone in your life you can confide in, I'd be happy to talk.

Dallas 18B20 Temp Sensors on an RPi2

I've have a handful of Raspberry Pis around, and several of them have Dallas 18B20 temperature sensors connected for data collection. Up to this point I've used all of them in 3-wire mode (Vcc, Data, Ground).

I just recieved my first Raspberry Pi 2 yesterday, and went to connect it to a network of 4 sensors to replace an Arduino I was previously using.

I ran into a few snags. Here are my notes:

1. Device Tree vs Modprobe

The old way to get this all working was to setup the modules to load, either after boot via sudo modprobe w1-gpio etc, or setting those up to load on boot.

The new way to do this is via Device Tree. You can read all about the changes here. The changes are myriad, as are the reasons behind them.

In any case, to get things working I added this to my /boot/config.txt:

dtoverlay=w1-gpio,gpiopin=17,pullup=on

2. Using parasitic mode without an external pull-up resistor just didn't work.

In 3-wire mode I've never needed to use an external pull-up resistor to get things to work on the RPi. That wasn't the case with the parasitic mode. I had to use a 4.7k pull-up.

3. The built-in kernel driver only supports loading the 1-wire bus on a single pin at a time.

I had 4 sensors, and I had hoped to run 4 separate networks. My experience has been that more networks is typically more reliable than many sensors on a single network.

At this time, that isn't possible without compiling your own kernel. I had to wire all 4 of my sensors together into a single star-network. Thankfully, the sensors have proven to be reliably pinged so far.

4. A few references that were helpful for me.

https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=65137

https://www.kernel.org/doc/Documentation/w1/w1.generic

https://superpiboy.files.wordpress.com/2014/07/raspberry-pi-rev2-gpio-pinout.jpg

https://github.com/raspberrypi/firmware/blob/master/boot/overlays/README

https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=97314

https://www.raspberrypi.org/forums/viewtopic.php?f=37&t=98407

https://github.com/raspberrypi/firmware/issues/348

https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=97216&sid=4a4e0a6dcf11c1dbdf8c60552f75f11d&start=50

https://github.com/raspberrypi/firmware/issues/338#issuecomment-71920412

http://wiringpi.com/

Apple Watch, Two Weeks In

It's been 2 weeks since my 42mm Apple Watch Sport arrived. (So much for not "getting one immediately", I know). So far the experience has been mostly great.

At this point I'm dividing my thoughts into three categories: Frustrations, Delights, and Hopes.

Frustrations

  • I had to do a full un-pair then
  • re-pair of the watch (which is basically a restore from scratch), 2 times in the first week. I think this was at least in part due to some weird bug in one of the apps I was attempting to write for the watch, since the symptoms disappeared with I disabled some "clever" code I was using.
  • Related to the need to restore, there have been a few times where some very obviously 1.0 bugs showed their heads. For example, sometimes the time doesn't show when you raise your arm, or shows only for a half second or so before disappearing.
  • I went on a 1-hour walk, using the workout app, and got no credit for it in the activity app.
  • If I wearing the watch loosly and doing something else, like the dishes, or working outside, it's possible to miss the taps; they aren't as strong as I would have expected in some cases.
  • The app icons are just too hard to tap.
  • Too much functionality is hidden behind Force Taps. I find myself force tapping everything, just to see if there's a hidden feature.
  • Glances are basically useless because they don't update in the background. So you go to glance at a glance and instead you have to have an awkward and lingering stare while it tries to update itself.
  • My two favorites watch faces so far, Solar and Motion, don't allow any complications to be added.
  • Siri doesn't auto-send a dictated response, you still have to tap to "Send" on the screen. It would be really nice if there was a sort of cancelable count-down timer on the send button, so you could see that Siri got the text correct, then just drop your wrist and let it send in the background.
  • Having the side button open your favorite contacts seems like a complete waste. I'd much prefer it launch a favorite app or glance.
  • Sometimes opening an app is just slooooooow.
  • "Hey Siri" doesn't always work (doesn't bring up Siri). Which is made even more frustrating because when it does work, the speech recognition is excellent.

Delights

  • The faces are much nicer than I expected. The demos really did not do them justice.
  • I love being able to change the face from day to day or hour to hour.
  • I love the activity tracking. It's actually affecting my behavior, getting me to be a bit more active. Hopefully that sticks.
  • The heart rate and workout tracking has been great. I love the data that it's collecting (I'm kind of a data nerd, to say the least).
  • The battery lasts way more than a day. I go to bed with about 40% charge remaining every day.
  • It not too small, not too big.
  • The bands are very nice. I'm still looking forward to more 3rd party options, but the mechanism for changing them is fantastic, and the ones Apple has made are very nice.
  • Opening your garage door from your wrist is just fun.
  • Seeing who's at your front door on your wrist is also just fun.
  • Dictation on the watch is very, very good.
  • "Hey Siri, Set a timer for 20 minutes" when your hands are full is very convenient.
  • Not wondering if I missed a notification, since I can glance at my wrist and see that there isn't a red dot. This has led me to leave my phone in my pocket or on the table much more than I expected.
  • Being able to respond to an iMessage while driving, without having to take hands off the wheel, is great.
  • The taps on the wrist when navigation is running are Just Right.
  • Sports scores updates on your write with a glance is great.
  • "Hey Siri, Add milk to my Grocery List"

Hopes

  • Increased stability. It really isn't bad, but there are enough rough edges that I'm looking forward to versions 2, 3, 4...
  • Customization of the side button functionality.
  • More watch faces, please.
  • More customization of watch faces.
  • 3rd party app complications.
  • Auto-updating glances in the background.
  • Native or Native-esque apps. No more spinning dots please.
  • I hope my favorite Grocery List app, AnyList, gets an app on the watch.
  • Oddly enough, I kinda wish it had an LED you could use as a flashlight.
  • I hope to be able to set the watch face to use 24 hour time (maybe this is possible and I've missed it so far).
  • I hope that nice 3rd party bands become available soon.

Glide

Glide is really interesting. The basic idea is that you fill a dropbox folder full of content, and the service generates a beautiful app for you from the content. The elevator pitch is "Hypercard for iOS".

I'm not sure if Glide will be successful, but I have no doubt that at some point something is going to be developed that allows just about anyone to create a basic mobile app that looks good and Just Works.

Something like Wordpress for mobile.

It's also clear that the low-end of the custom App Consulting market, which has been dwindling for years through consolidation and evaporation of profit, will finally be dead.

(Of course, when the custom App Consulting market dies, a new market for building all these one-off Wordpress-ish apps will spout up).

Communicating With Apple Watch

I was listening to the lastest episode of the Talk Show with guest Joanna Stern about the Apple Watch. During one section they started talking about tap as a means of communication, and the impact this might or might not have. As John wrote in his review of the watch, it's not that hard to imagine at least a few scenarios where, for example, sharing a heartbeat would be novel, intimate, and gain even widespread use.

Having thought about this more, I do wonder if perhaps the ability to effectively touch someone from afar will turn out to be a big deal. I think it will.

You can imagine that a native SDK app might even be able to take input from one person and send that to another, enabling a morse-code method of communicating, for example.

There's a lot more to consider here, but it seems like it's a bigger deal than I thought it might be at first.

It also makes me wonder just how much more intrusive it will feel to be tapped by some spammy notification in an app.

On Apple Watch

Up to this point I haven't been sold (personally) on Apple Watch. The main drawbacks as I saw them were:

  1. Price. And it's a recurring price since you know you'll have to upgrade every year.
  2. Size. I have small wrists and I don't like large watches. I don't even always wear a watch. I don't want to wear a huge piece of jewelry on my wrist.
  3. Battery. I don't want to charge something every night, especially when it would otherwise have utility (sleep tracking).
  4. Utility. What in the world is the Apple Watch (or any smart watch) going to do for me that I care about?

However, having listened to quite a few podcasts on the topic and read even more posts, I'm convinced now that (at least at some point) I'm going to want one.

  1. I'll get over the price. And if the main SDK components remain the same then there isn't that much computation being done on the watch itself. The year-over-year upgrade may not turn out to be so compelling. And if your band can last more than 2 years, you'd only have to upgrade the watch, not the band.
  2. I'll get over the size. Everyone will have one. It won't be so weird.
  3. I'll get over the battery. Because there will be so much utility. Which leads me to...
  4. Utility. I'm now convinced of enough positive use cases that I think it would really be a helpful device.

A few use cases for Apple Watch:

  • When there's motion on my front porch my wrist can tap and I can see a picture from my porch camera to see who/what is there. Same with other household security notifications.

  • When I get home I can open the garage door via the app I wrote to control my garage door remotely. Why would you want to do this? Because your watch knows that you are you, and theives like to steal garage door openers and use them to get into your stuff. It'd be safer to not even carry one.

  • When driving and I get a text message I can easily glance at my wrist, see that it's something I care about (or not), and respond via Siri, without having to find my phone and get it out.

  • My wife can find her phone in the house when she loses it.

  • Easier interface to Siri.

Since my watch can know that it's me, and therefore verify that I am, in fact, me, then it can be a presence notifier on my behalf. This leads to some pretty great conclusions:

  • My car can unlock the doors as I walk up, and let me start the car without another key. And I don't need a massive fob in my pocket to let me do this.

  • Same with my front door (though I'm unsure I'd ever opt for a lock like this).

  • Turning off the lights when we leave the house and otherwise left them on.

  • Allowing me to verify myself as other services support such features. Things like Apple Pay are already there, but other sorts of checkin, registration, and verification could all be linked as well.

I'm not currently planning on getting one immediately, but I think I am far more likely to purchase one than I was a few months ago.