O Azure IOT Hub, é uma das soluções da Microsoft para suportar demandas tecnológicas de IoT – como segurança, confiabilidade e escalabilidade. Segundo a Mckinsey, este será um mercado de U$11,1 trilhões até 2025.
Veja também
- Como IoT pode ajudar a revolucionar o varejo, fidelizando clientes
- Vídeo da palestra “Arquitetura de negócios para um mundo conectado & inteligente”
O IoT Hub permite a comunicação bidirecional e opcionalmente particular entre backend e milhares de dispositivos na ponta, atuando como uma espécie de mediador (ou hub), fornecendo endpoints para as partes. Além disso, tem custos extremamente baixos.
Embora tenha sido planejada para IoT, nada impede que extrapolemos seu uso para outros cenários. Recentemente, por exemplo, experimentamos a tecnologia para implementar comunicação bidirecional entre um backend, na nuvem, e milhares (potencialmente milhões) de aplicações remotas. Nossa decisão por experimentar a tecnologia, além do custo e do poder da tecnologia foi influenciada pela extrema facilidade de implementação propiciada pelos SDKs.
Não deixa de ser surpreendente como, uma vez registrados, o envio de mensagens particulares, partindo de um backend na nuvem, para dispositivos (no nosso caso, aplicações remotas) ocorre com algumas poucas linhas de código.
using System; using System.Text; using System.Threading.Tasks; using Microsoft.Azure.Devices; namespace IotHub.Cloud { class Program { private const string ConnectionString = "HostName=<Hostname>.azure-devices.net;SharedAccessKeyName=<AccessKeyName>;SharedAccessKey=<AccessKey>"; private static ServiceClient _serviceClient; static async Task Main(string[] args) { _serviceClient = ServiceClient.CreateFromConnectionString(ConnectionString); Console.WriteLine("Press any key to send a Cloud-to-device message.n"); Console.ReadLine(); await SendCloudToDeviceMessageAsync("MyConsoleDevice"); Console.ReadLine(); } private static async Task SendCloudToDeviceMessageAsync(string deviceId) { var commandMessage = new Message(Encoding.ASCII.GetBytes($"{DateTime.Now}: Cloud to device message.")); await _serviceClient.SendAsync(deviceId, commandMessage); Console.WriteLine($"Message sent"); } } }
Da mesma forma, é extremamente interessante como a implementação no “lado cliente” também é enxuta.
using System; using System.Text; using System.Threading.Tasks; using Microsoft.Azure.Devices.Client; namespace IotHub.Device { class Program { private const string ConnectionString = "HostName=<Hostname>.azure-devices.net;DeviceId=MyConsoleDevice;SharedAccessKey=<AccessKey>"; static async Task Main(string[] args) { var deviceClient = DeviceClient.CreateFromConnectionString(ConnectionString); Console.WriteLine("nReceiving cloud to device messages from backend service"); while (true) { try { var receivedMessage = await deviceClient.ReceiveAsync(); if (receivedMessage == null) continue; Console.WriteLine("Received message: {0}", Encoding.ASCII.GetString(receivedMessage.GetBytes())); await deviceClient.CompleteAsync(receivedMessage); } catch (Exception ex) { Console.WriteLine($"Error: {ex}"); } } } } }
A corrida pela liderança em nuvem faz com que provedores de serviços, como a Microsoft, lancem novas tecnologias com frequência considerável. Muitas vezes, essas tecnologias, mesmo criadas com propósitos bem específicos, viabilizam o desenvolvimento de soluções inteligentes e simples para cenários diferentes e complexos.O Azure IOT Hub, em nosso entendimento, é exemplar desse fenômeno.