Stelios's Place

A place for thoughts and ideas

IOT Cubee

   Cubee is a connected desktop toy which spends most of the time trying to stay out of your way while calmly delivers the weather forecast for the next hour for your location.

Cubee - an IOT desktop toy

   Cubee was created because I needed to know the forecast for the next hour in order to decide when it's a good time to take my dogs out for a walk and at the same time avoid getting all of us soaking wet from the rain. Of course, knowing the weather conditions for the next hour does not only apply to walking your dog. You can use this information to decide if you are going out for a run, bike ride or anything else that bad weather is not suitable.

   This information is displayed on the 8x8 LED matrix. Here is an example of how the weather icons are displayed on Cubee:

cloud fog overcast rain snow sun wind
(cloud, fog, overcast, rain, snow, sun, wind)

    This (very) low resolution display makes it easy to read the icon from a distance or even by using your peripheral vision, like ambient display objects are designed to do so. This means that Cubee is able to keep itself out of your focus point, avoids creating distractions and it can be read with just a glance. A true glanceable information panel!

Cubee device showing the weather (sunny)

   Cubee gets its data from a remote REST API server. This API fetches the weather forecast using the weather service, transforms the data into one of the icons to displayed and sends it back to Cubee. In the mean time, the data is also stored on a RedisDB server for 15min in order to avoid hammering the API with date request every 4min.

   Besides displaying the weather conditions in my location for the next hour, Cubee can display my own (designed) icons by just sending them to the same API server. This way, I can have shell scripts or services like pushing 'notifications' to Cubee, e.g. email notification. Here are some icons I use for email, facebook and twitter notifications:

email facebook twitter
email, facebook, twitter

   For Cubee to work properly I need to configure the WiFi parameters and my location. For the WiFi I'm suing the SmartLink android application, that is able to push WiFi configuration data to the ESP8266 chip. For the location setting, I have made a small web application that is updating the Cubee profile on the RedisDB using the REST API. For now, you can do very basic things, like setting a name an a description for the Cubee, setting an API key for when you want to send data to Cubee from a remote service/script and configure the location. I have also made another type of 'data feed' (which I call 'agents') which displays the snow forecast, instead of the weather, for the next 3 days.

Application Dashboard - Lists my Cubees

Configuring Data Agents

  The problem with the 'agents' is that Cubee is very limited in the type and the detail of the information it can display. Cubee is more suited to display a 'fixed state data', e.g. Rain or Email or Twitter. Due to it's low resolution display and to keep Cubee a true 'glanceable information display', displaying 'transitional state data' is not possible. That means, that if I wanted to monitor the air pressure and use Cubee as a barometer, it wont be able to display the transitions of the pressure accurately in order to make a weather prediction.

The internal parts of Cubee are mainly:
  • PicAxe microcontroller (using an 08m2)
  • ESP8266 module for the wifi connection (AT mode firmware)
  • 8x8 LED matrix driven by a MAX7219 chip
All those parts are enclosed in a small 8x8cm wooden box that I built by hand. For the REST API, I'm using Python with CherryPy for the REST API and RedisDB to store the Cubee details, such as name, description, location and also to store temporarily the data from service.

Making some Cubee enclosures!

Here are the schematics for the Cubee:

Schematic: cubee_v1.sch

PCB: cubee_v1.pcb

Comments and suggestions are welcomed.