TheButton is a hardware button (doh) with 8 leds, communicating via MQTT. And it's surrounding Serverish parts. Oh yeah, everything is pre-alpha quality so there will be bugs everywhere.
Basically there are 4 parts to this project:

All of the parts are hosted as open-source on github. Please feel free to improve and create pull requests.

All of this is based on a MQTT backend. The Java & Mosquitto server runs on a Raspberry Pi (same as this blog)

How it all works..

When The button is started the first time, a Soft-accesspoint is created and started (thebutton-<deviceid>). Running on The Button is an httpserver on ip where you can scan for your local WIF and connect, connecting to a local WIFI disables the Soft-AP. Holding the button for more than 5 seconds resets TheButton and allows you to reconfigure the Wifi Settings 5seconds).
When an internet-enabled Wifi-connection is made TheButton will automatically connect to the mqtt-server over SSL and announce it's connection.

When the button on TheButton is pressed an mqtt message is sent to the Java-Process which looks up who is registered to TheButton and what action is set for that device. Right now only is supported, this support is pluggable and it should be quite easy to implement more functionality. The Java-server also has the ability to tell TheButton to light up Leds, add or remove lit leds and flash them. These commands are also sent via MQTT. The image below depicts the Prototype board. (Today it is a single-button interface.)

TheButton Prototype

The Project components


ESP8266 Microcontroller C-Code.
The ESP8266 is a Wifi-enabled microcontroller much like the arduino platform, with a less developed SDK and less IO-ports. It is also very Cheap. ~$4 per board.
Information on how to build and flash the project is available on the github project page

Visit the site for more information on the ESP8266 microcontroller.


A PCB board designed in Eagle.
Based on the ESP8266-03 a 74HC595 shift-register and some misc bits and pieces.
PCB Design


The Java server mediating between TheButton and the different services used. Looking up owner and what action should be taken. For instance creating a WS-connection to sending updates to both sides. Gluing everything. It's running on a Raspberry pi 2 which gives plenty of oumph
Raspberry Pi server


Currently there is no backend for the device-management. An mysql database holds all user-data. The plan is to implement a quick way to register your device with a username and then decide what the button should do depending on which action is selected each button can perform different tasks. Today, It's only a login and nothing more..

Currently only Coffeebreak works, as an POC.