Öğretici: Azure Haritalar kullanarak IoT uzamsal analizi uygulama

IoT senaryosunda, alan ve zaman içinde gerçekleşen ilgili olayları yakalamak ve izlemek yaygın bir durumdur. Örnek olarak filo yönetimi, varlık izleme, mobilite ve akıllı şehir uygulamaları verilebilir. Bu öğretici, Azure Haritalar API'lerini kullanarak kullanılan araç kiralama hareketini izleyen bir çözümde size yol gösterir.

Bu öğreticide şunları yapacaksınız:

  • Araba izleme verilerini günlüğe kaydetmek için bir Azure depolama hesabı oluşturun.
  • Azure depolama hesabına coğrafi bölge yükleme.
  • Azure IoT Hub'da bir hub oluşturun ve bir cihaz kaydedin.
  • Azure İşlevleri'de Azure Haritalar uzamsal analize dayalı iş mantığı uygulayan bir işlev oluşturun.
  • Azure event grid aracılığıyla Azure işlevinden IoT cihaz telemetri olaylarına abone olun.
  • IoT Hub ileti yönlendirmesini kullanarak telemetri olaylarını filtreleyin.

Önkoşullar

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

İpucu

GitHub'dan rentalCarSimulation C# projesinin tamamını, örneğin köküne gidip yeşil <> Kod düğmesini ve ardından ZIP İndir'i seçerek tek bir ZIP dosyası olarak indirebilirsiniz.

Bu öğreticide Postman uygulaması kullanılır, ancak farklı bir API geliştirme ortamı seçebilirsiniz.

Önemli

URL örneklerinde değerini Azure Haritalar abonelik anahtarınızla değiştirin{Your-Azure-Maps-Subscription-key}.

Kullanım örneği: kiralık araba izleme

Bir araç kiralama şirketinin, kiralık otomobilleri için konum bilgilerini, kat edilen mesafeyi ve çalışma durumunu günlüğe kaydetmek istediğini düşünelim. Şirket, bir araba doğru yetkili coğrafi bölgeden ayrıldığında da bu bilgileri depolamak istiyor.

Kiralık araçlar, düzenli olarak IoT Hub'a telemetri verileri gönderen IoT cihazlarıyla donatılmıştır. Telemetri geçerli konumu içerir ve aracın motorunun çalışıp çalışmadığını gösterir. Cihaz konumu şeması, jeo-uzamsal veriler için IoT Tak ve Kullan şemasına bağlıdır. Kiralık aracın cihaz telemetri şeması aşağıdaki JSON koduna benzer:

{
    "data": {
        "properties": {
            "Engine": "ON"
        },
        "systemProperties": {
            "iothub-content-type": "application/json",
            "iothub-content-encoding": "utf-8",
            "iothub-connection-device-id": "ContosoRentalDevice",
            "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
            "iothub-connection-auth-generation-id": "636959817064335548",
            "iothub-enqueuedtime": "2019-06-18T00:17:20.608Z",
            "iothub-message-source": "Telemetry"
        },
        "body": {
            "location": {
                "type": "Point",
                "coordinates": [ -77.025988698005662, 38.9015330523316 ]
            }
        }
    }
}

Bu öğreticide yalnızca bir aracı izlersiniz. Azure hizmetlerini ayarladıktan sonra araç simülatörünü çalıştırmak için rentalCarSimulation C# projesini indirmeniz gerekir. Olaydan işlev yürütmeye kadar tüm işlem aşağıdaki adımlarda özetlenmiştir:

  1. Araç içi cihaz, telemetri verilerini IoT Hub'a gönderir.

  2. Araç motoru çalışıyorsa merkez telemetri verilerini Event Grid'de yayımlar.

  3. Cihaz telemetri olaylarına yönelik olay aboneliği nedeniyle bir Azure işlevi tetikleniyor.

  4. İşlev araç cihazı konum koordinatlarını, olay zamanını ve cihaz kimliğini günlüğe kaydeder. Ardından, aracın coğrafi bölge dışından sürüp sürmediğini belirlemek için Spatial Geofence Get API'sini kullanır. Geofence sınırlarının dışına çıkmışsa işlev, olaydan alınan konum verilerini bir blob kapsayıcısına depolar. İşlev ayrıca koordinat konumunu sokak adresine çevirmek için Arama Adresi TersIni sorgular ve cihaz konum verilerinin geri kalanıyla birlikte depolar.

Aşağıdaki diyagramda sisteme üst düzey bir genel bakış gösterilmektedir.

Sisteme genel bakış diyagramı.

Aşağıdaki şekilde geofence alanı mavi renkle vurgulanır. Kiralık aracın rotası yeşil bir çizgi ile gösterilir.

Bölge rotasını gösteren şekil.

Azure Depolama hesabı oluşturma

Araba ihlali izleme verilerini depolamak için kaynak grubunuzda genel amaçlı bir v2 depolama hesabı oluşturun. Kaynak grubu oluşturmadıysanız kaynak grupları oluşturma bölümünde yönergeleri izleyin. Kaynak grubunuz için ContosoRental adını verin.

Depolama hesabı oluşturmak için depolama hesabı oluşturma başlığındaki yönergeleri izleyin. Bu öğreticide depolama hesabını contosorentalstorage olarak adlandırın, ancak genel olarak istediğiniz her şeyi adlandırabilirsiniz.

Depolama hesabınızı başarıyla oluşturduğunuzda, günlük verilerini depolamak için bir kapsayıcı oluşturmanız gerekir.

  1. Yeni oluşturduğunuz depolama hesabınıza gidin. Temel Bileşenler bölümünde Kapsayıcılar bağlantısını seçin.

    Blob depolama için kapsayıcıların ekran görüntüsü.

  2. Sol üst köşede + Kapsayıcı'yı seçin. Tarayıcının sağ tarafında bir panel görünür. Kapsayıcınıza contoso-rental-logs adını verin ve Oluştur'u seçin.

    Blob kapsayıcısı oluşturma işleminin ekran görüntüsü.

  3. Depolama hesabınızdaki Erişim anahtarları bölmesine gidin ve key1 bölümündeki Depolama hesabı adını ve Anahtar değerini kopyalayın. İşlev oluşturma ve Event Grid aboneliği ekleme bölümünde bu değerlerin her ikisine de ihtiyacınız vardır.

    Depolama hesabı adını ve anahtarını kopyalama ekran görüntüsü.

Azure depolama hesabınıza coğrafi bölge yükleme

Bölge, kiralık aracımız için yetkili coğrafi alanı tanımlar. Bir arabanın coğrafi bölge alanının dışına taşınıp taşınmadığını belirlemek için Azure işlevinizdeki coğrafi konumu kullanın.

Coğrafi bölge JSON veri dosyasını Azure depolama hesabınıza yüklemek ve ardından Azure Haritalar hesabınıza kaydetmek için Veri kayıt defteri oluşturma makalesinde açıklanan adımları izleyin. Benzersiz tanımlayıcı (udid) değerini not edin, buna ihtiyacınız olacaktır. udid Kaynak kodunuzdan Azure depolama hesabınıza yüklediğiniz coğrafi kaynağa başvurma yönteminizdir. Coğrafi konum veri dosyaları hakkında daha fazla bilgi için bkz . GeoJSON verilerini coğrafi sınırlama.

IoT hub oluşturma

IoT Hub, ioT uygulamasıyla yönettiği cihazlar arasında güvenli ve güvenilir çift yönlü iletişim sağlar. Bu öğreticide, araç içi cihazınızdan kiralık aracın konumunu belirlemek için bilgi almak istiyorsunuz. Bu bölümde, ContosoRental kaynak grubu içinde bir IoT hub'ı oluşturacaksınız. Cihaz telemetri olaylarınızı yayımlamak bu hub'dan sorumludur.

ContosoRental kaynak grubunda ioT hub'ı oluşturmak için IoT hub'ı oluşturma makalesindeki adımları izleyin.

IoT hub'ınıza cihaz kaydetme

Cihazlar IoT hub kimlik kayıt defterine kaydedilmedikleri sürece IoT hub'ına bağlanamaz. InVehicleDevice adlı tek bir cihaz oluşturun. Cihazı IoT hub'ınız içinde oluşturmak ve kaydetmek için IoT hub'ına yeni bir cihaz kaydetme adımlarını izleyin. Cihazınızın birincil bağlantı dizesi kopyaladığınızdan emin olun. Buna daha sonra ihtiyacınız olacak.

İşlev oluşturma ve Event Grid aboneliği ekleme

Azure İşlevleri, işlem altyapısını açıkça sağlamaya veya yönetmeye gerek kalmadan küçük kod parçalarını ("işlevler") çalıştırmanıza olanak tanıyan sunucusuz bir işlem hizmetidir. Daha fazla bilgi edinmek için bkz. Azure İşlevleri.

Bir işlev belirli bir olay tarafından tetikleniyor. Event Grid tetikleyicisi tarafından tetiklenen bir işlev oluşturun. IoT Hub cihaz telemetri olayları için bir olay aboneliği oluşturarak tetikleyici ile işlev arasındaki ilişkiyi oluşturun. Bir cihaz telemetri olayı gerçekleştiğinde işleviniz uç nokta olarak çağrılır ve daha önce IoT Hub'a kaydettiğiniz cihaz için ilgili verileri alır.

İşlevinizin içerdiği C# betik kodu aşağıdadır.

Şimdi Azure işlevinizi ayarlayın.

  1. Azure portalı panosunda Kaynak oluştur'u seçin. Arama metin kutusuna İşlev Uygulaması yazın. İşlev Uygulaması>Oluştur'u seçin.

  2. İşlev Uygulaması oluşturma sayfasında işlev uygulamanızı adlandırın. Kaynak Grubu'nun altında, açılan listeden ContosoRental'ı seçin. Çalışma Zamanı Yığını olarak .NET'i seçin. Sayfanın en altında İleri: Depolama >öğesini seçin.

    İşlev uygulaması oluşturma ekran görüntüsü.

  3. Depolama hesabı için Azure depolama hesabı oluşturma bölümünde oluşturduğunuz depolama hesabını seçin. Gözden geçir ve oluştur’u seçin.

  4. İşlev uygulaması ayrıntılarını gözden geçirin ve Oluştur'u seçin.

  5. Uygulama oluşturulduktan sonra buna bir işlev eklersiniz. İşlev uygulamasına gidin. Azure Portalda Oluştur düğmesini seçin.

    Önemli

    Azure Event Hub Tetikleyicisive Azure Event Grid Tetikleyicisi şablonları benzer adlara sahiptir. Azure Event Grid Tetikleyicisi şablonunu seçtiğinizden emin olun.

    Azure Portal'da işlev oluşturmanın ekran görüntüsü.

  6. İşlev oluştur paneli görüntülenir. Şablon seçin panelini aşağı kaydırın ve Azure Event Grid tetikleyicisi'nive ardından Oluştur düğmesini seçin.

    İşlev oluşturmanın ekran görüntüsü.

  7. İşleve bir ad verin. Bu öğreticide GetGeoFunction adını kullanın, ancak genel olarak istediğiniz adı kullanabilirsiniz. İşlev oluştur'u seçin.

  8. Soldaki menüde Kod + Test bölmesini seçin. C# betiğini kopyalayıp kod penceresine yapıştırın.

    İşlev penceresine kod yapıştırmanın kopyala/ekran görüntüsü.

  9. C# kodunda aşağıdaki parametreleri değiştirin:

    • SUBSCRIPTION_KEY yerine Azure Haritalar hesabı abonelik anahtarınızı yazın.
    • UDID değerini Azure depolama hesabınıza coğrafi konum yükleme bölümünde karşıya yüklediğiniz coğrafi konumunkiyle udid değiştirin.
    • Betikteki işlev, CreateBlobAsync veri depolama hesabında olay başına bir blob oluşturur. ACCESS_KEY, ACCOUNT_NAME ve STORAGE_CONTAINER_NAME depolama hesabınızın erişim anahtarı, hesap adı ve veri depolama kapsayıcısıyla değiştirin. Bu değerler, Azure depolama hesabı oluşturma bölümünde depolama hesabınızı oluşturduğunuzda oluşturulur.
  10. Soldaki menüde Tümleştirme bölmesini seçin. Diyagramda Event Grid Tetikleyicisi'ni seçin. eventGridEvent tetikleyicisi için bir ad yazın ve Event Grid aboneliği oluştur'u seçin.

    Olay aboneliği ekleme seçeneğinin ekran görüntüsü.

  11. Abonelik ayrıntılarını doldurun. Olay aboneliğini adlandırın. Olay Şeması için Event Grid Şeması'nı seçin. Konu Türleri için Azure IoT Hub Hesapları'nı seçin. Kaynak Grubu için bu öğreticinin başında oluşturduğunuz kaynak grubunu seçin. Kaynak için "Azure IoT hub'ı oluşturma" bölümünde oluşturduğunuz IoT hub'ını seçin. Olay Türlerine Filtre Uygula için Cihaz Telemetrisi'ni seçin.

    Bu seçenekleri seçtikten sonra Konu Türü'nü IoT Hub olarak değiştirirken görürsünüz. Sistem Konu Adı için kaynağınızla aynı adı kullanabilirsiniz. Son olarak Uç nokta ayrıntıları bölümünde Uç nokta seçin'i seçin. Tüm ayarları kabul edin ve Seçimi Onayla'yı seçin.

    Olay aboneliği oluşturma ekran görüntüsü.

  12. Ayarlarınızı gözden geçirin. Uç noktanın bu bölümün başında oluşturduğunuz işlevi belirttiğinden emin olun. Oluştur'u belirleyin.

    Olay aboneliği oluşturma onayının ekran görüntüsü.

  13. Artık Tetikleyiciyi Düzenle panelindesiniz. Kaydet'i seçin.

IoT Hub ileti yönlendirmeyi kullanarak olayları filtreleme

Azure işlevine Event Grid aboneliği eklediğinizde, belirtilen IoT hub'ında otomatik olarak bir mesajlaşma yolu oluşturulur. İleti yönlendirme, farklı veri türlerini çeşitli uç noktalara yönlendirmenizi sağlar. Örneğin, cihaz telemetri iletilerini, cihaz yaşam döngüsü olaylarını ve cihaz ikizi değişiklik olaylarını yönlendirebilirsiniz. Daha fazla bilgi için bkz . IoT Hub ileti yönlendirmeyi kullanma.

IoT hub'ında ileti yönlendirmenin ekran görüntüsü.

Örnek senaryonuzda, yalnızca kiralık araç hareket ederken ileti almak istiyorsunuz. Özelliğin "ON" değerine eşit olduğu olayları filtrelemek Engine için bir yönlendirme sorgusu oluşturun. Yönlendirme sorgusu oluşturmak için RouteToEventGrid yolunu seçin ve Yönlendirme sorgusunu "Engine='ON'" ile değiştirin. Ardından Kaydet'i seçin. Artık IoT hub'ı yalnızca altyapının açık olduğu yerde cihaz telemetrisini yayımlar.

Filtre yönlendirme iletilerinin ekran görüntüsü.

İpucu

IoT cihazdan buluta iletileri sorgulamanın çeşitli yolları vardır. İleti yönlendirme söz dizimi hakkında daha fazla bilgi edinmek için bkz . IoT Hub ileti yönlendirme.

IoT Hub'a telemetri verileri gönderme

Azure işleviniz çalışırken artık telemetri verilerini IoT hub'ına göndererek Event Grid'e yönlendirebilirsiniz. Kiralık bir aracın araç içi cihazının konum verilerini simüle etmek için bir C# uygulaması kullanın. Uygulamayı çalıştırmak için geliştirme bilgisayarınızda .NET SDK 6.0 gerekir. Sanal telemetri verilerini IoT hub'ına göndermek için şu adımları izleyin:

  1. Henüz yapmadıysanız rentalCarSimulation C# projesini indirin.

  2. simulatedCar.cs Dosyayı istediğiniz bir metin düzenleyicisinde açın ve değerini connectionString cihazı kaydederken kaydettiğiniz dosyayla değiştirin. Dosyadaki değişiklikleri kaydedin.

  3. Makinenizde ASP.NET Core Runtime'ın yüklü olduğundan emin olun. Yerel terminal pencerenizde C# projesinin kök klasörüne gidin ve aşağıdaki komutu çalıştırarak simülasyon cihazı uygulaması için gerekli paketleri yükleyin:

    dotnet restore
    
  4. Aynı terminalde aşağıdaki komutu çalıştırarak kiralık araba simülasyonu uygulamasını derleyin ve çalıştırın:

    dotnet run
    

Yerel terminaliniz aşağıdaki ekran görüntüsüne benzer olmalıdır.

Terminal çıkışının ekran görüntüsü.

Blob depolama kapsayıcısını şimdi açarsanız, aracın bölge dışında olduğu konumlar için dört blob görebilirsiniz.

Kapsayıcı içindeki blobları görüntüleme ekran görüntüsü.

Aşağıdaki haritada bölge dışında dört araç konum noktası gösterilmektedir. Her konum düzenli zaman aralıklarıyla günlüğe kaydedilir.

İhlal haritasının ekran görüntüsü.

Azure Haritalar ve IoT'i keşfedin

Bu öğreticide kullanılan Azure Haritalar API'lerini keşfetmek için bkz:

Azure Haritalar REST API'lerinin tam listesi için bkz:

IoT için Azure sertifikalı cihazların listesini almak için şu adresi ziyaret edin:

Kaynakları temizleme

Temizleme gerektiren kaynak yok.

Sonraki adımlar

Cihazdan buluta telemetri gönderme ve bunun tersi hakkında daha fazla bilgi edinmek için bkz: