Share via


Azure Digital Twins integreren met Azure Time Series Insights

In dit artikel leert u hoe u Azure Digital Twins integreert met Azure Time Series Insights (TSI).

De oplossing die in dit artikel wordt beschreven, maakt gebruik van Time Series Insights om historische gegevens over uw IoT-oplossing te verzamelen en te analyseren. Azure Digital Twins is geschikt voor het invoeren van gegevens in Time Series Insights, omdat u hiermee meerdere gegevensstromen kunt correleren en uw informatie kunt standaardiseren voordat u deze naar Time Series Insights verzendt.

Tip

De eenvoudigste manier om historische dubbelgegevens in de loop van de tijd te analyseren, is door de functie gegevensgeschiedenis te gebruiken om een Azure Digital Twins-exemplaar te verbinden met een Azure Data Explorer-cluster, zodat graafupdates automatisch worden historiseerd naar Azure Data Explorer. Vervolgens kunt u een query uitvoeren op deze gegevens in Azure Data Explorer met behulp van de Azure Digital Twins-queryinvoegtoepassing voor Azure Data Explorer. Als u Time Series Insights niet specifiek hoeft te gebruiken, kunt u dit alternatief overwegen voor een eenvoudigere integratie-ervaring.

Vereisten

Voordat u een relatie met Time Series Insights kunt instellen, moet u de volgende resources instellen:

Tip

In dit artikel worden de veranderende digitale dubbelwaarden die worden weergegeven in Time Series Insights, handmatig bijgewerkt voor het gemak. Als u dit artikel echter wilt voltooien met live gesimuleerde gegevens, kunt u een Azure-functie instellen waarmee digitale dubbels worden bijgewerkt op basis van IoT-telemetriegebeurtenissen van een gesimuleerd apparaat. Voor instructies volgt u Gegevens opnemen IoT Hub, inclusief de laatste stappen voor het uitvoeren van de apparaatsimulator en valideren dat de gegevensstroom werkt.

Zoek later nog een TIP om te laten zien waar u kunt beginnen met het uitvoeren van de apparaatsimulator en laat uw Azure-functies de tweelingen automatisch bijwerken in plaats van handmatige opdrachten voor het bijwerken van digitale dubbels te verzenden.

Architectuur voor de oplossing

U koppelt Time Series Insights aan Azure Digital Twins via het volgende pad.

Diagram van Azure-services in een end-to-end-scenario, met Time Series Insights gemarkeerd.

De Event Hubs-naamruimte maken

Voordat u de Event Hubs maakt, maakt u eerst een Event Hubs-naamruimte die gebeurtenissen van uw Azure Digital Twins-exemplaar ontvangt. U kunt de onderstaande Azure CLI-instructies gebruiken of de Azure Portal gebruiken door Een Event Hub maken met behulp van Azure Portal te volgen. Als u wilt zien welke regio's Ondersteuning bieden voor Event Hubs, gaat u naar Beschikbare Azure-producten per regio.

az eventhubs namespace create --name <name-for-your-Event-Hubs-namespace> --resource-group <your-resource-group> --location <region>

Tip

Als u een foutmelding krijgt met de melding BadRequest: The specified service namespace is invalid., controleert u of de naam die u hebt gekozen voor uw naamruimte voldoet aan de naamgevingsvereisten die worden beschreven in dit referentiedocument: Naamruimte maken.

U gebruikt deze Event Hubs-naamruimte voor het opslaan van de twee Event Hubs die nodig zijn voor dit artikel:

  1. Twins Hub - Event Hub voor het ontvangen van dubbele wijzigingsgebeurtenissen
  2. Time Series Hub - Event Hub om gebeurtenissen te streamen naar Time Series Insights

In de volgende secties wordt uitgelegd hoe u deze hubs maakt en configureert binnen uw Event Hub-naamruimte.

Twins-hub maken

De eerste Event Hub die u in dit artikel maakt, is de twins-hub. Deze Event Hub ontvangt dubbele wijzigingsevenementen van Azure Digital Twins. Als u de twins-hub wilt instellen, voert u de volgende stappen in deze sectie uit:

  1. De twins-hub maken
  2. Een autorisatieregel maken om machtigingen voor de hub te beheren
  3. Een eindpunt maken in Azure Digital Twins dat gebruikmaakt van de autorisatieregel voor toegang tot de hub
  4. Een route maken in Azure Digital Twins waarmee de gebeurtenis voor tweelingupdates naar het eindpunt en de verbonden twins-hub wordt verzonden
  5. De twins hub ophalen connection string

Maak de twins-hub met de volgende CLI-opdracht. Geef een naam op voor de twins-hub.

az eventhubs eventhub create --name <name-for-your-twins-hub> --resource-group <your-resource-group> --namespace-name <your-Event-Hubs-namespace-from-earlier>

Autorisatieregel voor Twins Hub maken

Maak een autorisatieregel met machtigingen voor verzenden en ontvangen. Geef een naam op voor de regel.

az eventhubs eventhub authorization-rule create --rights Listen Send --name <name-for-your-twins-hub-auth-rule> --resource-group <your-resource-group> --namespace-name <your-Event-Hubs-namespace-from-earlier> --eventhub-name <your-twins-hub-from-earlier>

Twins Hub-eindpunt maken

Maak een Azure Digital Twins-eindpunt dat uw Event Hub koppelt aan uw Azure Digital Twins-exemplaar. Geef een naam op voor het eindpunt van de twins-hub.

az dt endpoint create eventhub --dt-name <your-Azure-Digital-Twins-instance-name> --eventhub-resource-group <your-resource-group> --eventhub-namespace <your-Event-Hubs-namespace-from-earlier> --eventhub <your-twins-hub-name-from-earlier> --eventhub-policy <your-twins-hub-auth-rule-from-earlier> --endpoint-name <name-for-your-twins-hub-endpoint>

Twins Hub-gebeurtenisroute maken

Azure Digital Twins-exemplaren kunnen dubbele update-gebeurtenissen verzenden wanneer de status van een tweeling wordt bijgewerkt. In deze sectie maakt u een Azure Digital Twins-gebeurtenisroute die deze update-gebeurtenissen naar de twins-hub stuurt voor verdere verwerking.

Maak een route in Azure Digital Twins om van bovenaf update-gebeurtenissen voor tweelingen naar uw eindpunt te verzenden. Met het filter in deze route kunnen alleen updateberichten van dubbels worden doorgegeven aan uw eindpunt. Geef een naam op voor de gebeurtenisroute van de twins-hub. Voor de tijdelijke aanduiding voor de naam van het Azure Digital Twins-exemplaar in deze opdracht kunt u de beschrijvende naam of de hostnaam gebruiken voor een betere prestaties.

az dt route create --dt-name <your-Azure-Digital-Twins-instance-hostname-or-name> --endpoint-name <your-twins-hub-endpoint-from-earlier> --route-name <name-for-your-twins-hub-event-route> --filter "type = 'Microsoft.DigitalTwins.Twin.Update'"

Twins Hub-connection string ophalen

Haal de twins Event Hub-connection string op met behulp van de autorisatieregels die u hierboven hebt gemaakt voor de twins-hub.

az eventhubs eventhub authorization-rule keys list --resource-group <your-resource-group> --namespace-name <your-Event-Hubs-namespace-from-earlier> --eventhub-name <your-twins-hub-from-earlier> --name <your-twins-hub-auth-rule-from-earlier>

Noteer de waarde primaryConnectionString uit het resultaat om de app-instelling voor de twins-hub verderop in dit artikel te configureren.

Time Series-hub maken

De tweede Event Hub die u in dit artikel maakt, is de time series-hub. Deze Event Hub is degene die de Azure Digital Twins-gebeurtenissen naar Time Series Insights streamt. Voer de volgende stappen uit om de time series-hub in te stellen:

  1. De time series-hub maken
  2. Een autorisatieregel maken om machtigingen voor de hub te beheren
  3. De time series-hub ophalen connection string

Wanneer u later het Time Series Insights-exemplaar maakt, maakt u verbinding met deze time series-hub als gebeurtenisbron voor het Time Series Insights-exemplaar.

Maak de time series-hub met behulp van de volgende opdracht. Geef een naam op voor de tijdreekshub.

 az eventhubs eventhub create --name <name-for-your-time-series-hub> --resource-group <your-resource-group> --namespace-name <your-Event-Hub-namespace-from-earlier>

Autorisatieregel voor time series-hubs maken

Maak een autorisatieregel met machtigingen voor verzenden en ontvangen. Geef een naam op voor de verificatieregel voor de time series-hub.

az eventhubs eventhub authorization-rule create --rights Listen Send --name <name-for-your-time-series-hub-auth-rule> --resource-group <your-resource-group> --namespace-name <your-Event-Hub-namespace-from-earlier> --eventhub-name <your-time-series-hub-name-from-earlier>

Time Series Hub-connection string ophalen

Haal de time series hub connection string op met behulp van de autorisatieregels die u hierboven hebt gemaakt voor de time series-hub:

az eventhubs eventhub authorization-rule keys list --resource-group <your-resource-group> --namespace-name <your-Event-Hub-namespace-from-earlier> --eventhub-name <your-time-series-hub-name-from-earlier> --name <your-time-series-hub-auth-rule-from-earlier>

Noteer de waarde primaryConnectionString in het resultaat om de instelling voor de time series hub-app verderop in dit artikel te configureren.

Noteer ook de volgende waarden om deze later te gebruiken om een Time Series Insights-exemplaar te maken.

  • Event hub-naamruimte
  • Naam van time series-hub
  • Verificatieregel voor Time Series Hub

Een functie maken

In deze sectie maakt u een Azure-functie die update-gebeurtenissen van tweelingen converteert van hun oorspronkelijke vorm als JSON-patchdocumenten naar JSON-objecten die alleen bijgewerkte en toegevoegde waarden van uw tweelingen bevatten.

  1. Maak eerst een nieuw functie-app-project.

    U kunt dit doen met behulp van Visual Studio (zie Ontwikkelen Azure Functions met Visual Studio), Visual Studio Code (zie Een C#-functie maken in Azure met Visual Studio Code) of de Azure CLI (zie Een C#-functie maken in Azure vanaf de opdrachtregel voor instructies).

  2. Maak een nieuwe Azure-functie met de naam ProcessDTUpdatetoTSI.cs om telemetrie-gebeurtenissen van apparaten bij te werken naar Time Series Insights. Het functietype is Event Hub-trigger.

    Schermopname van Visual Studio om een nieuwe Azure-functie van het type Event Hub-trigger te maken.

  3. Voeg de volgende pakketten toe aan uw project (u kunt Visual Studio NuGet-pakketbeheer of de opdracht dotnet add package gebruiken in een opdrachtregelprogramma).

  4. Vervang de code in het bestand ProcessDTUpdatetoTSI.cs door de volgende code:

    using System.Collections.Generic;
    using System.Threading.Tasks;
    using System.Text;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Extensions.Logging;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    using Azure.Messaging.EventHubs;
    
    namespace UpdateTSI
    {
        public static class ProcessDTUpdatetoTSI
        { 
            [FunctionName("ProcessDTUpdatetoTSI")]
            public static async Task Run(
                [EventHubTrigger("twins-event-hub", Connection = "EventHubAppSetting-Twins")]EventData myEventHubMessage,
                [EventHub("tsi-event-hub", Connection = "EventHubAppSetting-TSI")]IAsyncCollector<string> outputEvents,
                ILogger log)
            {
                JObject message = (JObject)JsonConvert.DeserializeObject(Encoding.UTF8.GetString(myEventHubMessage.Body));
                log.LogInformation($"Reading event: {message}");
    
                // Read values that are replaced or added
                var tsiUpdate = new Dictionary<string, object>();
                foreach (var operation in message["patch"])
                {
                    if (operation["op"].ToString() == "replace" || operation["op"].ToString() == "add")
                    {
                        //Convert from JSON patch path to a flattened property for TSI
                        //Example input: /Front/Temperature
                        //        output: Front.Temperature
                        string path = operation["path"].ToString().Substring(1);
                        path = path.Replace("/", ".");
                        tsiUpdate.Add(path, operation["value"]);
                    }
                }
                // Send an update if updates exist
                if (tsiUpdate.Count > 0)
                {
                    tsiUpdate.Add("$dtId", myEventHubMessage.Properties["cloudEvents:subject"]);
                    await outputEvents.AddAsync(JsonConvert.SerializeObject(tsiUpdate));
                }
            }
        }
    }
    

    Sla uw functiecode op.

  5. Publiceer het project met de functie ProcessDTUpdatetoTSI.cs naar een functie-app in Azure.

    Zie Ontwikkelen Azure Functions met Visual Studio voor instructies over het publiceren van de functie met Behulp van Visual Studio. Zie Een C#-functie maken in Azure met behulp van Visual Studio Code voor instructies over het publiceren van de functie met Behulp van Visual Studio Code. Zie Een C#-functie maken in Azure vanaf de opdrachtregel voor instructies over het publiceren van de functie met behulp van de Azure CLI.

Sla de naam van de functie-app op voor later gebruik om app-instellingen voor de twee Event Hubs te configureren.

De functie-app configureren

Wijs vervolgens een toegangsrol toe voor de functie en configureer de toepassingsinstellingen zodat deze toegang heeft tot uw resources.

Voer de volgende opdrachten uit in Azure Cloud Shell of een lokale Azure CLI.

Notitie

Deze sectie moet worden voltooid door een Azure-gebruiker die machtigingen heeft voor het beheren van gebruikerstoegang tot Azure-resources, waaronder het verlenen en delegeren van machtigingen. Veelvoorkomende rollen die aan deze vereiste voldoen, zijn Eigenaar, Accountbeheerder of de combinatie van Beheerder voor gebruikerstoegang en Inzender. Zie Een exemplaar en verificatie instellen voor meer informatie over de machtigingsvereisten voor Azure Digital Twins-rollen.

Een toegangsrol toewijzen

Voor de Azure-functie moet een Bearer-token worden doorgegeven. Om ervoor te zorgen dat het Bearer-token wordt doorgegeven, verleent u de functie-app de rol Azure Digital Twins-gegevenseigenaar voor uw Azure Digital Twins-exemplaar, waardoor de functie-app toestemming krijgt om gegevensvlakactiviteiten uit te voeren op het exemplaar.

  1. Gebruik de volgende opdracht om een door het systeem beheerde identiteit voor uw functie te maken (als de functie er al een heeft, worden met deze opdracht de details afgedrukt). Noteer het principalId veld in de uitvoer. U gebruikt deze id om te verwijzen naar de functie, zodat u deze in de volgende stap machtigingen kunt verlenen.

    az functionapp identity assign --resource-group <your-resource-group> --name <your-function-app-name>	
    
  2. Gebruik de principalId waarde in de volgende opdracht om de functie de rol Azure Digital Twins-gegevenseigenaar te geven voor uw Azure Digital Twins-exemplaar.

    az dt role-assignment create --dt-name <your-Azure-Digital-Twins-instance> --assignee "<principal-ID>" --role "Azure Digital Twins Data Owner"
    

Toepassingsinstellingen configureren

Maak vervolgens de URL van uw Azure Digital Twins-exemplaar toegankelijk voor uw functie door hiervoor een omgevingsvariabele in te stellen.

Tip

De URL van het Azure Digital Twins-exemplaar wordt gemaakt door https:// toe te voegen aan het begin van de hostnaam van uw exemplaar. Voer az dt show --dt-name <your-Azure-Digital-Twins-instance>uit om de hostnaam en alle eigenschappen van uw exemplaar te zien.

Met de volgende opdracht stelt u een omgevingsvariabele in voor de URL van uw exemplaar die uw functie gebruikt wanneer deze toegang nodig heeft tot het exemplaar.

az functionapp config appsettings set --resource-group <your-resource-group> --name <your-function-app-name> --settings "ADT_SERVICE_URL=https://<your-Azure-Digital-Twins-instance-host-name>"

Voeg vervolgens omgevingsvariabelen toe aan de instellingen van de functie-app, zodat deze toegang heeft tot de twins-hub en time series-hub.

Gebruik de waarde van twins hub primaryConnectionString die u eerder hebt opgeslagen om een app-instelling te maken in uw functie-app die de twins hub bevat connection string:

az functionapp config appsettings set --settings "EventHubAppSetting-Twins=<your-twins-hub-primaryConnectionString>" --resource-group <your-resource-group> --name <your-function-app-name>

Gebruik de waarde van time series hub primaryConnectionString die u eerder hebt opgeslagen om een app-instelling te maken in uw functie-app die de time series-hub bevat connection string:

az functionapp config appsettings set --settings "EventHubAppSetting-TSI=<your-time-series-hub-primaryConnectionString>" --resource-group <your-resource-group> --name <your-function-app-name>

Een Time Series Insights-instantie maken en verbinden

In deze sectie stelt u het Time Series Insights-exemplaar in om gegevens te ontvangen van uw time series-hub. Zie Een Azure Time Series Insights Gen2 PAYG-omgeving instellen voor meer informatie over dit proces. Volg de onderstaande stappen om een Time Series Insights-omgeving te maken.

  1. Zoek in de Azure Portal naar Time Series Insights-omgevingen en selecteer de knop Maken. Kies de volgende opties om de tijdreeksomgeving te maken.

    • Abonnement : kies uw abonnement.
      • Resourcegroep : kies uw resourcegroep.
    • Omgevingsnaam : geef een naam op voor uw tijdreeksomgeving.
    • Locatie : kies een locatie.
    • Laag: kies de prijscategorie Gen2(L1).
    • Naam van eigenschap : voer $dtId in (meer informatie over het selecteren van een id-waarde in Aanbevolen procedures voor het kiezen van een tijdreeks-id).
    • Naam van opslagaccount : geef een opslagaccountnaam op.
    • Warm archief inschakelen : laat dit veld ingesteld op Ja.

    U kunt standaardwaarden voor andere eigenschappen op deze pagina laten staan. Selecteer de knop Volgende: Gebeurtenisbron > .

    Schermopname van de Azure Portal die laat zien hoe u een Time Series Insights-omgeving maakt (deel 1/3).

    Schermopname van de Azure Portal die laat zien hoe u een Time Series Insights-omgeving maakt (deel 2/3).

  2. Kies op het tabblad Gebeurtenisbron de volgende velden:

    • Een gebeurtenisbron maken - Kies Ja.
    • Brontype : kies Event Hub.
    • Naam : geef een naam op voor de gebeurtenisbron.
    • Abonnement : kies uw Azure-abonnement.
    • Event Hub-naamruimte : kies de naamruimte die u eerder in dit artikel hebt gemaakt.
    • Event Hub-naam : kies de naam van de tijdreekshub die u eerder in dit artikel hebt gemaakt.
    • Naam van het Event Hub-toegangsbeleid : kies de verificatieregel voor de time series-hub die u eerder in dit artikel hebt gemaakt.
    • Event Hub-consumentengroep : selecteer Nieuw en geef een naam op voor de event hub-consumentengroep. Selecteer vervolgens Toevoegen.
    • Eigenschapsnaam : laat dit veld leeg.

    Kies de knop Controleren en maken om alle details te bekijken. Selecteer vervolgens opnieuw de knop Beoordelen en maken om de tijdreeksomgeving te maken.

    Schermopname van de Azure Portal die laat zien hoe u een Time Series Insights-omgeving maakt (deel 3/3).

IoT-gegevens verzenden naar Azure Digital Twins

Als u wilt beginnen met het verzenden van gegevens naar Time Series Insights, moet u beginnen met het bijwerken van de eigenschappen van de digitale dubbel in Azure Digital Twins met het wijzigen van gegevenswaarden.

Gebruik de CLI-opdracht az dt twin update om een eigenschap bij te werken op de tweeling die u hebt toegevoegd in de sectie Vereisten . Als u de instructies voor het maken van tweelingen uit Telemetrie opnemen van IoT Hub) hebt gebruikt, kunt u de volgende opdracht in de lokale CLI of de Cloud Shell bash-terminal gebruiken om de temperatuureigenschap op de thermostat67-tweeling bij te werken. Er is één tijdelijke aanduiding voor de hostnaam van het Azure Digital Twins-exemplaar (u kunt ook de beschrijvende naam van het exemplaar gebruiken met een lichte afname van de prestaties).

az dt twin update --dt-name <your-Azure-Digital-Twins-instance-hostname-or-name> --twin-id thermostat67 --json-patch '{"op":"replace", "path":"/Temperature", "value": 20.5}'

Herhaal de opdracht nog minstens vier keer met verschillende eigenschapswaarden om verschillende gegevenspunten te maken die later kunnen worden waargenomen in de Time Series Insights-omgeving.

Tip

Als u dit artikel wilt voltooien met live gesimuleerde gegevens in plaats van de waarden van de digitale dubbel handmatig bij te werken, moet u eerst de TIP uit de sectie Vereisten voltooien om een Azure-functie in te stellen waarmee tweelingen vanaf een gesimuleerd apparaat worden bijgewerkt. Daarna kunt u het apparaat nu uitvoeren om te beginnen met het verzenden van gesimuleerde gegevens en het bijwerken van uw digitale dubbel via die gegevensstroom.

Uw gegevens in Time Series Insights weergeven

Nu stromen gegevens naar uw Time Series Insights-exemplaar, klaar om te worden geanalyseerd. Volg de onderstaande stappen om de binnenkomende gegevens te verkennen.

  1. Zoek in de Azure Portal naar de naam van de tijdreeksomgeving die u eerder hebt gemaakt. Selecteer overzicht in de menuopties aan de linkerkant om de URL van Time Series Insights Explorer weer te geven. Selecteer de URL om de temperatuurwijzigingen weer te geven die worden weergegeven in de Time Series Insights-omgeving.

    Schermopname van de Azure Portal met de Verkenner-URL van Time Series Insights op het tabblad Overzicht van de Time Series Insights-omgeving.

  2. In de verkenner ziet u de tweelingen in het Azure Digital Twins-exemplaar aan de linkerkant. Selecteer de dubbel waarvoor u eigenschappen hebt bewerkt, kies de eigenschap die u hebt gewijzigd en selecteer Toevoegen.

    Schermopname van de Time Series Insights-verkenner met de stappen voor het selecteren van thermostat67, selecteer de temperatuur van de eigenschap en selecteer Toevoegen gemarkeerd.

  3. U ziet nu de wijzigingen in de eigenschap die u hebt aangebracht, weergegeven in de grafiek, zoals hieronder wordt weergegeven.

    Schermopname van de Verkenner van Time Series Insights met de initiële temperatuurgegevens, met een lijn met willekeurige waarden tussen 68 en 85.

Als u een simulatie veel langer laat uitvoeren, ziet uw visualisatie er ongeveer als volgt uit:

Schermopname van de Verkenner van Time Series Insights, waar temperatuurgegevens voor elke tweeling in drie parallelle lijnen van verschillende kleuren worden weergegeven.

Volgende stappen

Nadat u een gegevenspijplijn hebt ingesteld voor het verzenden van tijdreeksgegevens van Azure Digital Twins naar Time Series Insights, wilt u misschien nadenken over het omzetten van assetmodellen die zijn ontworpen voor Azure Digital Twins in assetmodellen voor Time Series Insights. Zie Modelsynchronisatie tussen Azure Digital Twins en Time Series Insights Gen2 voor een zelfstudie over deze volgende stap in het integratieproces.