Delen via


De IoT Central-apparaatbrug gebruiken om andere IoT-clouds te verbinden met IoT Central

De IoT Central-apparaatbrug is een opensource-oplossing die andere IoT-clouds, zoals Sigfox, Deeltjesapparaatcloud en The Things Network , verbindt met uw IoT Central-toepassing. De apparaatbrug werkt door gegevens door te sturen van apparaten die zijn verbonden met andere IoT-clouds via uw IoT Central-toepassing. De apparaatbrug stuurt alleen gegevens door naar IoT Central, maar verzendt geen opdrachten of eigenschapsupdates van IoT Central naar de apparaten.

Met de apparaatbrug kunt u de kracht van IoT Central combineren met apparaten zoals:

  • Apparaten voor het bijhouden van activa die zijn verbonden met sigfox's low-power wide area network.
  • Bewakingsapparaten voor de luchtkwaliteit in de deeltjesapparaatcloud.
  • Bodemvochtbewakingsapparaten op The Things Network.

U kunt IoT Central-toepassingsfuncties gebruiken, zoals regels en analyses op de gegevens, werkstromen maken in Power Automate en Azure Logic-apps of de gegevens exporteren.

De oplossing voor de apparaatbrug configureert verschillende Azure-resources in uw Azure-abonnement die samenwerken om apparaatberichten te transformeren en door te sturen naar IoT Central.

Vereiste voorwaarden

Als u de stappen in deze handleiding wilt voltooien, hebt u het volgende nodig:

Overzicht

De IoT Central-apparaatbrug is een opensource-oplossing in GitHub. Er wordt een aangepaste Azure Resource Manager-sjabloon gebruikt om verschillende resources te implementeren in uw Azure-abonnement, waaronder een functie-app in Azure Functions.

De functie-app is het kernstuk van de apparaatbrug. Het ontvangt HTTP POST-aanvragen van andere IoT-platforms via een eenvoudige webhook. De Azure IoT Central Device Bridge-opslagplaats bevat voorbeelden die laten zien hoe u Sigfox, Deeltje en The Things Network-clouds verbindt. U kunt deze oplossing uitbreiden om verbinding te maken met uw aangepaste IoT-cloud als uw platform HTTP POST-aanvragen naar uw functie-app kan verzenden.

De functie-app transformeert de gegevens in een indeling die wordt geaccepteerd door IoT Central en stuurt deze door met behulp van de API's van de device provisioning service en de apparaatclient:

Schermopname van een Azure Functions-definitie met de code.

Als uw IoT Central-toepassing de apparaat-id in het doorgestuurde bericht herkent, wordt de telemetrie van het apparaat weergegeven in IoT Central. Als uw IoT Central-toepassing de apparaat-id niet herkent, probeert de functie-app een nieuw apparaat te registreren met de apparaat-id. Het nieuwe apparaat wordt weergegeven als een niet-toegewezen apparaat op de pagina Apparaten in uw IoT Central-toepassing. Op de pagina Apparaten kunt u het nieuwe apparaat toewijzen aan een apparaatsjabloon en vervolgens de telemetrie bekijken.

De apparaatbrug implementeren

De apparaatbrug implementeren in uw abonnement:

  1. Navigeer in uw IoT Central-toepassing naar de pagina Verbindingsgroepen machtigingen voor apparaten>.

    1. Noteer het id-bereik. U gebruikt deze waarde wanneer u de apparaatbrug implementeert.

    2. Open op dezelfde pagina de registratiegroep SAS-IoT-Devices . Kopieer op de groepspagina SAS-IoT-Devices de primaire sleutel. U gebruikt deze waarde wanneer u de apparaatbrug implementeert.

  2. Gebruik de volgende knop Implementeren in Azure om de aangepaste Resource Manager-sjabloon te openen waarmee de functie-app in uw abonnement wordt geïmplementeerd. Gebruik het id-bereik en de primaire sleutel uit de vorige stap:

    De knop Implementeren in Azure

Nadat de implementatie is voltooid, moet u de npm-pakketten installeren waarvoor de functie is vereist:

  1. Open in Azure Portal de functie-app die is geïmplementeerd in uw abonnement. Ga vervolgens naarde console>. Voer in de console de volgende opdrachten uit om de pakketten te installeren:

    cd IoTCIntegration
    npm install
    

    Het uitvoeren van deze opdrachten kan enkele minuten duren. U kunt waarschuwingsberichten veilig negeren.

  2. Nadat de installatie van het pakket is voltooid, selecteert u Opnieuw opstarten op de pagina Overzicht van de functie-app:

    Schermopname van de optie voor opnieuw opstarten in Azure Functions.

  3. De functie is nu klaar voor gebruik. Externe systemen kunnen HTTP POST-aanvragen gebruiken om apparaatgegevens via de apparaatbrug naar uw IoT Central-toepassing te verzenden. Als u de URL van de functie wilt ophalen, gaat u naar Functions > IoTCIntegration > Code + Test > Get function URL:

    Schermopname van de URL van de functie ophalen in Azure Functions.

Berichten die naar de apparaatbrug worden verzonden, moeten de volgende indeling hebben:

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

Elke sleutel in het measurements object moet overeenkomen met de naam van een telemetrietype in de apparaatsjabloon in de IoT Central-toepassing. Deze oplossing biedt geen ondersteuning voor het opgeven van de interface-id in de berichttekst. Dus als twee verschillende interfaces een telemetrietype met dezelfde naam hebben, wordt de meting weergegeven in beide telemetriestromen in uw IoT Central-toepassing.

U kunt een timestamp veld in de hoofdtekst opnemen om de UTC-datum en -tijd van het bericht op te geven. Dit veld moet de ISO 8601-indeling hebben. Bijvoorbeeld: 2020-06-08T20:16:54.602Z. Als u geen tijdstempel opneemt, wordt de huidige datum en tijd gebruikt.

U kunt een modelId veld opnemen in de hoofdtekst. Gebruik dit veld om het apparaat tijdens het inrichten toe te wijzen aan een apparaatsjabloon.

De deviceId naam moet alfanumerieke, kleine letters zijn en kan afbreekstreepjes bevatten.

Als u het modelId veld niet opneemt of als IoT Central de model-id niet herkent, maakt een bericht met een niet-herkend deviceId apparaat een nieuw niet-toegewezen apparaat in IoT Central. Een operator kan het apparaat handmatig migreren naar de juiste apparaatsjabloon. Zie Apparaten beheren in uw Azure IoT Central-toepassing > Apparaten migreren naar een sjabloon voor meer informatie.

Opmerking

Totdat het apparaat is toegewezen aan een sjabloon, retourneren alle HTTP-aanroepen naar de functie een foutstatus van 403.

Als u logboekregistratie wilt inschakelen voor de functie-app met Application Insights, gaat u naar Bewakingslogboeken > in uw functie-app in Azure Portal. Selecteer Application Insights inschakelen.

Ingestelde bronnen

De Resource Manager-sjabloon richt de volgende resources in uw Azure-abonnement in:

  • Functie-app
  • App Service-plan
  • Opslagaccount
  • Sleutelbewaarplaats

In de sleutelkluis wordt de SAS-groepssleutel voor uw IoT Central-toepassing opgeslagen.

De functie-app draait op een consumptieplan. Hoewel deze optie geen toegewezen rekenresources biedt, kan de apparaatbrug honderden apparaatberichten per minuut verwerken, geschikt voor kleinere apparaten of apparaten die minder vaak berichten verzenden. Als uw toepassing afhankelijk is van het streamen van een groot aantal apparaatberichten, vervangt u het verbruiksabonnement door een toegewezen App Service-plan. Dit plan biedt toegewezen rekenresources, die snellere reactietijden van de server bieden. Met een standaard App Service-plan waren de maximaal waargenomen prestaties van de functie uit Azure in deze opslagplaats ongeveer 1500 apparaatberichten per minuut. Zie De hostingopties van Azure Functions voor meer informatie.

Als u een speciaal App Service-plan wilt gebruiken in plaats van een verbruiksabonnement, bewerkt u de aangepaste sjabloon voordat u implementeert. Selecteer Sjabloon bewerken.

Schermopname van de optie Sjabloon bewerken voor een Azure Resource Manager-sjabloon.

Vervang het volgende segment:

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

Met:

{
  "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')]"
  }
},

Bewerk vervolgens de sjabloon om "alwaysOn": true op te nemen in de configuratie voor de functionapp resource onder "properties": {"SiteConfig": {...}}. De alwaysOn-configuratie zorgt ervoor dat de functie-app altijd wordt uitgevoerd.

Voorbeelden

In de volgende voorbeelden ziet u hoe u de apparaatbrug configureert voor verschillende IoT-clouds:

Voorbeeld 1: Particle-apparaten verbinden via de Device Bridge

Als u een deeltjeapparaat via de apparaatbrug wilt verbinden met IoT Central, gaat u naar de Deeltjesconsole en maakt u een nieuwe webhookintegratie. Stel de aanvraagindeling in op JSON. Gebruik onder Geavanceerde instellingen de volgende aangepaste hoofdtekstindeling:

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

Plak de functie-URL uit uw functie-app en u ziet dat deeltjesapparaten worden weergegeven als niet-toegewezen apparaten in IoT Central. Voor meer informatie raadpleegt u het blogbericht Over het integreren van uw deeltjeprojecten met Azure IoT Central .

Voorbeeld 2: Sigfox-apparaten verbinden via de apparaatbrug

Op sommige platforms kunt u mogelijk niet de indeling opgeven van apparaatberichten die via een webhook worden verzonden. Voor dergelijke systemen moet u de berichtinhoud converteren naar de verwachte berichtindeling voordat de apparaatbrug deze verwerkt. U kunt de conversie uitvoeren in dezelfde functie waarop de apparaatbrug wordt uitgevoerd.

In dit gedeelte wordt beschreven hoe u de payload van een Sigfox-webhookintegratie converteert naar de body-indeling die door de apparaatbrug wordt verwacht. De Sigfox-cloud verzendt apparaatgegevens in een hexadecimale tekenreeksindeling. Voor het gemak bevat de apparaatbrug een conversiefunctie voor deze indeling, die een subset accepteert van de mogelijke veldtypen in de payload van een Sigfox-apparaat: int en uint van 8, 16, 32 of 64 bits; float van 32 bits of 64 bits; little-endian en big-endian. Als u berichten van een Sigfox-webhookintegratie wilt verwerken, moet u de volgende wijzigingen aanbrengen in het IoTCIntegration-/index.js-bestand in de functie-app.

Als u de payload van het bericht wilt converteren, voegt u de volgende code toe vóór de aanroep op handleMessage regel 21, waarbij u payloadDefinition vervangt door de definitie van uw Sigfox-payload.

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-apparaten verwachten een 204 antwoordcode. Voeg de volgende code toe na de aanroep van handleMessage op regel 21:

context.res = {
    status: 204
};

Voorbeeld 3: Apparaten verbinden vanuit the Things Network via de apparaatbrug

De Things Network-apparaten verbinden met IoT Central:

  • Voeg een nieuwe HTTP-integratie toe aan uw toepassing in The Things Network: Toepassing > Integraties > integratie toevoegen> HTTP-integratie.
  • Zorg ervoor dat uw toepassing een decoderfunctie bevat waarmee de nettolading van uw apparaatberichten automatisch wordt geconverteerd naar JSON voordat u deze naar de functie verzendt: Decoder van Application > Payload Functions>.

In het volgende voorbeeld ziet u een JavaScript-decoderfunctie die u kunt gebruiken om algemene numerieke typen van binaire gegevens te decoderen:

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)
  };
}

Nadat u de integratie hebt gedefinieerd, voegt u de volgende code toe vóór de aanroep in handleMessage regel 21 van het IoTCIntegration-/index.js-bestand van uw functie-app. Met deze code wordt de hoofdtekst van uw HTTP-integratie omgezet in de verwachte indeling.

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

Opmerking

In het vorige fragment wordt de apparaat-id gebruikt die geschikt is voor mensen. Het The Things Network-bericht bevat ook een technische ID die u kunt openen met behulp van req.body.dev_eui.toLowerCase(). Zie The Things Network - Gegevensindelingen voor meer informatie.

Beperkingen

De apparaatbrug stuurt alleen berichten door naar IoT Central en stuurt geen berichten terug naar apparaten. Deze beperking is waarom eigenschappen en opdrachten niet werken voor apparaten die via deze apparaatbrug verbinding maken met IoT Central. Omdat bewerkingen met apparaat-tweelingen niet worden ondersteund, is het niet mogelijk om apparaateigenschappen via de apparaatbrug bij te werken. Als u deze functies wilt gebruiken, moet een apparaat rechtstreeks verbinding maken met IoT Central met behulp van een van de Azure IoT-apparaat-SDK's.