How to post to a Microsoft Azure Service Bus using Intel Galileo

In my previous post, I walked you through on how to Install Python Azure SDK on Intel Galileo.

Let’s now put that Python SDK into some work and post something to an Azure Service Bus Queue.

It’s really rather straight forward:

from azure.servicebus import ServiceBusService, Message, Queue
from azure.storage import QueueService
import base64

service_namespace = '<YOURSERVICENAME>'
key_name = 'MyIoTDevices'
key_value = '<YOURKEY>'

queue_name = 'mytestqueue'
message = Message(base64.b64encode('Hello World'))

sbs = ServiceBusService(service_namespace,
shared_access_key_name=key_name,
shared_access_key_value=key_value)

sbs.send_queue_message(queue_name,message)

The only thing is to Base64 encode your string to be compatible with the other Azure SDK’s, in case you want compatibility with WIndows/Android/iOS etc.

But before we run this, you would need to set the on board clock on the Intel Galilelo, otherwise you will get this error:

azure.WindowsAzureError: Unknown error (Unauthorized)
<Error><Code>401</Code><Detail>ExpiredToken: . TrackingId:12341234-1234-1234-1234-123412341234_G18,TimeStamp:10/27/2014 5:06:24 PM</Detail></Error>

So, they easiest way is to synchronise the clock against a time server:

rdate -s wwv.nist.gov

You will need to do this every time after you have shut down the board, since the clock is not battery backed up. So it might be a good idea to put this in a script and have it run at startup.

There you have it.

 

 

Install Python Azure SDK on Intel Galileo

This  post walks you through the steps to install Python Azure SDK on Intel Galileo.

 

Requirements:

  • An Intel Galileo board (Gen 1 or 2)
  • The full Linux boot image
  • Internet connection (either using the built in Ethernet port or using a mini-PCIe WiFi board)
  • CURL with SSL/TLS support

Step 1 Get the big Linux image

You will need to boot in to the full Linux image, which you can download from Intel’s  download page.

Step 2 Boot into Linux

Extract the contents of that compressed file onto a SD card and boot the Galileo from it.

Step 3 Install prerequisites

SSH into your Galileo board as root (no password by default)

>ssh root@192.168.1.136

Make sure the latest CURL and OpenSSL are installed

>opkg update
>opkg install openssl
>opkg install curl

latest_installed

The Linux image I was using at the time of this writing did not have any Root CA certificates installed. Sure, one could bypass certificate validation using Curl’s -k option, but that’s cheating.

First, create the default certificate directories:

>mkdir /etc/ssl
>mkdir /etc/ssl/certs

Download the latest CA certificates

cd /etc/ssl/certs
curl https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt k -o ca-certificates.crt

(Yes yes, I know about -k, but this is a catch 22 moment, we need to get the certs down  from an SSL/TLS connection in the first place)

Step 4 Download and install PIP

Download and install the Python PIP

curl https://bootstrap.pypa.io/get-pip.py | python

install_pip

 Step 5 Install the Python Azure SDK

pip install azure

pip_install_azure

 

 Step 6 Verify

Now we can verify that Python can access the Azure SDK

python
>>>import azure
>>>azure.__version__

 

verify_azure

There you have it. So, what cool things can we do with Microsoft Azure and an Intel Galileo? Let me know in the comments below.