Självstudie: Skicka data via transparent gateway

gäller för:ja-ikonen IoT Edge 1.1

Viktigt!

IoT Edge 1.1 supportdatumet upphör var den 13 december 2022. I informationen om Microsoft-produktens livscykel hittar du fler uppgifter om vilken support som gäller för denna produkt, tjänst, teknik eller detta API. Mer information om hur du uppdaterar till den senaste versionen av IoT Edge finns i Uppdatera IoT Edge-.

I den här artikeln använder vi återigen den virtuella utvecklingsdatorn som en simulerad enhet. Men i stället för att skicka data direkt till IoT Hub skickar enheten data till den IoT Edge-enhet som konfigurerats som en transparent gateway.

Vi övervakar driften av IoT Edge-enheten medan den simulerade enheten skickar data. När enheten är klar tittar vi på data i vårt lagringskonto för att verifiera att allt fungerade som förväntat.

Det här steget utförs vanligtvis av en moln- eller enhetsutvecklare.

I det här avsnittet av självstudien lär du dig att:

  • Skapa och kör en underordnad enhet.
  • Kontrollera att genererade data lagras i Azure Blob Storage.
  • Kontrollera att maskininlärningsmodellen klassificerade enhetsdata.

Förutsättningar

Den här artikeln är en del av en serie för en självstudie om hur du använder Azure Machine Learning på IoT Edge. Varje artikel i serien bygger på arbetet i föregående artikel. Om du har kommit direkt till den här artikeln kan du gå till den första artikeln i serien.

Granska enhetens sele

Återanvänd projektet DeviceHarness för att simulera den underordnade enheten. Anslutning till den transparenta gatewayen kräver ytterligare två saker:

  • Registrera certifikatet så att den underordnade IoT-enheten litar på den certifikatutfärdare som används av IoT Edge-miljön. I vårt fall är nedströmsenheten den virtuella utvecklingsdatorn.
  • Lägg till det fullständigt kvalificerade domännamnet (FQDN) för edge-gatewayen i enhetsanslutningssträngen.

Titta på koden för att se hur dessa två objekt implementeras.

  1. Öppna Visual Studio Code på utvecklingsdatorn.

  2. Använd File>Open Folder... för att öppna C:\source\IoTEdgeAndMlSample\DeviceHarness.

  3. Titta på metoden InstallCertificate() i Program.cs.

  4. Observera att om koden hittar certifikatsökvägen anropas metoden CertificateManager.InstallCACert för att installera certifikatet på datorn.

  5. Titta nu på metoden GetIotHubDevice i klassen TurbofanDevice.

  6. När användaren anger FQDN för gatewayen med alternativet "-g" skickas det värdet till den här metoden som gatewayFqdn variabel, som läggs till i enhetsanslutningssträngen.

    connectionString = $"{connectionString};GatewayHostName={gatewayFqdn.ToLower()}";
    

Skapa och köra underordnad enhet

  1. Med DeviceHarness-projektet fortfarande öppet i Visual Studio Code skapar du projektet. På menyn Terminal väljer du Kör bygguppgift och välj Bygg.

  2. Hitta det fullständigt kvalificerade domännamnet (FQDN) för din edge-gateway genom att navigera till din IoT Edge-enhet (virtuell Linux-dator) i Azure-portalen och kopiera värdet för DNS-namn från översiktssidan.

  3. Starta din IoT-enhet (virtuell Linux-dator) om den inte redan körs.

  4. Öppna Visual Studio Code-terminalen. På menyn Terminal väljer du Ny terminal och kör följande kommando och ersätter <edge_device_fqdn> med DNS-namnet som du kopierade från IoT Edge-enheten (virtuell Linux-dator):

    dotnet run -- --gateway-host-name "<edge_device_fqdn>" --certificate C:\edgecertificates\certs\azure-iot-test-only.root.ca.cert.pem --max-devices 1
    
  5. Programmet försöker installera certifikatet på utvecklingsdatorn. När den gör det accepterar du säkerhetsvarningen.

  6. När du uppmanas att ange anslutningssträngen för IoT Hub klickar du på ellipsen (...) på panelen Azure IoT Hub-enheter och väljer Kopiera IoT Hub-anslutningssträng. Klistra in värdet i terminalen.

  7. Du ser utdata som:

    Found existing device: Client_001
    Using device connection string: HostName=<your hub>.azure-devices.net;DeviceId=Client_001;SharedAccessKey=xxxxxxx; GatewayHostName=iotedge-xxxxxx.<region>.cloudapp.azure.com
    Device: 1 Message count: 50
    Device: 1 Message count: 100
    Device: 1 Message count: 150
    Device: 1 Message count: 200
    Device: 1 Message count: 250
    

    Observera tillägget av "GatewayHostName" i enhetsanslutningssträngen, vilket gör att enheten kommunicerar via IoT Hub via den transparenta IoT Edge-gatewayen.

Kontrollera utdata

IoT Edge-enhetsutgång

Utdata från modulen avroFileWriter kan enkelt observeras genom att titta på IoT Edge-enheten.

  1. SSH till din virtuella IoT Edge-dator.

  2. Leta efter filer som skrivits till disken.

    find /data/avrofiles -type f
    
  3. Utdata från kommandot ser ut som i följande exempel:

    /data/avrofiles/2019/4/18/22/10.avro
    

    Du kan ha mer än en enskild fil beroende på tidpunkten för körningen.

  4. Var uppmärksam på tidsstämplarna. Modulen avroFileWriter laddar upp filerna till molnet när den senaste ändringstiden är mer än 10 minuter tidigare (se MODIFIED_FILE_TIMEOUT i uploader.py i modulen avroFileWriter).

  5. När de 10 minuterna har gått bör modulen ladda upp filerna. Om uppladdningen lyckas tas filerna bort från disken.

Azure Storage

Vi kan se resultatet av att vår nedströmsenhet skickar data genom att titta på lagringskontona där vi förväntar oss att data ska dirigeras.

  1. Öppna Visual Studio Code på utvecklingsdatorn.

  2. I panelen "AZURE STORAGE" i utforska-fönstret navigerar du i trädet för att hitta ditt lagringskonto.

  3. Expandera noden för Blob-behållare .

  4. Från det arbete vi gjorde i föregående del av självstudien förväntar vi oss att ruldata container ska innehålla meddelanden med RUL. Expandera noden ruldata.

  5. Du ser en eller flera blobfiler med namnet: <IoT Hub Name>/<partition>/<year>/<month>/<day>/<hour>/<minute>.

  6. Högerklicka på en av filerna och välj Ladda ned Blob för att spara filen på utvecklingsdatorn.

  7. Expandera sedan noden uploadturbofanfiles. I föregående artikel anger vi den här platsen som mål för filer som laddats upp av modulen avroFileWriter.

  8. Högerklicka på filerna och välj Ladda ned Blob för att spara den på utvecklingsdatorn.

Läsa Avro-filinnehåll

