Freigeben über


Verwenden der IoT Central-Gerätebrücke zum Verbinden anderer IoT-Clouds mit IoT Central

Die IoT Central-Gerätebrücke ist eine Open-Source-Lösung, die andere IoT-Clouds wie Sigfox, Particle Device Cloud und The Things Network mit Ihrer IoT Central-Anwendung verbindet. Die Gerätebrücke funktioniert durch Weiterleiten von Daten von Geräten, die mit anderen IoT-Clouds verbunden sind, über Ihre IoT Central-Anwendung. Die Gerätebrücke leitet nur Daten an IoT Central weiter, es sendet keine Befehle oder Eigenschaftsupdates von IoT Central zurück an die Geräte.

Mit der Gerätebrücke können Sie die Leistungsfähigkeit von IoT Central mit Geräten kombinieren, z. B.:

  • Asset-Tracking-Geräte, die mit Sigfoxs Low-Power-Wide-Area-Network verbunden sind.
  • Luftqualitätsüberwachungsgeräte in der Partikelgeräte-Cloud.
  • Bodenfeuchteüberwachungsgeräte im The Things Network.

Sie können IoT Central-Anwendungsfeatures wie Regeln und Analysen für die Daten verwenden, Workflows in Power Automate- und Azure Logic-Apps erstellen oder die Daten exportieren.

Die Gerätebrückenlösung stellt mehrere Azure-Ressourcen in Ihrem Azure-Abonnement bereit, die zusammenarbeiten, um Gerätenachrichten an IoT Central zu transformieren und weiterzuleiten.

Voraussetzungen

Zum Ausführen der Schritte in dieser Anleitung benötigen Sie:

Überblick

Die IoT Central-Gerätebrücke ist eine Open-Source-Lösung in GitHub. Es verwendet eine benutzerdefinierte Azure Resource Manager-Vorlage, um mehrere Ressourcen in Ihrem Azure-Abonnement bereitzustellen, einschließlich einer Funktions-App in Azure Functions.

Die Funktions-App ist das Kernstück der Gerätebrücke. Er empfängt HTTP POST-Anforderungen von anderen IoT-Plattformen über einen einfachen Webhook. Das Azure IoT Central Device Bridge-Repository enthält Beispiele, die zeigen, wie Sigfox, Particle und The Things Network-Clouds verbunden werden. Sie können diese Lösung erweitern, um eine Verbindung mit Ihrer benutzerdefinierten IoT-Cloud herzustellen, wenn Ihre Plattform HTTP POST-Anforderungen an Ihre Funktions-App senden kann.

Die Funktions-App wandelt die Daten in ein von IoT Central akzeptiertes Format um und leitet sie mithilfe der Gerätebereitstellungsdienst- und Geräteclient-APIs weiter:

Screenshot einer Azure Functions-Definition mit dem Code.

Wenn Ihre IoT Central-Anwendung die Geräte-ID in der weitergeleiteten Nachricht erkennt, wird die Telemetrie vom Gerät in IoT Central angezeigt. Wenn Ihre IoT Central-Anwendung die Geräte-ID nicht erkennt, versucht die Funktions-App, ein neues Gerät mit der Geräte-ID zu registrieren. Das neue Gerät wird als nicht zugewiesenes Gerät auf der Seite "Geräte " in Ihrer IoT Central-Anwendung angezeigt. Auf der Seite " Geräte" können Sie das neue Gerät einer Gerätevorlage zuweisen und dann die Telemetrie anzeigen.

Bereitstellen der Gerätebrücke

So stellen Sie die Gerätebrücke für Ihr Abonnement bereit:

  1. Navigieren Sie in Ihrer IoT Central-Anwendung zur Seite Berechtigungen Geräteverbindungsgruppen>.

    1. Notieren Sie sich den ID-Bereich. Sie verwenden diesen Wert, wenn Sie die Gerätebrücke bereitstellen.

    2. Öffnen Sie auf derselben Seite die SAS-IoT-Devices-Registrierungsgruppe . Kopieren Sie auf der Gruppenseite SAS-IoT-Devices den Primärschlüssel. Sie verwenden diesen Wert, wenn Sie die Gerätebrücke bereitstellen.

  2. Verwenden Sie die folgende Schaltfläche In Azure bereitstellen, um die benutzerdefinierte Resource Manager-Vorlage zu öffnen, durch die die Funktions-App in Ihrem Abonnement bereitgestellt wird. Verwenden Sie den ID-Bereich und den Primärschlüssel aus dem vorherigen Schritt:

    In Azure bereitstellen-Schaltfläche

Nach Abschluss der Bereitstellung müssen Sie die npm-Pakete installieren, die für die Funktion erforderlich sind:

  1. Öffnen Sie im Azure-Portal die Funktions-App, die für Ihr Abonnement bereitgestellt wurde. Wechseln Sie dann zurKonsole der >. Führen Sie in der Konsole die folgenden Befehle aus, um die Pakete zu installieren:

    cd IoTCIntegration
    npm install
    

    Diese Befehle können mehrere Minuten dauern, bis sie ausgeführt werden. Sie können alle Warnmeldungen sicher ignorieren.

  2. Nachdem die Paketinstallation abgeschlossen ist, wählen Sie " Neu starten " auf der Seite "Übersicht" der Funktions-App aus:

    Screenshot der Option

  3. Die Funktion kann jetzt verwendet werden. Externe Systeme können HTTP POST-Anforderungen verwenden, um Gerätedaten über die Gerätebrücke an Ihre IoT Central-Anwendung zu senden. Um die Funktions-URL abzurufen, navigieren Sie zu Funktionen > IoTCIntegration > Code und Test > Funktionen-URL abrufen:

    Screenshot der URL der Funktion

Nachrichten, die an die Gerätebrücke gesendet werden, müssen das folgende Format aufweisen:

"device": {
  "deviceId": "my-cloud-device"
},
"measurements": {
  "temp": 20.31,
  "pressure": 50,
  "humidity": 8.5,
  "ledColor": "blue"
}

Jeder Schlüssel im measurements Objekt muss mit dem Namen eines Telemetrietyps in der Gerätevorlage in der IoT Central-Anwendung übereinstimmen. Diese Lösung unterstützt die Angabe der Schnittstellen-ID im Nachrichtentext nicht. Wenn also zwei verschiedene Schnittstellen über einen Telemetrietyp mit demselben Namen verfügen, wird die Messung in beiden Telemetriedatenströmen in Ihrer IoT Central-Anwendung angezeigt.

Sie können ein timestamp Feld in den Textkörper einfügen, um das UTC-Datum und die Uhrzeit der Nachricht anzugeben. Dieses Feld muss im ISO 8601-Format vorliegen. Beispiel: 2020-06-08T20:16:54.602Z. Wenn Sie keinen Zeitstempel einschließen, wird das aktuelle Datum und die aktuelle Uhrzeit verwendet.

Sie können ein modelId Feld in den Textkörper einschließen. Verwenden Sie dieses Feld, um das Gerät während des Bereitstellungsprozesses einer Geräte-Vorlage zuzuordnen.

Dies deviceId muss alphanumerisch, klein geschrieben sein und kann Bindestriche enthalten.

Wenn Sie das modelId Feld nicht einschließen oder ioT Central die Modell-ID nicht erkennt, erstellt eine Nachricht mit einem unbekannten deviceId Gerät in IoT Central ein neues nicht zugewiesenes Gerät . Ein Operator kann das Gerät manuell zur richtigen Gerätevorlage migrieren. Weitere Informationen finden Sie unter "Verwalten von Geräten in Ihrer zentralen Azure IoT-Anwendung > zum Migrieren von Geräten zu einer Vorlage".

Hinweis

Bis das Gerät einer Vorlage zugewiesen ist, geben alle HTTP-Aufrufe der Funktion den Fehlerstatus 403 zurück.

Um die Protokollierung für die Funktions-App mit Application Insights zu aktivieren, navigieren Sie im Azure-Portal zu Überwachungsprotokollen > in Ihrer Funktions-App. Wählen Sie "Application Insights aktivieren" aus.

Bereitgestellte Ressourcen

Die Vorlage "Ressourcen-Manager" stellt die folgenden Ressourcen in Ihrem Azure-Abonnement bereit:

  • Funktions-App
  • App Service-Plan
  • Speicherkonto
  • Schlüsseltresor

Der Schlüsseltresor speichert den SAS-Gruppenschlüssel für Ihre IoT Central-Anwendung.

Die Funktions-App wird in einem Verbrauchsplan ausgeführt. Diese Option bietet zwar keine dedizierten Computeressourcen, ermöglicht es der Gerätebrücke jedoch, Hunderte von Gerätenachrichten pro Minute zu verarbeiten, die für kleinere Geräteflotten oder Geräte geeignet sind, die Nachrichten weniger häufig senden. Wenn Ihre Anwendung davon abhängt, eine große Anzahl von Gerätenachrichten zu streamen, ersetzen Sie den Verbrauchsplan durch einen dedizierten App-Serviceplan. Dieser Plan bietet dedizierte Computeressourcen, die schnellere Serverantwortzeiten bieten. Mit einem standardmäßigen App Service Plan betrug die maximale beobachtete Leistung der Funktion aus Azure in diesem Repository rund 1.500 Gerätenachrichten pro Minute. Weitere Informationen finden Sie unter Azure Functions-Hostingoptionen.

Um einen dedizierten App Service-Plan anstelle eines Verbrauchsplans zu verwenden, bearbeiten Sie die benutzerdefinierte Vorlage vor der Bereitstellung. Wählen Sie "Vorlage bearbeiten" aus.

Screenshot der Option

Ersetzen Sie das folgende Segment:

{
  "type": "Microsoft.Web/serverfarms",
  "apiVersion": "2015-04-01",
  "name": "[variables('planName')]",
  "location": "[resourceGroup().location]",
  "properties": {
    "name": "[variables('planName')]",
    "computeMode": "Dynamic",
    "sku": "Dynamic"
  }
},

Mit:

{
  "type": "Microsoft.Web/serverfarms",
  "sku": {
      "name": "S1",
      "tier": "Standard",
      "size": "S1",
      "family": "S",
      "capacity": 1
  },
  "kind": "app",
  "name": "[variables('planName')]",
  "apiVersion": "2016-09-01",
  "location": "[resourceGroup().location]",
  "tags": {
      "iotCentral": "device-bridge",
      "iotCentralDeviceBridge": "app-service-plan"
  },
  "properties": {
      "name": "[variables('planName')]"
  }
},

Bearbeiten Sie als Nächstes die Vorlage, um "alwaysOn": true in die Konfiguration für die functionapp Ressource unter "properties": {"SiteConfig": {...}} aufzunehmen. Die AlwaysOn-Konfiguration stellt sicher, dass die Funktions-App immer ausgeführt wird.

Examples

In den folgenden Beispielen wird beschrieben, wie Sie die Gerätebrücke für verschiedene IoT-Clouds konfigurieren:

Beispiel 1: Verbinden von Partikelgeräten über die Gerätebrücke

Um ein Partikelgerät über die Gerätebrücke mit IoT Central zu verbinden, wechseln Sie zur Partikelkonsole, und erstellen Sie eine neue Webhook-Integration. Legen Sie das Anforderungsformat auf JSON fest. Verwenden Sie unter "Erweiterte Einstellungen" das folgende benutzerdefinierte Textformat:

{
  "device": {
    "deviceId": "{{{PARTICLE_DEVICE_ID}}}"
  },
  "measurements": {
    "{{{PARTICLE_EVENT_NAME}}}": "{{{PARTICLE_EVENT_VALUE}}}"
  }
}

Fügen Sie die Funktions-URL aus Ihrer Funktions-App ein, und Sie sehen, dass Partikelgeräte als nicht zugewiesene Geräte in IoT Central erscheinen. Weitere Informationen finden Sie im Blogbeitrag zum Integrieren Particle-basierter Projekte in Azure IoT Central.

Beispiel 2: Verbinden von Sigfox-Geräten über die Gerätebrücke

Auf einigen Plattformen können Sie möglicherweise nicht das Format von Gerätenachrichten angeben, die über einen Webhook gesendet werden. Für solche Systeme müssen die Nutzdaten der Nachricht vor der Verarbeitung durch die Geräte-Bridge in das erwartete Textformat konvertiert werden. Sie können die Konvertierung in derselben Funktion ausführen, die die Gerätebrücke ausführt.

In diesem Abschnitt wird gezeigt, wie Sie die Nutzdaten einer Sigfox-Webhookintegration in das von der Geräte-Bridge erwartete Textformat konvertieren. Die Sigfox-Cloud überträgt Gerätedaten in einem Hexadezimalzeichenfolgenformat. Der Einfachheit halber enthält die Geräte-Bridge eine Konvertierungsfunktion für dieses Format, die eine Teilmenge der möglichen Feldtypen in Sigfox-Gerätenutzdaten akzeptiert: int und uint mit 8, 16, 32 oder 64 Bits, float mit 32 oder 64 Bits sowie Little-Endian und Big-Endian. Um Nachrichten aus einer Sigfox-Webhook-Integration zu verarbeiten, nehmen Sie die folgenden Änderungen an der Datei IoTCIntegration/index.js in der Funktions-App vor.

Um die Nachrichtennutzlast zu konvertieren, fügen Sie den folgenden Code vor dem Aufruf von handleMessage in Zeile 21 hinzu und ersetzen Sie payloadDefinition durch Ihre Sigfox-Nutzlastdefinition.

const payloadDefinition = 'gforce::uint:8 lat::uint:8 lon::uint:16'; // Replace this with your payload definition

req.body = {
    device: {
        deviceId: req.body.device
    },
    measurements: require('./converters/sigfox')(payloadDefinition, req.body.data)
};

Sigfox-Geräte erwarten einen 204 Antwortcode. Fügen Sie den folgenden Code nach dem Aufruf von handleMessage in Zeile 21 hinzu:

context.res = {
    status: 204
};

Beispiel 3: Verbinden von Geräten über The Things Network mit der Gerätebrücke

So verbinden Sie die Things Network-Geräte mit IoT Central:

  • Fügen Sie Ihrer Anwendung eine neue HTTP-Integration in The Things Network hinzu: Anwendung > Integrationen > Integration hinzufügen > HTTP-Integration.
  • Stellen Sie sicher, dass Ihre Anwendung eine Decoderfunktion enthält, die die Nutzlast Ihrer Gerätenachrichten automatisch in JSON konvertiert, bevor Sie sie an die Funktion senden: Application > Payload Functions > Decoder.

Das folgende Beispiel zeigt eine JavaScript-Decoderfunktion, mit der Sie gängige numerische Typen aus Binären Daten decodieren können:

function Decoder(bytes, port) {
  function bytesToFloat(bytes, decimalPlaces) {
    var bits = (bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | bytes[0];
    var sign = (bits >>> 31 === 0) ? 1.0 : -1.0;
    var e = bits >>> 23 & 0xff;
    var m = (e === 0) ? (bits & 0x7fffff) << 1 : (bits & 0x7fffff) | 0x800000;
    var f = Math.round((sign * m * Math.pow(2, e - 150)) * Math.pow(10, decimalPlaces)) / Math.pow(10, decimalPlaces);
    return f;
  }

  function bytesToInt32(bytes, signed) {
    var bits = bytes[0] | (bytes[1] << 8) | (bytes[2] << 16) | (bytes[3] << 24);
    var sign = 1;

    if (signed && bits >>> 31 === 1) {
      sign = -1;
      bits = bits & 0x7FFFFFFF;
    }

    return bits * sign;
  }

  function bytesToShort(bytes, signed) {
    var bits = bytes[0] | (bytes[1] << 8);
    var sign = 1;

    if (signed && bits >>> 15 === 1) {
      sign = -1;
      bits = bits & 0x7FFF;
    }

    return bits * sign;
  }

  return {
    temperature: bytesToFloat(bytes.slice(0, 4), 2),
    presscounter: bytesToInt32(bytes.slice(4, 8), true),
    blueLux: bytesToShort(bytes.slice(8, 10), false)
  };
}

Fügen Sie nach dem Definieren der Integration den folgenden Code vor dem Aufruf handleMessage in Zeile 21 der IoTCIntegration/index.js Datei Ihrer Funktions-App hinzu. Dieser Code übersetzt den Text ihrer HTTP-Integration in das erwartete Format.

req.body = {
  device: {
    deviceId: req.body.end_device_ids.device_id.toLowerCase()
  },
  measurements: req.body.uplink_message.decoded_payload
};

Hinweis

Der vorherige Codeausschnitt verwendet die benutzerfreundliche Geräte-ID. Die "Things Network"-Nachricht enthält auch eine technische ID, auf die Sie mit req.body.dev_eui.toLowerCase() zugreifen können. Weitere Informationen finden Sie unter "The Things Network – Data Formats".

Einschränkungen

Die Gerätebrücke leitet nur Nachrichten an IoT Central weiter und sendet keine Nachrichten an Geräte zurück. Aus diesem Grund funktionieren Eigenschaften und Befehle nicht für Geräte, die über diese Gerätebrücke eine Verbindung mit IoT Central herstellen. Da Geräte-Twin-Vorgänge nicht unterstützt werden, ist es nicht möglich, Geräteeigenschaften über die Gerätebrücke zu aktualisieren. Um diese Features verwenden zu können, muss ein Gerät über einen der Azure IoT-Geräte-SDKs direkt mit IoT Central verbunden werden.