Using more accurate temperature sensor with my Raspberry Pi

When I stumbled upon the MCP9808 precision temperature sensor, I was sold based upon its promise of up to 0.25 degrees Celsius accuracy. Just like my Freescale Xtrinsic sensor board, there’s a Python library that that allows me to use the MC9808 temperature sensor with my Raspbbery Pi.

My one and only challenge was doing a proper soldering work because the MCP9808 temperature sensor board comes as a breakout board. I referred to this tutorial to prepare the header strip (with the pins) that comes with the sensor board, inserted it into my breadboard, placed the breakout board over the pins, and solder! It was tough. Being a software guy, there is a big mental hurdle because there is not much undo feature or “let’s try to step into this code to see if it works or fails”. It’s a big challenge to hold a soldering iron and try not to apply too much heat when trying to apply solder onto the pins, else the sensor board would be toast.

The end result: I did a better job with the first breakout board (I bought 3 sensor boards as contingency), and the other two boards were not so lucky under the soldering iron.

Here’s what the MCP9808 sensor looks like on my breadboard with the 4 connections to my Raspberry Pi through the very usefulT-Cobbler Plus connector.

mcp9808

Here’s a photo of the GPIO cable nicely coming out of my Raspberry Pi clear case and connecting to the T-Cobbler Plus.

mcp9808-whole

Here’s a “creative way” of making sure the clear case cover still protects most of my Raspberry Pi even with the protruded Xtrinsic sensor board. Priceless ūüôā

xtrinsicsensorboard-rubberband

In my follow up post, I will describe how I send the temperature data stream to an Azure Event Hub, and then do simple analytics of the data on transit using Azure Stream Analytics.

Installing Windows Developer Program for IoT image on Intel Galileo Gen 2

In order to setup and install the Windows image onto Intel Galileo Gen 2, the best way is to follow the setup instructions in the Windows Developer Program for IoT.
Please be very careful with the folder where you will save the .cmd and .wim file. The best is to store the downloaded files in a simple to find folder, and a folder without any space in its name. Otherwise the .cmd file will not execute properly.
You may also want to rename the .wim file to a simpler name like galileo_v2.wim. When the .cmd file executes correctly, you should see the following:

C:\Temp>apply-BootMedia.cmd -image galileo_v2.wim -destination D:\ -hostname galileofai -password xxxxxx

C:\Temp>rem **************************************************************************

C:\Temp>rem ** Copyright (c) Microsoft Open Technologies, Inc.  All rights reser
ved.

C:\Temp>rem ** Licensed under the BSD 2-Clause License.

C:\Temp>rem ** See License.txt in the project root for license information.

C:\Temp>rem **************************************************************************

**** Temporary changing time zone to 'Pacific Standard Time'
**** Fat32 is local time based, and the images are created in a pacific time zone. If there is a mismatch Windows will bug check after 5 minutes.
**** Set-up work folder: C:\Users\hoongfai\AppData\Local\Temp\apply-BootMedia-15483
**** Retrieveing C:\Temp\galileo_v2.wim
****          to C:\Users\hoongfai\AppData\Local\Temp\apply-BootMedia-15483

Deployment Image Servicing and Management tool
Version: 6.3.9600.17031

Mounting image
[==========================100.0%==========================]
The operation completed successfully.
**** Customizing image C:\Users\hoongfai\AppData\Local\Temp\apply-BootMedia-15483\galileo_v2.wim
****        mounted at C:\Users\hoongfai\AppData\Local\Temp\apply-BootMedia-15483\galileo_v2.wim.mount

Deployment Image Servicing and Management tool
Version: 6.3.9600.17031

Saving image
[==========================100.0%==========================]
Unmounting image
[==========================100.0%==========================]
The operation completed successfully.
**** Applying image C:\Users\hoongfai\AppData\Local\Temp\apply-BootMedia-15483\galileo_v2.wim
****             to D:\

Deployment Image Servicing and Management tool
Version: 6.3.9600.17031

Applying image
[==========================100.0%==========================]
The operation completed successfully.
**** Mounting D:\\Windows\System32\config\SYSTEM
****       to HKEY_USERS\Galileo-15483-SYSTEM
**** Setting hostname to galileofai
**** Restoring time zone to 'Pacific Standard Time'
****
****   Successfully applied C:\Temp\galileo_v2.wim
****                     to D:\
****
****              hostname: galileofai
****              timezone: Pacific Standard Time
****              Username: Administrator
****              Password: xxxxxxxxxx
****
**** Done.

How to send sensor data from Raspberry Pi to Azure Event Hub using a Python script

This post follows what I intended to do which is to pump sensor¬†data consisting¬†of temperature and altitude readings from the Xtrinsic sensor board to my Azure Event Hub named getfityall. The sensor board comes with some Python scripts already as you have seen in my earlier posts.¬†Coupled with Microsoft Azure Python packages from the SDK, I could easily reuse a very nifty Python script I found from Kloud’s blog, a¬†very competent¬†Microsoft cloud partner, to send sensor data to my Azure Event Hub. The repurposed¬†Python script looks like the following:

import sys
import azure
import socket

from azure.servicebus.servicebusservice import (
  ServiceBusSASAuthentication
  )

from azure.http import (
  HTTPRequest,
  HTTPError
  )

from azure.http.httpclient import _HTTPClient

class EventHubClient(object):

  def sendMessage(self,body,partition):
    eventHubHost = "youreventhubname.servicebus.windows.net"

    httpclient = _HTTPClient(service_instance=self)

    sasKeyName = "yourprocessorname"
    sasKeyValue = "yourprocessoraccesskey"

    authentication = ServiceBusSASAuthentication(sasKeyName,sasKeyValue)

    request = HTTPRequest()
    request.method = "POST"
    request.host = eventHubHost
    request.protocol_override = "https"
    request.path = "/youreventhubname/publishers/" + partition \
    + "/messages?api-version=2014-05"
    request.body = body
    request.headers.append(('Content-Type', \
    'application/atom+xml;type=entry;charset=utf-8'))

    authentication.sign_request(request, httpclient)

    request.headers.append(('Content-Length', str(len(request.body))))

    status = 0

    try:
        resp = httpclient.perform_request(request)
        status = resp.status
    except HTTPError as ex:
        status = ex.status

    return status

class EventDataParser(object):

  def getMessage(self,payload,sensorId):
    host = socket.gethostname()
    body = "{ \"DeviceId\" : \"" + host + "\""
    msgs = payload.split(",")

    for msg in msgs:
      sensorType = msg.split(":")[0]
      sensorValue = msg.split(":")[1]
      body += ", "
      body += "\"SensorId\" : \"" + sensorId \
           + "\", \"SensorType\" : \"";
      body += sensorType + "\", \"SensorValue\" : " \
           + sensorValue + " }"
    return body

I saved and named this Python script as sendtelemtry.py.

Then in the mpl3115a2.py script, add the following import statements:

import socket
import sendtelemetry

At the end of the script, replace the Python code with the following:

mpl = mpl3115a2()
mpl.initAlt()
#mpl.initBar()
mpl.active()
time.sleep(1)
while 1:

        #print "MPL3115:", "\tAlt.", mpl.getAlt(), "\tTemp:", mpl.getTemp()
        hubClient = sendtelemetry.EventHubClient()
        parser = sendtelemetry.EventDataParser()
        hostname = socket.gethostname()
        message = "temperature:"+repr(mpl.getTemp())+",altitude:"+repr(mpl.getAlt())
        body = parser.getMessage(message,"mpl3115")
        hubStatus = hubClient.sendMessage(body,hostname)
        print "[RPi->AzureEventHub]\t[Data]"+message+"\t[Status]"+str(hubStatus)
        time.sleep(0.1)

Then execute this script by doing

sudo python mpl3115a2.py

The Azure Event Hub REST API returns HTTP status code to indicate the result of the send event REST call. A HTTP status code of 201 means success. Read more about the send event REST call here. You can monitor your Azure Event Hub dashboard to see the incoming messages.

In the next post I will share more about what I’m doing with the preview feature of Azure Stream Analytics to do a toll-gate analysis of event data in transit. Thus far I had only been doing descriptive analytics of data at rest. This ought to be interesting because it requires a different understanding of what I¬†would like to analyze.

Fresh raspberry pi at my service

I am super glad that the items I ordered from Element14 arrived overnight. I got not one but 3 MEMS Sensor board, and it¬†is working well. Proof that I somewhat “overused” the previous board so much so that the temperature and altitude reading stopped working.

pi@raspberryclay ~/rpi_sensor_board $ sudo python mpl3115a2.py
MPL3115: Alt. 100.24 Temp: 28.144
MPL3115: Alt. 100.24 Temp: 28.144
MPL3115: Alt. 100.24 Temp: 28.144
MPL3115: Alt. 100.24 Temp: 28.144
MPL3115: Alt. 101.32 Temp: 28.128
MPL3115: Alt. 101.32 Temp: 28.128
MPL3115: Alt. 101.32 Temp: 28.128
MPL3115: Alt. 101.32 Temp: 28.128
MPL3115: Alt. 101.32 Temp: 28.128
MPL3115: Alt. 101.32 Temp: 28.128
MPL3115: Alt. 101.32 Temp: 28.128

I got a new Raspberry Pi too, it’s for my co-worker, Clayton. It’s pretty simple to clone the micro-SD card from raspberryfai and write it on to the new one. Just use the Win32DiskImager. It works like a charm.

Just to make sure my ISS agent which sends the right telemetry data which consists of MEMS sensor temperature/altitude reading, here’s a good OData feed of the data all captured in the cloud.

raspclayiss

I’m thinking of the next steps in my experimentation such as:

  • Revert to plain old way of sending telemetry data from my Raspberry Pis to Azure Event Hubs using a friendly AMQP client/library.
  • Do real-time analytics of multiple data streams from Fitbit, Strava, Raspberry Pi (temperature/altitude). I’ve been mucking around with the new preview of Azure Stream Analytics to some success.

I have 2 more packages of nice toys to be delivered. I’d ordered an Arduino Starter Kit, and 2 Intel Galileo 2, among other nifty breakout boards, sensors, and kits. Stay tuned.

 

Radio silence

When I started this blog, I wanted to write regularly with at least a blog post per month, but October has been a really quiet month from me. The reason for the radio silence is that I moved between suburbs in Sydney. I also moved between continents, between Malaysia and Australia. I have also re-joined Microsoft as a Technology Solutions Professional for IoT in the Asia Incubation team. Fun times ahead and the passion for anything IoT related continues.

A recent announcement that got me stoked about was the Microsoft Band. It’s more than just a fitness tracker because as this blog post rightly puts it, it’s the power of IoT on your wrist. I can’t wait to wear one on my wrist.

This device would be a great addition to my Project GetFitY’all. It’s really about the internet of my things when I began this project, and the more devices connected to this project, the merrier it is.¬† Over time I intend to connect more devices, or sensor gadgets. I also need to replace the mems sensor board because the temperature stopped working. I think I might have “killed” the function. All it returns now are the following:

MPL3115:        Alt. 0.0        Temp: 0.0
MPL3115:        Alt. 0.0        Temp: 0.0
MPL3115:        Alt. 0.0        Temp: 0.0
MPL3115:        Alt. 0.0        Temp: 0.0

No worries, I probably will buy a few other boards just as backup. Meanwhile it’s back to work. Let’s rock on!

Sending sensor board data from Raspberry Pi to Intelligent Systems Service (ISS)

I have been mucking around with the Xtrinsic-sense board which is an add-on to my Raspberry Pi. In my previous post, I had executed the Python scripts that came with the sensor library that I cloned out of this github. There is a good article that explains about how to enable Xtrinsic-sense board in Raspbian.

However my aim is to get the Intelligent Systems Service (ISS) sample C application to invoke the sensor board shared library to retrieve the altimeter and temperature values, assign that to a string property within the data model, then send it to ISS. The sensor board library comes in the form of a shared library called sensor.so.

Hence I started on a journey to try to invoke the functions within the sensor.so out of mirroring the Python code, but in the sample C application. Now I must admit that Python coding skills is non-existent, and my C coding skills were really rusty. The last time I wrote a C/C++ application was in 2000/2001! What’s surprising is that I haven’t completed forgotten C, it’s like riding a bike, suddenly remnants of makefile, linking with dynamic/static libraries, include files, and function pointers in C slowly came back to memory.

But I’m still hopeless in Python, I gave up because I didn’t understand what the following code does except that it does some byte shifting, but for what reason, it beats me.

def getTemp(self):
    t = self.readTemp()
    t_m = (t >> 8) & 0xff;
    t_l = t & 0xff;

    if (t_l > 99):
        t_l = t_l / 1000.0
    else:
        t_l = t_l / 100.0
    return (t_m + t_l)

I knew there has to be an easier way to invoke the sensor board library in C, but where’s the sample code? After much searching, I found a reverse-engineered sensor.so with C source code! How amazing, thanks to this bloke named¬†Lars Christensen. It was just hot off the oven, to be specific just last Saturday 13 Sept. To get started, all I had¬†to do was to¬†clone his source from github. In my raspberrywifai SSH session,¬†I issued the following command (provided you have already installed git too).

git clone https://github.com/larsch/rpi-mems-sensor.git

There was a slight problem. The mpl3115a2.h header file was empty. No worries, just go to the github repository at https://github.com/larsch/rpi-mems-sensor, click on mpl3115a2.h, copy the content, and paste it in the file in your working directory on RaspPi.

You also need to download and extract the bcm2835 library. Then just follow the steps on how to make it. This creates a static library called¬†libbcm2835.a. Next, make the reverse-engineered sensor board library so that you create a new sensor.so, and libmemssensor.a. I was only interested in the static libraries of¬†libbcm2835.a and¬†libmemssensor.a so that I can compile test.c. There wasn’t a proper make statement for test so I just issued my own gcc command.

gcc -Wall -I /home/pi/rpi-mems-sensor  -L. -lmemssensor -lbcm2835 -static test.c -o test libmemssensor.a libbcm2835.a

Do not just run ./test because initializing bcm2835 requires elevated permission. If you do that you will get the following error:

pi@raspberryfai ~/rpi-mems-sensor $ ./test
bcm2835_init: Unable to open /dev/mem: Permission denied

So do this instead:

sudo ./test

And voila! I get the altimeter and temperature reading.

raw alt = 11968
alt: 46.750000, temp: 23.812500
raw alt = 11968
alt: 46.750000, temp: 23.812500
raw alt = 11968
alt: 46.750000, temp: 23.812500
raw alt = 11968

The Python code which I just couldn’t comprehend is the equivalent of the following C code:

 

double getTemp() {
    int t = MPL3115A2_Read_Temp();
    int t_m = (t >> 8) & 0xFF;
    int t_l = t & 0xFF;
    if (t_m > 0x7f) t_m = t_m - 256;
    return t_m + t_l / 256.0;
}

It still beats me what it does, but that’s alright, I just wanted this code to work within the ISS sample C application. Next I embedded this code within the¬†DATAPROVIDER_RESULT DATA_PROVIDER_INIT function. I didn’t want to create a new data model so I reused the sample data model, and chose to assign the altimeter and temperature reading to the stringProperty, as shown in the following code:

// setting StringProperty which contains the alt and temperature
bcm2835_init();
MPL3115A2_Init_Alt();
MPL3115A2_Active();
sleep(1);
char tempinfo[1024];
snprintf(tempinfo, sizeof(tempinfo), "alt: %f, temp: %f\n", getAlt($
stringProperty = tempinfo;

Compile (also includes modifying the makefile to ensure the sensor board header files and static libraries are correctly linked), and then run the ISSAgent app, and wait for it……..

Info: Microsoft Intelligent Systems Agent Console
Info: Using device endpoint: getfityall.device.intelligentsystems.azure.net
Info: Registering device: Name=raspberrywifai, FriendlyName=raspberrywifai, ModelName=Contoso.Device, Description=raspberrywifai
Info: x-ms-activity-id: 557374f8-2342-4bfb-bb7b-ce19199fa77e
Info: Getting endpoints for device raspberrywifai
Info: x-ms-activity-id: 229227bf-483b-4914-a613-e447bb7caca5
Info: Got ingress queue namespace=uswepm01c02x0sb20-0.servicebus.windows.net, name=getfityall/raspberrywifai
Info: Got commands queue namespace=uswepm01c02x0sb20-0.servicebus.windows.net, topic path=DeviceBank1, subscription name=raspberrywifai
Info: Got per device token=[secret]
raw alt = 11152
Info: Uploading message 2e5f2634-bee2-4e88-b1c3-3ed991f25f41 for device raspberrywifai (payload={"@iot.devicename":"raspberrywifai", "value":[ {"@odata.context":"Contoso\/$metadata#Device\/$entity", "@odata.id":"Device('raspberrywifai')", "@Microsoft.IntelligentSystems.Vocabulary.V1.Timestamp":"2014-09-17T00:34:41Z", "structProperty":{"simpleField":17, "structField":{"int32Field":10, "int64Field":34, "doubleField":40.000000000000000, "stringField":"Wed Sep 17 10:34:40 2014\u000A", "guidField":"0F1E2D3C-4B5A-6978-8796-A5B4C3D2E1F0", "binaryField":"AAAA", "dateTimeOffsetField":"2014-09-17T10:34:40Z", "booleanField":true}}, "stringProperty":"alt: 43.562500, temp: 22.812500\u000A", "dateTimeOffsetProperty":"2014-09-17T10:34:40Z"} ]}) ...Info: Success

Or more specifically:

"stringProperty":"alt: 43.562500, temp: 22.812500\u000A"

Woo hoo! I got it. Now moving on to the next steps. This opens up other possibilities such as sending temperature as an event on a pre-determined interval, and also set up alarm when temperature falls below or goes above a certain value. The fun begins! ūüôā

RaspberryWiFai getting mobile

Raspberryfai has transformed into¬†RaspberryWiFai, and it is can’t wait to go out there under the spring sun!¬†I’d procrastinated for awhile in opening up the clear case and plugging in the Xtrinsic-Sense board that I purchased together. Initially I wanted to buy a downgrade GPIO cable from 40 pins to 26 pins¬†so that the cable could nicely slip out of the clear case. I could order from Adafruit but this¬†means that it would be an international shipment and it would cost me more than the inexpensive cables. I checked out¬†a local electronics mart, but¬†they didn’t sell it. Searched more online stores that would deliver fast around here, and none sell this cable.

Now that¬†RaspberryWiFai is more mobile due¬†to a working WiFi USB adapter, why not power it up using my 19,200 mAh power bank, open up the clear case top, plug in the Xtrinsic -Sense board, and will it out for a drive tomorrow. Here’s how RaspberryWiFai looks like with the dropped top.

raspberrywifai

However the funny thing was that I didn’t know which was GPIO PIN 1. The Xtrinsic-Sense board has 26 pin to work with the older RaspPi A and B, but RaspPi B+ has 40 pins. It wasn’t labelled on the RaspPi.¬†I looked through GPIO layout diagrams for the RaspPi B+ but couldn’t find anything until I came across a comment from Matt the author of this blog, who said “if you look on the reverse of the PCB Pin 1 has a square pad and the others have round pads.”.¬†Got it!

Without further ado, I executed the Python script for getting the temperature/pressure. The sun was up, and still is¬†so it would be pretty good to show how temperature changes when I moved RaspberryWiFai ¬†from inside my unit to the balcony which is baking hot from the spring sun. Here’s the output showing the temperature rising (I’d condensed the output for brevity sake here):

pi@raspberryfai ~/rpi_sensor_board $ sudo python mpl3115a2.py
MPL3115: Alt. -59.888 Temp: 23.176
MPL3115: Alt. -60.04 Temp: 23.192
MPL3115: Alt. -60.776 Temp: 23.176
MPL3115: Alt. -59.888 Temp: 23.16
MPL3115: Alt. -57.872 Temp: 23.192
MPL3115: Alt. -58.824 Temp: 23.208
MPL3115: Alt. -58.0 Temp: 23.192
MPL3115: Alt. -54.2 Temp: 23.16
MPL3115: Alt. -54.68 Temp: 23.144
MPL3115: Alt. -57.856 Temp: 24.16
MPL3115: Alt. -58.808 Temp: 24.64
MPL3115: Alt. -58.824 Temp: 24.8
MPL3115: Alt. -57.84 Temp: 24.96
MPL3115: Alt. -58.84 Temp: 24.128
MPL3115: Alt. -57.84 Temp: 24.16
MPL3115: Alt. -58.792 Temp: 24.176
MPL3115: Alt. -57.808 Temp: 25.0
MPL3115: Alt. -57.84 Temp: 25.32
MPL3115: Alt. -57.2 Temp: 25.48
MPL3115: Alt. -57.2 Temp: 25.64
MPL3115: Alt. -58.888 Temp: 25.8
MPL3115: Alt. -58.04 Temp: 25.96
MPL3115: Alt. -58.856 Temp: 25.112
MPL3115: Alt. -57.84 Temp: 25.128
MPL3115: Alt. -57.84 Temp: 25.144
MPL3115: Alt. -57.2 Temp: 25.16
MPL3115: Alt. -54.856 Temp: 25.208
MPL3115: Alt. -54.84 Temp: 25.192
MPL3115: Alt. -54.52 Temp: 25.224
MPL3115: Alt. -54.68 Temp: 25.24
MPL3115: Alt. -55.0 Temp: 25.0
MPL3115: Alt. -55.856 Temp: 26.16
MPL3115: Alt. -55.856 Temp: 26.32
MPL3115: Alt. -56.76 Temp: 26.48
MPL3115: Alt. -55.36 Temp: 26.64
MPL3115: Alt. -55.04 Temp: 26.8
MPL3115: Alt. -55.2 Temp: 26.96
MPL3115: Alt. -55.856 Temp: 26.112
MPL3115: Alt. -55.2 Temp: 26.128
MPL3115: Alt. -55.36 Temp: 26.144
MPL3115: Alt. -56.808 Temp: 26.16
MPL3115: Alt. -59.872 Temp: 26.112
MPL3115: Alt. -60.76 Temp: 26.8
MPL3115: Alt. -60.76 Temp: 26.64

Indeed RaspberryWiFai was basking in the sun, from a low of 23.176 degrees C, it went up to 26.96 degrees C under the hot sun. Smoking hot! Time to wire it up to my ISS, and do some cool things like raise an alarm when it is too hot.

How to get Raspberry Pi to work with TP-Link TL-WN721N USB Wi-Fi adapter

Wow! It’s taken me over a week to find just the right combo of advice from a number of really helpful blogs to help me setup raspberryfai with mt TP-Link TL-WN721N USB WiFi adapter. I tried so many different steps that I couldn’t remember what I’d done. I thought that the wicd-curses utility would work like a charm but it hung my RasPi a few times.

Now that it’s setup, I shall call it raspberrywifai. ūüôā

The blog which was most helpful was this post¬†written almost 2 years ago. Just follow the steps especially on how to get the firmware for the TP-Link USB adapter. The only exception was that the following command didn’t work in my case,

pre-up wpa_supplicant -Dwext -i wlan0 -c /etc/wpa_supplicant.conf -B

Instead I just have to change it to the simpler form of (my wpa_supplicant.conf file is kept in its own folder):

wpa_conf /etc/wpa_supplicant/wpa_supplicant.conf

In order to get the psk value, you can’t just type in your WPA2 passphrase, you need to run the following command:

sudo wpa_passphrase ssid passphrase

To be sure that it is indeed connected and seen as a USB device on my RasPi, I run lsusb, a command I learned from  this post.

Now that raspberryfai has become raspberrywifai, I can bring it out for a spin this weekend.

Intelligent Systems (at your) Service

I was really excited that my application for the Microsoft Azure Intelligent Systems Service (ISS) Limited Public Preview (LPP) had been approved (my apologies for all the 3-letter acronyms which I will be repeating all over my posts from now on). What the ISS LPP entitles me are the following:

  • Access to the ISS service which is¬†enabled for use with my¬†Azure account. The ISS service icon is now available in the list of services (on the left in my Azure Management Portal) and it looks like this:

0-issazure

  • Download the ISS SDK along with a couple other utilities such as DeviceMonitoring and the Contoso Home Automation -part 1 sample/demo (to be checked out soon)
  • Participate in a private forum. ¬†According to the welcome email, “You are more likely to get a response in a reasonable timeframe, since you are not reliant on an individual being online and able to answer your question”, which sounds great.

I went ahead to create an ISS service for GetFitY’all. However I could not share too much¬†details and the screen clipings¬†because according to confidential information clause in the EULA, ¬†the software and service, including the user interface, features and¬†documentation, are confidential and proprietary to Microsoft and its suppliers.

The real fun happens inside my raspberryfai. The RPi runs Raspbian, a customized version of Debian used to run on the RPi. I used scp to copy the ISSAgent_C_Samples folder into my raspberryfai. Then I compile the sample ISS agent and run it. The agent sends messages to my ISS account. My next step is to embed the ISS managed library into my GetFitYall device gateway, which was implemented as a WebJob described in one of my previous posts, and do the same in sending the activity data points to my ISS account. Previously I implemented a simple message pump functionality in the WebJob to send activity data points (pulled from Fitbit and Strava APIs) asynchronously to an Azure Event Hub via AMQP. Then I have Azure Worker Role instance(s) to ingest the event hub messages by persisting into respective Azure Storage Tables.

To waste or not to waste

Since a young age, I had been taught by my mother not to waste, especially precious resources like water, power, food and yes money too (she still thinks that I’m a spendthrift) . I reckon that my mother understood well about the importance of minimizing waste before carbon footprint appeared in our vocabulary. Up to today, I cringe whenever I see people wasting. As a case in point I once saw a guy leaving the water hose running at his front porch, he was presumably watering his plants, except that there were no plants there and he was doing something else. Although water was free and remains so in my birth state of Selangor, there is absolutely no excuse to leave the tap running for no reason.

While the case above was very much about with social behavior and civic mindedness (or the lack of it), I believe that technology and product innovations around our everyday things, be it appliances, devices, gadgets, wearable devices, or just about anything you own could provide positive implications in conserving resources. The Internet of Your Things could provide means to improve efficiency and minimize waste.

If things could communicate real-time information to each other or via an intelligent systems service, there is a real possibility that power and fuel consumption could fall. The Nest learning thermostat is one such product innovation that helps you save on your energy bill by learning your usage patterns. It could interact with other things too. In my previous post I mentioned a scenario that I would like to cater for which is to alert my family once I‚Äôd finished my ride in the trails and when I‚Äôm riding or driving home, including my ETA. If it‚Äôs winter, it may be good to get that heater warming the bathroom so that it‚Äôs all nice and warm when I take my shower or a hot tub bath. It is possible with the Nest and drum roll please… a Mercedes.

mercedes

No pun intended but I doubt that I would buy a Mercedes just so that my car could tell Nest that I’m on my way home and make it warm and comfortable as soon as I get home. If I did, then this would just prove that my mother was right, that I’m a spendthrift and this negates the reason why I should minimize waste. Hence I’ll try to build my own thing, and application on top of an intelligent systems service to try to enable this scenario. Maybe there are some projects readily available out there, which is great!

Meanwhile I’ll put on my “pastry chef” hat and see what I could do with “raspberryfai” being at my service. I trust there are umpteen scenarios in this uncharted territory of smart things. Do comment and please let me know.

Note: This post was originally posted on my LinkedIn. I still haven’t decided how I will segregate¬†the musings and the technical posts. Meanwhile¬†I’ll just repost every thing I wrote.