You’ve probably seen those colorful Amazon “dash buttons” that will automatically reorder food, paper towels, detergent and even condoms with the push of a button. Available for Prime members only, they work with a simple smartphone app over your home Wi-Fi network — like one-click ordering but wireless and single-purpose. They’re free after you make your first order. And they’re kinda cool.
But as geeks, we’ve been more intrigued with a new Amazon button marked simply “AWS IoT.” That stands for Amazon Web Services Internet of Things, and that means pushing the button could theoretically control anything connected to the internet. Now that’s really cool. The concept is amazing, and IoT is widely thought to be The Next Big Thing in computing.
Amazon introduced its $20 IoT button in May, but there aren’t many real-world examples of it being used so far, so we decided to join the ranks of the IoT pioneers and give it a try.
The first thing we discovered is that, out of the box, it does precisely . . . nothing.
You can’t just push the button and have it instantly do useful things, like opening your garage door and starting your car remotely or ordering a pizza. No, it was immediately clear that it would take some effort to make the button perform even the simplest IoT task. This would not be an undertaking for the impatient or faint of heart. And to be fair, Amazon makes it clear the button is meant for use by developers, so they can learn how the AWS IoT services work.
But hey! We’re techies. We’re geeks. Granted, I have never used AWS and haven’t programmed since I taught myself C (poorly, incompletely and 25 years ago). But I can understand code samples and write Excel macros. How hard could it be? Anyway, three different Amazon customers who had bought the AWS IoT button had been kind enough to write long, detailed accounts of how to make it useful.
I had some grand — and as it turned out, grandiose — ideas. As I imagined it, a single push of the button would activate a pressure sensor on the door to the single stall in our men’s room, telling me whether it was in use. A double-press would automatically dial nearby Fremont Coffee Co. on my iPhone so I could pre-order my favorite drink. And a sustained press would send an email to everyone on the GeekWire staff to evacuate the building immediately.
Each of those is theoretically possible. Theoretically.
In I plunged, working on the project in the odd moments when nothing was more pressing.
Day One (3 hours): Our administrator set me up with an AWS account and password. I decided to ignore the written accounts of how to proceed and just follow my instincts. That was the first of many mistakes.
Moving dead slowly, I watched an “interactive tutorial” that told me about something called a device gateway, which links controlled things with controlling things, and something else called a rules engine, which sets up if-then controls. So I created a “thing” — and then quickly foundered. A screen asked for the thing’s “condition,” not explaining what that meant. True, there was an adjacent pop-up window that said “Read the documentation,” but it provided no link.
Within the first hour’s effort, I found myself asked to do many tasks I didn’t understand. It was unclear what I needed to do, in what order, and why. For example, there was a lot of instruction about something called a policy. But what was it, and why was it called that, and why did it seem to do the same things I’d already told other things to do?
Here’s a typical screen:
Um, I have to write SQL? I know what it is and what it does (it queries relational databases), but I sure as hell don’t know how to write it.
And let’s not even talk about security! Here’s one of several security-related screens I had to contend with. It was hard not to laugh out loud at how absurdly complicated (and yet completely unexplained) the whole thing was.
Failing at everything else, I tried to “create a new resource” so I could “push a message to an SNS topic” (whatever that is). The resource was going to be the SNS target (whatever that is). But when I tried, here’s the message I received:
“User: arn:aws:iam::[number]:user/drichman is not authorized to perform: SNS:CreateTopic on resource: arn:aws:sns:us-west-[serial number]:GW_Topic_1 (Service: AmazonSNS; Status Code: 403; Error Code: AuthorizationError; Request ID: [number]”
Nice, huh? Makes a guy feel all warm inside.
I figured I’d just seek some AWS online help. But I couldn’t get access to the Support Center, and a search for “new resource” in the IoT Forum yielded nothing. Our administrator tweaked my permissions and told me to try again. So I did. (Pro tip: Be sure your administrator knows exactly which AWS services you need for the button and enables them for you. This was a big part of my difficulties.)
This time I decided I’d follow the step-by-step instructions written by one brave button pioneer. Turns out I couldn’t even do that. When I tried typing in the button’s 16-character serial number exactly as it was printed on the button’s back, I kept getting an “invalid input” message. So I left out the hyphens, and the form finally accepted the number. There were innumerable little gotchas like that throughout the process.
Finally, I gave up on that approach. I remembered reading about a simplified approach, a so-called wizard, that the good folks at AWS had created to help people like me. Maybe that’s what I needed.
So I bypassed all that cr . . . all those steps and just clicked on the link saying “Use Lambda to activate your IoT button.” This, it turned out, was my best idea yet, and where I should have started. But I didn’t get to it for another few days.
Day Two (3 hours): I started anew.
I first turned to the task of connecting the button to our WiFi network. I didn’t realize until after making many, many fruitless attempts that I had to log out of our WiFi network to activate the button properly. That instruction never appeared anywhere. Nor did the instructions make clear that the “SSID” required was our network’s name, or that the password demanded was that of our network. Those requests were made on a form that appeared only after logging off our network and going to the URL http://192.168.0.1/index.htm.
Probably anyone who’s been around Wi-Fi networks would have known this. But I certainly didn’t, and it took two solid hours of trial and error before I figured it out.
For all these efforts, I was able to get a green LED on the button, signaling that I had linked it into our WiFi network! By this time I was sweating profusely, despite the air-conditioned chill of our office. Upon reflection, I think of connecting to WiFi as Part 1 of the process. Again, perhaps others trying this would have sailed through this step.
Part 2 was making a button press actually do something.
Lambda is an AWS service that executes code in response to a given event. Thanks to the wizard, I was able to forge my way through a few screens of relatively understandable drop-down menus. I even substituted my email address for a green color-coded placeholder address in a somewhat intimidating piece of code. I was coding! (And by the way, if you need a coding confidence builder, I highly recommend this site.)
I carefully followed the instructions about “choosing a role” and navigated through a few incomprehensible drop-down menus, just leaving the default values intact. I clicked to finalize the function and got an error message: “You are not authorized to perform: lambda:CreateFunction.” I clicked it a few more times and the error message changed to “Service error.”
Ugh. I was out of time, so I quit for the day. Upon reflection, I realize that this was yet another problem caused by the simple lack of adequate permissions.
Day Three (1 hour): As a reporter, I have access to help most people wouldn’t: top techies at AWS, through AWS’s media relations office. It was clearly time to invoke their mercy.
On the phone with two techies and a media relations person, we walked through every step again. And this time, it worked! Pressing the button delivered an email message. The subject line read: “Hello from your IoT Button [serial number]: SINGLE.” The text in its entirety read: “[serial number] — processed by Lambda. Battery voltage: 1772mV.”
I heaved a sigh of relief and went home.
Now a few days have passed, and I’ve had time to reflect on the experience. (And to push the button again, to see if it still works. It does.)
Really, what did I learn? Not that much. I followed instructions and eventually got the result I wanted, but do I now understand AWS’s IoT or Lambda to any significant extent? Not really. Of course, that’s not AWS’s fault. A lot of my problems were self-inflicted. Deeper learning clearly would come with more experience, and meanwhile, I did get some hands-on time that might make me more comfortable in future undertakings. The Lambda wizard that AWS created certainly eased my way.
I think the button can be useful for developers who are really determined to master the intricacies of AWS IoT and Lambda and already have a reservoir of patience and skills. As I’ve noted, the range of actions that can be enabled through the IoT button — especially in combination with the innovative If This Then That service — is practically infinite.
For those intent on just making things happen automatically, there are certainly easier ways. Alexa and its ever-increasing number of skills comes to mind, as does Apple Home. These days you can do a lot of automation from a smartphone app and appropriately enabled thermostats, light bulbs and appliances.
So why use the AWS IoT button at all? At this point, mainly because a certain someone insists.
“Now that you’ve got the hang of it, you’ve got to try it again and do really do something cool!” my editor said. I demurred. He just stared.
Next up: We attempt to make the AWS IoT button do something useful, like illuminate a lightbulb or sound a buzzer. Stay tuned.
IN SUMMARY: If you’re a non-programmer trying to use the AWS IoT button:
- Get as broad a set of AWS permissions as possible.
- Proceed slowly and carefully. Use the Lambda wizard you’ll find in one of the initial IoT screens.
- Follow instructions, except if they don’t work.
- Tolerate confusion. Seek help from programmer friends. Take breaks and persevere.