Gebruik Azure Digital Twins om een indoorkaart van Azure Kaarten bij te werken
In dit artikel worden de stappen beschreven die nodig zijn Azure Digital Twins gegevens te gebruiken om informatie bij te werken die wordt weergegeven op een indoorkaart met behulp van Azure Kaarten. Azure Digital Twins een grafiek op van uw IoT-apparaatrelaties en routeert u telemetriegegevens naar verschillende eindpunten, waardoor dit de perfecte service is voor het bijwerken van informatie overlays op kaarten.
Deze handleiding heeft betrekking op:
- Uw Azure Digital Twins configureren voor het verzenden van dubbele updategebeurtenissen naar een functie in Azure Functions.
- Het maken van een functie voor het bijwerken van een Azure Kaarten functieset voor indoorkaarten.
- Het opslaan van uw kaart-id en functie-id voor de statenset in Azure Digital Twins grafiek.
Vereisten
- Volg de Azure Digital Twins in Verbinding maken end-to-end-oplossing te maken.
- U breidt deze tweeling uit met een extra eindpunt en route. Vanuit die zelfstudie voegt u ook een andere functie toe aan uw functie-app.
- Volg de Azure Kaarten in Azure Kaarten Creator gebruiken om indoorkaarten te maken om een Azure Kaarten indoorkaart met een functie-stateset te maken.
- Functie-statesets zijn verzamelingen dynamische eigenschappen (staten) die zijn toegewezen aan gegevenssetfuncties zoals ruimten of apparatuur. In de bovenstaande Kaarten Azure-zelfstudie slaat de functiestatusset de status van de ruimte op die u op een kaart wilt weergeven.
- U hebt uw functie-id voor de statenset en de Azure Kaarten nodig.
Topologie
In de onderstaande afbeelding ziet u waar de integratie-elementen van indoorkaarten in deze zelfstudie in een groter end-to-end scenario Azure Digital Twins passen.
Een functie maken om een kaart bij te werken wanneer tweelingen worden bijgewerkt
Eerst maakt u een route in Azure Digital Twins om alle updategebeurtenissen van de tweeling door te geven naar een Event Grid-onderwerp. Vervolgens gebruikt u een functie om deze updateberichten te lezen en een functie-stateset bij te werken in Azure Kaarten.
Een route en filter maken voor updatemeldingen van de dubbel
Azure Digital Twins kunnen dubbele updategebeurtenissen wanneer de status van een tweeling wordt bijgewerkt. De Azure Digital Twins Verbinding maken een end-to-end oplossing die hierboven is gekoppeld, doorloopt een scenario waarin een verband wordt gebruikt om een temperatuurkenmerk bij te werken dat is gekoppeld aan de tweeling van een kamer. U breidt deze oplossing uit door u te abonneren op het bijwerken van meldingen voor tweelingen en door die informatie te gebruiken om uw kaarten bij te werken.
Dit patroon wordt rechtstreeks vanuit de room twin gelezen, in plaats van het IoT-apparaat. Dit biedt u de flexibiliteit om de onderliggende gegevensbron voor temperatuur te wijzigen zonder dat u de toewijzingslogica hoeft bij te werken. U kunt bijvoorbeeld meerdere multiple multipleens toevoegen of deze ruimte instellen om een oren te delen met een andere ruimte, allemaal zonder dat u de kaartlogica hoeft bij te werken.
Maak een Event Grid-onderwerp dat gebeurtenissen van uw Azure Digital Twins ontvangt.
az eventgrid topic create --resource-group <your-resource-group-name> --name <your-topic-name> --location <region>Maak een eindpunt om uw Event Grid-onderwerp te koppelen aan 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>Maak een route in Azure Digital Twins om updategebeurtenissen van de dubbel naar uw eindpunt te verzenden.
Notitie
Er is momenteel een bekend probleem in Cloud Shell dat deze opdrachtgroepen beïnvloedt:
az dt route,az dt model,az dt twin.Om dit probleem op te lossen, kunt u
az loginin Cloud Shell uitvoeren voordat u de opdracht uitvoert, of kunt u de lokale CLI gebruiken in plaats van Cloud Shell. Zie Problemen oplossen: Bekende problemen in Azure Digital Twins voor meer informatie hierover.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'"
Een functie maken om kaarten bij te werken
U gaat een door Event Grid geactiveerde functie in uw functie-app maken vanuit de end-to-end zelfstudie (Verbinding maken end-to-end-oplossing). Met deze functie worden deze meldingen uitgepakt en worden updates naar een Azure Kaarten-functie-stateset om de temperatuur van één ruimte bij te werken.
Zie het volgende document voor naslaginformatie: Azure Event Grid trigger voor Azure Functions.
Vervang de functiecode door de volgende code. Het filtert alleen updates voor ruimte tweelingen, leest de bijgewerkte temperatuur en verzendt die informatie naar Azure Kaarten.
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());
}
}
}
}
}
}
U moet twee omgevingsvariabelen instellen in uw functie-app. Een is uw primaire Azure Kaarten-abonnementssleutelen één is uw Azure Kaarten-id voor de statenset.
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>"
Live-updates op uw kaart weergeven
Volg de onderstaande stappen om de temperatuur live bij te werken:
- Begin met het verzenden van gesimuleerde IoT-gegevens door het DeviceSimulator-project uit te Azure Digital Twins Verbinding maken end-to-end-oplossing te maken. De instructies voor dit proces staan in de sectie De simulatie configureren en uitvoeren.
- Gebruik de Azure Kaarten Indoor-module om uw indoorkaarten weer te geven die zijn gemaakt in Azure Kaarten Creator.
- Kopieer de HTML uit de sectie Voorbeeld: De sectie Indoor Kaarten Module van de indoorkaarten in de module Azure Kaarten Indoor Kaarten gebruiken naar een lokaal bestand.
- Vervang de abonnementssleutel, tegelsetId en statesetID in het lokale HTML-bestand door uw waarden.
- Open dat bestand in uw browser.
Beide voorbeelden verzenden temperatuur in een compatibel bereik, dus u zou ongeveer elke 30 seconden de kleur van de update van room 121 op de kaart moeten zien.
Uw kaartgegevens opslaan in Azure Digital Twins
Nu u een in code gecodeerde oplossing hebt voor het bijwerken van de kaartgegevens, kunt u de Azure Digital Twins-grafiek gebruiken om alle informatie op te slaan die nodig is voor het bijwerken van uw plattegrond. Deze informatie omvat de id van de statenet, de abonnements-id van de kaart en de functie-id van elke kaart en locatie.
Een oplossing voor dit specifieke voorbeeld is het bijwerken van elke ruimte op het hoogste niveau om een kenmerk voor de statenet-id en abonnements-id toe te kennen en elke ruimte bij te werken met een functie-id. U moet deze waarden eenmaal instellen bij het initialiseren van de tweelinggrafiek en vervolgens een query uitvoeren op deze waarden voor elke updategebeurtenis van de tweeling.
Afhankelijk van de configuratie van uw topologie is het mogelijk om deze drie kenmerken op verschillende niveaus op te slaan die correleert met de granulariteit van uw kaart.
Volgende stappen
Zie de volgende verwijzingen voor meer informatie over het beheren, upgraden en ophalen van gegevens uit de tweelinggrafiek: