el bus de servicios de windows azure y el internet de las cosas

17
El bus de servicios de Windows Azure y el Internet de las Cosas, Parte 2 En nuestra última columna (msdn.microsoft.com/magazine/dn574801), hablamos sobre el panorama de la tecnología actual para máquina-a-máquina (M2M) de computación, que se refiere a las tecnologías que los dispositivos de interconexión, por lo general para la instrumentación industrial, en forma de sensores o medidores. La proliferación de-a programa fácil pequeños ordenadores asequibles y se ha ampliado este concepto en lo que se llama Internet-de-objetos (IO), abriendo la puerta a escenarios en los aparatos domésticos comunes pueden ser controlados o se utilizan como fuentes de información para generar eventos. De esta manera, no es difícil para enviar alertas cuando es el momento para reponer la nevera, cerrar automáticamente las persianas de la ventana cuando cae la noche o ajuste el termostato sobre la base de los hábitos familiares. También hicimos el caso de utilizar el servicio de Windows Azure Bus para la conectividad de dispositivos, como una alternativa al uso de una VPN, cuando se trata de resolver el direccionamiento, la seguridad y los problemas de rendimiento relacionados con el despliegue de un gran número de sensores o medidores. Esto se está convirtiendo cada vez más relevante teniendo en cuenta que, según el último informe de BI Inteligencia de Business Insider, habrá más de 9 mil millones de conexiones directamente relacionados con la IO para el año 2018 (read.bi/18L5cg8). El uso de una cola de Service Bus designado o el tema de un dispositivo ofrece una forma elegante para incorporar resistencia y conectividad ocasional para las aplicaciones de la IO. En este artículo, vamos a caminar a través de una práctica en la aplicación de Windows Azure que ilustra estos conceptos,

Upload: fercho-ramirez

Post on 24-Nov-2015

40 views

Category:

Documents


5 download

TRANSCRIPT

El bus de servicios de Windows Azure y el Internet de las Cosas, Parte 2

En nuestra ltima columna (msdn.microsoft.com/magazine/dn574801), hablamos sobre el panorama de la tecnologa actual para mquina-a-mquina (M2M) de computacin, que se refiere a las tecnologas que los dispositivos de interconexin, por lo general para la instrumentacin industrial, en forma de sensores o medidores. La proliferacin de-a programa fcil pequeos ordenadores asequibles y se ha ampliado este concepto en lo que se llama Internet-de-objetos (IO), abriendo la puerta a escenarios en los aparatos domsticos comunes pueden ser controlados o se utilizan como fuentes de informacin para generar eventos. De esta manera, no es difcil para enviar alertas cuando es el momento para reponer la nevera, cerrar automticamente las persianas de la ventana cuando cae la noche o ajuste el termostato sobre la base de los hbitos familiares.

Tambin hicimos el caso de utilizar el servicio de Windows Azure Bus para la conectividad de dispositivos, como una alternativa al uso de una VPN, cuando se trata de resolver el direccionamiento, la seguridad y los problemas de rendimiento relacionados con el despliegue de un gran nmero de sensores o medidores. Esto se est convirtiendo cada vez ms relevante teniendo en cuenta que, segn el ltimo informe de BI Inteligencia de Business Insider, habr ms de 9 mil millones de conexiones directamente relacionados con la IO para el ao 2018 (read.bi/18L5cg8).

El uso de una cola de Service Bus designado o el tema de un dispositivo ofrece una forma elegante para incorporar resistencia y conectividad ocasional para las aplicaciones de la IO. En este artculo, vamos a caminar a travs de una prctica en la aplicacin de Windows Azure que ilustra estos conceptos, el diseo de un plan de servicio de bus con dispositivos colas, la implementacin de una funcin de trabajo de escucha en los servicios de la nube, y la programacin de un dispositivo de Arduino que ejecuta comandos enviados remotamente por clientes mviles, como se muestra en la Figura 1.

Figura 1 Un Internet-de-cosas Arquitectura Utilizando el Windows Azure Service Bus

Si nos fijamos en el diagrama, el componente de Windows Azure Service Bus se convierte en la pieza central del diseo, proporcionando la autenticacin, la distribucin de mensajes y escalabilidad para soportar los mltiples dispositivos que vayan a enviar datos o recibir comandos remotos. El servicio de autobs est disponible en todos los centros de datos de Microsoft que ofrecen servicios de Windows Azure, y est respaldado por una infraestructura de almacenamiento altamente redundante. Adems, como todos los dems componentes de Windows Azure, que ofrece una interfaz abierta y REST fcil de entender, junto con mltiples SDKs (Microsoft. NET Framework, Java, PHP, Ruby, entre otros) construidas en la parte superior de la misma.

En nuestra propuesta de arquitectura, dispositivos de "hablar" con una aplicacin de NET. Ejecuta en Windows Azure servicios en la nube, que acta como una puerta de entrada al bus de servicios con el fin de simplificar el proceso de comunicacin con su cola asignada. Este enfoque permite totalmente cualquiera de los cuatro patrones de comunicacin de la IO se describen en nuestra columna anterior: Telemetra, Consulta, Mando y Notificacin. Aqu, vamos a implementar un escenario en el que un dispositivo mvil enva un comando a otro dispositivo con el fin de ejecutar una accin, en este caso, convertir una en LED o apagado. Uno de los beneficios de esta solucin es que si el dispositivo est temporalmente fuera de lnea, puede recoger los comandos cada vez que se conecte a Internet. Tambin puede establecer una fecha de caducidad en un mensaje para evitar la ejecucin de una tarea en un momento inconveniente o programar mensajes para ser enviados en un momento especfico en el futuro.

Para este ejemplo, vamos a utilizar el conocido dispositivo Arduino bien documentada, como se describe en nuestra columna anterior. Para la parte de cliente mvil de la prueba-de-concepto, vamos a crear una aplicacin de Windows Phone.Aqu est nuestro escenario simple :

Cuando se inicia el dispositivo de Arduino , enva una seal de identificacin de la aplicacin de puerta de enlace se ejecuta en Windows Azure Cloud Services . La puerta de enlace crea una cola de Service Bus para el dispositivo en caso de que no exista, y establece una conexin TCP , listo para enviar comandos .Una aplicacin de Windows Phone enva un comando a la cola de servicio de Windows Azure Bus asignado al dispositivo .El mensaje permanece en la cola hasta que la aplicacin de puerta de enlace lo recoge y enva el comando al dispositivo Arduino a travs de la conexin TCP establecida .El dispositivo Arduino convierte al LED encendido o apagado basado en el comando.Echemos un vistazo a los pasos para que esto suceda , uno por uno.

Paso 1: Crear el servicio de Windows Azure Bus Espacio de nombres con sus credenciales de Windows Azure ( puede solicitar una cuenta de prueba en bit.ly/1atsgSa ) , inicie sesin en el portal Web y haga clic en la seccin BUS SERVICE ( ver Figura 2 ) . Seleccione la opcin Crear y escriba un nombre para el espacio de nombres. A continuacin , haga clic en la informacin de conexin y copiar el texto en el cuadro Cadena de conexin , lo que usted necesitar ms adelante

Figura 2 Creacin del Bus de servicio Windows Azure Espacio de nombres

Paso 2: Crear la aplicacin de puerta de enlace e implementacin de Windows Azure Cloud Services Cdigo para la aplicacin de puerta de enlace, que recupera los mensajes de la cola de servicio de autobs y transmite las rdenes al dispositivo Arduino, se incluye en la descarga de cdigo (disponible en msdn.microsoft. com/magazine/msdnmag0314). Se basa en el trabajo de Clemens ms vasto, que contribuyeron amablemente su gua y experiencia para este artculo. Su proyecto original se puede encontrar en bit.ly/L0uK0v.

Antes de profundizar en este cdigo, asegrese de que tiene instalado Visual Studio 2013, junto con la versin 2.2 del Windows Azure SDK para. NET (bit.ly/JYXx5n). La solucin consta de tres proyectos diferentes:

ArduinoListener-contiene el cdigo principal WorkerRole. ConsoleListener-la versin de consola del ArduinoListener, para la prueba local. MSDNArduinoListener-el proyecto de implementacin de Windows Azure para ArduinoListener. Si usted examina los archivos ServiceConfiguration.cscfg (tanto para la nube y implementacin local) para el proyecto MSDNArduinoListener, vers un entorno que almacena la cadena de conexin para el servicio de autobs. Reemplazar su valor con el obtenido en el Paso 1. El resto ya est configurado para que la solucin funcione, incluyendo la definicin de 10,100 puerto para recibir conexiones de los dispositivos. A continuacin, abra el archivo WorkerRole.cs en el proyecto ArduinoListener, donde se encuentra el cdigo principal.En primer lugar, se crea un TcpListener, y se aceptan las conexiones de los dispositivos:

1. vardeviceServer=newTcpListener(deviceEP);2. deviceServer.Start(10);3. try4. {5. do6. {7. TcpClientconnection=8. awaitdeviceServer.AcceptTcpClientAsync();9. if(connection!=null)10. {...Una vez que una conexin con el dispositivo se ha establecido un NetworkStream se define y establece en modo de escucha. La variable readBuffer contendr el valor identificador enviado por cada dispositivo Arduino: ed:

1. NetworkStreamdeviceConnectionStream=connection.GetStream();2. varreadBuffer=newbyte[64];3. if(awaitdeviceConnectionStream.ReadAsync(readBuffer,0,4)==4)4. {5. intdeviceId=6. IPAddress.NetworkToHostOrder(BitConverter.ToInt32(readBuffer,0));7. ...A continuacin, se crea una cola basada en el valor deviceId (en caso de que no existe), y un objeto de receptor de mensaje se define (vase la Figura 3). Entonces, el receptor de colas dispositivo est configurado en el modo asncrono para tirar mensajes (comandos de la cola). Esta cola va a almacenar los comandos enviados por los dispositivos mviles, como un telfono de Windows.Figura 3 Creacin de una cola

1. varnamespaceManager=2. NamespaceManager.CreateFromConnectionString(3. RoleEnvironment.GetConfigurationSettingValue("serviceBusConnectionString"));4. if(!namespaceManager.QueueExists(string.Format("dev{0:X8}",deviceId)))5. {6. namespaceManager.CreateQueue(string.Format("dev{0:X8}",deviceId));7. }8. vardeviceQueueReceiver=messagingFactory.CreateMessageReceiver(9. string.Format("dev{0:X8}",deviceId),ReceiveMode.PeekLock);10. do11. {12. BrokeredMessagemessage=null;13. message=awaitdeviceQueueReceiver.ReceiveAsync();14. ...Cuando se recibe un mensaje de la cola, su contenido es inspeccionado y si coincide con los comandos "OFF" en "ON" o, la informacin se escribe en el flujo de la conexin establecida con el dispositivo (ver figura 4).

1. if(message!=null)2. {3. Streamstream=message.GetBody();4. StreamReaderreader=newStreamReader(stream);5. stringcommand=reader.ReadToEnd();6. if(command!=null)7. {8. switch(command.ToUpperInvariant())9. {10. case"ON":11. awaitdeviceConnectionStream.WriteAsync(OnFrame,0,12. OnFrame.Length);13. awaitmessage.CompleteAsync();14. break;15. case"OFF":16. awaitdeviceConnectionStream.WriteAsync(OffFrame,0,17. OffFrame.Length);18. awaitmessage.CompleteAsync();19. break;20. }21. }22. }

Observe que el mensaje no se elimina de la cola (message.CompleteAsync) a menos que la operacin de escritura en la secuencia de la conexin del dispositivo se realiza correctamente. Adems, con el fin de mantener viva la conexin, se espera que el dispositivo para que enve un latido ping. Para esta prueba de concepto, no estamos esperando la confirmacin de que el dispositivo cuando se recibe el mensaje. En un sistema de produccin, sin embargo, esto estara obligado a cumplir con el patrn de "comando".

Paso 3: Implementar el proyecto de Windows Azure ArduinoListener a Cloud Services Implementar el ArduinoListener a Windows Azure es extremadamente simple. En Visual Studio 2013, haga clic en el proyecto MSDNArduinoListener y seleccione la opcin de Publicar. Encontrar instrucciones especficas para el Publica de Windows Asistente para aplicaciones Azure en bit.ly/1iP9g2p. Despus de completar el asistente, usted termina con un servicio de nube situada en xyz.cloudapp.net. Anote este nombre, ya que lo necesitar cuando se crea el cliente Arduino en el siguiente paso.

Paso 4: Programe el dispositivo Arduino para comunicarse con la pasarela (Listener) Arduino dispositivos ofrecen una rica interfaz para la realizacin de operaciones de la red utilizando un objeto de cliente Web simple. Para nuestro prototipo, se decidi utilizar el modelo Arduino Uno R3 (bit.ly/18ZlcM8), junto con su correspondiente escudo Ethernet (bit.ly/1do6eRD). Para instalar, interactuar y dispositivos Arduino programa que utilizan Windows, siga la gua en bit.ly/1dNBi9R. Usted va a terminar con un IDE fcil de usar (llamada la aplicacin Arduino), donde se puede escribir programas (llamados bocetos) utilizando JavaScript, como se muestra en la figura 5.

Figure 5 The Arduino ApplicationLa figura 6 muestra el boceto para interactuar con el Arduino Listener creado en el paso 3, y ahora desplegada en Windows Azure.

1. #include#include#include2. //EnteraMACaddressandIPaddressforyourcontrollerbelow.3. //TheIPaddresswillbedependentonyourlocalnetwork,4. //andit'soptionalifDHCPisenabled.5. bytemac[]={0x90,0xA2,0xDA,0x0D,0xBC,0xAE};6. staticconstbytedeviceId[]={0x00,0x00,0x00,0x01};7. staticconstuint8_tACK=0x01;8. staticconstintLED_PIN=8;9. intconnected=0;10. EthernetClientclient;11. StopWatchstopWatch;12. longpingInterval=200000;13. voidsetup(){Serial.begin(9600);14. Serial.println("Initialized");15. Ethernet.begin(mac);16. pinMode(LED_PIN,OUTPUT);}17. voidturnLedOn(){digitalWrite(LED_PIN,HIGH);}18. voidturnLedOff(){digitalWrite(LED_PIN,LOW);}19. voidloop(){20. if(connected==0){21. Serial.println("Tryingtoconnect");22. char*host="xyz.cloudapp.net";23. client.setTimeout(10000);24. connected=client.connect(host,10100);25. if(connected){26. Serial.println(27. "Connectedtoport,writingdeviceIdandwaitingforcommands...");28. client.write(deviceId,sizeof(deviceId));29. stopWatch.start();30. }31. else32. {33. Serial.println("Connectionunsuccessful");34. client.stop();35. stopWatch.reset();36. }37. }38. if(connected==1)39. {40. if(stopWatch.elapsed()>pingInterval)41. {42. Serial.println("PingingServertokeepconnectionalive...");43. client.write(deviceId,sizeof(deviceId));44. stopWatch.reset();45. stopWatch.start();46. }47. bytebuf[16];48. intreadResult=client.read(buf,1);49. if(readResult==0)50. {51. Serial.println("Can'tfindlistener,disconnecting...");52. connected=0;53. stopWatch.reset();54. }55. elseif(readResult==1)56. {57. Serial.println("Dataacquired,processing...");58. switch(buf[0])59. {60. case1:61. Serial.println("Commandtoturnledonreceived...");62. turnLedOn();63. break;64. case2:65. Serial.println("Commandtoturnledoffreceived...");66. turnLedOff();67. break;68. }69. stopWatch.reset();70. stopWatch.start();71. }72. }73. }Bocetos para el Arduino tienen dos secciones principales: configuracin y bucle. Las instrucciones en la seccin de configuracin se ejecutan una vez, y aqu es donde se inicializan las variables y las conexiones establecidas. En nuestro ejemplo, el cliente de Ethernet y los valores relacionados se definen, se establece una conexin en serie (para propsitos de depuracin) y el pin que se conecta el LED se inicializa como un puerto de salida.

Cdigo en la seccin de bucle se ejecuta constantemente, e incluye dos grandes bloques en funcin del estado de la conexin TCP entre el dispositivo de Arduino y el oyente que se ejecutan en Windows Azure Cloud Services: conectado o desconectado. Cuando se establece la conexin por primera vez, un objeto cronmetro se pone en marcha para realizar un seguimiento del tiempo transcurrido para la conexin. Adems, el identificador de dispositivo se enva a la escucha, para ser utilizado como el nombre de la cola en la que se almacenan los mensajes y comandos.

El bloque de cdigo que controla el comportamiento Arduino despus de la conexin se ha establecido un seguimiento del tiempo transcurrido desde que se cre la conexin, ping al oyente cada 200.000 ms, para mantener la conexin activa cuando se reciben comandos. Este cdigo tambin intenta leer los datos por parte del oyente, poniendo los datos en el array buf cuando llegue. Si se detecta un valor de "1", el LED se enciende, si el valor es "2", el LED se apaga. El objeto cronmetro se pone a cero despus de cada comando.

Una vez que el boceto se ha cargado en el dispositivo, el cdigo se ejecuta en el controlador Arduino en un bucle infinito, tratando de conectarse a un servicio en la nube. Cuando se conecta, enva el ID del dispositivo por lo que el servicio en la nube sabe a qu dispositivo se est hablando. A continuacin, el cdigo comienza a leer la entrada desde el servicio en la nube, diciendo que el dispositivo si desea activar o desactivar la luz LED (en este caso, que est conectado al puerto digital 8 del dispositivo).

Paso 5: Creacin de un cliente de Windows Phone para enviar a la cola de dispositivo La interaccin con el dispositivo es tan sencillo como enviar mensajes a la cola de un dispositivo. Como hemos mencionado al principio del artculo, el servicio de Windows Azure Bus proporciona una interfaz REST que permite interactuar con l a partir de mltiples lenguajes de programacin. Porque no hay un SDK oficial para desarrolladores de Windows Phone, se utiliz uno de los ejemplos de la comunidad de Windows Phone, que muestra cmo autenticar e interactuar con el servicio de bus en las peticiones HTTP y el objeto WebClient. El cdigo fuente tambin se incluye en la descarga de cdigo, en el proyecto de Visual Studio 2013 denominado MSDNArduinoClient. La figura 7 muestra la pantalla principal del cliente, de la cual usted enva comandos al dispositivo Arduino.

Figure 7 The Windows Phone Client InterfaceCreacin de clientes similares para otros dispositivos mviles (incluyendo iOS y Android) no sera difcil, ya que la mayora de ellos ofrecen las bibliotecas para generar comandos de REST utilizando HTTP request clientes. Adems, es posible interactuar directamente con el servicio de Windows Azure Bus de las lenguas tradicionales como Java, PHP o Ruby, que simplifica este proceso. Estos SDK se publican bajo una licencia de cdigo abierto, y se puede encontrar en github.com / windowsazure.

Conclusin La construccin de una arquitectura de Internet-de-cosas con el Windows Azure Bus de servicio para administrar dispositivos y servicios de conexiones proporciona una manera fcil de conseguir, la escala y los clientes de direccin individualmente sin incurrir en costosas soluciones de VPN, con la ventaja de manejar de manera eficiente los escenarios en ocasiones inconexas. Colas actan como buzones dedicados donde se intercambian mensajes entre los dispositivos y los servicios, el apoyo a los diferentes casos de uso y los patrones de comunicacin que se encuentran comnmente en el campo. Windows Azure proporciona una infraestructura fiable, geo-distribuida y robusta para el despliegue de los servicios requeridos con un alto volumen de sensores interconectados y metros-una tendencia que va a seguir creciendo en los prximos aos.

Bruno Terkaly es un evangelista de desarrollador de Microsoft. Su profundo conocimiento proviene de aos de experiencia en el campo, escribir cdigo utilizando una multitud de plataformas, lenguajes, frameworks, SDK, libreras y APIs. Pasa tiempo en escribir cdigo, los blogs y hacer presentaciones en vivo en la creacin de aplicaciones basadas en la nube, en concreto utilizando la plataforma Windows Azure. Puedes leer su blog en blogs.msdn.com / b / brunoterkaly.

Ricardo Villalobos es arquitecto de software con experiencia con ms de 15 aos de experiencia en el diseo y creacin de aplicaciones para empresas de diversas industrias. La celebracin de diferentes certificaciones tcnicas, as como una maestra en administracin de empresas por la Universidad de Dallas, trabaja como arquitecto nube en el DPE comprometida en el mundo Socios equipo de Microsoft, ayudando a las empresas en todo el mundo para implementar soluciones en Windows Azure. Puedes leer su blog en blog.ricardovillalobos.com.

Terkaly y Villalobos conjuntamente presentes en conferencias de la industria de gran tamao. Animan a los lectores de Windows Azure Insider en contacto con ellos para la disponibilidad. Terkaly se puede llegar a [email protected] y Villalobos se puede llegar a Ricardo.Villalobos @ microsoft.com.

Gracias a los siguientes expertos tcnicos de Microsoft por la revisin de este artculo: Abhishek Lal y Clemens Vasters.