Is there a pattern?
python RGB LED controller for the Raspberry Pi, with openHAB integration
This is what I’ve been tinkering on in my spare time. Enjoy!
Automating an “old” TV
My Samsung TV is two years too old to receive automation commands over the LAN. Otherwise, my entire home theater experience is automated in openHAB, including my Yamaha receiver, my Tivo, and my Roku.
I was lamenting this to Noah Ternullo, and he said I could wire up an IR blaster. “Yeah,” I thought, “but that’s going to be really annoying.” It turned out to be really easy.
I already had this IR LED board from a previous project that used an Arduino, but I wanted it to work on a Raspberry Pi instead. I followed this writeup on how to configure LIRC on a Raspberry Pi to work with an IR LED driven by a GPIO pin. I gave my LED board 5V and GND and fed a control pin to it. Then I found a contributed lircd.conf for a very similar remote to my Samsung TV remote.
On the openHAB side, I added this item:
/* TV */ Switch TV_Power "TV Power" <switch> (media) { exec="OFF:ssh pi@raspberrypi.igo irsend SEND_ONCE Samsung_BN59-00685A KEY_POWER, ON:ssh pi@raspberrypi.igo irsend SEND_ONCE Samsung_BN59-00685A KEY_POWER" }
It uses the powerful exec binding to invoke a command from my openHAB server to the Pi. Now I have a power toggle for the TV. I put the private SSH key in /root/.ssh/ on the openHAB server and put the public key in /home/pi/.ssh/authorized_keys on the Pi to facilitate a passwordless connection.If you do this sort of thing yourself, remember that this is just a toggle. openHAB doesn’t really know if the TV’s on or off. In my case, I infer the TV’s state from the state of virtual buttons that I use to start or stop my media experience.
Home Automation with openHAB
Resistor Decoder for Mobile
As I don’t personally own an Android Wear watch, I was jealous of my own Wear app, Resistor Decoder. The solution was to port Resistor Decoder to Android phones and tablets. It’s like a voice-driven multimeter for resistor decoding. Great for Maker types who (like me) have a ton of uncategorized resistors lying on the workbench from previous projects.
Natural Language Processing for Smartphones
I just gave an NLP talk. If you’ve ever wondered why your smart phone’s voice assistant seems to be thrown for a loop if you stray from the pre-approved phrasing, this will explain why.
Why Android One is Great For Everyone (Not Just India)
The minimum specs they announced for Android One are surprisingly good. I think this effort will do for phones what the Raspberry Pi did for embedded systems: In the blink of an eye, the mobile industry will have to deliver much more capability for much less cost, or they’ll lose business to the low-cost offerings. This has already happened in the embedded system industry, in that any “PC board” that costs more than the Pi must set itself apart somehow, either in terms of performance or capability.
They’ve also done a great service for developers. While it’s always been possible to start developing Android apps using just the emulators (as I did in early 2009), some things are easier to test on real hardware. Well, the cost of real hardware just dropped from $350 (Nexus line) to $105.
Fake Middle Mouse Button in Ubuntu Unity With a Touchpad
The Problem
It’s been years since I’ve used a laptop that actually had a middle mouse button, and it can be tricky getting the timing right to press the left and right touchpad buttons simultaneously to fake a middle button press. Happily, there’s a really simple way to turn a two-finger tap on the touchpad into a middle button click. This guide assumes that you are familiar with command line and scripting basics. Continue reading Fake Middle Mouse Button in Ubuntu Unity With a Touchpad
Gene Therapy Breakthrough
I’m not in the medical research field, but here’s a recent talk that I gave about some breakthroughs in gene therapy. As a software engineer, I’m fascinated by how analogous the process is to patching software.
Supporting Synonyms and Multi-Language Voice Input in Android
My Android Wear app, Resistor Decoder, takes voice input from the user. I wanted to support several ways that users could say the “same” thing while maintaining architectural support for multiple languages. Continue reading Supporting Synonyms and Multi-Language Voice Input in Android