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 apparaatbrugs richt verschillende Azure-resources in uw Azure-abonnement in die samenwerken om apparaatberichten te transformeren en door te sturen naar IoT Central.

Vereisten

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:

Screenshot of an Azure Functions definition showing the 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:

    Deploy to Azure Button

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 naar de console Ontwikkelhulpprogramma's>. 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:

    Screenshot that shows the restart option 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 functie-URL wilt ophalen, gaat u naar Functions > IoTCIntegration > Code + Test > Get-functie-URL:

    Screenshot that shows the get function URL 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 mag 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.

Notitie

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.

Ingerichte resources

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

  • Functie-app
  • App Service-plan
  • Storage account
  • Sleutelkluis

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

De functie-app wordt uitgevoerd op een verbruiksabonnement. 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 behulp van 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.

Screenshot that shows the edit template option for an Azure Resource Manager template.

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"
  }
},

wordt uitgevoerd 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 op te nemen "alwaysOn": true 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: Verbinding maken de deeltjesapparaten via de apparaatbrug

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 Geavanceerd 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: Verbinding maken sigfox-apparaten 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 nettolading van het bericht converteren naar de verwachte hoofdtekstindeling voordat de apparaatbrug deze verwerkt. U kunt de conversie uitvoeren in dezelfde functie waarop de apparaatbrug wordt uitgevoerd.

In deze sectie wordt beschreven hoe u de nettolading van een Sigfox-webhookintegratie converteert naar de body-indeling die wordt verwacht door de apparaatbrug. 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 nettolading 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 nettolading van het bericht wilt converteren, voegt u de volgende code toe vóór de aanroep op handleMessage regel 21, waarbij u payloadDefinition de definitie van uw Sigfox-nettolading vervangt:

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 in handleMessage regel 21:

context.res = {
    status: 204
};

Voorbeeld 3: apparaten Verbinding maken van 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: Toepassingsintegraties > voegen integratie-HTTP-integratie >toe>.
  • Zorg ervoor dat uw toepassing een decoderfunctie bevat waarmee de nettolading van uw apparaatberichten automatisch wordt geconverteerd naar JSON voordat deze naar de functie wordt verzonden: 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
};

Notitie

In het vorige fragment wordt de apparaat-id gebruikt die geschikt is voor mensen. Het bericht Things Network 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 van apparaatdubbels 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.

Volgende stappen

Nu u hebt geleerd hoe u de IoT Central-apparaatbrug implementeert, volgt u de voorgestelde volgende stap: