Profiteren van de Azure IoT Hub? Startersguide voor developers

Het op grote schaal verzamelen en analyseren van gegevens is voor meer en meer software gedreven organisaties een speerpunt. Ze willen nieuwe of verbeterde diensten leveren. Je komt hierbij veel IT buzzwords tegen zoals 'big data', 'cloud', 'security', 'artificial intelligence', 'machine learning' en 'business intelligence (BI)'. Zo ook 'Internet of Things'.

Wil jij je data in de cloud krijgen en je diensten verbeteren?  Maak je gebruik van veel apparaten ('devices', ofwel 'things')? Dan is het aan te raden om Internet of Things (IoT) te gebruiken.

Microsoft biedt met de 'Azure IoT Hub' een centraal punt in de Azure cloud omgeving waarnaar je vanuit veel devices gegevens kunt sturen. Ook kan je commando's naar de individuele apparaten sturen. Daarnaast kan je via de Azure IoT Hub bestanden in Azure Blob Storage zetten.

Aan welke devices moet je denken? Dit kan van alles zijn:

Devices IoT (Visual).png

Het kiezen voor de Azure IoT Hub van Microsoft heeft vele voordelen:

  • standaard veilige communicatie naar de hub;
  • apparaat beheer 'out of the box';
  • het kan veel data aan;
  • het is schaalbaar;
  • voorbeeld code en software development kit (SDK) voor meerdere programmeertalen beschikbaar.

Hoe zet je de Azure IoT Hub op? Waar moet je rekening mee houden? En hoe communiceer je met de Hub? Door onderstaande stappen te volgen kun je optimaal profiteren van de voordelen van de Hub.


Wat is de Azure IoT Hub?

De Azure Internet of Things Hub is een component in de Azure cloud omgeving dat het berichtenverkeer en device management voor je uit handen neemt. Het is een centraal punt op internet waar berichten van maximaal 256 kB over het HTTP of AMQP protocol gestuurd kunnen worden.

Berichten versturen en commando's ontvangen kan via de volgende manieren:

  • REST service
  • .NET SDK
  • Python SDK
  • Java SDK
  • C SDK
  • Node.js SDK

De berichten van je apparaten komen binnen in de Azure Event Hub, die in de IoT Hub zit. Hier kunnen ze vervolgens uitgelezen worden.

Bij het opzetten van de Azure IoT Hub kun je gebruik maken van handige tooling, namelijk:

  • de Azure Portal
  • de Device Explorer
  • de Service Bus Explorer

De Azure Portal

In de Azure Portal kan je de IoT Hub opzetten en configureren. Je kan hier bovendien devices aanmaken en kijken of ze actief zijn. Daarnaast kan je de keys ophalen die nodig zijn om via code met de Azure IoT Hub te communiceren.

Voor toegang tot de Azure Portal heb je een Azure account nodig. Beschik je over een zogenaamde MSDN subscriptie, dan heb je al een tegoed van 130 euro per maand.

Azure Portal (Text Image [c]).png

De Device Explorer

Met de Device Explorer kan je de Hub kant van de IoT Hub bekijken.

Je ziet de binnenkomende berichten en kan commando's naar de devices sturen. Ook kan je devices aanmaken en verwijderen.

Device explorer IoT Hub (Text Image).png

De Service Bus Explorer

Met de Service Bus Explorer kan je berichten lezen van een Event Hub. Dit zijn de berichten die naar de IoT Hub gestuurd worden.

Dit doe je door op een consumergroup een listener aan te maken. Je kan hier ook een 'Azure Service Bus' mee uitlezen.

 

Service bus explorer IoT hub.PNG

Jouw IoT Hub opzetten in de Azure Portal

Log in op de Azure portal en zet de IoT Hub op in de volgende stappen:

Create IoT hub (1) (Visual1).png

  1. Selecteer '+ Create a resource'.
  2. Selecteer 'Internet of Things'.
  3. Selecteer 'IoT Hub'.
  4. Vul de naam in voor je IoT Hub.
  5. Vul de prijs en scale in (de gratis versie kan tot 8000 berichten per dag ontvangen).
  6. Laat het aantal units op 1 staan.
  7. Laat het aantal partities op 2 staan.
  8. Selecteer je 'Azure Resource Group' voor je IoT Hub. Maak er een aan als je er nog geen hebt.
  9. Laat de subscription staan zoals die is.
  10. Selecteer je locatie voor de IoT Hub.
  11. Druk op 'Create' en wacht.
Create IoT hub (2) (Text Image).png

Storage aanmaken en koppelen aan de IoT Hub in Azure

Create storage IoT Hub (1) (Visual1).png
  1. Selecteer 'File upload' en vervolgens 'Azure storage container' in de IoT Hub.
  2. Selecteer '+ Storage account', vul de naam in en bevestig met 'OK'.
  3. Selecteer je storage account en vervolgens '+ Container'. Vul de naam voor de container in en bevestig met 'OK'.
  4. Klik 'Select'.
Create storage IoT Hub (2) (Visual2).png

Aanmaken device

Vervolgens kun je in de Azure Iot Hub apparaten toevoegen. Dit doe je door in de Hub 'IoT Devices' te selecteren, via 'Add' vul je een naam in voor je device ('Device ID'). Om uiteindelijk je toevoeging op te slaan.

Create device IoT hub.png

Nu kun je aan de slag met het opzetten van de connectie tussen de verschillende onderdelen. Voor de Azure IoT Hub heb je vier verschillende 'connection strings':

  1. Device connection string
  2. Event Hub connection string
  3. Device management connection string
  4. Storage connection string

Device connection string

Deze connection string heb je nodig om berichten naar de IoT Hub te sturen.

  1. In de Iot Hub selecteer 'IoT Devices'
  2. Selecteer je device
  3. Druk op het copy icoon.
Device connectionstring IoT hub (Text Image).png

Event Hub connection string

Deze connection string is nodig om berichten van de aan de IoT Hub gekoppelde Event Hub te ontvangen.

  1. In de Iot Hub selecteer 'Endpoints'
  2. Selecteer 'Events'
  3. Druk op het copy icoon voor de Event Hub-naam
  4. Druk op het copy icoon voor de connection string
Eventhub connectionstring IoT hub (Text Image).png

Device management connection string

Deze connection string heb je nodig om commando's via de IoT Hub naar een device te sturen.

  1. Selecteer 'Shared access policies'
  2. Selecteer 'service'
  3. Druk op het copy icoon.
Device management connectionstring IoT hub (1).png

Storage connection string

Deze connection string heb je nodig als je een WebJob trigger gebruikt om de Event Hub uit te lezen.

  1. In de storage selecteer 'Access keys'
  2. Bij connection string druk op het copy icoon
Storage connectionstring IoT Hub (Text Image).png

Berichten sturen naar de IoT Hub

Om berichten naar de IoT Hub te sturen gebruik je een command-line applicatie in combinatie met de .NET SDK. Daarmee kan je op een simpele manier software draaien op zowel Windows als Linux via 'Mono' of '.NET Core Standard'.

Maak in Visual Studio een console applicatie aan. Voeg daar bij references  manage NuGet packages de volgende package toe 'Microsoft.Azure.Devices.Client'

NuGet Package Manager - Devices client - IoT hub (Visual).png

Nadat je dit gedaan hebt, kan je met de volgende code een bericht sturen naar de IoT Hub:

using Microsoft.Azure.Devices.Client;
using System;
using System.Text;
namespace IoTHubBlogConsole
{
  class Program
  {
    static void Main(string[] args)
    {
      var connectionString = "YourDeviceConnectionString";
      var client = DeviceClient.CreateFromConnectionString(connectionString);
      var message = new Message(Encoding.UTF8.GetBytes($"hello @ {DateTime.Now}"));
      client.SendEventAsync(message).Wait();
    }
  }
}

Berichten lezen van de IoT Hub

Om de berichten van de Event Hub te lezen gebruik je een WebJob met een Event Hub trigger. Normaal deploy je een WebJob op Azure onder een WebApplicatie.


Zo maak je een WebJob aan:

  1. Selecteer 'Cloud' (wellicht moet je nog de Azure SDK installeren)
  2. Selecteer 'Azure WebJob'
  3. Geef je WebJob een naam
  4. Klik op 'OK'
Create webapp webjob (Text Image).png

Hierna is het noodzakelijk dat je wat NuGet packages toevoegd.

  1. Zoek in de NuGet package manager naar 'Microsoft.Azure.WebJobs.Extensions' en klik op 'Install'
  2. Zoek in de NuGet package manager naar 'Microsoft.Azure.WebJobs.ServiceBus' en klik op 'Install'
NuGet webjobs extensions & servicebus - IoT Hub (1).png

Voeg vervolgens in de app.config bij 'AzureWebJobsDashboard' en 'AzureWebJobsStorage' je storage connection string in.

Webjobconfig IoT hub (Visual).png

Hierna vul je in de 'Program.cs' deze code in:

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.ServiceBus;
namespace IotHubBlogWebappWebJob
{
  class Program
  {
    static void Main()
    {
      string eventHubName = "yourEventhubName";
      string connString = "yourEventhubConnectionstring";
      var config = new JobHostConfiguration();
      var eventHubConfig = new EventHubConfiguration();
      eventHubConfig.AddReceiver(eventHubName, connString);
      config.UseEventHub(eventHubConfig);
      JobHost host = new JobHost(config);
      host.RunAndBlock();
    }
  }
}

Bij 'Functions.cs' vul je de volgende code in:

using Microsoft.Azure.WebJobs.ServiceBus;
using Microsoft.ServiceBus.Messaging;
using System.Text;
namespace IotHubBlogWebappWebJob
{
  public class Functions
  {
    public void TriggerEvents([EventHubTrigger("yourEventhubName")] EventData[] events)
    {
      foreach (var eventData in events) {
        string data = Encoding.UTF8.GetString(eventData.GetBytes());
        // doe iets met je data
      }
    }
  }
}

Commando's sturen naar je device

Maak in Visual Studio een console applicatie aan. Voeg daar bij references ➡ manage NuGet packages de volgende package toe 'Microsoft.Azure.Devices'.

NuGet Package Manager - Devices services - IoT hub (Visual).png

Hier is de code om dit te doen, wederom in een command-line applicatie. In de praktijk zal dit eerder een service of website zijn:

using Microsoft.Azure.Devices;
using System;
using System.Text;
namespace IoTHubBlogConsole
{
  class Program
  {
    static void Main(string[] args)
    {
      var deviceId = "MyDevice"; //name of the device
      var text = Console.ReadLine();
      var connectionString = "YourDeviceManagementConnectionstring";
      var client = ServiceClient.CreateFromConnectionString(connectionString);
      var message = new Message(Encoding.UTF8.GetBytes(text));
      client.SendAsync(deviceId, message).Wait();
      Console.WriteLine("command send");
      Console.ReadLine();
    }
  }
}

Commando's ontvangen op je device

Hiervoor heb je de DeviceClient nodig uit de SDK. De code is als volgt:

using Microsoft.Azure.Devices.Client;
using System;
using System.Text;
namespace IoTHubBlogConsole
{
  class Program
  {
    static void Main(string[] args)
    {
      var connectionString = "YourDeviceConnectionString";
      var client = DeviceClient.CreateFromConnectionString(connectionString);
      var commando = client.ReceiveAsync().Result;
      client.CompleteAsync(commando).Wait();
      var text = Encoding.UTF8.GetString(commando.GetBytes());
      Console.WriteLine(text);
      Console.ReadLine();
    }
    }
}

Je roept de 'CompleteAsync' aan op de commando om te laten weten dat je de opdracht hebt ontvangen.


Een bestand versturen naar Azure Blob Storage

Het bestand komt in de container met de deviceID in het pad. Dit zodat je ziet welk device welke bestanden upload. Via de DeviceClient:

using Microsoft.Azure.Devices.Client;
using System;
using System.IO;

namespace IoTHubBlogConsole
{
  class Program
  {
    static void Main(string[] args)
    {
      var connectionString = "YourDeviceConnectionString";
      var client = DeviceClient.CreateFromConnectionString(connectionString);
      var fileInfo = new FileInfo("c:\\test\\test.png");
      if (fileInfo.Exists)
      {
        using (var fileStream = new FileStream(fileInfo.FullName, FileMode.Open))
        {
           client.UploadToBlobAsync(fileInfo.Name, fileStream).Wait();
        }
      }
      Console.WriteLine("file send");
      Console.ReadLine();
    }
  }
}

Aan de slag

Je kunt nu berichten versturen van je device naar de Azure IoT Hub. Deze berichten kun je via een WebJob uitlezen van de Event Hub. Daarnaast kun je vanaf een service of website commando's versturen naar de IoT Hub, die de devices weer kunnen ophalen.

Als laatste heb je gezien hoe je een bestand via de IoT Hub van een apparaat naar de storage stuurt.

Heel veel succes!

Wil je je verder verdiepen? Kijk dan ook eens naar Azure IoT Edge. Een nieuwe ontwikkeling binnen Internet of Things waarbij er steeds meer functionaliteit naar de 'edge' gaat, oftewel de devices. Hiermee kan je functionaliteiten, die eerst in de cloud draaien, naar de apparaten pushen. 

Wil je meer weten over Azure, de IoT Hub of IoT Edge? Neem contact met ons op, we horen het graag!


Profiteren van de Azure IoT Hub? Startersguide voor developers

Betabitter Herbert


Serverless: Stand van zaken

Kom jij bij ons werken?