Zelfstudie: Azure CLI en de Azure-portal gebruiken om IoT Hub-berichtroutering te configureren

Met berichtroutering kunt u telemetriegegevens verzenden van uw IoT-apparaten naar ingebouwde, met Event Hub compatibele eindpunten of aangepaste eindpunten zoals blobopslag, Service Bus-wachtrijen, Service Bus-onderwerpen en Event Hubs. Als u een aangepaste berichtroutering wilt configureren, maakt u routeringsquery’s om een route aan te passen die overeenkomt met een bepaalde regel. Zodra u deze hebt ingesteld, worden de inkomende gegevens automatisch door de IoT Hub doorgestuurd naar de eindpunten. Als een bericht niet overeen komt met een van de gedefinieerde routeringsquery's, wordt het doorgeleid naar het standaard eindpunt.

In deze tweedelige zelfstudie leert u hoe u deze aangepaste routeringsquery’s kunt instellen en gebruiken met IoT Hub. U stuurt berichten door van een IoT-apparaat naar een of meerdere eindpunten, met inbegrip van blobopslag en een Service Bus-wachtrij. Berichten in de Service Bus-wachtrij worden opgehaald door een logische app en via e-mail verzonden. Berichten waarvoor geen aangepaste berichtroutering is gedefinieerd, worden naar het standaardeindpunt gestuurd, vervolgens opgehaald door Azure Stream Analytics en weergegeven in een Power BI-visualisatie.

Als u deel 1 en 2 van deze zelfstudie wilt afronden, voert u de volgende taken uit:

Deel I: Resources maken, berichtroutering instellen

  • Maak de resources: een IoT hub, een opslagaccount, een Service Bus-wachtrij en een gesimuleerd apparaat. U kunt dit doen met behulp van Azure Portal, een Azure Resource Manager-sjabloon, de Azure CLI of Azure PowerShell.
  • Configureer de eindpunten en berichtroutes in IoT Hub voor het opslagaccount en de Service Bus-wachtrij.

Deel II: Berichten verzenden naar de hub, gerouteerde resultaten weergeven

  • Maak een logische app die wordt geactiveerd en een e-mailbericht verzendt wanneer een bericht wordt toegevoegd aan de Service Bus-wachtrij.
  • Download een app die een IoT-apparaat aanzet tot het verzenden van berichten naar de hub voor de verschillende routeringsopties en voer deze uit.
  • Maak een Power BI-visualisatie voor gegevens die naar het standaardeindpunt worden verzonden.
  • Bekijk de resultaten...
  • .. .in de Service Bus-wachtrij en e-mailberichten.
  • ...in het opslagaccount.
  • ...in de Power BI-visualisatie.

Vereisten

  • Voor Deel 1 van deze zelfstudie:

    • U hebt een abonnement op Azure nodig. Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint.
  • Voor Deel 2 van deze zelfstudie:

    • U moet Deel 1 van deze zelfstudie hebben afgerond en de resources nog tot uw beschikking hebben.
    • Installeer Visual Studio.
    • Toegang tot een Power BI-account voor het analyseren van de Stream Analytics van het standaardeindpunt. (Probeer Power BI gratis uit.)
    • Een werk- of schoolaccount voor het verzenden van e-mailberichten.
    • Zorg ervoor dat de poort 8883 is geopend in de firewall. In het voorbeeld in deze zelfstudie wordt het MQTT-protocol gebruikt, dat communiceert via poort 8883. Deze poort is in sommige netwerkomgevingen van bedrijven en onderwijsinstellingen mogelijk geblokkeerd. Zie Verbinding maken met IoT Hub (MQTT) voor meer informatie en manieren om dit probleem te omzeilen.

Azure Cloud Shell gebruiken

Azure host Azure Cloud Shell, een interactieve shell-omgeving die u via uw browser kunt gebruiken. U kunt Bash of PowerShell gebruiken met Cloud Shell om met Azure-services te werken. U kunt de vooraf geïnstalleerde opdrachten van Cloud Shell gebruiken om de code in dit artikel uit te voeren zonder dat u iets hoeft te installeren in uw lokale omgeving.

Om Azure Cloud Shell op te starten:

Optie Voorbeeld/koppeling
Selecteer Nu proberen in de rechterbovenhoek van een codeblok. Als u Uitproberen selecteert, wordt de code niet automatisch gekopieerd naar Cloud Shell. Voorbeeld van Uitproberen voor Azure Cloud Shell
Ga naar https://shell.azure.com, of selecteer de knop Cloud Shell starten om Cloud Shell in uw browser te openen. Cloud Shell starten in een nieuw venster
Klik op de knop Cloud Shell in het menu in de balk rechtsboven in de Azure-portal. Knop Cloud Shell in de Azure Portal

Om de code in dit artikel in Azure Cloud Shell uit te voeren:

  1. Start Cloud Shell.

  2. Selecteer de knop Kopiëren op een codeblok om de code te kopiëren.

  3. Plak de code in de Cloud Shell-sessie door CTRL+Shift+V te selecteren in Windows en Linux of door Cmd+Shift+V op macOS te selecteren.

  4. Selecteer Invoeren om de code uit te voeren.

Basisresources maken

Voordat u de berichtroutering kunt configureren, moet u een IoT-hub, een opslagaccount en een Service Bus-wachtrij maken. Deze resources kunnen worden gemaakt met behulp van een van de vier artikelen die beschikbaar zijn voor deel 1 van deze zelfstudie: Azure Portal, een Azure Resource Manager-sjabloon, de Azure CLI of Azure PowerShell.

Gebruik dezelfde resourcegroep en -locatie voor alle resources. Vervolgens kunt u alle resources aan het einde in één stap verwijderen door de resourcegroep te verwijderen.

Hieronder vindt u een overzicht van de stappen die in de volgende secties moeten worden uitgevoerd:

  1. Maak een resourcegroep.

  2. Maak een IoT Hub in de S1-laag. Voeg een consumentengroep toe aan uw IoT Hub. De consumentengroep wordt gebruikt door de Azure Stream Analytics bij het ophalen van gegevens.

    Notitie

    U moet een IoT Hub in een betaalde laag gebruiken om deze zelfstudie te voltooien. Met de gratis laag kunt u slechts één eindpunt instellen, terwijl voor deze zelfstudie meerdere eindpunten zijn vereist.

  3. Maak een standaard V1-opslagaccount met Standard_LRS replicatie.

  4. Maak een Service Bus-naamruimte en -wachtrij.

  5. Maak een apparaat-id voor het gesimuleerde apparaat dat berichten naar uw hub verzendt. Sla de sleutel op voor de testfase. (Als u een Resource Manager-sjabloon maakt, doet u dit na het implementeren van de sjabloon.)

Azure CLI gebruiken om de basisresources te maken

In deze zelfstudie wordt Azure CLI gebruikt om de basisresources te maken, en wordt vervolgens de Azure-portal gebruikt om te laten zien hoe u berichtroutering configureert en het virtuele apparaat instelt om te testen.

Kopieer en plak het onderstaande script in Cloud Shell en druk op Enter. Het script wordt met één regel tegelijk uitgevoerd. Hiermee worden de basisresources voor deze zelfstudie gemaakt, waaronder het opslagaccount, de IoT Hub, de Service Bus-naamruimte en de Service Bus-wachtrij.

Er zijn een aantal resourcenamen die wereldwijd uniek moeten zijn, zoals de naam van de IoT Hub en van het opslagaccount. Om dit gemakkelijker te maken, wordt aan die resourcenamen een willekeurige alfanumerieke waarde genaamd randomValue toegevoegd. De randomValue wordt bovenaan het script eenmaal gegenereerd en waar nodig aan de resourcenamen in het hele script toegevoegd. Als u niet wilt dat de waarde willekeurig is, kunt u deze instellen op een lege tekenreeks of op een specifieke waarde.

Tip

Een tip over foutopsporing: dit script maakt gebruik van het vervolgsymbool (de backslash \) om het script beter leesbaar te maken. Als u problemen ondervindt met het uitvoeren van het script, zorg dan dat uw Cloud Shell-sessie bash uitvoert en dat er geen spatie na een backslash staat.

# This retrieves the subscription id of the account 
#   in which you're logged in.
# This field is used to set up the routing queries.
subscriptionID=$(az account show --query id)

# Concatenate this number onto the resources that have to be globally unique.
# You can set this to "" or to a specific value if you don't want it to be random.
# This retrieves a random value.
randomValue=$RANDOM

# Set the values for the resource names that 
#   don't have to be globally unique.
location=westus
resourceGroup=ContosoResources
iotHubConsumerGroup=ContosoConsumers
containerName=contosoresults

# Create the resource group to be used
#   for all the resources for this tutorial.
az group create --name $resourceGroup \
    --location $location

# The IoT hub name must be globally unique, 
#   so add a random value to the end.
iotHubName=ContosoTestHub$randomValue 
echo "IoT hub name = " $iotHubName

# Create the IoT hub.
az iot hub create --name $iotHubName \
    --resource-group $resourceGroup \
    --sku S1 --location $location

# Add a consumer group to the IoT hub for the 'events' endpoint.
az iot hub consumer-group create --hub-name $iotHubName \
    --name $iotHubConsumerGroup

# The storage account name must be globally unique, 
#   so add a random value to the end.
storageAccountName=contosostorage$randomValue
echo "Storage account name = " $storageAccountName

# Create the storage account to be used as a routing destination.
az storage account create --name $storageAccountName \
    --resource-group $resourceGroup \
    --location $location \
    --sku Standard_LRS

# Get the primary storage account key. 
#    You need this to create the container.
storageAccountKey=$(az storage account keys list \
    --resource-group $resourceGroup \
    --account-name $storageAccountName \
    --query "[0].value" | tr -d '"') 

# See the value of the storage account key.
echo "storage account key = " $storageAccountKey

# Create the container in the storage account. 
az storage container create --name $containerName \
    --account-name $storageAccountName \
    --account-key $storageAccountKey \
    --public-access off

# The Service Bus namespace must be globally unique, 
#   so add a random value to the end.
sbNamespace=ContosoSBNamespace$randomValue
echo "Service Bus namespace = " $sbNamespace

# Create the Service Bus namespace.
az servicebus namespace create --resource-group $resourceGroup \
    --name $sbNamespace \
    --location $location

# The Service Bus queue name must be globally unique, 
#   so add a random value to the end.
sbQueueName=ContosoSBQueue$randomValue
echo "Service Bus queue name = " $sbQueueName

# Create the Service Bus queue to be used as a routing destination.
az servicebus queue create --name $sbQueueName \
    --namespace-name $sbNamespace \
    --resource-group $resourceGroup

Nu de basisresources zijn ingesteld, kunt u de berichtroutering configureren in de Azure-portal.

Berichtroutering instellen

U gaat berichten naar andere resources doorsturen op basis van eigenschappen die door het gesimuleerde apparaat aan het bericht zijn gekoppeld. Berichten die niet aangepast zijn doorgestuurd, worden verzonden naar het standaardeindpunt (berichten/gebeurtenissen). In de volgende zelfstudie stuurt u berichten naar IoT Hub en ziet u dat ze naar de verschillende bestemmingen worden gerouteerd.

Waarde Resultaat
niveau = 'opslag' Schrijf naar Azure Storage.
niveau = 'kritiek' Schrijf naar een Service Bus-wachtrij. Een logische app haalt het bericht op uit de wachtrij en gebruikt Office 365 om het bericht via e-mail te versturen.
standaardinstelling Geef deze gegevens weer met Power BI.

In de eerste stap bestaat uit het instellen van het eindpunt waarnaar de gegevens worden gerouteerd. In de tweede stap wordt de berichtroute ingesteld die van dat eindpunt gebruikmaakt. Nadat u de routering hebt ingesteld, kunt u de eindpunten en berichtroutes weergeven in de portal.

Routeren naar een opslagaccount

Stel nu de routering in voor het opslagaccount. Ga naar het deelvenster Berichtroutering en voeg een route toe. Definieer bij het toevoegen van de route een nieuw eindpunt voor de route. Nadat u deze routering hebt ingesteld, worden berichten waarvan de eigenschap Niveau is ingesteld op Opslag automatisch naar een opslagaccount geschreven.

Notitie

De gegevens kunnen worden geschreven naar blobopslag in de Apache Avro-indeling (de standaardinstelling) of JSON.

De coderingsindeling kan alleen worden ingesteld op het moment dat het eindpunt van de blob-opslag wordt geconfigureerd. De indeling kan niet worden gewijzigd voor een eindpunt dat al is ingesteld. Wanneer u de JSON-coderings gebruikt, moet u contentType instellen op JSON en contentEncoding op UTF-8 in de systeemeigenschappen van het bericht.

Zie richtlijnen voor routering naar opslag voor meer informatie over het gebruik van een eindpunt van de blob-opslag.

U stelt nu de configuratie in voor de berichtroutering naar Azure Storage.

  1. Selecteer in de Azure-portal de optie Resourcegroepen en selecteer vervolgens uw resourcegroep. In deze zelfstudie wordt gebruikgemaakt van ContosoResources.

  2. Selecteer de IoT Hub in de lijst met resources. In deze zelfstudie wordt gebruikgemaakt van ContosoTestHub.

  3. Selecteer Berichtroutering in de middelste kolom met bericht *. Selecteer + Toevoegen** om het deelvenster Een route toevoegen te zien. Selecteer +Eindpunt toevoegen naast het veld Eindpunt en selecteer vervolgens Storage. Het deelvenster Een opslageindpunt toevoegen wordt weergegeven.

    Beginnen met het toevoegen van een eindpunt voor een route

  4. Voer een naam in voor het eindpunt. In deze zelfstudie wordt gebruikgemaakt van ContosoStorageEndpoint.

    Het eindpunt een naam geven

  5. Selecteer Een container kiezen. Er wordt een lijst met opslagaccounts weergegeven. Selecteer de optie die u hebt ingesteld in de voorbereidingsstappen; In deze zelfstudie wordt gebruikgemaakt van contosostorage. Er wordt een lijst met containers in die opslagaccount weergegeven. Selecteer de container die u hebt ingesteld in de voorbereidende stappen. In deze zelfstudie wordt gebruikgemaakt van contosoresults. Klik vervolgens onderaan het scherm op Selecteren. Deze wordt terug naar een ander deelvenster Een opslag-eindpunt toevoegen. U ziet de URL voor de geselecteerde container.

  6. Stel de codering in op AVRO of JSON. Gebruik ten behoeve van deze zelfstudie de standaardinstellingen voor de rest van de velden. Dit veld wordt grijs als de geselecteerde regio geen ondersteuning biedt voor JSON-codering. Stel de bestandsnaamindeling in.

    Notitie

    Stel de indeling van de blobnaam in met behulp van de indeling van de blobbestandsnaam. De standaardwaarde is {iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}. De indeling moet {iothub}, {partition}, {YYYY}, {MM}, {DD}, {HH}, en {mm} bevatten, in willekeurige volgorde.

    Als u bijvoorbeeld de indeling van de standaardnaam voor het blobbestand gebruikt, de naam van de hub ContosoTestHub is en de datum en tijd 30 oktober 2018 om 10:56 uur, dan ziet de blobnaam er als volgt uit: ContosoTestHub/0/2018/10/30/10/56.

    De blobs worden standaard geschreven in de AVRO-indeling.

  7. Selecteer Maken onderaan de pagina om het opslag-eindpunt te maken en toe te voegen aan de route. U keert terug naar het deelvenster Een route toevoegen.

  8. Vul de rest van de routeringsquerygegevens in. Deze query specificeert de criteria voor het verzenden van berichten naar de opslagcontainer die u zojuist hebt toegevoegd als eindpunt. Vul de velden in op het scherm.

  9. Vul de rest van de velden in.

    • Naam: Voer een naam in voor de route. In deze zelfstudie wordt gebruikgemaakt van ContosoStorageRoute. Geef vervolgens het eindpunt voor opslag op. In deze zelfstudie wordt gebruikgemaakt van ContosoStorageEndpoint.

    • Gegevensbron opgeven: selecteer Telemetrieberichten apparaat in de vervolgkeuzelijst.

    • Selecteer Route inschakelen: zorg ervoor dat dit veld is ingesteld op enabled .

    • Routeringsquery: Voer level="storage" in als querytekenreeks.

    De routeringsquerygegevens opslaan

  10. Selecteer Opslaan. Wanneer dit is voltooid, gaat u terug naar het deelvenster Berichtroutering, waar u uw nieuwe routeringsquery voor opslag kunt zien. Sluit het deelvenster Berichtroutering, waarna u terugkeert naar de pagina Resourcegroep.

Routeren naar een Service Bus-wachtrij

Stel nu de routering in voor de Service Bus-wachtrij. Ga naar het deelvenster Berichtroutering en voeg een route toe. Wanneer u de route toevoegt, definieert u Service Bus wachtrij als eindpunt voor de route. Nadat u deze route hebt ingesteld, worden berichten waarvan de eigenschap Niveau is ingesteld op Kritiek naar de Service Bus-wachtrij geschreven, die een logische app activeert waarmee vervolgens een e-mailbericht met de informatie wordt verzonden.

  1. Selecteer op de pagina Resourcegroep uw IoT Hub en selecteer vervolgens Berichtroutering.

  2. Selecteer + Toevoegen in het deelvenster Berichtroutering.

  3. Selecteer in het deelvenster Een route toevoegen de optie + Toevoegen in de buurt van +eindpunt. Selecteer een Service Bus-wachtrij. Het deelvenster Service Bus-eindpunt toevoegen wordt weergegeven.

    Een eerste Service Bus-eindpunt toevoegen

  4. Vul de rest van de velden in:

    Naam van het eindpunt: Voer een naam in voor het eindpunt. In deze zelfstudie wordt gebruikgemaakt van ContosoSBQEndpoint.

    Service Bus-naamruimte: Gebruik de vervolgkeuzelijst om de Service Bus-naamruimte te selecteren die u hebt ingesteld in de voorbereidende stappen. In deze zelfstudie wordt gebruikgemaakt van ContosoSBNamespace.

    Service Bus-wachtrij: Gebruik de vervolgkeuzelijst om de Service Bus-wachtrij te selecteren. In deze zelfstudie wordt gebruikgemaakt van contososbqueue.

  5. Selecteer Maken om het eindpunt van de eerste Service Bus wachtrij toe te voegen. U gaat terug naar het deelvenster Route toevoegen.

    Tweede Service Bus-eindpunt toevoegen

  6. Vul nu de rest van de informatie voor de routeringsquery in. Met deze query worden de criteria opgegeven voor het verzenden van berichten naar Service Bus wachtrij die u zojuist hebt toegevoegd als eindpunt. Vul de velden in op het scherm.

    Naam: Voer een naam in voor de route. In deze zelfstudie wordt gebruikgemaakt van ContosoSBQueueRoute.

    Eindpunt: Geeft het eindpunt weer dat u net hebt ingesteld.

    Gegevensbron: Selecteer Telemetrieberichten apparaat uit de vervolgkeuzelijst.

    Route inschakelen: stel dit veld in op enable .

    Routeringsquery: voer level="critical" in als routeringsquery.

    Een routeringsquery maken voor de Service Bus-wachtrij

  7. Selecteer Opslaan. Wanneer u terugkeert naar het deelvenster Routes, ziet u beide nieuwe routes.

    De routes die u net hebt ingesteld

  8. U kunt de aangepaste eindpunten die u hebt ingesteld, bekijken door het tabblad Aangepaste eindpunten te selecteren.

    De aangepaste eindpunten die u zojuist hebt ingesteld

  9. Sluit het deelvenster Berichtroutering, waarna u terugkeert naar het deelvenster Resourcegroep.

Een gesimuleerd apparaat maken

Maak vervolgens een apparaat-id en sla de bijbehorende sleutel op voor later gebruik. Deze apparaat-id wordt gebruikt door de simulatietoepassing om berichten naar de IoT Hub te verzenden. Deze mogelijkheid is niet beschikbaar in PowerShell of als u een Azure Resource Manager-sjabloon gebruikt. De volgende stappen laten zien hoe u het gesimuleerde apparaat met behulp van Azure Portal maakt.

  1. Open Azure Portal en meld u aan bij uw Azure-account.

  2. Selecteer Resourcegroepen en kies uw resourcegroep. In deze zelfstudie wordt gebruikgemaakt van ContosoResources.

  3. Selecteer uw IoT Hub in de lijst met resources. In deze zelfstudie wordt gebruikgemaakt van ContosoTestHub. Selecteer IoT-apparaten in het deelvenster Hub.

  4. Selecteer +Apparaat toevoegen in het deelvenster IoT-apparaten. Vul in het deelvenster Apparaat toevoegen de apparaat-id in. In deze zelfstudie wordt gebruikgemaakt van Contoso-testapparaat. Laat het item voor sleutels leeg en schakel het selectievakje Automatisch sleutels genereren in. Zorg ervoor dat Apparaat verbinden met IoT Hub is ingeschakeld. Selecteer Opslaan.

    Het scherm voor het toevoegen van apparaten

  5. Nu dit is gemaakt, klikt u op het apparaat om de gegenereerde sleutels te zien. Selecteer het pictogram Kopiëren voor de primaire sleutel en sla deze ergens op, bijvoorbeeld in Kladblok, voor de testfase van deze zelfstudie.

    De details van het apparaat, inclusief de sleutels

Volgende stappen

Nu u de resources hebt ingesteld en de berichtroutes hebt geconfigureerd, gaat u door naar de volgende zelfstudie om te leren hoe u berichten naar de IoT Hub verzendt en om te zien hoe ze naar de verschillende bestemmingen worden gerouteerd.