Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:
IoT Edge 1.5
Belangrijk
IoT Edge 1.5 LTS is de ondersteunde release. IoT Edge 1.4 LTS bereikt het einde van de levensduur op 12 november 2024. Als u een eerdere versie gebruikt, raadpleegt u Update IoT Edge.
Gebruik Azure Functions om code te implementeren waarmee uw bedrijfslogica rechtstreeks op uw Azure IoT Edge apparaten wordt uitgevoerd. In deze zelfstudie leert u hoe u een Azure-functie maakt en implementeert waarmee sensorgegevens op een gesimuleerd IoT Edge apparaat worden gefilterd. Gebruik het gesimuleerde IoT Edge apparaat dat u in de quickstarts hebt gemaakt. In deze zelfstudie leert u het volgende:
- Een Azure-functie maken met Visual Studio Code
- Gebruik Visual Studio Code en Docker om een Docker-image te maken en publiceer deze naar een container registry
- De module vanuit het containerregister implementeren op uw IoT Edge-apparaat
- Gefilterde gegevens weergeven
De Azure-functie die u in deze zelfstudie maakt, filtert temperatuurgegevens die door uw apparaat worden gegenereerd. De functie verzendt alleen berichten upstream naar Azure IoT Hub wanneer de temperatuur hoger is dan een opgegeven drempelwaarde.
Als u geen Azure account hebt, maakt u een free-account voordat u begint.
Vereisten
Voordat u met deze zelfstudie begint, volgt u de zelfstudie om uw ontwikkelomgeving in te stellen voor het ontwikkelen van Linux-containers: Ontwikkelingsmodules Azure IoT Edge met behulp van Visual Studio Code. Wanneer u klaar bent, hebt u de volgende vereisten:
- Een gratis of standaardniveau IoT Hub in Azure.
- Een AMD64-apparaat met Azure IoT Edge met Linux-containers. Gebruik de quickstart om een Linux-apparaat of Windows-apparaat in te stellen.
- Een containerregister, zoals Azure Container Registry.
- Visual Studio Code ingesteld met de extensies Azure IoT Edge en Azure IoT Hub. De Azure IoT Edge-hulpprogramma's voor de extensie Visual Studio Code bevindt zich in de modus maintenance.
- Download en installeer een docker-compatibel containerbeheersysteem op uw ontwikkelcomputer. Stel deze in om Linux-containers uit te voeren.
Als u een IoT Edge-module met Azure Functions wilt ontwikkelen, installeert u deze aanvullende vereisten op uw ontwikkelcomputer:
Een functieproject maken
Azure IoT Edge voor Visual Studio Code biedt u beheermogelijkheden en codesjablonen. In deze sectie gebruikt u Visual Studio Code om een IoT Edge oplossing te maken met een Azure-functie.
Een nieuw project maken
Volg deze stappen om een aanpasbare C#-functieoplossingssjabloon te maken.
Open Visual Studio Code op uw ontwikkelcomputer.
Open het Visual Studio Code opdrachtpalet door View > Command Palette te selecteren.
Voeg in het opdrachtpalet de opdracht Azure IoT Edge toe en voer deze uit: Nieuwe IoT Edge-oplossing. Volg deze aanwijzingen in het opdrachtpalet om uw oplossing te maken:
- Selecteer een map: kies de locatie op uw ontwikkelcomputer voor Visual Studio Code om de oplossingsbestanden te maken.
- Geef een oplossingsnaam op: voeg een beschrijvende naam toe voor uw oplossing, zoals FunctionSolution, of accepteer de standaardnaam.
- Selecteer een modulesjabloon: kies Azure Functions - C#.
- Geef een modulenaam op: geef de module CSharpFunction een naam.
- Geef een Opslagplaats voor Docker-installatiekopieën op voor de module: een opslagplaats voor installatiekopieën bevat de naam van uw containerregister en de naam van de containerinstallatiekopieën. In het portal wordt uw containerimage vooraf ingevuld vanuit de laatste stap. Vervang localhost:5000 door de waarde Login-server uit uw Azure containerregister. U kunt de Login-server ophalen van de pagina Overview van het containerregister in de Azure-portal. De uiteindelijke tekenreeks ziet er zo uit:
<registry name>.azurecr.io/csharpfunction.
Uw registerreferenties toevoegen
Het omgevingsbestand in uw oplossing slaat de referenties voor uw containerregister op en deelt deze met de IoT Edge runtime. De runtime heeft deze referenties nodig om uw privé-afbeeldingen naar uw IoT Edge-apparaat op te halen.
De IoT Edge-extensie in Visual Studio Code probeert uw containerregisterreferenties op te halen uit Azure en deze in te vullen in het omgevingsbestand. Controleer of uw inloggegevens zich al in het bestand bevinden. Als dat niet het geval is, voegt u ze nu toe:
- Open in de Visual Studio Code explorer het bestand .env.
- Werk de velden bij met de waarden username en password die u hebt gekopieerd uit het Azure containerregister. Als u ze opnieuw wilt vinden, gaat u naar het containerregister in Azure en kijkt u op de pagina Settings > Access-sleutels.
- Sla dit bestand op.
Notitie
In deze zelfstudie worden beheerdersaanmeldingsgegevens gebruikt voor Azure Container Registry, wat handig is voor ontwikkelings- en testscenario's. Gebruik voor productie een verificatieoptie met minimale bevoegdheden, zoals service-principals. Zie Toegang tot uw containerregister beheren voor meer informatie.
Doelarchitectuur instellen op AMD64
Azure Functions modules op IoT Edge worden alleen ondersteund op Linux AMD64-containers. De standaarddoelarchitectuur voor Visual Studio Code is Linux AMD64, maar u kunt deze hier expliciet instellen op Linux AMD64.
- Open het opdrachtenpalet en zoek naar Azure IoT Edge: Standaarddoelplatform instellen voor Edge Solution.
- Selecteer in het opdrachtpalet de AMD64-doelarchitectuur in de lijst met opties.
De module bijwerken met aangepaste code
Voeg code toe zodat de module CSharpFunction berichten aan de rand verwerkt voordat deze naar IoT Hub worden doorgestuurd.
Open in de Visual Studio Code explorer modules > CSharpFunction > CSharpFunction.cs.
Vervang de inhoud van het bestand CSharpFunction.cs door de volgende code. Deze code ontvangt telemetrie over omgevings- en machinetemperatuur en stuurt het bericht door naar IoT Hub alleen als de temperatuur van de machine hoger is dan een gedefinieerde drempelwaarde.
using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Threading.Tasks; using Microsoft.Azure.Devices.Client; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.EdgeHub; using Microsoft.Azure.WebJobs.Host; using Microsoft.Extensions.Logging; using Newtonsoft.Json; namespace Functions.Samples { public static class CSharpFunction { [FunctionName("CSharpFunction")] public static async Task FilterMessageAndSendMessage( [EdgeHubTrigger("input1")] Message messageReceived, [EdgeHub(OutputName = "output1")] IAsyncCollector<Message> output, ILogger logger) { const int temperatureThreshold = 20; byte[] messageBytes = messageReceived.GetBytes(); var messageString = System.Text.Encoding.UTF8.GetString(messageBytes); if (!string.IsNullOrEmpty(messageString)) { logger.LogInformation("Info: Received one non-empty message"); // Get the body of the message and deserialize it. var messageBody = JsonConvert.DeserializeObject<MessageBody>(messageString); if (messageBody != null && messageBody.machine.temperature > temperatureThreshold) { // Send the message to the output as the temperature value is greater than the threshold. using (var filteredMessage = new Message(messageBytes)) { // Copy the properties of the original message into the new Message object. foreach (KeyValuePair<string, string> prop in messageReceived.Properties) {filteredMessage.Properties.Add(prop.Key, prop.Value);} // Add a new property to the message to indicate it is an alert. filteredMessage.Properties.Add("MessageType", "Alert"); // Send the message. await output.AddAsync(filteredMessage); logger.LogInformation("Info: Received and transferred a message with temperature above the threshold"); } } } } } //Define the expected schema for the body of incoming messages. class MessageBody { public Machine machine {get; set;} public Ambient ambient {get; set;} public string timeCreated {get; set;} } class Machine { public double temperature {get; set;} public double pressure {get; set;} } class Ambient { public double temperature {get; set;} public int humidity {get; set;} } }Sla het bestand op.
Uw IoT Edge-oplossing bouwen en pushen
In de vorige sectie hebt u een IoT Edge oplossing gemaakt en de CSharpFunction gewijzigd om berichten met gerapporteerde machinetemperaturen onder de aanvaardbare drempelwaarde te filteren. Bouw nu de oplossing als een containerimage en stuur deze naar uw containerregister.
Open de geïntegreerde Visual Studio Code terminal. Selecteer Terminal weergeven>.
Meld u aan bij Docker in de terminal. Gebruik de gebruikersnaam, het wachtwoord en de verificatieserver uit uw Azure containerregister. Haal deze waarden op uit de sectie Access-sleutels van het register in de Azure-portal.
docker login -u <ACR username> -p <ACR password> <ACR login server>Mogelijk ontvangt u een beveiligingswaarschuwing waarin het gebruik van
--password-stdinwordt aanbevolen. Hoewel de beste praktijk wordt aanbevolen voor productiescenario's, valt het buiten de scope van deze zelfstudie. Zie de documentatie voor aanmelding bij Docker voor meer informatie.Klik in de Visual Studio Code Explorer met de rechtermuisknop op het bestand deployment.template.json en selecteer Build and Push IoT Edge Solution.
Met de opdracht 'build and push' worden drie bewerkingen gestart. Eerst wordt er een nieuwe map gemaakt in de oplossing met de naam config die het volledige implementatiemanifest heeft, dat is gebouwd op basis van de implementatiesjabloon en andere oplossingsbestanden. Ten tweede wordt
docker builduitgevoerd om de containerafbeelding te bouwen op basis van de juiste Dockerfile voor uw doelarchitectuur. Vervolgens wordtdocker pushuitgevoerd om de imagetopslagplaats naar het containerregister te pushen.Dit proces kan enkele minuten duren, maar het is sneller wanneer u de opdrachten de volgende keer uitvoert.
Bekijk uw containerafbeelding
Visual Studio Code geeft een succesbericht weer wanneer u uw containerimage naar uw containerregister pusht. Om de bewerking te bevestigen, bekijkt u de afbeelding in het register.
- Ga in de Azure-portal naar uw Azure containerregister.
- Selecteer Services-opslagplaatsen>.
- U ziet de csharpfunction-opslagplaats in de lijst. Selecteer deze opslagplaats om meer details weer te geven.
- In de sectie Tags ziet u de tag 0.0.1-amd64 . Deze tag toont de versie en het platform van de image die u hebt gemaakt. Het module.json-bestand in de map CSharpFunction stelt deze waarden in.
De oplossing implementeren en uitvoeren
Gebruik de Azure-portal om uw functiemodule te implementeren op een IoT Edge apparaat, zoals in de quickstart. U kunt modules ook implementeren en bewaken vanuit Visual Studio Code. In de volgende secties worden de Azure IoT Edge en IoT Hub gebruikt voor Visual Studio Code extensies die worden vermeld in de vereisten. Installeer de extensies nu als u dat nog niet hebt gedaan.
Vouw in de Visual Studio Code explorer onder de sectie Azure IoT HubDevices uit om de lijst met IoT-apparaten weer te geven.
Klik met de rechtermuisknop op de naam van uw IoT Edge apparaat en selecteer vervolgens Implementatie maken voor één apparaat.
Ga naar de oplossingsmap met de CSharpFunction. Open de configmap, selecteer het bestand deployment.amd64.json en kies Selecteer Edge Deployment Manifest.
Vouw onder uw apparaat Modules uit voor een lijst met de geïmplementeerde en actieve modules. Selecteer de knop Vernieuwen. U ziet dat de nieuwe CSharpFunction wordt uitgevoerd, samen met de module SimulatedTemperatureSensor , $edgeAgent en $edgeHub.
Het kan even duren voordat de nieuwe modules worden weergegeven. Het IoT Edge apparaat haalt de nieuwe implementatiegegevens op uit IoT Hub, start de nieuwe containers en rapporteert vervolgens de status terug naar IoT Hub.
De gegenereerde gegevens weergeven
Bekijk alle berichten die vanaf uw IoT-hub vanaf uw apparaten binnenkomen door Azure IoT Hub uit te voeren: Bewaking van ingebouwd gebeurteniseindpunt starten in het opdrachtenpalet. Voer in het opdrachtenpalet Azure IoT Hub: Stop Monitoring Built-in Event Endpoint uit om het bewaken van berichten te stoppen.
Als u de weergave wilt filteren en berichten van een specifiek apparaat wilt bekijken, klikt u met de rechtermuisknop op het apparaat in de sectie Azure IoT Hub > Devices van de Visual Studio Code Explorer en selecteert u Start Monitoring Built-in Event Endpoint.
Resources opschonen
Als u van plan bent door te gaan naar het volgende aanbevolen artikel, bewaart u de resources en configuraties die u hebt gemaakt en gebruikt u deze opnieuw. U kunt ook hetzelfde IoT Edge apparaat blijven gebruiken als een testapparaat.
Verwijder anders de lokale configuratie en de Azure resources die u in dit artikel hebt gemaakt om kosten te voorkomen.
Azure resources verwijderen
U kunt het verwijderen van Azure resources en resourcegroepen niet ongedaan maken. Zorg ervoor dat u niet per ongeluk de verkeerde resourcegroep of bronnen verwijdert. Als u de IoT Hub hebt gemaakt in een bestaande resourcegroep met resources die u wilt behouden, verwijdert u alleen de IoT Hub resource zelf, niet de resourcegroep.
Om de resources te verwijderen:
- Meld u aan bij de Azure-portal en selecteer vervolgens Resource-groepen.
- Selecteer de naam van de resourcegroep die uw IoT Edge testresources bevat.
- Bekijk de lijst met resources die uw resourcegroep bevat. Als u alle mappen wilt verwijderen, kunt u Resourcegroep verwijderen selecteren. Als u slechts enkele resources wilt verwijderen, selecteert u elke resource om ze afzonderlijk te verwijderen.
Volgende stappen
In deze zelfstudie hebt u een Azure-functiemodule gemaakt met code om onbewerkte gegevens te filteren die door uw IoT Edge apparaat worden gegenereerd.
Ga verder met de volgende zelfstudies voor meer informatie over andere manieren waarop Azure IoT Edge u kunt helpen bij het omzetten van gegevens in zakelijke inzichten aan de rand.