Mengintegrasikan data Azure Digital Twins ke dalam peta dalam ruangan Azure Maps
Artikel ini memperlihatkan cara menggunakan data Azure Digital Twins untuk memperbarui informasi yang ditampilkan di peta dalam ruangan dari Azure Maps. Karena Azure Digital Twins menyimpan grafik hubungan perangkat IoT Anda dan merutekan data perangkat ke titik akhir yang berbeda, ini adalah layanan yang bagus untuk memperbarui overlay informasi di peta.
Panduan ini mencakup informasi berikut:
- Mengonfigurasi instans Azure Digital Twins Anda untuk mengirim peristiwa pembaruan kembar ke suatu fungsi di Azure Functions.
- Membuat fungsi untuk memperbarui set status fitur peta dalam ruangan Azure Maps.
- Menyimpan ID peta dan ID stateset fitur Anda di grafik Azure Digital Twins.
Memulai
Bagian ini menetapkan konteks tambahan untuk informasi dalam artikel ini.
Prasyarat
Sebelum melanjutkan artikel ini, mulailah dengan menyiapkan sumber daya Azure Digital Twins dan Azure Maps individual Anda.
- Untuk Azure Digital Twins: Ikuti instruksi di Menyambungkan solusi end-to-end untuk menyiapkan instans Azure Digital Twins dengan contoh grafik kembar dan aliran data yang disimulasikan.
- Dalam artikel ini, Anda akan memperluas solusi tersebut dengan titik akhir dan rute lain. Anda juga akan menambahkan fungsi lain ke aplikasi fungsi dari tutorial tersebut.
- Untuk Azure Maps: Ikuti instruksi dalam Menggunakan Pembuat untuk membuat peta dalam ruangan dan membuat peta dalam ruangan Azure Maps dengan stateset fitur.
- Set status fitur adalah kumpulan properti dinamis (status) yang ditetapkan untuk fitur himpunan data seperti ruangan atau peralatan. Dalam instruksi Azure Maps di atas, status fitur menyimpan status ruang yang akan Anda tampilkan di peta.
- Anda memerlukan kunci langganan Azure Maps, ID stateset fitur, dan mapConfiguration.
Topologi
Gambar di bawah mengilustrasikan di mana elemen integrasi peta dalam ruangan dalam tutorial ini cocok dengan skenario Azure Digital Twins yang lebih besar dan menyeluruh.
Merutekan pemberitahuan pembaruan kembar dari Azure Digital Twins
Instans Azure Digital Twins dapat memunculkan peristiwa pembaruan kembar setiap kali status kembar diperbarui. Azure Digital Twins Menghubungkan solusi ujung ke ujung yang ditautkan di atas berjalan melalui skenario di mana termometer digunakan untuk memperbarui atribut suhu yang terpasang pada kembaran ruangan. Tutorial ini memperluas solusi tersebut dengan berlangganan fungsi Azure untuk memperbarui pemberitahuan dari kembar, dan menggunakan fungsi tersebut untuk memperbarui peta Anda.
Pola ini dibaca dari kamar kembar secara langsung, bukan dari perangkat IoT, yang memberi Anda fleksibilitas untuk mengubah sumber data dasar untuk suhu tanpa perlu memperbarui logika pemetaan Anda. Misalnya, Anda dapat menambahkan beberapa termometer atau mengatur ruangan ini untuk berbagi termometer dengan ruangan lain, semuanya tanpa perlu memperbarui logika peta Anda.
Pertama, Anda akan membuat rute di Azure Digital Twins untuk meneruskan semua peristiwa pembaruan kembar ke topik Event Grid.
Buat topik Event Grid, yang akan menerima peristiwa dari instans Azure Digital Twins Anda, menggunakan perintah CLI di bawah ini:
az eventgrid topic create --resource-group <your-resource-group-name> --name <your-topic-name> --location <region>
Buat titik akhir untuk menautkan topik Event Grid Anda ke Azure Digital Twins, menggunakan perintah CLI di bawah ini:
az dt endpoint create eventgrid --endpoint-name <Event-Grid-endpoint-name> --eventgrid-resource-group <Event-Grid-resource-group-name> --eventgrid-topic <your-Event-Grid-topic-name> --dt-name <your-Azure-Digital-Twins-instance-name>
Buat rute di Azure Digital Twins untuk mengirim peristiwa pembaruan kembar ke titik akhir Anda, menggunakan perintah CLI di bawah ini. Untuk tempat penampung nama instans Azure Digital Twins dalam perintah ini, Anda dapat menggunakan nama yang mudah diingat atau nama host untuk peningkatan performa.
Catatan
Saat ini ada masalah yang diketahui di Cloud Shell yang memengaruhi grup perintah ini:
az dt route
, ,az dt model
az dt twin
.Untuk mengatasinya, jalankan
az login
di Cloud Shell sebelum menjalankan perintah, atau gunakan CLI lokal alih-alih Cloud Shell. Untuk detail selengkapnya tentang hal ini, lihat Masalah umum Azure Digital Twins.az dt route create --dt-name <your-Azure-Digital-Twins-instance-hostname-or-name> --endpoint-name <Event-Grid-endpoint-name> --route-name <my-route> --filter "type = 'Microsoft.DigitalTwins.Twin.Update'"
Membuat fungsi Azure untuk menerima peristiwa dan memperbarui peta
Di bagian ini, Anda akan membuat fungsi yang mendengarkan peristiwa yang dikirim ke topik Event Grid. Fungsi ini akan membaca pemberitahuan pembaruan tersebut dan mengirim pembaruan yang sesuai ke kumpulan status fitur Azure Maps, untuk memperbarui suhu satu ruangan.
Dalam prasyarat tutorial Azure Digital Twins, Anda membuat aplikasi fungsi untuk menyimpan azure functions Azure Digital Twins. Sekarang, buat fungsi Azure baru yang dipicu Event Grid di dalam aplikasi fungsi.
Ganti kode fungsi dengan kode berikut. Ini akan menyaring hanya pembaruan ke ruang kembar, membaca suhu yang diperbarui, dan mengirim informasi itu ke Azure Maps.
using System;
using System.Threading.Tasks;
using System.Net.Http;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.EventGrid;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Azure.Messaging.EventGrid;
namespace updateMaps
{
public static class ProcessDTUpdatetoMaps
{
// Read maps credentials from application settings on function startup
private static string statesetID = Environment.GetEnvironmentVariable("statesetID");
private static string subscriptionKey = Environment.GetEnvironmentVariable("subscription-key");
private static HttpClient httpClient = new HttpClient();
[FunctionName("ProcessDTUpdatetoMaps")]
public static async Task Run([EventGridTrigger]EventGridEvent eventGridEvent, ILogger log)
{
JObject message = (JObject)JsonConvert.DeserializeObject(eventGridEvent.Data.ToString());
log.LogInformation($"Reading event from twinID: {eventGridEvent.Subject}: {eventGridEvent.EventType}: {message["data"]}");
//Parse updates to "space" twins
if (message["data"]["modelId"].ToString() == "dtmi:contosocom:DigitalTwins:Space;1")
{
// Set the ID of the room to be updated in your map.
// Replace this line with your logic for retrieving featureID.
string featureID = "UNIT103";
// Iterate through the properties that have changed
foreach (var operation in message["data"]["patch"])
{
if (operation["op"].ToString() == "replace" && operation["path"].ToString() == "/Temperature")
{
// Update the maps feature stateset
var postcontent = new JObject(
new JProperty(
"States",
new JArray(
new JObject(
new JProperty("keyName", "temperature"),
new JProperty("value", operation["value"].ToString()),
new JProperty("eventTimestamp", DateTime.UtcNow.ToString("s"))))));
var response = await httpClient.PutAsync(
$"https://us.atlas.microsoft.com/featurestatesets/{statesetID}/featureStates/{featureID}?api-version=2.0&subscription-key={subscriptionKey}",
new StringContent(postcontent.ToString()));
log.LogInformation(await response.Content.ReadAsStringAsync());
}
}
}
}
}
}
Anda harus mengatur dua variabel lingkungan di aplikasi fungsi Anda. Salah satunya adalah kunci langganan utama Azure Maps Anda, dan satu adalah ID stateset Azure Maps Anda.
az functionapp config appsettings set --name <your-function-app-name> --resource-group <your-resource-group> --settings "subscription-key=<your-Azure-Maps-primary-subscription-key>"
az functionapp config appsettings set --name <your-function-app-name> --resource-group <your-resource-group> --settings "statesetID=<your-Azure-Maps-stateset-ID>"
Menampilkan pembaruan langsung di peta
Untuk melihat suhu pembaruan langsung, ikuti langkah-langkah di bawah ini:
- Mulailah mengirim data IoT yang disimulasikan dengan menjalankan proyek DeviceSimulator dari Azure Digital Twins Connect an end-to-end solution. Petunjuk untuk proses ini ada di bagian Konfigurasi dan jalankan simulasi.
- Gunakan modul Azure Maps Indoor untuk merender peta dalam ruangan yang dibuat di Azure Maps Creator.
- Salin contoh file HTML peta dalam ruangan dari Contoh: Gaya Kustom: Menggunakan konfigurasi peta di WebSDK (Pratinjau).
- Ganti kunci langganan, mapConfiguration, statesetID, dan wilayah dalam file HTML lokal dengan nilai Anda.
- Buka file tersebut di browser Anda.
Kedua sampel mengirimkan suhu dalam rentang yang kompatibel, jadi Anda akan melihat pembaruan warna ruangan 121 di peta setiap 30 detik.
Menyimpan informasi peta di Azure Digital Twins
Sekarang Anda memiliki solusi yang dikodekan permanen untuk memperbarui informasi peta Anda, Anda dapat menggunakan grafik Azure Digital Twins untuk menyimpan semua informasi yang diperlukan untuk memperbarui peta dalam ruangan Anda. Informasi ini akan mencakup ID set status, ID langganan peta, dan ID fitur masing-masing peta dan lokasi.
Solusi untuk contoh spesifik ini akan melibatkan pembaruan setiap ruang tingkat atas untuk memiliki ID set status dan atribut ID langganan peta, dan memperbarui setiap ruang untuk memiliki ID fitur. Anda perlu mengatur nilai ini satu kali saat menginisialisasi grafik kembar, lalu menanyakan nilai tersebut untuk setiap peristiwa pembaruan kembar.
Tergantung pada konfigurasi topologi Anda, penyimpanan ketiga atribut ini pada tingkat berbeda yang berhubungan dengan granularitas peta Anda memungkinkan.
Langkah berikutnya
Untuk membaca lebih lanjut tentang mengelola, meningkatkan, dan mengambil informasi dari grafik kembar, lihat referensi berikut: