#AZURE – Ejemplo de #AzureIoT con Windows Universal Apps

Hola !

Después de un par de semanas aprendiendo a usar Garmin ConnectIQ SDK, ahora tengo mi Garmin device listo para empezar a trabajar en modo Cloud. Como mi idea es utilizar Azure IoT como hub para el envío y recepción de mensajes, escribiré un par de posts al respecto como pequeña introducción. La primera parte de este post se basa en este artículo del portal de Azure donde comentan como crear un ejemplo con Console Apps. Yo lo he evolucionado un poco y he terminado usando Windows Universal Apps.

2016 02 28 Azure Iot Wua Samples

Create the Azure IoT Hub

Vamos a empezar desde el principio. En primer lugar, necesitamos una cuenta de Azure (puede ser un trial). Y desde el Portal de Azure, creamos un nuevo AzureIot Hub.

image

Yo lo he llamado IoTGarminLabs

Importante: El valor por defecto para el precio del hub es S1, yo lo he cambiado a Free para las pruebas.

image

Después de un par de minutos, el IoT Hub estará creado. Si existe algún tipo de problema durante la creación, en la sección de alertas veremos unos agradables mensajes de error.

image

Una vez que las configuración y los datos son correctos, se creará el IoT Hub. La información importante que necesitaremos más adelante es el nombre de Host: <YourIoTHubName>.azure-devices.net y también las credenciales y la cadena de conexión. Para acceder a esta información:

  • Click en la llave en la barra de herramientas
  • Click en iothubowner policy
  • Copiar la connection string primary key value

image

Create sample Visual Studio Console App projects

Ahora ya podemos ir a Visual Studio y crear una Console App para conectar y probar el Iot Hub. Mi proyecto de prueba se llama“ConsoleAzureIoT01

image

Agregamos el paquete NuGet Microsoft.Azure.Devices

image

En este momento el tutorial explica como registrar nuestro device y obtener la clave del mismo en este IoT Hub. El siguiente código fuente realiza este proceso de registro

Importante: Reemplazar la IoT Connection String (line 11) y elegir el nombre del device (line 12) .

image

Cuando ejecutemos la app de Consola, el device se registrará y podremos además, copiarla clave del mismo.

image

En el portal de Azure podremos ver un device registrado en nuestro IoT Hub “IoTGarminLabs

image

Ok, el siguiente paso en el tutorial es crear otra Console App para leer los mensajes device-to-cloud messages desde el IoT Hub. En mi ejemplo esta app se llama“ConsoleAzureIoT02”, y utiliza el paquete NuGet “WindowsAzure.ServiceBus”.

image

Poniendo la cadena de conexión correcta y un par de líneas ya podemos tener la app recibiendo mensajes.

image

Finalmente crearemos una 3ra Console app para publicar mensajes al IoT Hub.

Name: ConsoleAzuireIot03

NuGet packages: Microsoft Azure Devices Client

image

En este caso tenemos que usar parte de la información que generamos con la app ConsoleAzureIot01.

image

Si en este momento ejecutamos las apps 02 y 03, veremos como cada un segundo la app 03 envía mensajes al IoT Hub y como la app 02 recibe y muestra los mismos. Si accedemos al portal de Azure, veremos además que el número de mensajes procesados se ha incrementado.

image

Sample using Visual Studio Windows Universal App projects

Este es el ejemplo de MSDN y para comenzar es genial, sin embargo yo quería darle una vuelta y es por esto que decidí implementar lo mismo con Windows Universal App projects.

Los datos de la primera WUA son los siguientes

Name: WuaAzureIotSendMessage

Objective: Send messages with a button

image

Moviendo un poco de código, no iba a ser todo tan fácil. La primera vez que ejecuté la app me encontré con este error

System.NotImplementedException occurred
HResult=-2147467263
IsTransient=false
Message=Amqp protocol is not supported
Source=Microsoft.Azure.Devices.Client
StackTrace:
at Microsoft.Azure.Devices.Client.DeviceClient.CreateFromConnectionString(String connectionString, TransportType transportType)

Parece que hay un problema con las WUA apps y AMQP (Todavía no tengo mi Raspberry PI 3 aquí en Toronto para probarlo con Windows IoT Core). Me puse a investigar y leer un poco y me dí cuenta de que era posible configurar la conexión en la WUA app para que utilice HTTP como protocolo de transporte en lugar de AMQP. Line 22

image

Luego cree otra app para recibir los mensajes con los siguientes datos

Name: WuaAzureIotReceiveMessage

Objective: Receive messages and display Toast notification into the Windows 10 Action Center

image

Aquí el problema era más feo ya que no podía utilizar el paquete NuGet de WindowsAzure.ServiceBus. No está soportado para Universal Apps (glup!). La solución fue Azure SB Lite del gran Paolo Patierno para gestionar la recepción de mensajes desde Azure Service Bus.

Finalmente, cuando la app recibe un mensaje, mi idea era mostrar una Toast notification utilizando otro paquete NuGet Notification Extension Win 10

Y ahora ya puedo volver al video del principio y tener las apps up and running !!!.

Greetings @ Toronto

-El Bruno

References

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s