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.

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.
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.
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.
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
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”
Agregamos el paquete NuGet Microsoft.Azure.Devices
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) .
Cuando ejecutemos la app de Consola, el device se registrará y podremos además, copiarla clave del mismo.
En el portal de Azure podremos ver un device registrado en nuestro IoT Hub “IoTGarminLabs”
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”.
Poniendo la cadena de conexión correcta y un par de líneas ya podemos tener la app recibiendo mensajes.
Finalmente crearemos una 3ra Console app para publicar mensajes al IoT Hub.
Name: ConsoleAzuireIot03
NuGet packages: Microsoft Azure Devices Client
En este caso tenemos que usar parte de la información que generamos con la app ConsoleAzureIot01.
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.
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
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
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
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
- AZURE Getting Started with Azure IOT Hub for .Net
- NuGet Microsoft Azure IoT Service SDK
- NuGet Microsoft Azure Service Bus
- NuGet Microsoft Azure Devices Client
- NuGet Azure SB Lite from Paolo Patierno
- Paolo Patierno Azure IoT Hub Get Telemetry data using AMPQ stack and Azure SB Lite
- MSDN Quickstart: Sending a local toast notification and handling activations from it (Windows 10)
- NuGet Notification Extension Win 10
Leave a comment