Använda Azure Digital Twins för att uppdatera en Azure Kartor inomhuskarta
Den här artikeln går igenom de steg som krävs för att Azure Digital Twins data för att uppdatera information som visas på en inomhuskarta med hjälp av Azure Kartor. Azure Digital Twins lagrar ett diagram över dina IoT-enhetsrelationer och dirigerar telemetri till olika slutpunkter, vilket gör det till en perfekt tjänst för att uppdatera informationsöverlägg på kartor.
Den här guiden omfattar:
- Konfigurera din Azure Digital Twins för att skicka tvillinguppdateringshändelser till en funktion i Azure Functions.
- Skapa en funktion för att uppdatera en Azure Kartor funktions tillståndsuppsättning för inomhuskartor.
- Så här lagrar du ditt kart-ID och funktions tillståndsuppsättnings-ID i Azure Digital Twins diagrammet.
Förutsättningar
- Följ Azure Digital Twins i Anslut en lösning från end-to-endtill en .
- Du utökar den här tvillingen med ytterligare en slutpunkt och väg. Du kommer också att lägga till ytterligare en funktion i funktionsappen från den självstudien.
- Följ Azure-Kartor i Använda Azure Kartor Creator för att skapa inomhuskartor för att skapa en Azure Kartor inomhuskarta med en funktions tillståndsuppsättning.
- Funktions tillståndsuppsättningar är samlingar av dynamiska egenskaper (tillstånd) som tilldelas till datamängdsfunktioner, till exempel rum eller utrustning. I självstudien Kartor Azure-portalen ovan lagrar funktionstillståndet rumsstatus som du kommer att visa på en karta.
- Du behöver ditt funktions tillståndsuppsättnings-ID och Azure Kartor prenumerationsnyckel.
Topologi
Bilden nedan illustrerar var integreringselementen för inomhuskartor i den här självstudien passar in i ett större scenario från Azure Digital Twins ände.
Skapa en funktion för att uppdatera en karta när tvillingar uppdateras
Först skapar du en väg i en Azure Digital Twins vidarebefordrar alla tvillinguppdateringshändelser till ett Event Grid-ämne. Sedan använder du en funktion för att läsa dessa uppdateringsmeddelanden och uppdatera en funktions tillståndsuppsättning i Azure Kartor.
Skapa en väg och filtrera till tvillingmeddelanden om uppdateringar
Azure Digital Twins instanser kan generera uppdateringshändelser för tvillingar när en tvillings tillstånd uppdateras. Den Azure Digital Twins Anslut en lösning från slutet till slut som är länkad ovan går igenom ett scenario där en termometer används för att uppdatera ett temperaturattribut som är kopplat till ett rums tvilling. Du utökar lösningen genom att prenumerera på att uppdatera meddelanden för tvillingar och använda den informationen för att uppdatera dina kartor.
Det här mönstret läser direkt från rumstvillingen i stället för IoT-enheten, vilket ger dig flexibiliteten att ändra den underliggande datakällan för temperatur utan att behöva uppdatera mappningslogiken. Du kan till exempel lägga till flera termometrar eller ange att det här rummet ska dela en termometer med ett annat rum, allt utan att du behöver uppdatera kartlogiken.
Skapa ett Event Grid-ämne som tar emot händelser från din Azure Digital Twins instans.
az eventgrid topic create --resource-group <your-resource-group-name> --name <your-topic-name> --location <region>Skapa en slutpunkt för att länka event grid-ämnet till Azure Digital Twins.
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>Skapa en väg i Azure Digital Twins för att skicka dubbla uppdateringshändelser till din slutpunkt.
Anteckning
Det finns ett känt problem i Cloud Shell som påverkar dessa kommandogrupper:
az dt route,az dt model,az dt twin.Du kan lösa problemet genom att köra
az logini Cloud Shell innan du kör kommandot eller använda det lokala kommandoradsgränssnittet i stället för Cloud Shell. Mer information om detta finns i Felsökning: Kända problem i Azure Digital Twins.az dt route create --dt-name <your-Azure-Digital-Twins-instance-name> --endpoint-name <Event-Grid-endpoint-name> --route-name <my-route> --filter "type = 'Microsoft.DigitalTwins.Twin.Update'"
Skapa en funktion för att uppdatera kartor
Du kommer att skapa en Event Grid-utlöst funktion i funktionsappen från självstudien från Anslut till slut . Den här funktionen packar upp dessa meddelanden och skickar uppdateringar till en Azure Kartor funktions tillståndsuppsättning för att uppdatera temperaturen för ett rum.
Se följande dokument för referensinformation: Azure Event Grid utlösare för Azure Functions.
Ersätt funktionskoden med följande kod. Den filtrerar bara ut uppdateringar av rymdtvillingarna, läser den uppdaterade temperaturen och skickar informationen till Azure Kartor.
using System;
using System.Threading.Tasks;
using System.Net.Http;
using Microsoft.Azure.EventGrid.Models;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.EventGrid;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
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());
}
}
}
}
}
}
Du måste ange två miljövariabler i funktionsappen. En är din primära Kartor Azure-prenumerationsnyckeloch en är ditt Azure Kartor tillståndsuppsättnings-ID.
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>"
Visa liveuppdateringar på kartan
Följ stegen nedan om du vill se temperaturen för liveuppdatering:
- Börja skicka simulerade IoT-data genom att köra DeviceSimulator-projektet från Azure Digital Twins Anslut en lösning från början till slut. Anvisningarna för den här processen finns i avsnittet Konfigurera och köra simuleringen.
- Använd modulen Azure Kartor Indoor för att rendera dina inomhuskartor som skapats i Azure Kartor Creator.
- Kopiera HTML från avsnittet Example: Use the Indoor Kartor Module (Användning av inomhuskartor) i modulen Use the Azure Kartor Indoor Kartor (Använda modulen Kartor Inomhus) till en lokal fil.
- Ersätt prenumerationsnyckeln, tilesetId och statesetID i den lokala HTML-filen med dina värden.
- Öppna filen i webbläsaren.
Båda exemplen skickar temperatur i ett kompatibelt intervall, så du bör se färgen på rum 121-uppdateringen på kartan ungefär var 30:e sekund.
Lagra din kartinformation i Azure Digital Twins
Nu när du har en hårdkodad lösning för att uppdatera kartinformation kan du använda Azure Digital Twins-diagrammet för att lagra all information som behövs för att uppdatera inomhuskartan. Den här informationen omfattar tillståndsuppsättnings-ID, prenumerations-ID för kartor och funktions-ID för varje karta respektive plats.
En lösning för det här specifika exemplet skulle innebära att uppdatera varje toppnivåutrymme så att det har ett tillståndsuppsättnings-ID och mappar prenumerations-ID-attribut och uppdatera varje rum till ett funktions-ID. Du måste ange dessa värden en gång när du initierar tvillingdiagrammet och sedan köra frågor mot dessa värden för varje uppdateringshändelse för tvillingen.
Beroende på konfigurationen av topologin är det möjligt att lagra dessa tre attribut på olika nivåer som korrelerar till kartans kornighet.
Nästa steg
Mer information om hur du hanterar, uppgraderar och hämtar information från twins-diagrammet finns i följande referenser: