¿Meadow es el sucesor de Netduino?


La compañia Wildernesss Labs tras comprar  en 2016   Netduino y trabajar en secreto dos años  en  2018,  sacaron vía crowfounding  (en Kickstarter)  su proyecto estrella: Meadow , una  plataforma IoT estándar de .NET de pila completa   que  intenta combinar lo mejor de todos los mundos,  pues tiene el poder de RaspberryPi,  el factor de computación de un Arduino y la capacidad de administración de una aplicación móvil. ¿Y la mejor parte? funciona con .NET Standard completo en hardware de IoT real

Existe una brecha cada vez mayor entre los desarrolladores y las empresas que desean construir hardware conectado y la capacidad de hacerlo. Meadow intenta  cerrar esa brecha y permite a los diez millones de desarrolladores de .NET crear experiencias de hardware realmente interesantes con la misma facilidad con la que crean aplicaciones web o móviles en la actualidad.

Meadow  permite a los desarrolladores ejecutar aplicaciones completas de .NET Standard 2.x en un microcontrolador e incluye un conjunto de controladores de hardware y API en la parte superior que hace que el desarrollo de hardware sea plug and play.   Sin embargo, Meadow no se limita a los desarrolladores .Net, intentando  abrir el desarrollo de hardware a desarrolladores de todo tipo, poniendo especialmente foco en el ambiente empresarial .

Meadow IoT Kickstarter

 

Microordenador vs Microcontrolador: las Raspberry Pis son ordenadores completos  y los Ardunios son pequeños dispositivos (en su mayoría) de una sola tarea.  Es quizás  una exageración tener Ubuntu en un ordenador solo para encender un dispositivo así que por lo general, es deseable  que los dispositivos de IoT ocupen desde el punto de vista del  hardware como del sw  lo menos posible a si que  puede ser una buena  idea que  nuestro core de IoT corra  un sistema  operativo mas estable en cuanto a cortes o interrupciones  ( como lo haría en un microcontrolador pero con muchísima mas potencia del calculo).

Meadow  en principio  ha sido diseñado para ejecutarse en una variedad de microcontroladores, y la primera placa se basa en la MCU STM32F7 (insignia de STMicroelectronics) con coprocesador ESP-32 e   implementando. WiFi, BLE, 32 MB de RAM, 32 MB de Flash. 25 puertos GPIO, PWM, I2C, SPI, CAN, UART y cargador de batería LiPo integrado, todo ello en el factor de forma Adafruit Feather.

Lo interesante pues es que el factor de forma Feather sirva  como placa de desarrollo o incrustarlo. Es realmente un gran diseño   basada en  MCU STM32F7 en un bajísimo factor de forma  y con  casi tantos puertos GPIO (25) tanto  analógicos como digitales como estamos acostumbrados en Arduino o Netduino.

En el sitio de  Meadow Kickstarter dicen que se está ejecutando en Mono Runtime y admite la API .NET Standard 2.0 lo  cual  significa que probablemente ya sepa cómo programarlo  pues  la mayoría de las bibliotecas de NuGet son compatibles con .NET Standard, por lo que una gran cantidad de software de código abierto debería «simplemente funcionar» en cualquier solución que admita .NET Standard.

En términos de NanoFramework y TinyCLR; si bien esos son grandes esfuerzos, son significativamente diferentes a Meadow. Ambos esfuerzos se basan en .NET MicroFramework. Como tal, no son compatibles con .NET completo. No hay genéricos en ninguno de ellos, por ejemplo, ni hay soporte para las bibliotecas estándar .NET. 

 

Funciones empresariales

Meadow  incluye soporte para actualizaciones seguras por aire (OTA), lo que permite que las instalaciones de campo de IoT se gestionen de forma remota; una característica clave para las implementaciones empresariales de IoT.

Meadow abrirá todo un nuevo conjunto de posibilidades para el desarrollo de cosas conectadas. Y como funciona con un dispositivo de  ultrabaja energía, podrá colocarlo en todas partes. Las instalaciones de baterías, energía solar e incluso energía a través de Ethernet (POE) se convertirán en algo común, lo que significa que para muchos de estos dispositivos, el acceso físico será limitado, por lo que la administración centralizada es un requisito absoluto.

Además de las actualizaciones de OTA, Wilderness Labs tiene planes para el monitoreo de campo básico, informes de fallas y análisis para asegurarse de que los dispositivos Meadow funcionen in situ.

Y debido a que Meadow usa .NET, las empresas pueden usar equipos existentes e inversiones de código para construir IoT, en lugar de tener que contratar nuevos desarrolladores que se especialicen en hardware. Es una propuesta de valor similar a la que sus creadores hicieron en Xamarin; había desarrolladores existentes que querían hacer dispositivos móviles, así como muchas inversiones existentes en código empresarial los cuales fueron habilitados en una plataforma completamente nueva ( Microsoft adquirió Xamarin por más de 400 millones de dólares, en gran parte por su valor en el mercado empresarial).

Seguridad 

Otro aspecto importante del aspecto Meadow se intenta centrar en la seguridad. Meadow presenta consideraciones de seguridad básicas, desde la seguridad a nivel de hardware y las actualizaciones seguras, pero Wilderness Labs también se compromete a enviar componentes de software destinados a facilitar la seguridad desde una perspectiva de UX. No es suficiente tener actualizaciones seguras por aire (OTA ) , firmware firmado, revocación de certificados terciarios, etc., pueso la seguridad debe llegar hasta el final.

El pirateo del bot Mirai funcionó porque muchas de estas cámaras de seguridad conectadas tenían nombres de usuario y contraseñas predeterminados, asi  que no es una cuestión   banal.

En este nuevo enfoque enviaran componentes que puede ingresar y brindar una experiencia de usuario fantástica y fácil para cambiar esas cosas, así como orientación y educación para el desarrollador para ayudar a la gente a comprender cómo aprovechar las funciones de seguridad en la pila Meadow.

Inteligencia artificial en IoT

Recientemente, Pete Warden, director de TensorFlow en Google, escribió que la mayor parte de la inteligencia artificial se realizará en microcontroladores , y Meadow es la primera plataforma de desarrollo de microcontroladores que cumple con esa promesa, permitiendo ejecutar visión artificial a través de TensorFlow y otros paquetes de inteligencia artificial de alto nivel localmente en chip.

Se espera que la IA desempeñe un papel clave en IoT con la visión artificial y otros algoritmos de aprendizaje profundo que se ejecutan en imágenes y otros datos de sensores en la fuente para agilizar la recopilación de datos y permitir que los dispositivos tomen decisiones en el campo. Sin embargo, Meadow es la primera plataforma de microcontroladores de IoT que se enfoca específicamente en casos de uso de IA.

Mercado emergente

Se espera que el mercado global de IoT supere los USD $ 1 billón / año para 2025 , y se prevé que gran parte de ese dinero se gaste en herramientas, plataformas y servicios para desarrolladores. Y ese mercado está listo para la disrupción, mientras que los microcontroladores están preparados para convertirse en la forma dominante de computación , con un estimado de 75B de ellos in situ y conectados para 2025, casi todo el desarrollo de microcontroladores hoy en día se realiza en lenguajes de bajo nivel como C / C ++ , y las herramientas no han cambiado mucho desde la década de 1980.

Una de las cosas que ha frenado a IoT hasta ahora es la barrera de entrada; existe una variedad fantástica de nuevos dispositivos informáticos que pueden hacer todo lo que puede hacer una computadora en miniatura y más; sólo cuestan unos pocos dólares, pueden funcionar con una batería de tipo botón durante años y, sin embargo, programarlos es un trabajo duro durante los años 80 ”, comentó Bryan.

Diferencias con Neduino

Hardware

Si bien Meadow está diseñado para ejecutarse en una variedad de microcontroladores de 32 bits, su primera placa se basa en el chip STM32F7 de STMicroelectronic con 32 MB de almacenamiento flash y 16 MB de RAM , el sucesor del chip STM32F4 muy popular que se encuentra en varias placas de desarrollo de microcontroladores, incluido Netduino. La serie F7 es dos veces más poderosa pero usa la mitad de la energía de los chips F4 e incluye una serie de características interesantes, como un códec JPEG integrado para manejar transmisiones de video y cámara, así como un acelerador de gráficos 2D para proporcionar UX en un variedad de pantallas.

También están trabajando en una placa basada en ESP32 que traerá características y conectividad de alta gama a un mercado de bajo precio. Esperaremos con ansias el día en que pueda incorporar una placa Meadow basada en ESP32 en productos por menos de $ 10.

Una gran diferencia con Netduino es  que la placa Meadow F7 está diseñada para ser compatible con el factor de forma Adafruit Feather  ( claramente diferente  a Natduino que se diseño para tener el mismo factor de forma que Arduino ). Además incluye un conector de batería y un cargador integrado, por lo que puede funcionar fácilmente con una batería o conectarse a un panel solar para uso indefinido mediante recarga solar. Aisimismo por diseño, el F7 también está destinado a ser integrable por defecto.

Lo interesante pues es que el factor de forma Feather sirva  como placa de desarrollo o incrustarlo. Es realmente un gran diseño   basada en  MCU STM32F7 con coprocesador ESP-32 e   implementando. WiFi, BLE, 32 MB de RAM, 32 MB de Flash. 25 puertos GPIO, PWM, I2C, SPI, CAN, UART y cargador de batería LiPo integrado  en un bajísimo factor de forma  y con  casi tantos puertos GPIO (25) tanto  analógicos como digitales como estamos acostumbrados en Arduino o Netduino.

Software

Meadow ejecuta un puerto personalizado de Mono sobre un NuttX muy modificado (un µRTOS). De ahí proviene el  soporte estándar .NET. No se basa en Netduino de ninguna manera. Es una pieza de tecnología completamente nueva que han desarrollando desde cero durante los últimos dos años. Existe alguna relación con el  proyecto Netduino.Foundation  pues  han portado Netduino.Foundationa Meadow, y obteniendo todo el atractivo de la última versión de C # y .NET completo para crear una API aún mejor para todos esos controladores.

El proyecto se inició porque .NETMF había desaparecido y no había ningún progreso real allí ni la comunidad pudo participar realmente en él. Es cierto que se inició como un spin-off de .NETMF pero, aparte del motor de ejecución y una buena parte de mscorlib, todo el  código se escribió desde cero.

Han mejorado muchas cosas,  actualizándolo en lo que respecta al sistema de compilación, Wilderness Labs lo ha hecho verdaderamente portátil para los RTOS de CMSIS,  han reelaborado el motor de depuración y han agregado varios objetivos de referencia para MCU con diferentes conjuntos de funciones.

TODO el código es completamente de código abierto ( como el de Netduino ) . Desde el código nativo, a las bibliotecas de clases hasta la extensión de Visual Studio. Dos años de trabajo pueden parecer que el proyecto todavía está en él ‘Es una infancia, pero están orgullosos de que esto se ejecute en SoC SMT32 (de la serie L0 a H7) y, sí, también en ESP32. Hay NuGets funcionales y totalmente utilizables para GPIO, I2C, SPI, Serial, ADC, PWM, Wi-Fi, Networking (con soporte SSL / TLS) y otros.

Es cierto que no admiten bibliotecas .NET completas. En su lugar, han seguido prácticamente la API de .NET UWP para que se pueda reutilizar una gran cantidad de código sin demasiado trabajo pues en el   mundo del IOT cada línea de código importa, se debe considerar cada ciclo de CPU, cada mA que el sistema drena de la batería y así sucesivamente: es decir todo lo que podamos hacer más eficiente es importante.

Conclusión

Tras dos años en el mercado Meadow  es una plataforma  con mucho futuro  pero con mucho  recorrido  para crecer

Es como vemos bastante interesante, pero hay algunas cosas nos  impiden retroceder:

PROS

 

  • La  placa Meadow F7 está diseñada para ser compatible con el factor de forma Adafruit Feather e incluye un conector de batería y un cargador integrado, por lo que puede funcionar fácilmente con una batería o conectarse a un panel solar para uso indefinido mediante recarga solar .Ademas por diseño, el F7 también está destinado a ser integrable por defecto. Lo interesantes pues es que el factor de forma Feather sirva  como placa de desarrollo o incrustarlo.  .
  • Hay muchas variables en este sistema. Si podemos elegir entre tener genéricos o código en C # usando una herramienta increíble como Visual Studio, no lo deberíamos pensar dos veces y lo  ideal  seria optar por lo último. En general, es genial que haya más opciones disponibles que permitan a los desarrolladores de .NET codificar para IoT y sistemas integrados utilizando su lenguaje favorito;NET para codificar para IoT y sistemas integrados utilizando su lenguaje favorito;NET para codificar para IoT y sistemas integrados utilizando su lenguaje favorito
  • También hay cierta fragmentación en el espacio de .NET IoT, lo que significa que tenemos varias soluciones pequeñas, pero ninguna que sea utilizada por muchos desarrolladores. Un esfuerzo común, dirigido por .NET Foundation, habría sido un mejor enfoque.  Nano Framework está en el camino correcto, pero  todavía está en su infancia. Al final, el no compromiso de Microsoft con IoT / .NET Micro Framework es ahora un gran problema, ya que habría sido la plataforma perfecta y natural para el desarrollo de IoT basado en Azure ;

CONTRAS

  • Con 50$  al cambio , es extremadamente cara en comparación con Arduino, Raspberry Pi y otras ofertas similares.
  • Hay un esfuerzo para portar .NET a varios chips SDT y ESP32: https://nanoframework.net/ .  pues  no olvidemos  que se puede obtener una placa de desarrollo ESP32 por menos de 10 $ ( y menos) 
  • Es bueno recordar el fracaso del AGent smartwatch  también en quickstarter  patrocinada por Secret Labs ( los fundadores de Netduino). La idea era muy buena pues ya en 2013  este reloj  pretendía ser un reloj  inteligente con tinta electronica  y con el soporte .Net. Este  proyecto  desgraciadamente  precipito la caída de Secrets LAbs y con ello la de Netduino que fue comprado por Wilderness Labs. 

 

 

 

 

 

 

Fundada en 2016, Wilderness Labs es el fabricante de placas Netduino y el creador de Meadow. Para obtener más información, puede encontrar su blog en blog.wildernesslabs.co .

Anuncio publicitario

Creación de una aplicación web de Node.js en Azure


Es relativamente sencillo como vamos a ver , implementar una aplicación en App Service en Windows  gracias  a queAzure Web Apps proporciona un servicio de hospedaje web muy escalable y con aplicación de revisiones de un modo automático.

 

Aplicación de ejemplo que se ejecuta en Azure

Estos pasos se pueden realizar con una máquina Mac, Windows o Linux,pero lo importante de la magia del Cloud, una vez instalados los requisitos previos, tardará aproximadamente cinco minutos en completar los pasos.

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar. Asimismo  tambien necesitará  completar esta guía de inicio rápido :instalación de Node.js y NPM

Descarga del ejemplo

Descargue el proyecto de ejemplo de Node.js de https://github.com/Azure-Samples/nodejs-docs-hello-world/archive/master.zip y extraiga el archivo ZIP.

En una ventana de terminal, vaya al directorio raíz del proyecto de ejemplo de Node.js (el que contiene index.php).

Ejecución de la aplicación de forma local

Ejecute la aplicación localmente abriendo una ventana de terminal y utilizando el script npm start para iniciar el servidor HTTP de Node.js integrado.

npm start

Abra un explorador web y vaya a la aplicación de ejemplo en http://localhost:1337.

Verá el mensaje Hola mundo de la aplicación de ejemplo que aparece en la página.

Aplicación de ejemplo que se ejecuta localmente

En la ventana de terminal, presione Ctrl + C para salir del servidor web.

Creación de un archivo ZIP de proyecto

Cree un archivo ZIP con todo el contenido del proyecto. El siguiente comando usa la herramienta predeterminada de su terminal:

# Bash
zip -r myAppFiles.zip .

# PowerShell
Compress-Archive -Path * -DestinationPath myAppFiles.zip

Posteriormente, cargue el archivo ZIP en Azure e impleméntelo en App Service.

Inicio de Azure Cloud Shell

Azure Cloud Shell proporcina  un shell interactivo gratuito que puede usar para ejecutar los pasos que vamos a ver .  Tiene las herramientas comunes de Azure preinstaladas y configuradas para usarlas en la cuenta. Simplemente haga clic en el botón Copiar para copiar el código, péguelo en la instancia de Cloud Shell y, a continuación, presione Entrar para ejecutarlo.

 

Hay varias  maneras de iniciar Cloud Shell:

Haga clic en Probarlo en la esquina superior derecha de un bloque de código. Cloud Shell en este artículo
Abra Cloud Shell en el explorador. https://shell.azure.com/bash
Haga clic en el botón Cloud Shell en el menú de la parte superior derecha de Azure Portal. Cloud Shell en el portal

Crear un grupo de recursos

Un grupo de recursos es un contenedor lógico en el que se implementan y administran recursos de Azure como aplicaciones web, bases de datos y cuentas de almacenamiento. Por ejemplo, más adelante puede elegir eliminar todo el grupo de recursos en un solo paso.

En Cloud Shell, cree un grupo de recursos con el comando az group create. En el ejemplo siguiente, se crea un grupo de recursos denominado myResourceGroup en la ubicación Europa Occidental. Para ver todas las ubicaciones que se admiten en App Service en el nivel Gratis, ejecute el comando az appservice list-locations --sku F1.

Desde Azure CLI   pruebe el comando:
az group create --name myResourceGroup --location "West Europe"

Generalmente se crean el grupo de recursos y los recursos en una región cercana.

Cuando finaliza el comando, una salida de JSON muestra las propiedades del grupo de recursos.

Crear un plan de Azure App Service

En Cloud Shell, cree un plan de App Service con el comando az appservice plan create.

En el siguiente ejemplo se crea un plan de App Service denominado myAppServicePlan con el plan de tarifa Gratis:

Desde Azure CLI   pruebe el comando:
az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE

Cuando se ha creado el plan de App Service, la CLI de Azure muestra información en formato json similar al ejemplo siguiente :

{ 
  "adminSiteName": null,
  "appServicePlanName": "myAppServicePlan",
  "geoRegion": "West Europe",
  "hostingEnvironmentProfile": null,
  "id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan",
  "kind": "app",
  "location": "West Europe",
  "maximumNumberOfWorkers": 1,
  "name": "myAppServicePlan",
  < JSON data removed for brevity. >
  "targetWorkerSizeId": 0,
  "type": "Microsoft.Web/serverfarms",
  "workerTierName": null
} 

Creación de una aplicación web

En Cloud Shell, cree una aplicación web en el plan de App Service myAppServicePlan con el comando az webapp create.

En el siguiente ejemplo, reemplace  por un nombre único global de aplicación (los caracteres válidos son a-z0-9 y -). El tiempo de ejecución se establece en NODE|6.9. Para ver todos los entornos en tiempo de ejecución admitidos, ejecute az webapp list-runtimes.

Desde Azure CLI   pruebe el comando:
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name  --runtime "NODE|6.9"

Cuando se haya creado la aplicación web, la CLI de Azure mostrará información  en formato json similar a la del ejemplo siguiente:

{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": ".azurewebsites.net",
  "enabled": true,
  < JSON data removed for brevity. >
}

Vaya a la aplicación web recién creada. Reemplace  por el  nombre de su aplicación único.

http://xxxxxxx.azurewebsites.net

Este es el aspecto que debería tener su nueva aplicación web:

Página de la aplicación web vacía

Implementación de un archivo ZIP

En el explorador, vaya a https://xxxx.scm.azurewebsites.net/ZipDeploy.

Cargue el archivo ZIP que creó en Creación de un archivo ZIP de proyecto arrastrándolo al área del explorador de archivos en la página web.

Cuando la implementación está en curso, un icono en la esquina superior derecha muestra el progreso como un porcentaje. La página también muestra mensajes detallados para la operación debajo del área del explorador. Cuando se haya completado, el último mensaje de implementación debe indicar Deployment successful.

Navegación hasta la aplicación

Vaya a la aplicación implementada mediante el explorador web.

http://xxxxx.azurewebsites.net

El código de ejemplo de Node.js se está ejecutando en una aplicación web de Azure App Service.

Aplicación de ejemplo que se ejecuta en Azure

¡Enhorabuena! Ha implementado la primera aplicación de Node.js en App Service.

Actualización del código y nueva implementación

Con un editor de texto, abra el archivo index.js en la aplicación de Node.js puede realizar un pequeño cambio en el texto en la llamada a response.end:

response.end("Hello Azure!");

En la ventana de terminal local, desplácese al directorio raíz de la aplicación y cree un nuevo archivo ZIP para el proyecto actualizado.

# Bash
zip -r myUpdatedAppFiles.zip .

# PowerShell
Compress-Archive -Path * -DestinationPath myUpdatedAppFiles.zip

Implemente este nuevo archivo ZIP en App Service utilizando los mismos pasos que en Cargar el archivo ZIP.

Vuelva a la ventana del explorador que se abrió en el paso Navegación hasta la aplicación y actualice la página.

Aplicación de ejemplo actualizada que se ejecuta en Azure

Administración de la nueva aplicación web de Azure

Vaya al portarl de  Azure  para administrar la aplicación web que ha creado.

En el menú izquierdo, haga clic en App Services y, a continuación, haga clic en el nombre de la aplicación web de Azure.

Navegación desde el portal a la aplicación web de Azure

Podrá ver la página de información general de la aplicación web. En este caso, puede realizar tareas de administración básicas como examinar, detener, iniciar, reiniciar y eliminar.

Página de App Service en Azure Portal

El menú izquierdo proporciona distintas páginas para configurar la aplicación.

Limpieza de recursos

En los pasos anteriores, creó en Azure en un grupo de recursos. Si prevé que no necesitará estos recursos en el futuro, elimine el grupo de recursos ejecutando el siguiente comando en Cloud Shell:

az group delete --name myResourceGroup

Este comando puede tardar varios segundos en ejecutarse.

Fuente https://docs.microsoft.com/es-es/azure/app-service/app-service-web-get-started-nodejs

Monitorizacion remota de IoT con notificaciones desde Azure en conexión de su hub de IoT


Azure Logic Apps proporciona una forma de automatizar procesos como una serie de pasos. Una aplicación lógica se puede conectar a través de varios servicios y protocolos. Comienza con un activador como ‘Cuando se agrega una cuenta’, y luego una combinación de acciones, una como ‘enviar una notificación de inserción’. Esta característica hace que Logic Apps sea una solución de IoT perfecta para la monitorización de dispositivos IoT, como por ejemplo para alerta ante anomalías, entre otros escenarios de uso.  

 

Resumidamente   estas son las cosas  que necesitaremos  hacer par lograr nuestro objetivo:

  • Crear un espacio de nombres del autobús de servicio y añadir una cola a él.
  • Añadir un punto final y una regla de enrutamiento a su hub de IoT.
  • Crear, configurar y probar una aplicación de la lógica.

Necesitaremos para ello como siempre tener configurado  un dispositivo de Iot enviando mensajes a la nube de Azure de Iot Hub.

 

Crear espacio de nombres de Servicio del Bus y añadirle una cola

Crear un espacio de nombres del bus de servicio

  1. En el portal de Azure, haga clic en crear un recurso >Enterprise Integration(Integración empresarial )> Service Bus.
  2. Proporcione la siguiente información:Nombre: el nombre del bus de servicios.Pricing tier  déjelo en Standard .
  3. En suscripción dejelo  en Evaluación gratuitaGrupo de recursos: utilizar el mismo grupo de recursos que utiliza el hub de IoT.

    Ubicación: utilizar la misma ubicación que utiliza el hub de IoT.

  4. Pinchar Anclar al panel
  5. Haga clic en crear.

Añadir una cola de autobús de servicio

  1. Abrir el espacio de nombres del Bus de servicio y haga clic en + Quue(cola.)
  2. Introduzca un nombre para la cola y haga clic en crear.
  3. Abrir la cola del Bus de servicio(entities-Queues-el nombre del la nueva cola )   y haga clic en CONFIGURACION  –Shared access policies (directivas de acceso compartido) > + añadir.
  4. Introduzca un nombre para la política de controlar administrar y haga clic en create (crear).

Añadir un punto final y una regla de enrutamiento a su hub de IoT

Añadir un punto final

  • Abrir su centro de IoT, haga clic en MensajeriaPuntos de conexión > + Añadir.
  • Introduzca la siguiente información:                                                                                 Nombre: el nombre del extremo.Tipo de punto final: seleccione Cola de autobús servicio.Espacio de nombres del servicio de bús: seleccionar el espacio de nombres que creó.

    Cola de Service Bus: seleccione la cola creada.

  • Haga clic en Aceptar.

Add an endpoint to your IoT hub in the Azure portal

Agregar una regla de enrutamiento

  1. En su centro de Internet, haga clic en  MENSAJERIA  – rutas > + añadir.
  2. Introduzca la siguiente información:Nombre: el nombre de la regla de enrutamiento.Fuente de datos: seleccionar DeviceMessages.Punto final: seleccione el punto final de ha creado.

    Cadena de consulta: entrar.temperatureAlert = "true"

  3. Haga clic en Guardar.

Add a routing rule in the Azure portal

Crear y configurar una aplicación de lógica

Crear una aplicación de lógica

  1. En el portal de Azure, haga clic en crear un recurso >Enterprise Integration( Integración empresarial )> Lógic app.
  2. Introduzca la siguiente información:Nombre: el nombre de la aplicación de la lógica.Grupo de recursos: utilizar el mismo grupo de recursos que utiliza el hub de IoT.Ubicación: utilizar la misma ubicación que utiliza el hub de IoT.
  3. Haga clic en crear.

Configurar la aplicación de la lógica

  1. Abra la lógica de la aplicación que se abre en el diseñador de aplicaciones de la lógica.
  2. En el diseñador de aplicaciones de lógica, haga clic en BlanK Logic App
  3. Haga clic en Service Bus.
  4. Haga clic en el Servicio de Bus cuando uno o varios mensajes en una cola (Autocompletar).
  5. Crear una conexión de bus de servicio.
    1. Introduzca un nombre de conexión.
    2. Haga clic en el espacio de nombres de servicio bus > la política de autobús servicio > crear.
    3. Haga clic en continuar después de la conexión de bus de servicio.
    4. Seleccione la cola que creó e introduzca para recuento de mensajes máximo175
    5. Haga clic en «Guardar» el botón para guardar los cambios.
  6. Crear una conexión de servicio de SMTP.
    1. Haga clic en nuevo paso > Agregar una acción.
    2. Tipo, haga clic en el servicio SMTP en el resultado de la búsqueda y haga clic en SMTP – envíe correo electrónico.SMTP
    3. Introduzca la información de SMTP del buzón y haga clic en crear.Obtenga la información de SMTP para Hotmail/Outlook.com, Gmaily Yahoo Mail. ( Nota :Su proveedor de servicios de correo electrónico necesitará verificar la identidad de remitente para asegurarse de que eres tú quien envía el correo electrónico9.
    4. Introduzca su dirección de correo electrónico para de y ay para asunto y el cuerpo.High temperature detected
    5. Haga clic en Guardar.

 

La aplicación de la lógica estará   en orden de funcionamiento en cuanto se guarde así que ya podemos probar su funcionalidad  así que :

  1. Inicie la aplicación cliente que implementa en el dispositivo en ESP8266 conectar a Azure IoT.
  2. Aumentar la temperatura del ambiente alrededor del Sensor por encima de 30 C.(por ejemplo, encendiendo una vela cerca del sensor ).
  3. Usted debe recibir una notificación por correo electrónico enviada por la aplicación .

     

Hemos visto lo relativamente sencillo que es  crear  una aplicación lógica que conecta el hub de IoT y buzón para monitorizar  temperatura y enviar notificaciones.

Fuente https://docs.microsoft.com/en-gb/azure/iot-hub/iot-hub-monitoring-notifications-with-azure-logic-apps

Como usar la extensión de IoT para Azure CLI 2.0 para gestionar dispositivos de Azure IoT Hub


La Extensión de la IoT para Azure CLI 2.0 es una nueva extensión para IoT en código  abierto que añade a las capacidades de Azure CLI 2.0, la cual como vamos a ver  incluye comandos para interactuar con el administrador de recursos Azure como por ejemplo, puede utilizar Azure CLI 2.0 para crear una VM de Azure o un IoT Hub.

Una extensión CLI permite un servicio de Azure incrementar el Azure CLI dando  acceso a funciones adicionales específicas de servicio como vamos a ver.

La extensión de IoT da IoT permite a los  desarrolladores y aficionados acceso desde línea de comandos a todos los  IoT Hub, IoT Edge, y las capacidades  de  IoT Hub Device Provisioning Service

Algunos ejemplos de posibilidades que ofrece esta extension:

Opción de manejo Tarea
Métodos directos Hacer un dispositivo actuar como arrancar o parar el envío de mensajes o reiniciar el dispositivo.
Propiedades de dos deseadas Poner un dispositivo en algunos estados, tales como poner establecer un LED a verde o establecer el intervalo de enviar telemetría cada 30 minutos.
Doble registrados propiedades Obtener el estado que informó  un dispositivo. Por ejemplo, el dispositivo informa que el LED parpadea ahora.
Etiquetas de doble funcion Almacenar metadatos específicos del dispositivo en la nube. Por ejemplo, la situación de la implementación de una máquina expendedora.
Consultas de doble dispositivo Consulta todos los gemelos de dispositivo para recuperarlas condiciones arbitrarias, tales como identificar los dispositivos que están disponibles para su uso.

Device twins (Gemelos de dispositivo) son documentos JSON que almacenan información de estado del dispositivo (metadatos, configuraciones y condiciones). Eje de IoT persiste a una doble dispositivo de cada dispositivo que se conecta a él.

Extensión de IoT para Azure CLI 2.0

Vamos   a ver  usar  la extensión de IoT para Azure CLI 2.0 con varias opciones de manejo en nuestra máquina de desarrollo ejecutando Azure CLI 2.0 y la extensión de IoT para Azure CLI 2.0 con varias opciones de gestión.

Para poder usar esta extensión necesitaremos  haber configurado el dispositivo completo  de Iot  cubriendo los siguientes requisitos:

    • Una suscripción activa de Azure.
    • Un centro de Azure IoT bajo su suscripción.
    • Una aplicación de cliente que envíe mensajes a su hub de IoT de Azure.

Debemos asegurarnos de que el dispositivo se está ejecutando con la aplicación de cliente .Por ejemplo un método muy cómodo de comprobarlo es usando la herramienta  Microsoft Azure Storage siempre que hayamos vinculado nuestro  Hub de Iot a Azure Storage (como vimos es este post) ,pues desde esta herramienta podremos ver fácilmente el contenido de los mensajes enviados por el dispositivo

azurestorage

Microsoft Azure IoT Extension for Azure CLI 2.0  proporciona nuevos y emocionantes comandos y capacidades de IoT centrados en los servicios IoT Hub y IoT Device Provisioning. La funcionalidad se proporciona como un paquete de extensión CLI de Azure para una integración perfecta con la funcionalidad de línea de comandos existente.

La extensión aumenta el Azure CLI IoT de Azure agregando o modificando el espacio de comando existente. La extensión incluye capacidades en las siguientes categorías:

  • IoT Hub
  • IoT Edge
  • IoT Device Provisioning Service (DPS)

Instalación  

Paso1; Instalación de Python.

Como requisito previo se necesita instalar Python en el equipo de desarrollo. Podemos instalar  Python 2.7 x o Python 3.x. Python 3.65 es la ultima version disponible y que podemos instalar. Simplemente ir a   https://www.python.org/downloads/  pinchar sobre enlace para descargar la ultima version  y después ejecutar el instalable para lanzar la instalación.

Paso 3:Instalar Azure CLI 2.0 

Tambien necesitamos instalar el cliente de Azure CLI 2.0  para  agregar despuesla extensión IoT. Podemos instalar  directamente con un  instalador desde  Windows  el cliente CLI , para ello descargaremos MSI y luego lo  instalaremos en nuestro equipo de desarrollo

azure cli.PNG

Como mínimo, la versión Azure CLI 2.0 debe ser 2.0.24 o superior. Esta versión admite los comandos de extensión az e introduce el marco de comandos knack, es por eso que podemos utilizar para comprobarlo el comando desde linea de comandos (cmd): 

 az --version .

Por ejemplo este el resultado de la ejecución de este comando con la ultima version instalada (2.0.31) del cliente de Azure:

C:\Users\Carlos>az –version
azure-cli (2.0.31)
acr (2.0.23)
acs (2.0.31)
advisor (0.5.1)
appservice (0.1.31)
backup (1.1.1)
batch (3.2.0)
batchai (0.2.0)
billing (0.1.8)
cdn (0.0.14)
cloud (2.0.13)
cognitiveservices (0.1.12)
command-modules-nspkg (2.0.1)
configure (2.0.15)
consumption (0.3.0)
container (0.1.22)
core (2.0.31)
cosmosdb (0.1.20)
dla (0.0.19)
dls (0.0.21)
eventgrid (0.1.12)
eventhubs (0.1.2)
extension (0.0.12)
feedback (2.1.1)
find (0.2.9)
interactive (0.3.19)
iot (0.1.19)
keyvault (2.0.21)
lab (0.0.21)
monitor (0.1.5)
network (2.0.28)
nspkg (3.0.2)
profile (2.0.22)
rdbms (0.2.1)
redis (0.2.12)
reservations (0.1.2)
resource (2.0.27)
role (2.0.22)
servicebus (0.1.2)
servicefabric (0.0.12)
sql (2.0.25)
storage (2.0.31)
vm (2.0.30)
Python location ‘C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python.exe’
Extensions directory ‘C:\Users\Carlos\.azure\cliextensions’
Python (Windows) 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)]
Legal docs and information: aka.ms/AzureCliLegal

También puede seguir las instrucciones de instalación en Microsoft Docs configurar Azure CLI 2.0 en su entorno.

Paso 4: Instalación  de la extensión de cliente de Azureo pare IoTI

Finalmente también  tenemos que instalar la extensión de la IoT ahora que tiene una extensión de  cliente de Azure compatible instalado.

Cuando se instala una extensión, cualquier dependencia adicional de Python requerida se descarga  y se instala automáticamente.
Hay múltiples opciones para la instalación. Después de instalar la extensión, puede usar una lista de extensiones az para validar las extensiones instaladas actualmente o la extensión az show – nombre azure-cli-iot-ext para ver detalles sobre la extensión IoT.
En todos los casos, asegúrese de que la extensión IoT sea la versión 0.3.2 o superior.

La extensión está diseñada para ser plug-and-play con Azure CLI. Incluso si tiene Azure CLI instalado, asegúrese de que esté actualizado.La forma más sencilla es ejecutar el siguiente comando.

az extension add --name azure-cli-iot-ext

Puede usar el comando  az list list-available para ver todas las extensiones disponibles en el índice y es posible tambien actualizar una extensión en su lugar utilizando la extensión az update –name, Asimismo El IoT extensión archivo Léame describe varias maneras de instalar la extensión.

Paso 5:Inicie sesión  en Azure

Inicie sesión su cuenta Azure ejecutando el siguiente comando:

az login

Ahora  vaya a la  pagina   https://microsoft.com/devicelogin  e    introduzca el código que devuelve el comando    en  la  pagina anterior   para validarse.

 

inicioazure.PNG

Una vez aceptada en la página nos pide nuestro login de la cuenta de Azure  y tras aceptarse  ya  no es necesario continuar en el navegador   y a partir de aqui ya estan disponible los comandos  posibles de Azure  CLI

login.PNG

Una  validado  nos dará un mensaje de finalizacioó

fin.PNG

 

Ahora desde linea de comando tenemos muchas posibilidades :

Hub

Command group: az iot hub

az iot hub query

az iot hub generate-sas-token
az iot hub show-connection-string

az iot hub apply-configuration

az iot hub invoke-device-method
az iot hub invoke-module-method

Hub Device Identity

Command group: az iot hub device-identity

az iot hub device-identity create
az iot hub device-identity show
az iot hub device-identity list
az iot hub device-identity update
az iot hub device-identity delete

az iot hub device-identity show-connection-string

az iot hub device-identity import
az iot hub device-identity export

Hub Device Twin

Command group: az iot hub device-twin

az iot hub device-twin show
az iot hub device-twin replace
az iot hub device-twin update

Hub Module Identity

Command group: az iot hub module-identity

az iot hub module-identity create
az iot hub module-identity show
az iot hub module-identity list
az iot hub module-identity update
az iot hub module-identity delete

az iot hub module-identity show-connection-string

Hub Module Twin

Command group: az iot hub module-twin

az iot hub module-twin show
az iot hub module-twin replace
az iot hub module-twin update

Edge Deployment

Command group: az iot edge deployment

az iot edge deployment create
az iot edge deployment show
az iot edge deployment list
az iot edge deployment update
az iot edge deployment delete

Device

Command group: az iot device

az iot device send-d2c-message
az iot device simulate
az iot device upload-file

Device c2d-message

Command group: az iot device c2d-message

az iot device c2d-message receive

az iot device c2d-message complete
az iot device c2d-message abandon
az iot device c2d-message reject

DPS Enrollment

Command group: az iot dps enrollment

az iot dps enrollment create
az iot dps enrollment show
az iot dps enrollment list
az iot dps enrollment update
az iot dps enrollment delete

DPS Enrollment Group

Command group: az iot dps enrollment-group

az iot dps enrollment-group create
az iot dps enrollment-group show
az iot dps enrollment-group list
az iot dps enrollment-group update
az iot dps enrollment-group delete

DPS Registration

Command group: az iot dps registration

az iot dps registration show
az iot dps registration list
az iot dps registration delete

 

Importante:

Añada –help o -h a un grupo de comandos o comando para obtener más información.
Para grupos de comandos, esto revelará los comandos del grupo objetivo
Para los comandos, esto revelará información sobre los parámetros y puede incluir ejemplos de uso.

 

Algunos ejemplos de uso prácticos:

  • Metodos directos :  Se puede invocar directamente desde linea de comandos:                az iot hub invoke-device-method –device-id –hub-name –method-name –method-payload
  • Propiedades del dispositivo gemelo deseado: Por ejemplo se puede establecer una  propiedad de  intervalo = 3000 ejecutando el siguiente comando: az iot hub device-twin update -n -d –set properties.desired.interval = 3000                                  Esta propiedad  puede ser leída tamnbien  desde  su dispositivo.
  • Propiedades del doble dispositivo registrados : se pueden obtener las propiedades divulgadas del dispositivo ejecutando el siguiente comando: az iot hub device-twin update -n -d –set properties.reported.interval = 3000 .  Una de las propiedades es $metadata. $lastUpdated que muestra la última vez que este dispositivo envía o recibe un mensaje.
  • Etiquetas de doble dispositivo: Se pueden mostrar las etiquetas y propiedades del dispositivo ejecutando el siguiente comando: az iot hub device-twin show –hub-name –device-id                                                                                                            Agregar una función de campo = temperatura & humedad al dispositivo ejecutando el siguiente comando:az iot hub device-twin update –hub-name –device-id –set tags = ‘{«role»:»temperature&humidity»}}’
  • Consultas de doble dispositivo :Consulta de dispositivos con una etiqueta de papel = ‘temperatura & humedad’ ejecutando el siguiente comando:az iot hub query –hub-name –query-command «SELECT * FROM devices WHERE tags.role = ‘temperature&humidity’«
  • Consulta todos los dispositivos excepto los que tienen una etiqueta de papel = ‘temperatura & humedad’ ejecutando el siguiente comando:az iot hub query –hub-name –query-command «SELECT * FROM devices WHERE tags.role != ‘temperature&humidity'»

 

 

 

Hemos visto por tanto cómo controlar mensajes de dispositivo a nube y enviar mensajes de dispositivo de nube entre su dispositivo de IoT y Azure IoT Hub.

Fuente https://docs.microsoft.com/en-gb/azure/iot-hub/iot-hub-device-management-iot-extension-azure-cli-2-0

Cómo visualizar datos de sensores en tiempo real desde su hub de IoT Azure


Vimos  en  un post anterior  cómo es  posible usar Power BI de Azure  para visualizar datos de los sensores en tiempo real desde Azure IoT, pues bien,  existe otra posibilidad para  visualizar datos de los sensores en tiempo real que el hub de IoT recibe , que es  ejecutando una aplicación web que está alojada en la nube de Azure .

Para  cumplir con nuestro propósito de ver los datos de telemetría de nuestro dispositivo de Iot conectado a la nube de Iot Azure Edge ,    veremos como crear una aplicación web en el portal de  Azure preparando su hub de IoT para acceso a datos mediante la adición de un grupo de consumidores. Hecho esto configuraremos una aplicación web para leer datos del sensor de su hub de IoT y subiremos  esta aplicación web  a la nube de Azure ,la cual  nos permitirá  ver desde un navegador los datos de telemetría enviados  desde su hub de IoT ¿le interesa el tema? pues si es así empezemos.

Antes de empezar   deberíamos   tener configurado  un dispositivo Iot de Azure como por ejemplo  algunos que hemos visto como puede ser una Raspberry Pi 3  , un ESP8266  o incluso un dispositivo simulado.  Como hemos comentado en otros  posts todos esos  dispositivos de Azure IoT  hub  deben implementar una aplicación de ejemplo la cual  enviará  datos que  los sensores recogen del mundo físico ( humedad , temperatura, presencia, etc  ) a su hub de IoT.

Asimismo  teniendo dispositivos IoT enviando mensajes  de telemetría a la nube de Azure Iot Edge, para lograr persistencia en la nube de Azure  necesitamos una cuenta de Azure storage  así como  una aplicación Azure  para poder almacenar los mensajes de hub de IoT en el almacenamiento blob  como hemos visto en otros posts

Crear una aplicación web

  1. En el portal de Azure, haga clic en Crear un recurso > Web y móvilAplicación Web > Aplicación web
  2. Escriba un nombre único para la aplicacion  y anotar pues nos sera util para acceder a esta
  3. Verificar la suscripción  que para este ejmeplo pude ser «Evaluacion gratuita» si no dispone de otro recurso de este tipo
  4. Especifique un grupo de recursos  pinchando en Usar existente y  pinchando en el disponible
  5. Finalmente  seleccione Anclar al  panel y a continuación, haga clic en Crear.hestiaweb.PNG
  6. Este proceso puede tardar varios minutos dada la complejidad de  su realización ( localizar una máquina virtual disponible , obtener permisos , crear la instancia web ,etc)
  7. En este momento  , copie vaya nuevamente al servidor web –>introducción y copie el valor del campo URL ( sera del tipo   https://xxxx.azurewebsites.net/)    de modo que como debería estar  corriendo  su web se obtendrá una respuesta  parecida  la siguiente si copiamos dicha url en un navegador:azureweb.PNG

 

Añadir un grupo de consumidores a su hub de IoT

Los grupos de consumidores son utilizados por las aplicaciones para extraer datos desde Azure IoT, por ello necesitamos crear un grupo de consumidores para ser utilizado por un servicio de Azure para  leer los  datos de su centro de IoT.

Para agregar un grupo de consumidores a su hub de IoT, siga estos pasos:

  1. En el portal de Azure, abra su hub de IoT.
  2. En el panel izquierdo  casi en la parte más inferior en el apartado Mensajería , seleccione Puntos de conexión y  haga clic en este.
  3. Seleccione en el panel central  events  , introduzca un nombre en grupos de consumidores en el panel derecho y haga clic en Guardar.stream.PNG

Configurar la aplicación web para leer datos de su centro de IoT

  1. Abra en Azure la aplicación web que ha aprovisionado.
  2. Haga clic en el marco izquierdo casi  al final en CONFIGURACION->Configuración de la aplicación, y luego en configuración de la aplicación, agregue los siguientes pares clave/valor:
    Clave Valor
    Azure.IoT.IoTHub.ConnectionString Obtenidos desde el explorador de iothub  en  Azure IOT HUB >xx – Explorador de dispositivos–>OD del Dispositivo xxx –>cadena de conexion clave principal
    Azure.IoT.IoTHub.ConsumerGroup El nombre del grupo de consumidores que se agrega a su hub de IoT cumplimentado en el  apartado anterior

    hestiaweb_configuracion.PNG

  3. Haga clic en configuración de la aplicación, debajo de configuración General, activar la opción de  Web  Sockets  ( esta desactivado por defecto ) y a continuación, haga clic en Guardar.

Subir una aplicación web

En GitHub, Microsoft ha puesto a nuestra disposición muchas aplicaciones web de ejemplo para desplegar en Azure . Nos interesa  el código en node.js  de una aplicación  web completa que puede mostrar los  datos de telemetría  en tiempo real desde su hub de IoT .

Todo lo que se  necesita hacer es configurar la aplicación web para trabajar con un repositorio Git, descargar la aplicación web de GitHub y luego subir a Azure de la aplicación web al host.

El repositorio web-apps-node-iot-hub-data-visualization contiene el código en node para desplegar una aplicación web en la nube de Azure, que puede leer los datos de temperatura y humedad del IoT hub y mostrar los datos en tiempo real en un gráfico de líneas en una página web.

Los navegadores compatibles son

Navegador La menor versión
Internet Explorer 10
Borde 14
Firefox 50
Cromo 49
Safari 10
Ópera 43
iOS Safari 9.3
mini Opera TODAS
Navegador de Android 4.3
Chrome para Android 56

Los pasos  a seguir para desplegar esta aplicación son los siguientes:

  1. En la aplicación web, haga clic en IMPLEMENTACION ->Opciones de implementación > Elegir origen > Repositorio de Git Local y haga clic en Aceptar.Configure your web app deployment to use the local Git repository
  2. Tenga en cuenta que para modificar o eliminar  el origen de implementación  que acaba de crear is fuera el caso , primero necesitara desconectar este origen   por lo si lo hace tendrá  que volver a  ir a  IMPLEMENTACION ->Opciones de implementación   y volver a empezar con el proceso
  3. Haga clic en Credenciales de implementación, crear un nombre de usuario y contraseña para conectarse con el repositorio de Git en Azure y a continuación, haga clic en Guardar.
  4. Haga clic en Introducción y anote el valor de Git clone url (a la izquierda justo debajo de Git/nombre de usuario de implementación).Get the Git clone URL of your web app
  5. Abra una ventana de terminal en el equipo local o un comando.
  6. Descargar la aplicación web de GitHub y subirlo a Azure de la aplicación web al host. Para ello, ejecute los siguientes comandos:

giti clone.PNG

  • cd web-apps-node-iot-hub-data-visualization
  • git remote add webapp uri  (uri es la url del repositorio Git obtenida  en la página de Resumen de la aplicación web que se obtiene al pulsar Introducción).
  • git push webapp master:master  (se pedirán las credenciales  de Git que introdujo en en el apartado anterior en  la página de Overview , tenga en cuenta la Git clone url .)gitmanager
  • En resumen  estos son todos los comandos desde el interfaz  delñinea de comandos (cmd)    lanzados asi como la salida de esta:
C:\Users\Carlos>git clone https://github.com/Azure-Samples/web-apps-node-iot-hub-data-visualization.git
Cloning into ‘web-apps-node-iot-hub-data-visualization’…
remote: Counting objects: 35, done.
remote: Total 35 (delta 0), reused 0 (delta 0), pack-reused 35
Unpacking objects: 100% (35/35), done.
C:\Users\Carlos>cd web-apps-node-iot-hub-data-visualization
C:\Users\Carlos\web-apps-node-iot-hub-data-visualization>git remote add webapp https://[email protected]:443/Webestia.git
C:\Users\Carlos\web-apps-node-iot-hub-data-visualization>git push webapp master:master
Counting objects: 35, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (30/30), done.
Writing objects: 100% (35/35), 77.64 KiB | 3.23 MiB/s, done.
Total 35 (delta 6), reused 0 (delta 0)
remote: Updating branch ‘master’.
remote: Updating submodules.
remote: Preparing deployment for commit id ‘4b9c09be9b’.
remote: Generating deployment script.
remote: Generating deployment script for node.js Web Site
remote: Generated deployment script files
remote: Running deployment command…
remote: Handling node.js deployment.
remote: KuduSync.NET from: ‘D:\home\site\repository’ to: ‘D:\home\site\wwwroot’
remote: Deleting file: ‘hostingstart.html’
remote: Copying file: ‘.eslintignore’
remote: Copying file: ‘.eslintrc’
remote: Copying file: ‘.gitignore’
remote: Copying file: ‘.travis.yml’
remote: Copying file: ‘LICENSE’
remote: Copying file: ‘package.json’
remote: Copying file: ‘README.md’
remote: Copying file: ‘server.js’
remote: Copying file: ‘IoThub\iot-hub.js’
remote: Copying file: ‘public\index.html’
remote: Copying file: ‘public\javascripts\Chart.min.js’
remote: Copying file: ‘public\javascripts\index.js’
remote: Copying file: ‘public\javascripts\jquery-2.1.4.min.js’
remote: Copying file: ‘public\stylesheets\style.css’
remote: Using start-up script server.js from package.json.
remote: Generated web.config.
remote: The package.json file does not specify node.js engine version constraints.
remote: The node.js application will run with the default node.js version 6.9.1.
remote: Selected npm version 3.10.8
remote: ….
remote: npm WARN deprecated [email protected]: This package is no longer supported. It’s now a built-in Node module. If you’ve depended on crypto, you should switch to the one that’s built-in.
remote: …………………………………………..
remote: [email protected] D:\home\site\wwwroot
remote: +– [email protected]
remote: | +– [email protected]
remote: | | +– [email protected]
remote: | | | +– [email protected]
remote: | | | | +– [email protected]
remote: | | | | +– [email protected]
remote: | | | | +– [email protected]
remote: | | | | +– [email protected]
remote: | | | | `– [email protected]
remote: | | | `– [email protected]
remote: | | +– [email protected]
remote: | | +– [email protected]
remote: | | | `– [email protected]
remote: | | +– [email protected]
remote: | | +– [email protected]
remote: | | `– [email protected]
remote: | +– [email protected]
remote: | | `– [email protected]
remote: | +– [email protected]
remote: | `– [email protected]
remote: +– [email protected]
remote: | +– [email protected]
remote: | | +– [email protected]
remote: | | | `– [email protected]
remote: | | `– [email protected]
remote: | +– [email protected]
remote: | +– [email protected]
remote: | +– [email protected]
remote: | +– [email protected]
remote: | +– [email protected]
remote: | +– [email protected]
remote: | | `– [email protected]
remote: | +– [email protected]
remote: | +– [email protected]
remote: | +– [email protected]
remote: | +– [email protected]
remote: | +– [email protected]
remote: | | +– [email protected]
remote: | | | `– [email protected]
remote: | | +– [email protected]
remote: | | `– [email protected]
remote: | +– [email protected]
remote: | +– [email protected]
remote: | +– [email protected]
remote: | +– [email protected]
remote: | | `– [email protected]
remote: | +– [email protected]
remote: | +– [email protected]
remote: | +– [email protected]
remote: | | +– [email protected]
remote: | | `– [email protected]
remote: | +– [email protected]
remote: | +– [email protected]
remote: | +– [email protected]
remote: | | +– [email protected]
remote: | | | `– [email protected]
remote: | | +– [email protected]
remote: | | +– [email protected]
remote: | | | +– [email protected]
remote: | | | `– [email protected]
remote: | | +– [email protected]
remote: | | `– [email protected]
remote: | +– [email protected]
remote: | +– [email protected]
remote: | | `– [email protected]
remote: | +– [email protected]
remote: | `– [email protected]
remote: +– [email protected]
remote: `– [email protected]
remote: +– [email protected]
remote: `– [email protected]
remote:
remote: Finished successfully.
remote: Running post deployment command(s)…
remote: Deployment successful.
To https://webestia.scm.azurewebsites.net:443/Webestia.git
* [new branch] master -> master
C:\Users\Carlos\web-apps-node-iot-hub-data-visualization>
  • Ahora  ya puede abrir la aplicación web para ver los datos de temperatura y humedad en tiempo real desde su hub de IoT. En este momento  ,  vaya nuevamente al servidor web –>introducción y copie el valor del campo URL ( sera del tipo   https://xxxx.azurewebsites.net/)    de modo que como debería estar  corriendo  su web se obtendrá una respuesta  parecida  la siguiente si copiamos dicha url en un navegador:

 

En la página de su aplicación web, haga clic en la URL para abrir la aplicación web.

Get the URL of your web app

Debería ver los datos de temperatura y humedad en tiempo real desde su hub de IoT.

Web app page showing real-time temperature and humidity

Metodo alternativo sin usar los servicios web de Azure

Se necesita tener el  servidor node.js instalado.

  • Necesitara  dos  valores: valor1 y valor2:
    • El valor1 para  Azure.IoT.IoTHub.ConnectionString  se  obtiene  desde el explorador de iothub  en  Azure IOT HUB >CONFIGURACION -Directivas  de acceso compartido  –>cadena de conexión clave principal
    • El valor2 para  Azure.IoT.IoTHub.ConsumerGroup  se obtiene de del nombre del grupo de consumidores que se agrega a su hub de IoT cumplimentado en el  apartado anterior
  • Vaya al interfaz de comandos  , situase en el directorio donde descargo el ejemplo  y ejecute los siguintes comandos:
    • set Azure.IoT.IoTHub.ConnectionString=  valor1
    • set Azure.IoT.IoTHub.ConsumerGroup= valor 2
    • npm install
    • npm start​nodejsiothub
  • En este momento  ,simplemente acceda al fichero html y ejecútelos  de modo que como debería estar  corriendo el servidor node,js  se obtendrá  respuesta en un navegador similar a la anterior

 

 

.

 

Fuente :  https://docs.microsoft.com/en-gb/azure/iot-hub/iot-hub-live-data-visualization-in-web-apps

Cómo verificar mensajes de Iot Azure Edge


 Azure Storage Explorer es  un aplicacion de Microsoft gratuita que  permite administrar fácilmente el almacenamiento en cualquier lugar desde  diferentes sistemas operativos como Windows, MacOS y Linux permitiendo acceder  a múltiples cuentas y suscripciones en Azure, Azure Stack y la nube.

Lo mas importante es que, como vamos a ver , se pueden crear, eliminar, ver y editar recursos de almacenamiento que están localizados en la nube de Azure.  Asimismo se pueden ver y editar Blob, Queue, Table, File, Cosmos DB storage y Data Lake Storage y obtener claves de firma de acceso compartido (SAS) .

Resumidamente están son algunas de su funcionalidades;

Respecto a gestión de blobs(objetos grandes de BBDD):

  • Ver, eliminar y copiar blobs y carpetas
  • Cargar y descargar blobs conservando la integridad de los datos
  • Administrar instantáneas para blobs

Respecto al almacenamiento de colas  ( Queue Storage):

  • Ojear los 32 mensajes más recientes
  • Ver y agregar mensajes, y quitarlos de la cola
  • Borrar la cola

 

Respecto a almacenamiento en tablas (Table Storage):

  • Consultar entidades con OData o el Generador de consultas
  • Agregar, editar y eliminar entidades
  • Importar y exportar tablas y resultados de consultas

Respecto a almacenaminento de ficheros (File Storage)

  • Navegar por archivos a través de directorios
  • Cargar, descargar, eliminar y copiar archivos y directorios
  • Ver y editar propiedades de archivo

Respecto a almacenamiento de Azure Cosmos DB

  • Crear, administrar y eliminar bases de datos y colecciones
  • Generar, editar, eliminar y filtrar documentos
  • Administrar procedimientos almacenados, desencadenadores y funciones definidas por el usuario

Respecto a Azure Data Lake Store

  • Navegar por recursos de ADLS en varias cuentas de ADL
  • Cargar y descargar archivos y carpetas
  • Copiar carpetas o archivos en el Portapapeles
  • Eliminar archivos y carpetas

 

 

Azure Storage Explorer

Antes de empezar   deberíamos   tener configurado  un dispositivo Iot de Azure como por ejemplo  algunos que hemos visto como puede ser una Raspberry Pi 3  , un ESP8266  o incluso un dispositivo simulado.  Como hemos comentado en otros  posts todos esos  dispositivos de Azure IoT  hub  deben implementar una aplicación de ejemplo la cual  enviará  datos que  los sensores recogen del mundo físico ( humedad , temperatura, presencia, etc  ) a su hub de IoT.

Asimismo  teniendo dispositivos IoT enviando mensajes  de telemetría a la nube de Azure Iot Edge, para logar persistencia en la nube de Azure  necesitamos una cuenta de Azure storage  así como  una aplicación Azure  para poder almacenar los mensajes de hub de IoT en el almacenamiento blob  como hemos visto en otros posts

 

Veamos en esta ocasión como podemos usar Azure Storage Explorer , excelente herramienta gratuita de Microsoft  que nos permite inspeccionar los mensajes de IoT Azure  cuyo  funcionamiento hemos visto en posts anteriores.

Si  quiere usar Azure Storage  Explorer para inspeccionar mensajes de Iot Azure Edge ,puede seguir los siguientes pasos:

  1. Ejecute la aplicación de muestra en el dispositivo de Iot (  para enviar mensajes a su hub de IoT.
  2. Descargar  el explorador de almacenamiento de Azure.                                                   azurestorage.PNG
  3. Seleccione  el  SO de su equipo ( Windows ,Linux y Mac) y pulse el botón de descarga(Downloada Storage Explorer free)
  4. Una vez  descargada,  instalela  en su equipo  (necesitara unos 200MB libres en el disco del sistema)
  5. Nos pedirá  enseguida las credenciales de su cuenta de Azure
  6. Una vez validada la cuenta de Azure ,abra el explorador de almacenamiento, haga clic en Agregar una cuenta de Azure > registrarse y luego necesitara iniciar sesión nuevamente con sus credenciales de Azure.
  7. Le presentara  un mensaje de Microsft Account donde deberá chequear ambas items  ,aceptando especialmente  la suscripción gratuita: evaluacion garuita.PNG
  8. Haga clic en la suscripción de Azure > Almacenamiento cuentas > cuenta de almacenamiento > Blob contenedores > su contenedor ( por ejemplo los que hemos creado en post anteriores que recoge la telemetria desde un ESP8622).
  9. Ahora vaya a Evaluación gratuita seguido de su cuenta de Azure
  10. Pulse en Storage Accounts–>su hub de IoT
  11. Tras unos segundos aparecerán los recursos asociados como son: Blobs Containers, File Shares, Queues  y Tables
  12. Vaya  a Blobs Containers 
  13. Le aparecera el nombre del contenedor de recursos de Iot  y    ya desde ahi haciendo doble click le irán apareciendo  las carpetas  y subcarpetas correspondiente  dispositivo, año, mes , dia
  14. Ya debería ver  los mensajes enviados desde el dispositivo a su hub de IoT en el contenedor de blob.azureexplorer.PNG

 

 

Realmente , como vemos , Azure Storage Explorer , es un herramienta muy potente pero   al contrario de lo que se podría pensar  es  en realidad bastante  intuitiva y sencilla de manejar

Visualizar datos de sensores en tiempo real de Azure IoT Hub usando BI


Antes de empezar este post  deberíamos   tener configurado  un dispositivo Iot de Azure como por ejemplo  algunos que hemos visto como puede ser una Raspberry Pi 3  , un ESP8266  o incluso un dispositivo simulado.

En todos los  dispositivos de Azure IoT  hub comentados debemos implementar una aplicación de ejemplo para ejecutar en estos dispositivos, la cual  enviará  datos que  los sensores recogen del mundo físico ( humedad , temperatura, presencia, etc  ) a su hub de IoT.

Ahora ,una vez que tenemos un dispositivo IoT enviando mensajes  de telemetría a la nube de Azure Iot Edge, toca  crear una cuenta de Azure storage y una aplicación Azure  para poder almacenar los mensajes de hub de IoT en el almacenamiento blob, pero  como comentamos  al  principio , como requisito previo,    necesitamos  tener configurado su dispositivo de Iot  para cubrir los siguientes requisitos:

  • Una suscripción activa de Azure
  • Un centro de IoT bajo su suscripción
  • Una aplicación que envíe mensajes a su hub de IoT
  • Una cuenta  de BI. (Tratar de poder BI gratis)

 

Si  su dispositivo de IoT  ya esta enviando mensajes al Hub de Iot  excepto que haya instalado en una maquina Linux el explorador de mensajes de Azure  olo haga desde la consola  no podrá ver el contenido  de esos mensajes.  Precisamente para solucionar este problema, podemos conectar el sistema de almacenamiento de Azure con los mensajes del dispositivo para que sean almacenados como BLOB’s en el la nube de Azure,como vimos en  un post anterior 

 

En  este  post veremos como  visualizar de una forma gráfica   precisamente esos  datos del sensor en tiempo real que recibe de su hub de Azure IoT por medio de BI , aunque como veremos mas adelante en otro post si usted quiere tratar de visualizar los datos en su hub de IoT con aplicaciones Web e puede hace con otra herramienta  Azure Web Apps

 

Añadir un grupo de consumidores a su hub de IoT

Grupos de consumidores son utilizados por aplicaciones para extraer datos desde Azure IoT. Por esta razon  crearemos un grupo de consumidores para ser utilizado por un servicio de Azure que viene para leer datos de su centro de IoT.

Para agregar un grupo de consumidores a su hub de IoT, siga estos pasos:

  1. En el portal de Azure, abra su hub de IoT.
  2. En el panel izquierdo, Mensajeria –>Puntos de acceso
  3. Haga clic en el panel central en Events
  4. Ahora introduzca un nombre en grupos de consumidores en el panel derecho ( en el ejemplo lo hemos llamado «Device-to-cloud-settings» )
  5. Haga clic en Guardar.puntos de coenxion.PNG

Crear, configurar y ejecutar un trabajo de Stream Analytics

Crear un trabajo de Stream Analytics

  1. En el portal de Azure, haga clic en crear un recurso > Internet de las cosas > Stram Analytics (aálisis de flujo de trabajo)streamanalitycs.PNG
  2. Introduzca la siguiente información para el trabajo.Nombre del trabajo: el nombre del trabajo que debe ser  único en el sistema.                                                                                                                                            Suscripción: Evaluación gratuita.Grupo de recursos: utilizar el mismo grupo de recursos que utiliza el hub de IoT.

    Ubicación: utilizar la misma ubicación como el grupo de recursos.

    Anclar al panel: Seleccione esta opción para acceder a su centro de IoT desde el panel de entrada de Azurestreamjob.PNG

  3. Haga clic en Crear.

Agregar una entrada para el trabajo de Stream Analytics

  1. Abrir el trabajo de Stream Analytics.
  2. En la Topología de trabajo, haga clic en entradas.
  3. En el panel de entradas , haga clic en Agregary especifique la siguiente información:Alias de la entrada: escriba un nombre  único para el alias la entrada.Fuente: seleccione centro de IoT.

    Grupo de consumidores: seleccione el grupo de consumidores que acaba de crear.

  4. Haga clic en crear.centro deiot.PNG

Añadir una salida a la tarea de Stream Analytics

  1. En Topología de trabajo, haga clic en resultados.
  2. En el panel resultados , haga clic en Agregary luego ingrese la siguiente información:Alias de salida: el único alias para la salida.Tipo: seleccione Power BI.
  3. Haga clic en autorizar  para lo cual necesitará  una cuenta profesional  o bien probarlo con  una version gratuita salidapowerbi
  4. Ingrese a su cuenta Power BI y autorice esta salida .
  5. Una vez autorizado, introduzca la siguiente información:Espacio de trabajo de grupo: Seleccione su área de trabajo de grupo de destino.Nombre de conjunto de datos: Introduzca un nombre de conjunto de datos.

    Nombre de la tabla: escriba un nombre de tabla.

  6. Haga clic en crear.

Configurar la consulta del trabajo de análisis de secuencia

  1. En la Topología de trabajo, haga clic en consulta.
  2. Reemplace con el alias de entrada del trabajo.[YourInputAlias]
  3. Reemplace con el alias de salida del trabajo.[YourOutputAlias]
  4. Haga clic en Guardar.

Ejecutar el trabajo de análisis de secuencia

En el trabajo de análisis de secuencia, haga clic en Inicio > ahora > iniciar. Una vez que el trabajo se inicia con éxito, el estado del trabajo cambia de parado a correr.

Crear y publicar un informe de Power BI para visualizar los datos

  1. Garantizar que la aplicación de ejemplo se ejecuta en el dispositivo.
  2. Inicie sesión su cuenta de Power BI .
  3. Ir al espacio de trabajo de grupo que se establece cuando se crea la salida para el trabajo de análisis de secuencia.
  4. Haga clic en conjuntos de datos de Streaming.Debería ver el conjunto de datos lista que especificó cuando creó la salida para el trabajo de análisis de secuencia.
  5. En acciones, haga clic en el primer icono para crear un informe.
  6. Crear un gráfico de líneas para mostrar la temperatura en tiempo real con el tiempo.
    1. En la página de creación de informe, agregar un gráfico de líneas.
    2. En el panel de campos , expanda la tabla que especificó cuando creó la salida para el trabajo de análisis de secuencia.
    3. Arrastre EventEnqueuedUtcTime al eje de en el panel de visualización .
    4. Arrastre la temperatura a los valores.Ahora se crea un gráfico de líneas. El eje x muestra la fecha y la hora en la zona de tiempo UTC. El eje y muestra la temperatura del sensor. 
  7. Crear otro gráfico de líneas para indicar humedad en tiempo real con el tiempo. Para ello, siga los mismos pasos anteriores y coloque EventEnqueuedUtcTime en el eje x y la humedad en el eje y.
  8. Haga clic en Guardar para guardar el informe.
  9. Haga clic en archivo > publicar para la web.
  10. Haga clic en crear incrustar códigoy luego haga clic en publicar.

Está previsto el enlace del informe para que se pueda compartir  para el acceso de informe y un fragmento de código para integrar el informe en su blog o sitio Web.

Microsoft también ofrece aplicaciones móviles power BI  para ver e interactuar con sus dashboards de power BI e informes en su dispositivo móvil.

powerbi.PNG

Hemos visto como utilizar  Power BI para visualizar datos de los sensores en tiempo real desde su  hub de IoT de Azure. Como comentamos existe también  una forma alternativa de visualizar datos de Azure IoT Hub  mediante  Azure Web Apps para visualizar datos de los sensores en tiempo real desde Azure IoT que trataremos en un  proximo post.

 

 

 

Fuente   https://docs.microsoft.com/en-gb/azure/iot-hub/iot-hub-live-data-visualization-in-power-bi

Envío de datos a la nube de Azure desde ESP8266 usando DHT11 o DHT22


 DHT11 y  DHT22 son dos modelos de una misma familia de sensores, que permiten realizar la medición simultánea de temperatura y humedad usando ademas un único  hilo para comunicar los datos vía serie, para lo cual  ambos  disponen de un procesador interno que realiza el proceso de medición, proporcionando la medición mediante una señal digital, por lo que resulta muy sencillo obtener la medición desde un microprocesador como Arduino o ESP8266.

Ambos son similares ( DHT11 presenta una carcasa azul  , mientras que el sensor DHT22  es blanco)  compartiendo además los mismos pines  disponiendo de  4 patillas, de las cuales usaremos sólo 3: Vcc, Output y GND.  Como peculiaridad ,la  salida la conectaremos a una entrada digital  , pero necesitaremos poner una resistencia de 10K entre Vcc y el Pin Output.

El  DHT11  puede medir temperaturas entre 0 a 50, con una precisión de 2ºC, humedad entre 20 a 80%, con precisión del 5% y con una a frecuencia de muestreo de 1 muestras por segundo (1 Hz)

En clara superioridad  con el dHT11 , el modelo DHT22 tiene unas características mucho más profesionales.
  • Medición de temperatura entre -40 a 125, con una precisión de 0.5ºC
  • Medición de humedad entre 0 a 100%, con precisión del 2-5%.
  • Frecuencia de muestreo de 2 muestras por segundo (2 Hz)

Destacar que este tipo de  sensores de temperatura  ( y, aún más, los sensores de humedad) , son sensores con elevada inercia y tiempos de respuesta elevados. Es decir, al “lentos” para reflejar los cambios en la medición.

 

Conectar el DHT11   o el DHT22  a  un Arduino o ESP82366  es sencillo, simplemente alimentamos desde Arduino al sensor a través de los pines GND y Vcc del mismo. Por otro lado, conectamos la salida Output a una entrada digital de Arduino. Necesitaremos poner una resistencia de 10K entre Vcc y el Pin Output.

El esquema eléctrico queda como la siguiente imagen

arduino-dht11-dht22-esquema

Los sensores DHT11 y DHT22 usan su propio sistema de comunicación bidireccional mediante un único hilo , empleando señales temporizadas por lo que en general, lo normal es que empleemos una librería existente para simplificar el proceso.Por ejemplo podemos usar la librería de Adafruit disponible en este enlace.

Una vez  descargada e instalada  la librería  por ejemplo podemos capturar la información de un sensor DHT11  con este código :

#include «DHT.h»
#define DHTTYPE DHT11   // DHT 11
const int DHTPin = 5;     // conexion del pin digital
 
DHT dht(DHTPin, DHTTYPE);
 
void setup() {
   Serial.begin(9600);
   Serial.println(«DHTxx test!»);
 
   dht.begin();
}
 
void loop() {
   //esperar unos 2000ms
   delay(2000);
 
   // Leyendo temperatura  o humedad  toma  sobre unos 250 ms
   float h = dht.readHumidity();
   float t = dht.readTemperature();
 
   if (isnan(h) || isnan(t)) {
      Serial.println(«Fallo al leer el sensor DHT «);
      return;
   }
  
   Serial.print(«Humedad: «);
   Serial.print(h);
   Serial.print(» %\t»);
   Serial.print(«Temperatura: «);
   Serial.print(t);
   Serial.print(» *C «);
}

 

 

Conexión de un DHTXX a un  ESP8266 

Para resultados mas profesionales puede usar un DHT22 ( es el usado en el ejemplo ) , pero  como hemos comentado el DHT11  para fines experimentales  es también aceptable .

Las  simples conexiones  la puede utilizar  una  placa de pruebas, y  cables de puente o directamente con cablecillos  para realizar las conexiones de la siguiente manera:

referencia de conexiones

 

Para los pines  del sensor, usaremos el siguiente cableado:

Start (Sensor) Fin (Junta) Color del cable
VDD (Pin 27F) 3V (Pin 8A) cable rojo
DATOS (Pin 28F) GPIO 2 (Pin 9A) Cable blanco
GND (Pin 30F) GND (Pin 7J) Cable negro

 

 

Por  ultimo utilice un cable USB Micro USB a Tipo A para conectar Sparkfun ESP8266 Thing Dev a su ordenador 

Crear un centro de IoT

  1. Inicie sesión en el portal de Azure .
  2. Seleccione Crear un recurso > Internet de las cosas > IoT Hub .Captura de pantalla de la navegación del portal Azure al centro de IoT
  3. En el panel de hub de IoT , ingrese la siguiente información para su hub de IoT:
    • Nombre : crea un nombre para tu hub de IoT. Si el nombre que ingresa es válido, aparece una marca de verificación verde.

     

    • Nivel de precios y escala : para este tutorial, seleccione el nivel F1 – Gratuito .
    • Grupo de recursos : cree un grupo de recursos para alojar el concentrador de IoT o use uno existente.
    • Ubicación : Seleccione la ubicación más cercana para usted.
    • Fijar al tablero : marque esta opción para acceder fácilmente a su hub de IoT desde el tablero.Ventana del concentrador IoT
  4. Haga clic en Crear . Su hub de IoT puede tardar unos minutos en crearse. Puede controlar el progreso en el panel de notificaciones .

Ahora que ha creado un concentrador de IoT, ubique la información importante que usa para conectar dispositivos y aplicaciones a su hub de IoT.

  1. Después de crear su concentrador de IoT, haga clic en él en el tablero. Tome nota del nombre de host y luego haga clic en Directivas de acceso compartido .Obtenga el nombre de host de su centro de IoT
  2. En el panel Políticas de acceso compartido , haga clic en la política iothubowner , y luego copie y anote la cadena de conexión de su centro IoT.

Obtenga su cadena de conexión del hub de IoT

Registre un dispositivo en el hub de IoT para su dispositivo

  1. En el portal de Azure , abra su concentrador de IoT.
  2. Haga clic en Explorador de dispositivos  .
  3. En el panel Explorador de dispositivos, haga clic en Agregar para agregar un dispositivo a su centro de IdC. 
  4. Luego ingrese la ID del nuevo dispositivo en:ID del dispositivo ( Debe saber que los  ID de dispositivo son sensibles a mayúsculas y minúsculas)
  5. Tipo de autenticación : Seleccione la clave simétrica 
  6. Generar claves automáticamente : seleccione esta casilla de verificación.
  7. Conecte el dispositivo al Hub de IoT : haga clic en Habilitar .Agregue un dispositivo en el Explorador de dispositivos de su centro de IoT
  8. Haga clic en Guardar .
  9. Después de que se crea el dispositivo, abra el dispositivo en el panel Explorador de dispositivos .
  10. Tome nota de la clave principal de la cadena de conexión.Obtener la cadena de conexión del dispositivo

 

Reúna los datos del sensor y envíelos a su centro de IoT

En el ejemplo  se  implementa y ejecuta una aplicación de muestra en Sparkfun ESP8266 Thing Dev. La aplicación parpadea el LED en Sparkfun ESP8266 Thing Dev y envía los datos de temperatura y humedad recopilados del sensor DHT22 a su hub de IoT.

Obtenga la aplicación de muestra de GitHub

La aplicación de ejemplo está alojada en GitHub. Clone el repositorio de muestras que contiene la aplicación de muestra de GitHub. Para clonar el repositorio de muestras, siga estos pasos:

  1. Descargue e instale el programa Git ,por ejemplo desde https://gitforwindows.org/git
  2. Abra un símbolo del sistema o una ventana de terminal.
  3. Vaya a una carpeta donde desea que se almacene la aplicación de muestra.
  4. Ejecute el  Git
  5. Ahora desde el interfaz del Git en modo comando ejecute
    git clone https://github.com/Azure-Samples/iot-hub-SparkFun-ThingDev-client-app.gitclonado.PNG

 

Instale ahora el paquete para  el ESP8266 en Arduino IDE:

  1. Abra la carpeta donde se almacena la aplicación de muestra que descargo desde el comando git clone.
  2. Abra el archivo app.ino en la carpeta de la aplicación en Arduino IDE.
  3. En el IDE de Arduino, haga clic en Archivo > Preferencias .
  4. En el cuadro de diálogo Preferencias , haga clic en el icono que se encuentra junto al cuadro de texto Direcciones URL del administrador de tarjetas adicionales .
  5. En la ventana emergente, ingrese la siguiente URL http://arduino.esp8266.com/stable/package_esp8266com_index.json                                    señalar a un paquete url en arduino ide
  6. Haga  luego haga clic en Aceptar .
  7. En el cuadro de diálogo Preferencias , haga clic en Aceptar .
  8. Haga clic en Herramientas > Placa > Administrador de placas , y luego busque esp8266. Se debe instalar ESP8266 con una versión de 2.2.0 o posterior.En caso del ESP12E DEVKIT V2, seleccione NodeMCU 1.0(ESP-12E Module)

Instalación de  las bibliotecas necesarias

  1. En el IDE de Arduino, haga clic en Programa > Incluir libreria> Gestionar librerias .
  2. Busque los siguientes nombres de biblioteca una por una:
    • AzureIoTHub
    • AzureIoTUtility
    • AzureIoTProtocol_MQTT
    • ArduinoJson
    • DHT sensor library 
    • Adafruit Unified Sensor
  3. Para cada una de las bibliotecas que encuentre, haga clic en Instalar .

Implementar la aplicación de muestra  para ESP8266 

  1. En el IDE de Arduino, haga clic en Herramienta > Puerto , y luego haga clic en el puerto serie que le presente el interfaz de Arduino  para el  ESP8266(por ejemplo «COM3» )
  2. Haga clic en Programa > Subir para crear e implementar la aplicación de muestra en  ESP8266 .

Ingrese sus credenciales

Después de que la carga se complete con éxito, siga los pasos para ingresar sus credenciales:

  1. En el IDE de Arduino, haga clic en Herramientas > Monitor en serie .
  2. En la ventana del monitor de serie, observe las dos listas desplegables en la esquina inferior derecha.
  3. Seleccione Sin final de línea para la lista desplegable de la izquierda.
  4. Seleccione 115200 baudios para la lista desplegable de la derecha.
  5. En el cuadro de entrada ubicado en la parte superior de la ventana del monitor serie, ingrese la siguiente información si se le solicita que los proporcione y luego haga clic en Enviar .
    • Wi-Fi SSID
    • Contraseña de wifi
    • Cadena de conexión del dispositivo

 Nota:La información de credenciales se almacena en la EEPROM del ESP8266 Si hace clic en el botón de reinicio en la placa ESP8266 , la aplicación de muestra le pregunta si desea borrar la información. Ingrese Y para borrar la información y se le pedirá que proporcione la información nuevamente.

Verifique que la aplicación de muestra se esté ejecutando correctamente

Si ve la siguiente salida de la ventana del monitor serie y el LED parpadeante en  la placa ESP8266  la aplicación de muestra se está ejecutando correctamente.

com33.png

 

 

Nota:Si está utilizando otras placas ESP8266, puede seguir estos pasos para conectarlo a su hub de IoT. Según la placa ESP8266 que esté utilizando, es posible que necesite reconfigurar el LED_PIN . Por ejemplo, si está usando ESP8266 de AI-Thinker, puede cambiarlo de 0 a 2 .

 

 

 

Fuente  https://docs.microsoft.com/en-gb/azure/iot-hub/iot-hub-sparkfun-esp8266-thing-dev-get-started

Recuperar medios de instalacion de Windows 10


 Windows 10 vino con muchos cambios en cuanto a actualización o instalación se refiere, pues  de entrada por ejemplo , el sistema operativo al completo  se pudo instalar por Windows Update desde una versión  previa, algo que nunca había pasado y mucho menos de forma gratuita. Aunque el método era muy sencillo, automático, y funcionó bastante bien, con la actualización a W10 hay un agravante: para  todas aquellas personas que tenían una partición de recovery con su antigua imagen de Windows 8 , si se le estropea el disco o deciden cambiarlo por uno SDD,  a pesar de tener una copia del SO legal   ya no disponen no de un medio de instalación ni tan siquiera un cd key de instalación

Para empezar, lo  primero siempre es obtener una copia de seguridad del sistema, ya sea en Windows 7 , 8.1 o incluso w10 , en cualquiera de éstos SO  se puede hacer manualmente (pasando los archivos a un disco duro externo, USB o DVD) o con la herramienta dedicada a ello que hay en el Panel de Control  .

Veamos a continuación los pasos para obtener un medio de instalación de   W10  , así como la correspondiente  clave de instalación  para  que el caso perdamos nuestro disco ( o lo reemplacemos por otro) tengamos un medio para reinstalar w10   con nuestra licencia y adquirida  y legal .

Asimismo si hemos notado un comportamiento anormal (lentitud, cuelgues , no responde  ,etc)   también podemos reinstalar W10 incluso sin CD sin perder nada  y sin formatear el disco tal  y  como vamos a ver a continuación

OBTENER  MEDIO INSTALACIÓN W10

Si necesita instalar  Windows 10 con un DVD o USB, puede usar la herramienta de creación de medios para crear sus propios medios de instalación con una unidad flash USB o un DVD. La herramienta proporciona formatos de archivo optimizados para la velocidad de descarga y puede usarse para crear archivos ISO.

Lamentablemente ,si tiene una edición Enterprise, la herramienta de creación de medios no funcionará para la actualización.

Compruebe estas cosas en el equipo donde desee instalar Windows 10:

  • Procesador de 64 bits o de 32 bits (CPU). Creará la versión de 32 bits o de 64 bits de Windows 10 apropiada para la CPU(para comprobar esto en su PC, vaya aInformación de PC en Configuración de PC o Sistema en el Panel de Control y busque Tipo de sistema).
  • Idioma en Windows. Tendrá que elegir el mismo idioma cuando instale Windows 10 (para saber qué idioma usa actualmente, vaya a Hora e idioma en Configuración de PC o Región en el Panel de control).
  • Edición de Windows. También debe elegir la misma edición de Windows (para averiguar qué edición estás utilizando, vaya a Información de PC en Configuración de PC o Sistema en el Panel de Control y busque Edición de Windows). Tenga en cuenta que Windows 10 Enterprise no está disponible  a través de esta herramienta

Antes de empezar asegúrese de que tiene:

  • Una conexión a Internet (pueden aplicarse tarifas del proveedor de servicios de Internet).
  • Espacio de almacenamiento suficiente disponible en un equipo, USB o una unidad externa para la descarga.
  • Un USB o un DVD vacío (y una grabadora de DVDs) con al menos 4 GB de espacio si quieres crear medios. Te recomendamos que uses un USB o un DVD vacío ya que se eliminará todo el contenido.

Los  pasos  para obtener la copia también son bien sencillos:

licencia

  • Paso 4:En esta elegimos la segunda opción (crear un medio de instalación para otro PC) .

quede desea

  • Paso 5 : Conformar el Idioma, edición y arquitectura

idioma

  • Paso 6 : Elegimos USB o DVD, lo que vayamos a usar
  • Paso 7: Esperar a que concluya el proceso

windows10ccc

OBTENER LA CLAVE DE INSTALACIÓN

En el caso  de que se le estropee el disco de arranque con su distribución de W10   o decida cambiarlo por uno SDD,  a pesar de tener una copia legar   del SO legal obtenida  en los pasos anteriores , también necesitara  una clave de instalación de  W10 ya que cualquier reinstalación de Windows  requiere tener la clave de producto original.

Windows Product Key Viewer es un app muy interesante si alguna vez tiene que averiguar la clave de producto de Windows (CD) pues Windows no proporciona una forma de ver la clave de producto instalado, asi que si ha perdido su llave o la tarjeta de registro, usted está de suerte  gracias a esta aplicación,pues  Windows Product Key Viewer es una utilidad gratuita que mostrará la clave de producto de Windows instalada (cd key) asi como la información importante del sistema de Windows.

Este producto de Windows Key Viewer funciona con todos los sistemas operativos Windows (95, 98, ME, NT, 2000, 2003, XP, Vista, 7, 8, 2008, 10), de 32 bits y de 64 bits. Ademas el programa  permite guardar esta información en un archivo de texto, copiar el código de la llave o imprimir la información Windows para su uso posterior. Incluyendo la clave de producto de Windows, también la aplicación muestra la versión completa de Windows, paquetes de servicio, identificación del producto, la fecha y el tiempo de instalación, usuario registrado, VMWare y la organización y el  tiempo de funcionamiento de Windows.

Los  pasos  para obtener dicha clave  también son bien sencillos:

w10

Reinstalacion W10

Si necesita instalar o reinstalar Windows 10 con un DVD o USB, puede usar la herramienta de creación de medios para crear sus propios medios de instalación con una unidad flash USB o un DVD. La herramienta proporciona formatos de archivo optimizados para la velocidad de descarga y puede usarse para crear archivos ISO pero también para hacer una reinstalacion del sw de windows sin necesidad de formatear el equipo.

Los  pasos  para reinstalar  también son bien sencillos:

  • Paso 1: Descargar la herramienta del link oficial de Microsoft   http://go.microsoft.com/fwlink/?LinkId=691209
  • Paso 2: Ejecutar la aplicación
  • Paso 3: Aceptar los términos de la licencia
  • Paso 4:En esta elegimos la primera opción (actualizar su PC ahora)
  • Paso 5: Esperar  hasta que descargue la imagen, actualizar parches  y se reinicie
  • Paso 6: Reconfiguracion de algunas  ajustes e inicializacion de Cortana:

Un termostato inteligente en la nube de Azure


Dispositivos conectados se va a ser un gran negocio, y la comprensión de estos dispositivos va a ser muy importante para los desarrolladores .
 En la edición de junio de MSDN Magazine ( msdn.microsoft.com/magazine/jj133825 ), se explicó una serie de consideraciones y esbozó una arquitectura para la forma de gestionar los flujos de eventos y comandos desde y hacia  los dispositivos que usan Windows Azure Servicio Bus.
En este artículo,se va  a tomar las cosas un paso más allá  mostrando  el código que crea y asegura los flujos de eventos y mando.
Dado que  una comprensión real de los dispositivos integrados requiere mirar uno,  se va a construir uno y después la conexion  que hasta el bus  de servicio de Windows Azure para que pueda enviar eventos relacionados con su estado actual y controlar de forma remota a través de mensajes a través de la nube de Windows Azure.
 Hasta hace sólo unos pocos años atrás, para la construcción de un pequeño dispositivo con una fuente de alimentación, un microcontrolador y un conjunto de sensores  era  necesario un poco de habilidad en el diseño de hardware electrónico, así como para poner todo junto, por no hablar de buen dominio de la soldador. 

Pero debido a la aparición de plataformas de prototipado como Arduino / o Netduino. Gadgeteer NET, se puede poner ahora juntos en un pequeño dispositivo completamente funcional, aprovechando las habilidades existentes de programación.

 En este articulo se trata de diseñar un «acondicionador de aire» en la forma de un ventilador controlado por termostato, donde el ventilador es la parte menos interesante desde el punto de vista eléctrico.

 Los componentes del proyecto se basan en el modelo Gadgeteer NET, implicando una placa base con un microcontrolador, una memoria y una variedad de módulos conectables .


La placa base para el proyecto es un tablero de GHI Electronics Araña FEZ con los módulos de ampliación siguientes:

  •  De GHI Electronics Ethernet J11D módulo para proporcionar una red cableada (un módulo Wi-Fi existe) DP
  •  Módulo USB Client como fuente de alimentación y puerto USB para la implementación Joystick para el control directo del dispositivo 
  • Desde Studio Seeed Sensor de temperatura y humedad Relés para cambiar el ventilador encendido o apagado
  •  Pantalla OLED para mostrar el estado actual 



En conjunto, estas piezas cuestan alrededor de $ 230. Eso es obviamente más que soldar componentes equivalentes sobre un tablero,
 Además, este es un mercado que está empezando a ponerse en marcha, por lo que esperan que los precios bajan como la base amplía.
 Para hacer que los componentes cobren vida se necesitara  Visual C # 2010 Express (versión gratuita completamente funcional de VStudio  c#), el. NET Micro Framework SDK y el SDK Gadgeteer de GHI Electronics o Seeed.

Figura 1 Diseño del dispositivo en el Gadgeteer. NET

 La figura 1 muestra la vista de diseño del programa Gadgeteer. NET en Visual Studio.   El archivo con la extensión. Gadgeteer contiene un modelo XML que es visualizado en el editor. Desde ese archivo XML, la herramienta Gadgeteer genera automáticamente una clase del Programa parcial con contenedores para cada uno de los módulos conectados a la placa base.
Su código se encuentra en el programa. cs celebrar otra parte de la clase de programas, al igual que el modelo de código subyacente que está familiarizado con entre sí. API NET.

 Se utiliza el. NET Micro Framework con estos dispositivos. Es una versión de código totalmente abierto de la plataforma Microsoft. NET Framework que se ha creado específicamente para dispositivos pequeños con limitado poder de cómputo y memoria no mucho.

Debido a que el marco es una capa sobre el hardware nativo del dispositivo y el dispositivo no es un ordenador de propósito general con un sistema operativo que maneja toda la abstracción de hardware (en realidad no hay OS aquí), la versión del marco se puede utilizar con un dispositivo depende del fabricante de la placa de soporte de los requisitos previos, lo cual es, obviamente, muy diferente de la experiencia de una PC regular, donde particularidades de hardware están muy lejos de las cosas como de alto nivel como el Marco. NET.

 Hay varias otras diferencias en comparación con el normal. NET, y la plataforma PC en general, que son-procedente de un PC de fondo inicialmente sorprendente. Por ejemplo, el dispositivo aquí no tiene una batería de a bordo.

 Como no hay batería para el buffer de reloj,  el dispositivo no tiene idea de la hora real  cuando se despierte.

 A falta de un sistema operativo, y con una pantalla de extensión de otro fabricante, el dispositivo también no tiene fuentes a bordo que puede utilizar para dibujar cadenas para mostrar. Si desea mostrar una cadena, usted tendrá que agregar una fuente a hacerlo.

 Del mismo modo, el dispositivo no tiene predefinido, Windows Update mantenido almacén de certificados. Si desea validar los certificados SSL / TLS, que tendrá que desplegar al menos los certificados de CA raíz en el transcurso del dispositivo y de que va a también tiene que tener la hora actual para comprobar la validez del certificado.

 Como ya has adivinado podría, el manejo de los certificados representa un poco de un obstáculo para estos dispositivos, así como los requisitos para la criptografía SSL / TLS son tan importantes en términos de cálculo esfuerzo, el consumo de memoria y huella de código que no todos los dispositivos pueden apoyarlos. Sin embargo, porque la seguridad es claramente cada vez más importante, incluso en este espacio como los dispositivos deben comunicarse a través de Internet, la versión 4.2 del Framework. NET Micro aporta mejoras significativas para SSL / TLS para dispositivos que tienen recursos suficientes para manejar la situación.


. Termostato Funciones Implementar la funcionalidad termostato local para esta muestra es bastante sencillo. Voy a comprobar la temperatura y la humedad en una programación con el sensor y cambiar el ventilador conectado a través de uno de los puertos de relé apagado o encendido cuando la temperatura cae por debajo o por encima de un determinado umbral. El estado actual se visualiza en la pantalla OLED y la palanca de mando permite ajustar la temperatura objetivo manualmente. Mientras comienzo del dispositivo, voy a cablear eventos a un temporizador para activar las lecturas de temperatura y para leer los eventos de la palanca de mando.

Cuando se presiona la palanca de mando, voy a suspender el temporizador, comprobar la temperatura objetivo de acuerdo con la posición del joystick , solicite inmediatamente una nueva lectura de temperatura del sensor y reanudar el temporizador. cuando finaliza la lectura de temperatura, el evento se TemperatureHumidityMeasurementComplete planteada por el sensor. entonces a almacenar las lecturas actuales y ajustar el estado del relé para conmutar el ventilador si necesario. Esa es la medida de la lógica de termostato, que se muestra en parte en la Figura 2.

 Figura 2 Lectura de Temperatura y Humedad

  1.  
  2.           void WireEvents()
  3. {
  4.   this.InitializeTemperatureSensor();
  5.   this.InitializeJoystick();
  6. }
  7. void InitializeTemperatureSensor()
  8. {
  9.   this.temperatureCheckTimer = new Timer(5000);
  10.   this.temperatureCheckTimer.Tick += (t) =>
  11.     this.temperatureHumidity.RequestMeasurement();
  12.   this.temperatureCheckTimer.Start();
  13.     this.temperatureHumidity.MeasurementComplete 
  14.     += this.TemperatureHumidityMeasurementComplete;
  15. }
  16. void InitializeJoystick()
  17. {
  18.   this.joystick.JoystickPressed += this.JoystickPressed;
  19. }
  20. void JoystickPressed(Joystick sender, Joystick.JoystickState state)
  21. {
  22.   this.temperatureCheckTimer.Stop();
  23.   var jStick = this.joystick.GetJoystickPostion();
  24.   if (jStick.Y < .3 || jStick.X < .3)
  25.   {
  26.     settings.TargetTemperature -= .5;
  27.     StoreSettings(settings);
  28.   }
  29.   else if (jStick.Y > .7 || jStick.X > .7)
  30.   {
  31.     settings.TargetTemperature += .5;
  32.     StoreSettings(settings);
  33.   }
  34.   this.RedrawDisplay();
  35.   this.temperatureHumidity.RequestMeasurement();
  36.   this.temperatureCheckTimer.Start();
  37. }
  38. void TemperatureHumidityMeasurementComplete(TemperatureHumidity sender, 
  39.   double temperature, double relativeHumidity)
  40. {
  41.   var targetTemp = settings.TargetTemperature;
  42.   this.lastTemperatureReading = temperature;
  43.   this.lastHumidityReading = relativeHumidity;
  44.   this.relays.Relay1 = (lastTemperatureReading > targetTemp);
  45.   this.RedrawDisplay();
  46. }
  47.       



 Cada vez que ajuste la temperatura deseada en el método JoystickPressed, se guarda el valor nuevo en el campo de la clase Program ‘ajustes y llamar StoreSettings. El campo de configuración es de tipo applicationSettings, una clase serializable en el código de dispositivo que mantiene todo el equipo necesario recordar a través de las renovaciones y los ciclos de potencia.

Para almacenar persistentemente los datos, el Marco. NET Micro se reserva algunas páginas de almacenamiento en la memoria no volátil del dispositivo y permite el acceso a este almacenamiento a través de la clase ExtendedWeakReference
. No creo que sea intuitivo hasta que reconozcas que es ante todo un mecanismo para intercambiar datos de la memoria principal a presión, y convenientemente se dobla como una función de almacenamiento. La clase contiene referencias débiles a objetos, tal como el WeakReference regular lo hace en el marco. NET, sino que intercambiar los datos para el almacenamiento no volátil en lugar de descartarlo una vez que el recolector de basura, vuelve.

Dado que los datos se intercambian fuera de la memoria principal, tiene que ser serializado para el almacenamiento, lo que explica por qué la clase applicationSettings (que veremos más tarde se utiliza cuando hablamos de aprovisionamiento) necesita ser serializable. Recuperación de un objeto a partir de su lugar de almacenamiento o la creación de una ranura de almacenamiento nuevo con el método RecoverOrCreate requiere especificar un identificador único. Sólo tengo un objeto de almacenar, así que voy a usar un identificador fijo (cero).
 Después de que el objeto se ha almacenado y una vez recuperado, las actualizaciones deben ser obligados a regresar a almacenamiento mediante el método PushBackIntoRecoveryList en la instancia ExtendedWeakReference, así que eso es lo que hago en StoreSettings para eliminar los cambios, como se muestra en la figura 3.

  1.           static ApplicationSettings GetSettings()
  2. {
  3.   var data = ExtendedWeakReference.RecoverOrCreate(
  4.     typeof(ApplicationSettings),
  5.     0,
  6.     ExtendedWeakReference.c_SurviveBoot | 
  7.     ExtendedWeakReference.c_SurvivePowerdown);
  8.   var settings = data.Target as ApplicationSettings;
  9.   if (settings == null)
  10.   {
  11.     data.Target = settings = ApplicationSettings.Defaults;
  12.   }
  13.   return settings;
  14. }
  15. static void StoreSettings(ApplicationSettings settings)
  16. {
  17.   var data = ExtendedWeakReference.RecoverOrCreate(
  18.     typeof(ApplicationSettings),
  19.     0,
  20.     ExtendedWeakReference.c_SurviveBoot | 
  21.     ExtendedWeakReference.c_SurvivePowerdown);
  22.   data.Target = settings;
  23.   data.PushBackIntoRecoverList();
  24. }
  25.         

 Figura 3 Actualización de los datos almacenados Poner en funcionamiento


 En el principio, el dispositivo está en «nueva de fábrica» ​​estado del código de dispositivo se ha desplegado el dispositivo, pero todavía no se ha inicializado y por lo tanto no tiene ninguna configuración actual.
 Se puede ver este estado se refleja en el método GetSettings cuando el objeto de configuración sigue siendo nula y por tanto se inicializa con la configuración predeterminada.

 Porque quiero dejar que el aparato se comunican con Internet ya través de una infraestructura de Windows Azure Service Bus-Necesito equipar el dispositivo con un conjunto de credenciales para hablar con esa infraestructura y también decir que los recursos con quien hablar.

 Ese primer paso de la creación de un dispositivo de nueva fábrica con la configuración de red necesaria y la creación de los recursos correspondientes en el lado del servidor se conoce como el aprovisionamiento, me referí a la modelo arquitectónico básico para ello en el artículo anterior.
 En el código de dispositivo Voy a ser bastante estricto acerca de cómo obtener el dispositivo aprovisionado correctamente e iniciará los pasos de aprovisionamiento cada vez que el dispositivo se conecta a la red y no tiene una configuración válida.
 Por eso, mantener una bandera booleana en los valores que me diga si he tenido éxito anterior. Si el indicador no está definido, expido la llamada al servicio de aprovisionamiento alojado en Windows Azure. El servicio de aprovisionamiento es responsable de verificar la identidad del dispositivo utilizando su identificador de dispositivo único, el cual fue registrado en un per-lista mantenida por el servicio cuando se haya producido.
 Una vez que el dispositivo está activado, se elimina de la per-lista. Para mantener las cosas simples razonable para este artículo, sin embargo, voy a omitir la aplicación de la gestión permitir-lista. Una vez que el dispositivo se considera legítimo, la asigna provisión de servicios, siguiendo el modelo establecido en el artículo anterior, el dispositivo a una determinada unidad de escala y en particular, fan-out tema dentro de esa unidad de escala
. Por ejemplo, yo Voy a mantenerlo simple y crear una suscripción para un solo tema fijo llamado dispositivos que sirve como canal de comando de la nube en el dispositivo, y por un tema llamado eventos para recabar información de los dispositivos.
 Además de crear la suscripción y asociar el dispositivo con el tema, yo también voy a crear un servicio de identidad para el dispositivo en el Servicio de Control de Acceso (una característica de Windows Azure Active Directory) y concede que la identidad de los derechos necesarios para enviar mensajes al tema Eventos y recibir los mensajes de la suscripción de nueva creación para el Tema dispositivos. El dispositivo puede realizar exactamente esas dos operaciones en Windows Azure Servicio de Bus-nada más. La figura 4 muestra el núcleo del servicio de aprovisionamiento.
Este servicio depende del Windows Azure Service Bus API de administración (el NamespaceManager) encontrada en el conjunto del núcleo Microsoft.ServiceBus.dll que se incluye como parte del SDK de Windows Azure o vía Nuget. También se basa en una biblioteca de ayuda para la gestión de las cuentas de control de acceso y permisos disponibles como parte de la muestra Autorización para bus de servicios y, por supuesto, también se incluyen en el código descargable de este artículo


Figura 4 muestra el núcleo del servicio de aprovisionamiento.El servicio depende de la gestión de Windows Azure Service Bus API (el NamespaceManager) se encuentra en el núcleo del conjunto de Microsoft.ServiceBus.dll que se incluye como parte de Windows Azure SDK o a través de NuGet. También depende de una biblioteca de ayuda para administrar las cuentas de control de acceso y permisos disponibles como parte de la muestra de autorización para el servicio de autobuses y, por supuesto, también incluido en el código descargable para este artículo.
Figura 4 el servicio de aprovisionamiento


  1. namespace BackendWebRole



  2. {



  3.   using System;



  4.   using System.Configuration;



  5.   using System.Linq;



  6.   using System.Net;



  7.   using System.ServiceModel;



  8.   using System.ServiceModel.Web;



  9.   using Microsoft.ServiceBus;



  10.   using Microsoft.ServiceBus.AccessControlExtensions;



  11.   using Microsoft.ServiceBus.Messaging;



  12.   [ServiceContract(Namespace = "")]



  13.   public class ProvisioningService



  14.   {



  15.     const string DevicesTopicPath = "devices";



  16.     const string EventsTopicPath = "events";



  17.     static readonly AccessControlSettings AccessControlSettings;



  18.     static readonly string ManagementKey;



  19.     static readonly string NamespaceName;



  20.     static Random rnd = new Random();



  21.       static ProvisioningService()



  22.       {



  23.         NamespaceName = ConfigurationManager.AppSettings["serviceBusNamespace"];



  24.         ManagementKey = ConfigurationManager.AppSettings["managementKey"];



  25.         AccessControlSettings = new AccessControlSettings(



  26.           NamespaceName, ManagementKey);



  27.       }



  28.       [OperationContract, WebInvoke(Method = "POST", UriTemplate = "/setup")]



  29.       public void SetupDevice()



  30.       {



  31.         var rcx = WebOperationContext.Current.OutgoingResponse;



  32.         var qcx = WebOperationContext.Current.IncomingRequest;



  33.         var id = qcx.Headers["P-DeviceId"];



  34.         if (this.CheckAllowList(id))



  35.         {



  36.           try



  37.           {



  38.             var deviceConfig = new DeviceConfig();



  39.             CreateServiceIdentity(ref deviceConfig);



  40.             CreateAndSecureEntities(ref deviceConfig);



  41.             rcx.Headers["P-DeviceAccount"] = deviceConfig.DeviceAccount;



  42.             rcx.Headers["P-DeviceKey"] = deviceConfig.DeviceKey;



  43.             rcx.Headers["P-DeviceSubscriptionUri"] =



  44.               deviceConfig.DeviceSubscriptionUri;



  45.             rcx.Headers["P-EventSubmissionUri"] = deviceConfig.EventSubmissionUri;



  46.             rcx.StatusCode = HttpStatusCode.OK;



  47.             rcx.SuppressEntityBody = true;



  48.           }



  49.           catch (Exception)



  50.           {



  51.             rcx.StatusCode = HttpStatusCode.InternalServerError;



  52.             rcx.SuppressEntityBody = true;



  53.           }



  54.         }



  55.         else



  56.         {



  57.           rcx.StatusCode = HttpStatusCode.Forbidden;



  58.           rcx.SuppressEntityBody = true;



  59.         }



  60.       }



  61.       static void CreateAndSecureEntities(ref DeviceConfig deviceConfig)



  62.       {



  63.         var namespaceUri = ServiceBusEnvironment.CreateServiceUri(



  64.           Uri.UriSchemeHttps, NamespaceName, string.Empty);



  65.         var nsMgr = new NamespaceManager(namespaceUri,



  66.           TokenProvider.CreateSharedSecretTokenProvider("owner", ManagementKey));



  67.         var ruleDescription = new SqlFilter(



  68.           string.Format("DeviceId='{0}' OR Broadcast=true",



  69.             deviceConfig.DeviceAccount));



  70.         var subscription = nsMgr.CreateSubscription(



  71.           DevicesTopicPath, deviceConfig.DeviceAccount, ruleDescription);



  72.         deviceConfig.EventSubmissionUri = new Uri(



  73.           namespaceUri, EventsTopicPath).AbsoluteUri;



  74.         deviceConfig.DeviceSubscriptionUri =



  75.           new Uri(namespaceUri,



  76.             SubscriptionClient.FormatSubscriptionPath(



  77.               subscription.TopicPath,



  78.               subscription.Name)).AbsoluteUri;



  79.         GrantSendOnEventTopic(deviceConfig);



  80.         GrantListenOnDeviceSubscription(deviceConfig);



  81.       }



  82.       static void GrantSendOnEventTopic(DeviceConfig deviceConfig)



  83.       {



  84.         var settings = new AccessControlSettings(NamespaceName, ManagementKey);



  85.         var topicUri = ServiceBusEnvironment.CreateServiceUri(



  86.           Uri.UriSchemeHttp, NamespaceName, EventsTopicPath);



  87.         var list = NamespaceAccessControl.GetAccessControlList(topicUri, settings);



  88.         var identityReference =



  89.           IdentityReference.CreateServiceIdentityReference(



  90.             deviceConfig.DeviceAccount);



  91.         var existing = list.FirstOrDefault((r) =>



  92.           r.Condition.Equals(identityReference) &&



  93.           r.Right.Equals(ServiceBusRight.Send));



  94.         if (existing == null)



  95.         {



  96.           list.AddRule(identityReference, ServiceBusRight.Send);



  97.           list.SaveChanges();



  98.         }



  99.       }



  100.       static void GrantListenOnDeviceSubscription(DeviceConfig deviceConfig)



  101.       {



  102.         var settings = new AccessControlSettings(NamespaceName, ManagementKey);



  103.         var subscriptionUri = ServiceBusEnvironment.CreateServiceUri(



  104.           Uri.UriSchemeHttp,



  105.           NamespaceName,



  106.           SubscriptionClient.FormatSubscriptionPath(



  107.             DevicesTopicPath, deviceConfig.DeviceAccount));



  108.         var list = NamespaceAccessControl.GetAccessControlList(



  109.           subscriptionUri, settings);



  110.         var identityReference = IdentityReference.CreateServiceIdentityReference(



  111.           deviceConfig.DeviceAccount);



  112.         var existing = list.FirstOrDefault((r) =>



  113.           r.Condition.Equals(identityReference) &&



  114.           r.Right.Equals(ServiceBusRight.Listen));



  115.         if (existing == null)



  116.         {



  117.           list.AddRule(identityReference, ServiceBusRight.Listen);



  118.           list.SaveChanges();



  119.         }



  120.       }



  121.       static void CreateServiceIdentity(ref DeviceConfig deviceConfig)



  122.       {



  123.         var name = Guid.NewGuid().ToString("N");



  124.         var identity =



  125.           AccessControlServiceIdentity.Create(AccessControlSettings, name);



  126.         identity.Save();



  127.         deviceConfig.DeviceAccount = identity.Name;



  128.         deviceConfig.DeviceKey = identity.GetKeyAsBase64();



  129.       }



  130.         bool CheckAllowList(string id)



  131.       {



  132.         return true;



  133.       }



  134.   }



  135. }








El servicio consta de un único recurso HTTP, llamado /setup, implementado mediante la Web de Windows Communication Foundation (WCF) operación SetupDevice, que acepta solicitudes POST. Usted notará que el método es sin parámetros y también no vuelve a la carga de una entidad. No es casualidad. En lugar de utilizar un cuerpo de entidad HTTP en XML, JSON o forma de codificación para transportar información de solicitud y respuesta, estoy haciéndolo muy simple para el dispositivo y colocar las cargas en los encabezados HTTP personalizados. Esto elimina la necesidad de un analizador específico analizar la carga y mantiene la huella de código pequeño. El cliente HTTP ya sabe cómo analizar encabezados, y para lo que quiero hacer aquí, es abundante.Se muestra el código de dispositivo correspondiente llamando el recurso HTTP en figura 5, y es difícil imaginar hacer que llame a todo más sencillo que esto. El identificador del dispositivo se envía en un encabezado y la configuración post-provisioning igualmente se devuelve a través de cabezales. No hay malabarismo de arroyos, no analizar, cliente HTTP de pares clave-valor simple fácilmente entiende.


Figura 5 Configuración del dispositivo


  1.  



  2.           bool PerformProvisioning()



  3. {



  4.   [ ...



  5.           display status ...



  6.           ]



  7.   try



  8.   {



  9.     var wr = WebRequest.Create(



  10.       "http://cvdevices.cloudapp.



  11.           net/Provisioning.svc/setup");



  12.     wr.Method = "POST";



  13.     wr.ContentLength = 0;



  14.     wr.Headers.Add("P-DeviceId"this.deviceId);



  15.     using (var wq = (HttpWebResponse)wr.GetResponse())



  16.     {



  17.       if (wq.StatusCode == HttpStatusCode.OK)



  18.       {



  19.         settings.DeviceAccount = wq.Headers["P-DeviceAccount"];



  20.         settings.DeviceKey = wq.Headers["P-DeviceKey"];



  21.         settings.DeviceSubscriptionUri = new Uri(



  22.           wq.Headers["P-DeviceSubscriptionUri"]);



  23.         settings.EventSubmissionUri = new Uri(



  24.           wq.Headers["P-EventSubmissionUri"]);



  25.         settings.NetworkProvisioningCompleted = true;



  26.         StoreSettings(settings);



  27.         return true;



  28.       }



  29.     }



  30.   }



  31.   catch (Exception e)



  32.   {



  33.     return false;



  34.   }



  35.   return false;



  36. }



  37. void NetworkAvailable(Module.NetworkModule sender,



  38.   Module.NetworkModule.NetworkState state)



  39. {



  40.   ConvertBase64.ToBase64String(ethernet.NetworkSettings.PhysicalAddress);



  41.   if (state == Module.NetworkModule.NetworkState.Up)



  42.   {



  43.     try



  44.     {



  45.       Utility.SetLocalTime(NtpClient.GetNetworkTime());



  46.     }



  47.     catch



  48.     {



  49.       // Swallow any timer exceptions



  50.     }



  51.     if (!settings.NetworkProvisioningCompleted)



  52.     {



  53.       if (!this.PerformProvisioning())



  54.       {



  55.         return;



  56.       }



  57.     }



  58.     if (settings.NetworkProvisioningCompleted)



  59.     {



  60.       this.tokenProvider = new TokenProvider(



  61.         settings.DeviceAccount, settings.DeviceKey);



  62.       this.messagingClient = new MessagingClient(



  63.         settings.EventSubmissionUri, tokenProvider);



  64.     }



  65.   }



  66. }



  67.         




Si la configuración indica que el aprovisionamiento es necesaria, el realizar­Provisioning método es invocado desde la función NetworkAvailable, que se activa cuando la red está arriba y el dispositivo se asigna una dirección IP mediante DHCP. Una vez finalizada la provisioning, la configuración se utiliza para configurar el token proveedor y el cliente de mensajería para hablar con un Bus de servicio de Windows Azure. También observará un cliente NTP de llame. NTP significa «network time protocol» y he tomado un simple, con licencia BSD cliente NTP escrito por Michael Schwarz para habilitar la muestra para obtener la hora actual, que necesita si desea comprobar la caducidad de certificado SSL.
Como puede ver en figura 4, SetupDevices llama a la comprobación de simulacro en el CheckAllowList de la lista de admitidos y, si es exitosa, entonces llamadas CreateServiceIdentity y CreateAndSecureEntities. El método CreateServiceIdentity crea una nueva identidad de servicio junto con una clave secreta en el espacio de nombres de Control de acceso asociado con el espacio de nombres de Windows Azure Service Bus configurado para la aplicación. El método CreateAndSecureEntities crea una nueva suscripción para la entidad en los dispositivos de tema, configuración de la suscripción con una regla SQL que permite enviar mensajes en el tema de destino o la suscripción específica incluyendo una propiedad DeviceId en el nombre de la cuenta del dispositivo, o todas las suscripciones al incluir una propiedad de emisión con un valor booleano true. Después de haber creado la suscripción, el método llama a los métodos GrantSendOnEventTopic y GrantListenOnDeviceSubscription que conceden los permisos necesarios en las entidades a la nueva identidad de servicio utilizando la biblioteca de controles de acceso.
Una vez que todos los que se ha ejecutado correctamente, los resultados de las operaciones de aprovisionamiento se asignan a los encabezados en la respuesta HTTP de la solicitud y regresó con un código de estado OK, y el dispositivo almacena los resultados en memoria no volátil y establece la bandera para NetworkProvisioningCompleted.

Enviar eventos y recibir comandos

Con provisioning completado, el dispositivo está ahora listo para enviar eventos a los eventos de Windows Azure Service Bus tema y recibir comandos de su suscripción a los dispositivos de tema. Pero antes de irme de allí, tengo que discutir una cuestión delicada: la seguridad.
Como mencioné anteriormente, SSL/TLS es un conjunto de protocolos caro para pequeños dispositivos. Es decir, algunos dispositivos no nunca será capaces de soportar SSL/TLS, o podrían apoyar sólo en forma limitada debido a las limitaciones de memoria o capacidad de cómputo. De hecho, aunque en el momento de escribir este artículo la placa base GHI electrónica FEZ Spider basada en el .net Micro Framework 4.1 estoy usando aquí puede hablar nominalmente SSL/TLS y HTTPS, su firmware SSL/TLS aparentemente no encajan con la cadena de certificado presentada por Bus de servicio de Windows Azure o el servicio de Control de acceso. Como se actualiza el firmware para estos dispositivos a la nueva versión 4.2 de la Micro de .net Framework, estas limitaciones desaparecerán para este dispositivo en particular, pero el problema que algunos dispositivos son simplemente demasiado limitado tratar con SSL/TLS sigue siendo cierto en principio, y hay discusión activa en la comunidad de dispositivo incrustado en las opciones de protocolo apropiado que no son bastante como peso pesado.
Así, a pesar de que el dispositivo tiene ahora una cuenta adecuada, no se puede obtener un token desde el servicio de Control de acceso porque mediante HTTPS es un prerrequisito para hacerlo. Lo mismo es cierto para el envío de un mensaje en Windows Azure Service Bus, que obliga a HTTPS para todas las solicitudes que requieren pasar un token de acceso, incluyendo todas las interacciones con las colas y temas.Además, si esta muestra código de producción, por supuesto, tengo que exponer el extremo de aprovisionamiento a través de HTTPS para proteger la clave secreta que se devuelve al dispositivo.
¿Y ahora qué? Bueno, «lo que ahora» es en última instancia acerca de cómo hacer el equilibrio adecuado y esto sin duda incluyen dinero — en la fabricación, las diferencias de precio de unos céntimos suman cuando se hacen millones de un tipo de dispositivo. Si el dispositivo no es capaz de manejar un protocolo de seguridad requeridas, las preguntas son cuánto daño puede ser causado por no tener ese protocolo y cómo cerrar la brecha entre la falta del dispositivo de características necesarias y las demandas de infraestructura.
Lo que debe quedar claro es que cualquier secuencia de datos que no está cifrado y firmado es susceptible de espionaje y manipulación. Cuando un dispositivo informa sólo datos del sensor, vale la pena considerar si una manipulación de man-in-the-middle en dicha ruta de red es concebible valiosa para cualquier persona o podría detectarse analíticamente. A veces, el resultado podría ser que los datos de la clara están aceptar el envío. Rutas de comando y control son un asunto diferente; tan pronto como el comportamiento de un dispositivo puede accionarse a través de una red, no puedo pensar en un caso donde no quiero tener esa ruta de comunicación protegida por lo menos con una firma de integridad. El valor de la privacidad para comando y control depende del caso de uso. Si hay mitigación contra la manipulación en su lugar, ajuste la temperatura del termostato de destino no parece digno de mucho esfuerzo de cifrado.
El código de ejemplo que acompaña este artículo incluye dos variaciones del flujo de comunicación desde el dispositivo a la nube. El primero es un muy simplificado Windows Azure Bus API de servicio que requiere HTTPS y hace el saludo ordinario de adquirir un testigo de Control de acceso y hablando directamente al Bus de servicio de Windows Azure.
La segunda ruta utiliza la misma forma general del protocolo HTTP de Bus de servicio de Windows Azure para enviar y recibir mensajes, pero crea una firma HMACSHA256 sobre el mensaje usando la clave secreta que posee. Esto no protege el mensaje de espionaje, pero proteger el mensaje de manipulación y permite detectar ataques de repetición cuando incluyendo un id de mensaje. Las respuestas se firmará con la misma clave. Porque el Bus de servicio todavía no es compatible con este modelo de autenticación — a pesar de que este artículo es un buen indicador que Microsoft está pensando activamente este problema — la ruta utiliza un servicio de puerta de enlace personalizada alojado junto con el servicio de aprovisionamiento. La puerta de enlace personalizada comprueba y tiras de la firma y pasa el mensaje restante al Bus de servicio de Windows Azure. Usando un gateway personalizado para la traducción de protocolo también es generalmente el modelo correcto si necesita el sistema de nubes a hablar uno de los protocolos de innumerables dispositivo patentado. Pero una cosa a tener en cuenta sobre el enfoque de puerta de enlace personalizada es que hay que ampliar el número de dispositivos que al mismo tiempo enviar mensajes, así haciendo que el gateway capa muy delgada y apátridas es una buena idea.
Finalmente se hace la distinción entre los dos trazados por el servicio de aprovisionamiento que cualquiera se distribuye HTTP o HTTPS URIs. En el código de dispositivo, la diferencia es manejada por el TokenProvider. En el caso HTTPS, los dispositivos hablan directamente al Bus de servicio de Windows Azure, Considerando que en el caso HTTP, el servicio de aprovisionamiento habla a la puerta de enlace personalizada. El supuesto aquí es que para el caso HTTP, se preprovisioned los dispositivos sin exponer la clave secreta en una ruta de comunicación de Internet no protegida. En otras palabras, el servicio de aprovisionamiento se ejecuta en la fábrica, no en Windows Azure.
El código de dispositivo tiene dos interacciones con un Bus de servicio de Windows Azure: enviar eventos y recibir comandos. Voy a enviar un evento una vez cada minuto, después se hace una nueva lectura de la temperatura, y también usaré esa oportunidad para agarrar cualquier comandos pendientes y ejecutarlas. Hacer que voy modificar el método de TemperatureHumidityMeasurementComplete se muestra en la figura 2y agregar llamadas a SendEvent y ProcessCommands para ser procesados una vez cada minuto, como se muestra en la figura 6.
Figura 6 enviar eventos y recibir comandos

  1.  

  2.           void TemperatureHumidityMeasurementComplete(TemperatureHumidity sender,

  3.   double temperature, double relativeHumidity)

  4. {

  5.   [...] (see Figure 2)

  6.   if (settings.NetworkProvisioningCompleted &&

  7.     DateTime.UtcNow - settings.LastServerUpdate >

  8.       TimeSpan.FromTicks(TimeSpan.TicksPerMinute))

  9.   {

  10.     settings.LastServerUpdate = DateTime.UtcNow;

  11.     SendEvent(this.lastTemperatureReading, this.lastHumidityReading);

  12.     ProcessCommands();

  13.   }

  14. }

  15. void SendEvent(double d, double lastHumidityReading1)

  16. {

  17.   try

  18.   {

  19.     messagingClient.Send(new SimpleMessage()

  20.       {

  21.         Properties = {

  22.           {"Temperature",d},

  23.           {"Humidity", lastHumidityReading1},

  24.           {"DeviceId", settings.DeviceAccount}

  25.         }

  26.       });

  27.   }

  28.   catch (Exception e)

  29.   {

  30.     Debug.Print(ethernet.ToString());

  31.   }

  32. }

  33. void ProcessCommands()

  34. {

  35.   SimpleMessage cmd = null;

  36.   try

  37.   {

  38.     do

  39.     {

  40.       cmd = messagingClient.Receive(TimeSpan.Zero, ReceiveMode.ReceiveAndDelete);

  41.       if (cmd != null && cmd.Properties.Contains("Command"))

  42.       {

  43.         var commandType = (string)cmd.Properties["Command"];

  44.         switch (commandType)

  45.         {

  46.           case "SetTemperature":

  47.             if (cmd.Properties.Contains("Parameter"))

  48.             {

  49.               this.settings.TargetTemperature =

  50.                 double.Parse((string)cmd.Properties["Parameter"]);

  51.               this.RedrawDisplay();

  52.               this.temperatureHumidity.RequestMeasurement();

  53.               StoreSettings(this.settings);

  54.             }

  55.             break;

  56.         }

  57.       }

  58.     }

  59.     while (cmd != null);

  60.   }

  61.   catch (Exception e)

  62.   {

  63.     Debug.Print(e.ToString());

  64.   }

  65. }

  66.         


El método SendEvent utiliza al cliente de mensajería, que obtiene inicializado una vez que la conectividad de red está disponible. El cliente de mensajería es una pequeña versión de la API Windows Azure servicio de Bus que es capaz de enviar y recibir mensajes a y desde el servicio de autobús colas, temas y suscripciones. El ProcessCommands método utiliza al mismo cliente para buscar comandos desde la suscripción del dispositivo y procesa. Por ahora, el dispositivo sólo entiende el comando SetTemperature con un parámetro que indica la temperatura absoluta para establecer como un valor numérico (en grados Celsius, por cierto). Tenga en cuenta que ProcessCommands especifica un tiempo de espera de TimeSpan.Zero para recibir mensajes de la suscripción del Bus de servicio de Windows Azure, indicando que no está dispuesto a esperar a que lleguen los mensajes. Quiero agarrar un mensaje sólo si hay uno disponible y en caso contrario se baje inmediatamente. Reduce el tráfico por la puerta de enlace personalizada (debo utilizar HTTP y tener uno en su lugar) y no me exigen mantener un lazo de recepción abierta en el dispositivo. El equilibrio es la latencia.En el peor de los casos, los comandos tienen una latencia de un minuto. Si eso es un problema, puede utilizar un timeout largo que hace mucho tiempo de votación (que apoya a la biblioteca) y, con ese, disminuir de latencia de comando a unos pocos milisegundos.
El lado del servidor correspondiente, para recibir eventos y enviar comandos a todos los dispositivos registrados por colocar mensajes en el tema, simplemente sigue las reglas normales de la API de Windows Azure servicio Bus y es parte del código de ejemplo que se puede descargar, 

Clemens Vasters es el líder técnico principal del equipo del bus de servicios de Windows Azure. Vasters ha sido en el equipo desde la primeras etapas de incubación y obras en la hoja de ruta de característica técnica para Windows Azure Service Bus, que incluye las notificaciones push y alta escala para Web y dispositivos de señalización. También es una frecuente conferenciante y autor de conocimientos de arquitectura. Puede seguir a Clemens por Twitter en twitter.com/clemensv.

.

 Fuente Original aquí
Licencia Creative Commons
solo-electronicos por Carlos Rodriguez Navarro se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 3.0 Unported.