Vi har inkluderat ett enkelt kommandoradsverktyg för att läsa en Avro-fil och returnera en JSON-sträng med meddelandena i filen. I det här avsnittet ska vi installera och köra det.

  1. Öppna en terminal i Visual Studio Code (Terminal>Ny terminal).

  2. Installera hubavroreader:

    pip install c:\source\IoTEdgeAndMlSample\HubAvroReader
    
  3. Använd hubavroreader för att läsa Avro-filen som du laddade ned från ruldata.

    hubavroreader <avro file with ath> | more
    
  4. Observera att meddelandets innehåll ser ut som förväntat med enhets-ID och förutsagd RUL.

    {
        "Body": {
            "ConnectionDeviceId": "Client_001",
            "CorrelationId": "3d0bc256-b996-455c-8930-99d89d351987",
            "CycleTime": 1.0,
            "PredictedRul": 170.1723693909444
        },
        "EnqueuedTimeUtc": "<time>",
        "Properties": {
            "ConnectionDeviceId": "Client_001",
            "CorrelationId": "3d0bc256-b996-455c-8930-99d89d351987",
            "CreationTimeUtc": "01/01/0001 00:00:00",
            "EnqueuedTimeUtc": "01/01/0001 00:00:00"
        },
        "SystemProperties": {
            "connectionAuthMethod": "{\"scope\":\"module\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
            "connectionDeviceGenerationId": "636857841798304970",
            "connectionDeviceId": "aaTurbofanEdgeDevice",
            "connectionModuleId": "turbofanRouter",
            "contentEncoding": "utf-8",
            "contentType": "application/json",
            "correlationId": "3d0bc256-b996-455c-8930-99d89d351987",
            "enqueuedTime": "<time>",
            "iotHubName": "mledgeiotwalkthroughhub"
        }
    }
    
  5. Kör samma kommando för att skicka Avro-filen som du laddade ned från uploadturbofanfiles.

  6. Som förväntat innehåller dessa meddelanden alla sensordata och driftinställningar från det ursprungliga meddelandet. Dessa data kan användas för att förbättra RUL-modellen på vår gränsenhet.

    {
        "Body": {
            "CycleTime": 1.0,
            "OperationalSetting1": -0.0005000000237487257,
            "OperationalSetting2": 0.00039999998989515007,
            "OperationalSetting3": 100.0,
            "PredictedRul": 170.17236328125,
            "Sensor1": 518.6699829101562,
            "Sensor10": 1.2999999523162842,
            "Sensor11": 47.29999923706055,
            "Sensor12": 522.3099975585938,
            "Sensor13": 2388.010009765625,
            "Sensor14": 8145.31982421875,
            "Sensor15": 8.424599647521973,
            "Sensor16": 0.029999999329447746,
            "Sensor17": 391.0,
            "Sensor18": 2388.0,
            "Sensor19": 100.0,
            "Sensor2": 642.3599853515625,
            "Sensor20": 39.11000061035156,
            "Sensor21": 23.353700637817383,
            "Sensor3": 1583.22998046875,
            "Sensor4": 1396.8399658203125,
            "Sensor5": 14.619999885559082,
            "Sensor6": 21.610000610351562,
            "Sensor7": 553.969970703125,
            "Sensor8": 2387.9599609375,
            "Sensor9": 9062.169921875
        },
            "ConnectionDeviceId": "Client_001",
            "CorrelationId": "70df0c98-0958-4c8f-a422-77c2a599594f",
            "CreationTimeUtc": "0001-01-01T00:00:00+00:00",
            "EnqueuedTimeUtc": "<time>"
    }
    

Rensa resurser

Om du planerar att utforska de resurser som används i den här heltäckande självstudien, vänta tills du är klar innan du rensar bort de resurser som du har skapat. Annars kan du använda följande steg för att ta bort dem:

  1. Ta bort de resursgrupper som skapats för att lagra den virtuella dev-datorn, den virtuella IoT Edge-datorn, IoT Hub, lagringskontot, arbetsytetjänsten för maskininlärning (och skapade resurser: containerregister, Application Insights, nyckelvalv, lagringskonto).

  2. Ta bort maskininlärningsprojektet i Azure Notebooks.

  3. Om du klonade lagringsplatsen lokalt stänger du alla PowerShell- eller VS Code-fönster som refererar till den lokala lagringsplatsen och tar sedan bort lagringsplatsens katalog.

  4. Om du har skapat certifikat lokalt tar du bort mappen c:\edgeCertificates.

Nästa steg

I den här artikeln använde vi vår virtuella utvecklingsdator för att simulera en nedströmsenhet som skickar sensor- och driftdata till vår IoT Edge-enhet. Vi verifierade att modulerna på enheten dirigerade, klassificerade, bevarade och laddade upp data genom att undersöka realtidsåtgärden för gränsenheten och genom att titta på de filer som laddats upp till lagringskontot.

Om du vill lära dig mer om IoT Edge-funktioner kan du prova den här självstudien härnäst: