Öğretici: IoT Hub ileti yönlendirmeyi yapılandırmak için Azure CLı 'yi kullanma

İleti yönlendirme , IoT cihazlarınızdaki telemetri verilerini, yerleşik Olay Hub 'ı ile uyumlu uç noktalara veya blob depolama, Service Bus kuyrukları, Service Bus konuları ve Event Hubs gibi özel uç noktalara göndermeye olanak sağlar. Özel ileti yönlendirmeyi yapılandırmak için, belirli bir koşulla eşleşen yolu özelleştirmek üzere yönlendirme sorguları oluşturursunuz. Ayarlandıktan sonra, gelen veriler IoT Hub'ı tarafından otomatik olarak uç noktalara yönlendirilir. Bir ileti tanımlanmış yönlendirme sorgularının hiçbiriyle eşleşmezse, varsayılan uç noktaya yönlendirilir.

Bu 2 parçalı öğreticide, IoT Hub ile bu özel yönlendirme sorgularını ayarlamayı ve kullanmayı öğreneceksiniz. Bir IoT cihazından gelen iletileri BLOB depolama ve Service Bus kuyruğu dahil olmak üzere birden çok uç noktasından birine yönlendirdiğinizde. Service Bus kuyruğuna iletiler bir mantıksal uygulama tarafından çekilir ve e-posta ile gönderilir. Özel ileti yönlendirmesi tanımlı olmayan iletiler varsayılan uç noktaya gönderilir, ardından Azure Stream Analytics tarafından çekilir ve bir Power BI görselleştirmesinde görüntülenir.

Bu öğreticinin 1. ve 2. kısmını tamamlamak için aşağıdaki görevleri gerçekleştirirsiniz:

Bölüm ı: kaynak oluşturma, ileti yönlendirmeyi ayarlama

  • Kaynakları oluşturma--bir IoT Hub, bir depolama hesabı, Service Bus kuyruğu ve sanal cihaz. Bu, Azure portal, bir Azure Resource Manager şablonu, Azure CLı veya Azure PowerShell kullanılarak yapılabilir.
  • Depolama hesabı ve Service Bus kuyruğu için IoT Hub uç noktaları ve ileti yollarını yapılandırın.

Bölüm II: hub 'a ileti gönderme, yönlendirilmiş sonuçları görüntüleme

  • Service Bus kuyruğuna ileti eklendiğinde tetiklenen ve e-posta gönderen bir Mantıksal Uygulama oluşturma.
  • Farklı yönlendirme seçenekleri için hub'a iletiler gönderen bir IoT Cihazının simülasyonu olan bir uygulama indirme ve çalıştırma.
  • Varsayılan uç noktaya gönderilen veriler için bir Power BI görselleştirmesi oluşturun.
  • Service Bus kuyruğunda ve e-postalarda ...
  • Depolama hesabında ...
  • PowerBI görselleştirmesinde ...
  • ...sonuçları görüntüleyin.

Önkoşullar

  • Bu öğreticinin 1. bölümü için:

    • Bir Azure aboneliğiniz olmalıdır. Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
  • Bu öğreticinin 2. bölümü için:

    • Bu öğreticinin 1. kısmını tamamlamış ve kaynakları hala kullanılabilir durumda olmalıdır.
    • Visual Studio 'yuyükler.
    • Varsayılan uç noktanın Stream Analytics 'i çözümlemek için bir Power BI hesabına erişiminiz vardır. (Power BI'ı ücretsiz deneyin.)
    • Bildirim e-postaları göndermek için bir iş veya okul hesabına sahip olmanız gerekir.
    • Güvenlik duvarınızdaki 8883 numaralı bağlantı noktasını açık olduğundan emin olun. Bu öğreticideki örnek, 8883 bağlantı noktası üzerinden iletişim kuran MQTT protokolünü kullanır. Bu bağlantı noktası, bazı kurumsal ve eğitim ağ ortamlarında engellenebilir. Bu sorunu geçici olarak çözmek için daha fazla bilgi ve IoT Hub bkz. bağlanma (MQTT).

Azure Cloud Shell kullanma

Azure, tarayıcınız aracılığıyla kullanabileceğiniz etkileşimli bir kabuk ortamı olan Azure Cloud Shell’i barındırır. Azure hizmetleriyle çalışmak için Cloud Shell ile Bash veya PowerShell kullanabilirsiniz. Bu makaledeki kodu, yerel ortamınıza herhangi bir şey yüklemeye gerek kalmadan çalıştırmak için Cloud Shell’in önceden yüklenmiş komutlarını kullanabilirsiniz.

Azure Cloud Shell’i başlatmak için:

Seçenek Örnek/Bağlantı
Kod bloğunun sağ üst köşesindeki Deneyin’i seçin. Deneyin seçeneği belirlendiğinde, kod otomatik olarak Cloud Shell’e kopyalanmaz. Azure Cloud Shell için Deneyin örneği
Cloud Shell’i tarayıcınızda açmak için https://shell.azure.com bölümüne gidin veya Cloud Shell’i Başlat düğmesini seçin. Cloud Shell’i yeni bir pencerede başlatma
Azure portalın sağ üst köşesindeki menü çubuğunda yer alan Cloud Shell düğmesini seçin. Azure portaldaki Cloud Shell düğmesi

Azure Cloud Shell’de bu makaledeki kodu çalıştırmak için:

  1. Cloud Shell’i başlatın.

  2. Kodu kopyalamak için kod bloğunda Kopyala düğmesini seçin.

  3. Windows ve Linux sisteminde Ctrl+Shift+V tuşlarını kullanarak veya macOS’de Cmd+Shift+V tuşlarını kullanarak kodu Cloud Shell oturumuna yapıştırın.

  4. Kodu çalıştırmak için Enter tuşuna basın.

Temel kaynaklar oluşturma

İleti yönlendirmeyi yapılandırmadan önce bir IoT Hub, bir depolama hesabı ve Service Bus kuyruğu oluşturmanız gerekir. Bu kaynaklar, Bu öğreticinin 1. bölümünde kullanılabilen dört makale kullanılarak oluşturulabilir: Azure portal, bir Azure Resource Manager şablonu, Azure CLı veya Azure PowerShell.

Tüm kaynaklar için aynı kaynak grubunu ve konumunu kullanın. Sonunda, kaynak grubunu silerek tüm kaynakları tek bir adımda kaldırabilirsiniz.

Aşağıdaki bölümlerde gerçekleştirilecek adımların özeti aşağıda verilmiştir:

  1. Bir kaynak grubuoluşturun.

  2. S1 katmanında IoT hub'ı oluşturun. IOT hub'ınızı bir tüketici grubu ekleyin. Tüketici grubu Azure Stream Analytics tarafından veriler alınırken kullanılır.

    Not

    Bu öğreticiyi tamamlayabilmeniz için ücretli bir katmanda IoT Hub 'ı kullanmanız gerekir. Ücretsiz katman yalnızca bir uç nokta ayarlamanıza izin verir ve bu öğretici birden fazla uç nokta gerektirir.

  3. Standard_LRS çoğaltmasıyla standart bir V1 depolama hesabı oluşturun.

  4. Service Bus ad alanı ve kuyruğu oluşturun.

  5. Hub'ınıza iletiler gönderen simülasyon cihazı için cihaz kimliği oluşturun. Test aşaması için anahtarı kaydedin. (Kaynak Yöneticisi şablonu oluşturuyorsanız, bu, şablonu dağıttıktan sonra yapılır.)

Betiği karşıdan yükle (isteğe bağlı)

bu öğreticinin ikinci bölümünde, IoT Hub iletileri göndermek için bir Visual Studio uygulaması indirip çalıştırırsınız. İndirmenin, Azure Resource Manager şablonu ve parametreler dosyasının yanı sıra Azure CLı ve PowerShell betikleri içeren bir klasör vardır.

Tamamlanmış betiği görüntülemek istiyorsanız, Azure IoT C# örnekleriniindirin. main.zip dosyasını sıkıştırmayı açın. Azure CLı betiği, iothub_routing_cli. azclı olarak/iot-hub/Tutorials/Routing/SimulatedDevice/resources/.

Kaynaklarınızı oluşturmak için Azure CLı 'yi kullanma

Aşağıdaki betiği kopyalayıp Cloud Shell yapıştırın ve ENTER tuşuna basın. Betiği tek seferde bir satır çalıştırır. betiğin bu ilk bölümü, bu öğreticide depolama hesabı, IoT Hub, Service Bus ad alanı ve Service Bus kuyruğu dahil temel kaynakları oluşturur. Öğreticinin geri kalanında ilerlettiğinizde her bir komut bloğunu kopyalayın ve çalıştırmak için Cloud Shell yapıştırın.

İpucu

Hata ayıklama hakkında ipucu: Bu betik, \ betiği daha okunabilir hale getirmek için devamlılık simgesini (ters eğik çizgi) kullanır. Betiği çalıştırırken bir sorun yaşıyorsanız Cloud Shell oturumunuzun çalıştığından bash ve ters eğik çizgi dışında boşluk olmadığından emin olun.

IoT Hub adı ve depolama hesabı adı gibi genel olarak benzersiz olması gereken birkaç kaynak adı vardır. Bunun daha kolay olması için, bu kaynak adlarına rasgelevalue adlı rastgele bir alfasayısal değer eklenir. Rasgeledeğeri, komut dosyasının en üstünde bir kez oluşturulur ve komut dosyası boyunca gerektiğinde kaynak adlarına eklenir. Rastgele olmasını istemiyorsanız, bunu boş bir dizeye veya belirli bir değere ayarlayabilirsiniz.

Önemli

İlk betikte ayarlanan değişkenler de yönlendirme betiği tarafından kullanılır, bu nedenle tüm betiği aynı Cloud Shell oturumunda çalıştırın. Yönlendirmeyi ayarlamak için betiği çalıştırmak üzere yeni bir oturum açarsanız, bazı değişkenlerin değerleri eksik olur.

# This command retrieves the subscription id of the current Azure account. 
# This field is used when setting up the routing queries.
subscriptionID=$(az account show --query id -o tsv)

# 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

# This command installs the IOT Extension for Azure CLI.
# You only need to install this the first time.
# You need it to create the device identity. 
az extension add --name azure-iot

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

# 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

# Create the IoT device identity to be used for testing.
az iot hub device-identity create --device-id $iotDeviceName \
    --hub-name $iotHubName

# Retrieve the information about the device identity, then copy the primary key to
#   Notepad. You need this to run the device simulation during the testing phase.
az iot hub device-identity show --device-id $iotDeviceName \
    --hub-name $iotHubName

Temel kaynaklar ayarlandığına göre, ileti yönlendirmeyi yapılandırabilirsiniz.

İleti yönlendirmeyi ayarlama

Simülasyon cihazı tarafından iletiye eklenen özellikler temelinde iletileri farklı kaynaklara yönlendireceksiniz. Özel yönlendirmesi olmayan iletiler varsayılan uç noktaya gönderilir (iletiler/olaylar). Sonraki öğreticide, IoT Hub iletileri gönderir ve bunların farklı hedeflere yönlendirildiğini görürsünüz.

Değer Sonuç
level="storage" Azure Depolama'ya yazın.
level="critical" Service Bus kuyruğuna yazın. Mantıksal Uygulama iletiyi kuyruktan alır ve Office 365 kullanarak iletiyi e-postayla gönderir.
default Power BI'ı kullanarak bu verileri görüntüleyin.

İlk adım, verilerin yönlendirileceği uç noktayı kurmak olacaktır. İkinci adım, bu uç noktayı kullanan ileti yolunu ayarlamaya yönelik olur. Yönlendirmeyi ayarladıktan sonra, portalda uç noktaları ve ileti yollarını görüntüleyebilirsiniz.

Yönlendirme uç noktası oluşturmak için az IoT Hub Routing-Endpoint Createkullanın. Uç nokta için ileti yolu oluşturmak için az IoT Hub Route Createkullanın.

Depolama hesabına yönlendirme

Not

Veriler, varsayılan ya da JSON olan Apache avro biçiminde blob depolamaya yazılabilir.

Kodlama biçimi yalnızca BLOB depolama uç noktasının yapılandırıldığı zamanda ayarlanabilir. Zaten ayarlanmış olan bir uç nokta için biçim değiştirilemez. JSON kodlaması kullanılırken, ' yi JSON olarak ve Contentenencoding ' i ileti sistemi özelliklerinde UTF-8 olarak ayarlamanız gerekir.

BLOB depolama uç noktası kullanma hakkında daha ayrıntılı bilgi için lütfen depolama alanına yönlendirmeye yönelik kılavuzabakın.

İlk olarak, depolama hesabı için uç noktayı ayarlayın ve ardından yolu ayarlayın.

Bunlar, Cloud Shell oturumunuz dahilinde ayarlanması gereken komut dosyası tarafından kullanılan değişkenlerdir:

StorageConnectionString: Bu değer, önceki betikte ayarlanan depolama hesabından alınır. Bu, depolama hesabına erişmek için ileti yönlendirme tarafından kullanılır.

resourceGroup: kaynak grubunun iki oluşumu vardır; bunları kaynak grubunuza ayarlayın.

Endpoint SubscriptionID: Bu alan, uç nokta Için Azure SubscriptionID olarak ayarlanır.

EndpointType: Bu alan bitiş noktası türüdür. Bu değer,, veya olarak azurestoragecontainer ayarlanmalıdır eventhub servicebusqueue servicebustopic . Burada amacınıza göre olarak ayarlayın azurestoragecontainer .

Iothubname: Bu alan, yönlendirmeyi yapan hub 'ın adıdır.

ContainerName: Bu alan, depolama hesabındaki, verilerin yazılacağı kapsayıcının adıdır.

kodlama: Bu alan ya da olur avro json . Bu, depolanan verilerin biçimini gösterir.

RouteName: Bu alan, ayarladığınız yolun adıdır.

EndpointName: Bu alan, uç noktayı tanımlayan addır.

etkin: Bu alan varsayılan olarak true , ileti yolunun oluşturulduktan sonra etkinleştirilmesi gerektiğini gösterir.

koşul: Bu alan, bu uç noktaya gönderilen iletileri filtrelemek için kullanılan sorgudur. Depolamaya yönlendirilmekte olan iletilerin sorgu koşulu level="storage" .

Bu betiği kopyalayın ve Cloud Shell pencerenize yapıştırın ve çalıştırın.

##### ROUTING FOR STORAGE ##### 

endpointName="ContosoStorageEndpoint"
endpointType="azurestoragecontainer"
routeName="ContosoStorageRoute"
condition='level="storage"'

# Get the connection string for the storage account.
# Adding the "-o tsv" makes it be returned without the default double quotes around it.
storageConnectionString=$(az storage account show-connection-string \
  --name $storageAccountName --query connectionString -o tsv)

Sonraki adım, depolama hesabı için yönlendirme uç noktası oluşturmaktır. Ayrıca, sonuçların depolanacağı kapsayıcıyı da belirtirsiniz. Kapsayıcı, depolama hesabı oluşturulduğunda daha önce oluşturulmuştur.

# Create the routing endpoint for storage.
az iot hub routing-endpoint create \
  --connection-string $storageConnectionString \
  --endpoint-name $endpointName \
  --endpoint-resource-group $resourceGroup \
  --endpoint-subscription-id $subscriptionID \
  --endpoint-type $endpointType \
  --hub-name $iotHubName \
  --container $containerName \
  --resource-group $resourceGroup \
  --encoding avro

Ardından, depolama uç noktası için yol oluşturun. İleti yolu, sorgu belirtimini karşılayan iletilerin nereye gönderileceğini belirtir.

# Create the route for the storage endpoint.
az iot hub route create \
  --name $routeName \
  --hub-name $iotHubName \
  --source devicemessages \
  --resource-group $resourceGroup \
  --endpoint-name $endpointName \
  --enabled \
  --condition $condition

Service Bus kuyruğuna yönlendirme

Şimdi Service Bus kuyruğu için yönlendirmeyi ayarlayın. Service Bus sırasının bağlantı dizesini almak için, doğru haklara sahip bir yetkilendirme kuralı oluşturmanız gerekir. aşağıdaki betik adlı Service Bus kuyruğu için bir yetkilendirme kuralı oluşturur sbauthrule ve haklarını olarak ayarlar Listen Manage Send . Bu yetkilendirme kuralı tanımlandıktan sonra, kuyruğa yönelik bağlantı dizesini almak için kullanabilirsiniz.

# Create the authorization rule for the Service Bus queue.
az servicebus queue authorization-rule create \
  --name "sbauthrule" \
  --namespace-name $sbNamespace \
  --queue-name $sbQueueName \
  --resource-group $resourceGroup \
  --rights Listen Manage Send \
  --subscription $subscriptionID

şimdi Service Bus kuyruğuna bağlantı dizesini almak için yetkilendirme kuralını kullanın.

# Get the Service Bus queue connection string.
# The "-o tsv" ensures it is returned without the default double-quotes.
sbqConnectionString=$(az servicebus queue authorization-rule keys list \
  --name "sbauthrule" \
  --namespace-name $sbNamespace \
  --queue-name $sbQueueName \
  --resource-group $resourceGroup \
  --subscription $subscriptionID \
  --query primaryConnectionString -o tsv)

# Show the Service Bus queue connection string.
echo "service bus queue connection string = " $sbqConnectionString

şimdi Service Bus kuyruğu için yönlendirme uç noktasını ve ileti yolunu ayarlayın. Bunlar, Cloud Shell oturumunuz dahilinde ayarlanması gereken komut dosyası tarafından kullanılan değişkenlerdir:

EndpointName: Bu alan, uç noktayı tanımlayan addır.

EndpointType: Bu alan bitiş noktası türüdür. Bu değer,, veya olarak azurestoragecontainer ayarlanmalıdır eventhub servicebusqueue servicebustopic . Burada amacınıza göre olarak ayarlayın servicebusqueue .

RouteName: Bu alan, ayarladığınız yolun adıdır.

koşul: Bu alan, bu uç noktaya gönderilen iletileri filtrelemek için kullanılan sorgudur. Service Bus kuyruğuna yönlendirilmekte olan iletilerin sorgu koşulu level="critical" .

yönlendirme uç noktası için Azure clı ve Service Bus kuyruğu için ileti rotası aşağıda verilmiştir.

endpointName="ContosoSBQueueEndpoint"
endpointType="ServiceBusQueue"
routeName="ContosoSBQueueRoute"
condition='level="critical"'

# Set up the routing endpoint for the Service Bus queue.
# This uses the Service Bus queue connection string.
az iot hub routing-endpoint create \
  --connection-string $sbqConnectionString \
  --endpoint-name $endpointName \
  --endpoint-resource-group $resourceGroup \
  --endpoint-subscription-id $subscriptionID \
  --endpoint-type $endpointType \
  --hub-name $iotHubName \
  --resource-group $resourceGroup 

# Set up the message route for the Service Bus queue endpoint.
az iot hub route create --name $routeName \
  --hub-name $iotHubName \
  --source-type devicemessages \
  --resource-group $resourceGroup \
  --endpoint-name $endpointName \
  --enabled \
  --condition $condition

Portalda ileti yönlendirmeyi görüntüleme

Artık uç noktalarınız ve ileti yollarınız ayarna göre, bunların yapılandırmasını portalda görüntüebilirsiniz. Azure portal'da oturum açma ve Kaynak Grupları'ne gidin. Ardından kaynak grubu seçin ve ardından hub'ını seçin (hub adı bu ContosoTestHub öğreticide ile başlar). Bölmeyi IoT Hub.

IoT Hub özellikleri ekranı

İleti Yönlendirme seçeneklerinde IoT Hub'yi seçin. Başarıyla ayarlayan yollar görüntülenir.

Ayar aşağıdaki rotalar

İleti yönlendirme ekranında Özel Uç Noktalar'ı seçerek yollar için tanımlandığı uç noktaları görebilirsiniz.

Yollar için ayarlanmış uç noktalar

Sonraki adımlar

Kaynakları ayarlamış olduğunuza ve ileti rotalarına sahip olduğunuza göre, IoT Hub 'ına ileti gönderme ve farklı hedeflere yönlendirilme hakkında bilgi edinmek için sonraki öğreticiye ilerleyin.