Entwickeln eigener IoT Edge-ModuleDevelop your own IoT Edge modules

Gilt für: Symbol „Ja“ IoT Edge 1.1 Andere Versionen: IoT Edge 1.2Applies to: yes icon IoT Edge 1.1 Other versions: IoT Edge 1.2

Gilt für: Symbol „Ja“ IoT Edge 1.2 Andere Versionen: IoT Edge 1.1Applies to: yes icon IoT Edge 1.2 Other versions: IoT Edge 1.1

Azure IoT Edge-Module können mit anderen Azure-Diensten eine Verbindung herstellen und zu Ihrer größeren Clouddatenpipeline beitragen.Azure IoT Edge modules can connect with other Azure services and contribute to your larger cloud data pipeline. In diesem Artikel wird beschrieben, wie Sie Module für die Kommunikation mit der IoT Edge-Runtime und IoT Hub und damit mit dem Rest der Azure-Cloud entwickeln können.This article describes how you can develop modules to communicate with the IoT Edge runtime and IoT Hub, and therefore the rest of the Azure cloud.

IoT Edge-LaufzeitumgebungIoT Edge runtime environment

Die IoT Edge-Laufzeit bietet die Infrastruktur, um die Funktionalität mehrerer IoT Edge-Module zu integrieren und auf IoT Edge-Geräten bereitstellen.The IoT Edge runtime provides the infrastructure to integrate the functionality of multiple IoT Edge modules and to deploy them onto IoT Edge devices. Jedes beliebige Programm kann als IoT Edge-Modul verpackt werden.Any program can be packaged as an IoT Edge module. Wenn Sie die Kommunikations- und Verwaltungsfunktionalitäten von IoT Edge umfassend nutzen möchten, kann ein in einem Modul ausgeführtes Programm über das Azure IoT-Geräte-SDK eine Verbindung mit dem lokalen IoT Edge-Hub herstellen.To take full advantage of IoT Edge communication and management functionalities, a program running in a module can use the Azure IoT Device SDK to connect to the local IoT Edge hub.

Module können auch einen beliebigen MQTT-Client verwenden, um eine Verbindung mit dem lokalen IoT Edge-Hub-MQTT-Broker herzustellen.Modules can also use any MQTT client to connect to the local IoT Edge hub MQTT broker.

Verpacken des Programms als IoT Edge-ModulPackaging your program as an IoT Edge module

Zum Bereitstellen des Programms auf einem IoT Edge-Gerät muss es zunächst in einen Container integriert und mit einem Docker-kompatiblen Modul ausgeführt werden.To deploy your program on an IoT Edge device, it must first be containerized and run with a Docker-compatible engine. IoT Edge verwendet Moby, das Open Source-Projekt hinter Docker, als Docker-kompatibles Modul.IoT Edge uses Moby, the open-source project behind Docker, as its Docker-compatible engine. Die gleichen Parameter, die Sie für Docker verwenden, können auch an Ihre IoT Edge-Module übermittelt werden.The same parameters that you're used to with Docker can be passed to your IoT Edge modules. Weitere Informationen finden Sie unter Konfigurieren von Erstellungsoptionen für Container für IoT Edge-Module.For more information, see How to configure container create options for IoT Edge modules.

Verwenden des IoT Edge-HubsUsing the IoT Edge hub

Der IoT Edge-Hub bietet zwei Hauptfunktionalitäten: Proxy für IoT Hub und lokale Kommunikation.The IoT Edge hub provides two main functionalities: proxy to IoT Hub, and local communications.

Herstellen einer Verbindung von einem Modul mit dem IoT Edge HubConnecting to IoT Edge hub from a module

Das Herstellen einer Verbindung mit dem lokalen IoT Edge-Hub von einem Modul umfasst die gleichen Verbindungsschritte wie bei allen anderen Clients.Connecting to the local IoT Edge hub from a module involves the same connection steps as for any clients. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit dem IoT Edge-Hub.For more information, see Connecting to the IoT Edge hub.

Wenn Sie IoT Edge-Routing über AMQP oder MQTT verwenden möchten, können Sie den ModuleClient aus dem Azure IoT SDK verwenden.To use IoT Edge routing over AMQP or MQTT, you can use the ModuleClient from the Azure IoT SDK. Erstellen Sie eine ModuleClient-Instanz, um Ihr Modul mit dem IoT Edge-Hub zu verbinden, der auf dem Gerät ausgeführt wird. Dies erfolgt auf ähnliche Weise wie DeviceClient-Instanzen eine Verbindung zwischen IoT-Geräten und IoT Hub herstellen.Create a ModuleClient instance to connect your module to the IoT Edge hub running on the device, similar to how DeviceClient instances connect IoT devices to IoT Hub. Weitere Informationen zur ModuleClient-Klasse und ihre Kommunikationsmethoden finden Sie in der API-Referenz für Ihre bevorzugte SDK-Sprache: C#, C, Python, Java oder Node.js.For more information about the ModuleClient class and its communication methods, see the API reference for your preferred SDK language: C#, C, Python, Java, or Node.js.

Um den IoT Edge-MQTT-Broker verwenden zu können, müssen Sie Ihren eigenen MQTT-Client verwenden und die Verbindung selbst mit den Informationen initiieren, die Sie aus der IoT Edge-Daemon-Workload-API abrufen.To use IoT Edge MQTT broker, you need to bring your own MQTT client and initiate the connection yourself with information that you retrieve from the IoT Edge daemon workload API.

Weitere Informationen zur Entscheidung zwischen Routing oder Veröffentlichen/Abonnieren mit dem MQTT-Broker finden Sie unter Lokale Kommunikation.For more information about choosing between routing or publishing/subscribing with the MQTT broker, see Local communication.

Primitive des MQTT-BrokersMQTT broker primitives

Senden einer Nachricht zu einem benutzerdefinierten ThemaSend a message on a user-defined topic

Mit dem IoT Edge-MQTT-Broker können Sie Nachrichten für beliebige benutzerdefinierte Themen veröffentlichen.With the IoT Edge MQTT broker, you can publish messages on any user-defined topics. Dazu können Sie das Modul autorisieren, Nachrichten zu bestimmten Themen zu veröffentlichen, und dann ein Token aus der Workload-API abrufen, das beim Herstellen einer Verbindung mit dem MQTT-Broker als Kennwort verwendet werden soll. Veröffentlichen Sie schließlich Nachrichten zu den autorisierten Themen mit einem MQTT-Client Ihrer Wahl.To do so, authorize your module to publish on specific topics then get a token from the workload API to use as a password when connecting to the MQTT broker, and finally publish messages on the authorized topics with the MQTT client of your choice.

Empfangen von Nachrichten zu einem benutzerdefinierten ThemaReceive messages on a user-defined topic

Das Empfangen von Nachrichten mit dem IoT Edge-MQTT-Broker verläuft ganz ähnlich.With the IoT Edge MQTT broker, receiving messages is similar. Stellen Sie zunächst sicher, dass das Modul autorisiert ist, bestimmte Themen zu abonnieren, und rufen Sie dann ein Token aus der Workload-API, das beim Herstellen einer Verbindung mit dem MQTT-Broker als Kennwort verwendet werden soll. Abonnieren Sie schließlich Nachrichten zu den autorisierten Themen mit einem MQTT-Client Ihrer Wahl.First make sure that your module is authorized to subscribe to specific topics, then get a token from the workload API to use as a password when connecting to the MQTT broker, and finally subscribe to messages on the authorized topics with the MQTT client of your choice.

IoT Hub-PrimitiveIoT Hub primitives

IoT Hub behandelt eine Modulinstanz analog zu einem Gerät. Dies bedeutet Folgendes:IoT Hub sees a module instance analogously to a device, in the sense that:

Derzeit können Module keine Cloud-zu-Gerät-Nachrichten empfangen oder Dateien hochladen.Currently, modules can't receive cloud-to-device messages or use the file upload feature.

Wenn Sie ein Modul schreiben, können Sie eine Verbindung mit dem IoT Edge-Hub herstellen und IoT Hub-Primitive wie bei der Verwendung von IoT Hub mit einer Geräteanwendung verwenden.When writing a module, you can connect to the IoT Edge hub and use IoT Hub primitives as you would when using IoT Hub with a device application. Der einzige Unterschied zwischen IoT Edge-Modulen und IoT-Geräteanwendungen besteht darin, dass Sie auf die Modulidentität (statt auf die Geräteidentität) verweisen müssen.The only difference between IoT Edge modules and IoT device applications is that you have to refer to the module identity instead of the device identity.

D2C-NachrichtenDevice-to-cloud messages

Ein IoT Edge-Modul kann Nachrichten über den IoT Edge-Hub, der als lokaler Broker fungiert und Nachrichten an die Cloud weitergibt, an die Cloud senden.An IoT Edge module can send messages to the cloud via the IoT Edge hub that acts as a local broker and propagates messages to the cloud. Um eine komplexe Verarbeitung von Gerät-zu-Cloud-Nachrichten zu ermöglichen, kann ein IoT Edge-Modul auch Nachrichten abfangen und verarbeiten, die von anderen Modulen oder Geräten an den lokalen IoT Edge-Hub gesendet werden, sowie neue Nachrichten mit verarbeiteten Daten senden.To enable complex processing of device-to-cloud messages, an IoT Edge module can also intercept and process messages sent by other modules or devices to its local IoT Edge hub and send new messages with processed data. So können Ketten von IoT Edge-Modulen gebildet werden, um lokale Verarbeitungspipelines zu erstellen.Chains of IoT Edge modules can thus be created to build local processing pipelines.

Verwenden Sie zum Senden von Gerät-zu-Cloud-Telemetrienachrichten mithilfe von Routing den ModuleClient aus dem Azure IoT SDK.To send device-to-cloud telemetry messages using routing, use the the ModuleClient of the Azure IoT SDK. Durch das Azure IoT SDK können alle Module das Konzept der Eingabe- und Ausgabe endpunkte für Module nutzen, die speziellen MQTT-Themen zugeordnet sind.With the Azure IoT SDK, each module has the concept of module input and output endpoints, which map to special MQTT topics. Verwenden Sie die ModuleClient.sendMessageAsync-Methode, die dann Nachrichten auf dem Ausgabeendpunkt Ihres Moduls sendet.Use the ModuleClient.sendMessageAsync method and it will send messages on the output endpoint of your module. Konfigurieren Sie dann eine Route in edgeHub, um diesen Ausgabeendpunkt an IoT Hub zu senden.Then configure a route in edgeHub to send this output endpoint to IoT Hub.

Das Senden von Gerät-zu-Cloud-Telemetrienachrichten mit dem MQTT-Broker ist mit dem Veröffentlichen von Nachrichten in benutzerdefinierten Themen vergleichbar, verwendet jedoch das folgende spezielle IoT Hub-Thema für Ihr Modul: devices/<device_name>/<module_name>/messages/events.Sending device-to-cloud telemetry messages with the MQTT broker is similar to publishing messages on user-defined topics, but using the following IoT Hub special topic for your module: devices/<device_name>/<module_name>/messages/events. Autorisierungen müssen entsprechend eingerichtet werden.Authorizations must be setup appropriately. Die MQTT-Bridge muss ebenfalls so konfiguriert werden, dass sie die Nachrichten zu diesem Thema an die Cloud weiterleiten.The MQTT bridge must also be configured to forward the messages on this topic to the cloud.

Zum Verarbeiten von Nachrichten mithilfe des Routings richten Sie zuerst eine Route ein, die Nachrichten von einem anderen Endpunkt (Modul oder Gerät) an den Eingabeendpunkt des Moduls sendet, und lauschen Sie dann auf dem Eingabeendpunkt des Moduls auf die Nachrichten.To process messages using routing, first set up a route to send messages coming from another endpoint (module or device) to the input endpoint of your module, then listen for messages on the input endpoint of your module. Jedes Mal, wenn eine neue Nachricht zurückgesendet wird, wird eine Rückruffunktion durch das Azure IoT SDK ausgelöst.Each time a new message comes back, a callback function is triggered by the Azure IoT SDK. Verarbeiten Sie Ihre Nachricht mit dieser Rückruffunktion, und senden Sie optional neue Nachrichten an die Warteschlange des Modulendpunkts.Process your message with this callback function and optionally send new messages on your module endpoint queue.

Das Verarbeiten von Nachrichten mit dem MQTT-Broker ähnelt dem Abonnieren von Nachrichten zu benutzerdefinierten Themen, es werden jedoch die speziellen IoT Edge-Themen der Ausgabewarteschlange Ihres Moduls verwendet: devices/<device_name>/<module_name>/messages/events.Processing messages using the MQTT broker is similar to subscribing to messages on user-defined topics, but using the IoT Edge special topics of your module's output queue: devices/<device_name>/<module_name>/messages/events. Autorisierungen müssen entsprechend eingerichtet werden.Authorizations must be setup appropriately. Optional können Sie neue Nachrichten zu den Themen Ihrer Wahl senden.Optionally you can send new messages on the topics of your choice.

ZwillingeTwins

Zwillinge sind eine der Primitiven, die von IoT Hub bereitgestellt werden.Twins are one of the primitives provided by IoT Hub. Diese sind JSON-Dokumente, in denen Statusinformationen gespeichert werden, z. B. Metadaten, Konfigurationen und Bedingungen.There are JSON documents that store state information including metadata, configurations and conditions. Jedes Modul oder Gerät verfügt über einen eigenen Zwilling.Each module or device has its own twin.

Um einen Modulzwilling mit dem Azure IoT SDK abzurufen, rufen Sie die ModuleClient.getTwin-Methode auf.To get a module twin with the Azure IoT SDK, call the ModuleClient.getTwin method.

Um einen Modulzwilling mit einem beliebigen MQTT-Client abzurufen, ist ein etwas höherer Aufwand erforderlich, da das Abrufen eines Zwillings kein typisches MQTT-Muster ist.To get a module twin with any MQTT client, a little bit more work is involved since getting a twin is not a typical MQTT pattern. Zuerst muss das Modul das spezielle IoT Hub-Thema $iothub/twin/res/# abonnieren.The module must first subscribe to IoT Hub special topic $iothub/twin/res/#. Dieser Themenname wird von IoT Hub geerbt, und alle Geräte/Module müssen dasselbe Thema abonnieren.This topic name is inherited from IoT Hub, and all devices/modules need to subscribe to the same topic. Dies bedeutet nicht, dass Geräte den Zwilling voneinander empfangen.It does not mean that devices receive the twin of each other. IoT Hub und edgeHub wissen, welcher Zwilling wohin übermittelt werden sollte, auch wenn alle Geräte auf denselben Themennamen lauschen.IoT Hub and edgeHub knows which twin should be delivered where, even if all devices listen to the same topic name. Nachdem das Abonnement erstellt wurde, muss das Modul den Zwilling anfordern, indem es eine Nachricht für das spezielle IoT Hub-Thema mit der Anforderungs-ID $iothub/twin/GET/?$rid=1234 veröffentlicht.Once the subscription is made, the module needs to ask for the twin by publishing a message to the following IoT Hub special topic with a request ID $iothub/twin/GET/?$rid=1234. Diese Anforderungs-ID ist eine beliebige ID (d. h. eine GUID), die von IoT Hub zusammen mit den angeforderten Daten zurückgesendet wird.This request ID is an arbitrary ID (that is, a GUID), which will be sent back by IoT Hub along with the requested data. Auf diese Weise kann ein Client seine Anforderungen mit den Antworten koppeln.This is how a client can pair its requests with the responses. Der Ergebniscode ist ein HTTP-ähnlicher Statuscode, bei dem eine erfolgreiche Ausführung als „200“ codiert ist.The result code is a HTTP-like status code, where successful is encoded as 200.

Um einen Modulzwillingspatch mit dem Azure IoT SDK zu empfangen, implementieren Sie eine Rückruffunktion, und registrieren Sie sie mit der ModuleClient.moduleTwinCallback-Methode aus dem Azure IoT SDK, damit Ihre Rückruffunktion bei jedem Eingang eines Zwillingspatches ausgelöst wird.To receive a module twin patch with the Azure IoT SDK, implement a callback function and register it with the ModuleClient.moduleTwinCallback method from the Azure IoT SDK so that your callback function is triggered each time that a twin patch comes in.

Um einen Modulzwillingspatch mit einem beliebigen MQTT-Client zu empfangen, wird ein mit dem Empfang von vollständigen Zwillingen vergleichbarer Prozess verwendet: Ein Client muss das spezielle IoT Hub-Thema $iothub/twin/PATCH/properties/desired/# abonnieren.To receive a module twin patch with any MQTT client, the process is very similar to receiving full twins: a client needs to subscribe to special IoT Hub topic $iothub/twin/PATCH/properties/desired/#. Anschließend wird das Abonnement vom Client empfangen, wenn IoT Hub eine Änderung des gewünschten Abschnitts des Zwillings sendet.After the subscription is made, when IoT Hub sends a change of the desired section of the twin, the client receives it.

Empfangen von direkten MethodenReceive direct methods

Wenn Sie eine direkte Methode mit dem Azure IoT SDK empfangen möchten, implementieren Sie eine Rückruffunktion, und registrieren Sie sie mit der ModuleClient.methodCallback-Methode aus dem Azure IoT SDK, damit Ihre Rückruffunktion bei jedem Eingang einer direkten Methode ausgelöst wird.To receive a direct method with the Azure IoT SDK, implement a callback function and register it with the ModuleClient.methodCallback method from the Azure IoT SDK so that your callback function is triggered each time that a direct method comes in.

Um eine direkte Methode mit einem beliebigen MQTT-Client zu empfangen, wird ein dem Empfangen von Zwillingspatches ähnlicher Prozess verwendet.To receive a direct method with any MQTT client, the process is very similar to receiving twin patches. Der Client muss wiederum bestätigen, dass er den Aufruf empfangen hat, und er kann gleichzeitig Informationen zurücksenden.The client needs to confirm back that it has received the call and can send back some information at the same time. Das spezielle IoT Hub-Thema, das abonniert werden muss, ist $iothub/methods/POST/#.Special IoT Hub topic to subscribe to is $iothub/methods/POST/#.

Unterstützung für Sprache und ArchitekturLanguage and architecture support

IOT Edge unterstützt mehrere Betriebssysteme, Gerätearchitekturen und Entwicklungssprachen, sodass Sie das Szenario erstellen können, das Ihren Anforderungen entspricht.IoT Edge supports multiple operating systems, device architectures, and development languages so that you can build the scenario that matches your needs. Erfahren Sie in diesem Abschnitt, welche Optionen Ihnen zum Entwickeln von benutzerdefinierten IOT Edge-Modulen zur Verfügung stehen.Use this section to understand your options for developing custom IoT Edge modules. Weitere Informationen zur Toolunterstützung und Anforderungen für die einzelnen Sprachen finden Sie unter Vorbereiten Ihrer Entwicklungs- und Testumgebung für IOT Edge.You can learn more about tooling support and requirements for each language in Prepare your development and test environment for IoT Edge.

LinuxLinux

Bei allen Sprachen in der folgenden Tabelle unterstützt IoT Edge die Entwicklung für AMD64- und ARM32-Linux-Container.For all languages in the following table, IoT Edge supports development for AMD64 and ARM32 Linux containers.

ProgrammierspracheDevelopment language EntwicklungstoolsDevelopment tools
CC Visual Studio CodeVisual Studio Code
Visual Studio 2017/2019Visual Studio 2017/2019
C#C# Visual Studio CodeVisual Studio Code
Visual Studio 2017/2019Visual Studio 2017/2019
JavaJava Visual Studio CodeVisual Studio Code
Node.jsNode.js Visual Studio CodeVisual Studio Code
PythonPython Visual Studio CodeVisual Studio Code

Hinweis

Die Unterstützung für das Entwickeln und Debuggen von ARM64-Linux-Containern befindet sich in der öffentlichen Vorschau.Develop and debugging support for ARM64 Linux containers is in public preview. Weitere Informationen finden Sie unter Develop and debug ARM64 IoT Edge modules in Visual Studio Code (preview) (Entwickeln und Debuggen von ARM64 IoT Edge-Modulen in Visual Studio Code (Vorschauversion)).For more information, see Develop and debug ARM64 IoT Edge modules in Visual Studio Code (preview).

WindowsWindows

Bei allen Sprachen in der folgenden Tabelle unterstützt IoT Edge die Entwicklung für AMD64-Windows-Container.For all languages in the following table, IoT Edge supports development for AMD64 Windows containers.

ProgrammierspracheDevelopment language EntwicklungstoolsDevelopment tools
CC Visual Studio 2017/2019Visual Studio 2017/2019
C#C# Visual Studio Code (keine Debuggingfunktionen)Visual Studio Code (no debugging capabilities)
Visual Studio 2017/2019Visual Studio 2017/2019

IoT Edge 1.1 LTS ist der letzte Releasekanal, der Windows-Container unterstützt.IoT Edge 1.1 LTS is the last release channel that supports Windows containers. Ab Version 1.2 werden Windows-Container nicht mehr unterstützt.Starting with version 1.2, Windows containers are not supported.

Informationen zum Entwickeln mit Windows-Containern finden Sie in der IoT Edge 1.1-Version dieses Artikels.For information about developing with Windows containers, refer to the IoT Edge 1.1 version of this article.

Nächste SchritteNext steps

Vorbereiten Ihrer Entwicklungs- und Testumgebung für IoT EdgePrepare your development and test environment for IoT Edge

Verwenden von Visual Studio zum Entwickeln von C#-Modulen für IoT EdgeUse Visual Studio to develop C# modules for IoT Edge

Verwenden von Visual Studio Code zum Entwickeln von Modulen für IoT EdgeUse Visual Studio Code to develop modules for IoT Edge

Grundlegendes zu Azure IoT Hub-SDKs und deren VerwendungUnderstand and use Azure IoT Hub SDKs