Az IoT Central eszközhídjának használatával csatlakoztathat más IoT-felhőket az IoT Centralhoz

Az IoT Central eszközhíd egy nyílt forráskódú megoldás, amely más IoT-felhőket, például a Sigfoxot, a Részecskeeszköz-felhőt és a The Things Networket csatlakoztatja az IoT Central-alkalmazáshoz. Az eszközhíd úgy működik, hogy adatokat továbbít más IoT-felhőkhöz csatlakoztatott eszközökről az IoT Central-alkalmazásba. Az eszközhíd csak az IoT Centralnak továbbítja az adatokat, nem küld parancsokat vagy tulajdonságfrissítéseket az IoT Centralból az eszközöknek.

Az eszközhíd segítségével kombinálhatja az IoT Central teljesítményét az alábbi eszközökkel:

  • A Sigfox kis teljesítményű széles hálózatához csatlakoztatott eszközkövető eszközök.
  • Levegőminőség-monitorozási eszközök a Részecskeeszköz-felhőben.
  • Talajnedvesség-monitorozási eszközök a The Things Network-en.

Használhatja az IoT Central alkalmazásfunkcióit, például az adatokra vonatkozó szabályokat és elemzéseket, munkafolyamatokat hozhat létre a Power Automate-ben és az Azure Logic-alkalmazásokban, vagy exportálhatja az adatokat.

Az eszközhíd megoldás több Azure-erőforrást helyez üzembe az Azure-előfizetésben, amelyek együttműködve átalakítják és továbbítják az eszközüzeneteket az IoT Centralnak.

Előfeltételek

Az útmutató lépéseinek elvégzéséhez a következőkre van szüksége:

  • Aktív Azure-előfizetés. Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.

  • Az egyéni alkalmazássablonból létrehozott IoT Central-alkalmazás . További információ: IoT Central-alkalmazás létrehozása és az alkalmazás ismertetése.

Áttekintés

Az IoT Central eszközhíd nyílt forráskódú megoldás a GitHubon. Egy egyéni Azure Resource Manager-sablonnal több erőforrást helyez üzembe az Azure-előfizetésében, beleértve egy függvényalkalmazást az Azure Functionsben.

A függvényalkalmazás az eszközhíd alapvető eleme. Http POST-kéréseket fogad más IoT-platformoktól egy egyszerű webhookon keresztül. Az Azure IoT Central Device Bridge-adattár példákat tartalmaz a Sigfox, a Particle és a The Things Network felhők összekapcsolására. Ezt a megoldást kiterjesztheti az egyéni IoT-felhőhöz való csatlakozásra, ha a platform HTTP POST-kéréseket küldhet a függvényalkalmazásnak.

A függvényalkalmazás átalakítja az adatokat az IoT Central által elfogadott formátumba, és továbbítja azokat az eszközkiépítési szolgáltatás és az eszközügyfél API-k használatával:

Screenshot of an Azure Functions definition showing the code.

Ha az IoT Central-alkalmazás felismeri az eszköz azonosítóját a továbbított üzenetben, az eszköz telemetriai adatai megjelennek az IoT Centralban. Ha az IoT Central-alkalmazás nem ismeri fel az eszközazonosítót, a függvényalkalmazás megpróbál regisztrálni egy új eszközt az eszközazonosítóval. Az új eszköz hozzárendeletlen eszközként jelenik meg az IoT Central-alkalmazás Eszközök lapján. Az Eszközök lapon hozzárendelheti az új eszközt egy eszközsablonhoz, majd megtekintheti a telemetriát.

Az eszközhíd üzembe helyezése

Az eszközhíd üzembe helyezése az előfizetésben:

  1. Az IoT Central-alkalmazásban lépjen az Engedélyek > eszköz kapcsolatcsoportok lapra.

    1. Jegyezze fel az azonosító hatókörét. Ezt az értéket az eszközhíd üzembe helyezésekor használja.

    2. Ugyanezen a lapon nyissa meg az SAS-IoT-Devices regisztrációs csoportot. Az SAS-IoT-Devices csoportlapon másolja ki az elsődleges kulcsot. Ezt az értéket az eszközhíd üzembe helyezésekor használja.

  2. Az alábbi Üzembe helyezés az Azure-ban gombra kattintva nyissa meg a függvényalkalmazást az előfizetésben üzembe helyező egyéni Resource Manager-sablont. Használja az előző lépés azonosító hatókörét és elsődleges kulcsát :

    Deploy to Azure Button

Az üzembe helyezés befejezése után telepítenie kell a függvény által igényelt npm-csomagokat:

  1. Az Azure Portalon nyissa meg az előfizetésben üzembe helyezett függvényalkalmazást. Ezután nyissa meg a Fejlesztői eszközök>konzolját. A konzolon futtassa a következő parancsokat a csomagok telepítéséhez:

    cd IoTCIntegration
    npm install
    

    Ezek a parancsok futtatása több percet is igénybe vehet. A figyelmeztető üzeneteket nyugodtan figyelmen kívül hagyhatja.

  2. A csomag telepítése után válassza az Újraindítás lehetőséget a függvényalkalmazás Áttekintés lapján:

    Screenshot that shows the restart option in Azure Functions.

  3. A függvény most már használatra kész. A külső rendszerek HTTP POST-kérésekkel küldhetnek eszközadatokat az eszközhídon keresztül az IoT Central-alkalmazásba. A függvény URL-címének lekéréséhez lépjen a Functions > IoTCIntegration > Code + Test > Get függvény URL-címére:

    Screenshot that shows the get function URL in Azure Functions.

Az eszközhídra küldött üzenettörzsek formátumának a következőnek kell lennie:

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

Az objektum minden measurements kulcsának meg kell egyeznie az IoT Central-alkalmazás eszközsablonjában szereplő telemetriai típus nevével. Ez a megoldás nem támogatja a felület azonosítójának megadását az üzenet törzsében. Ha tehát két különböző interfész azonos nevű telemetriai típussal rendelkezik, a mérés az IoT Central-alkalmazásban mindkét telemetriai adatfolyamban megjelenik.

Felvehet egy timestamp mezőt a törzsbe az üzenet UTC-dátumának és időpontjának megadásához. Ennek a mezőnek ISO 8601 formátumúnak kell lennie. For example, 2020-06-08T20:16:54.602Z. Ha nem tartalmaz időbélyeget, a rendszer az aktuális dátumot és időt használja.

Felvehet egy modelId mezőt a törzsbe. Ezzel a mezővel rendelheti hozzá az eszközt egy eszközsablonhoz a kiépítés során.

Az deviceId értéknek alfanumerikusnak, kisbetűsnek kell lennie, és tartalmazhat kötőjeleket.

Ha nem tartalmazza a mezőt, vagy ha az modelId IoT Central nem ismeri fel a modellazonosítót, akkor egy ismeretlen deviceId üzenetet tartalmazó üzenet létrehoz egy új , hozzárendeletlen eszközt az IoT Centralban. Az operátorok manuálisan migrálhatják az eszközt a megfelelő eszközsablonba. További információ: Eszközök kezelése az Azure IoT Central-alkalmazásban > Eszközök migrálása sablonba.

Megjegyzés:

Amíg az eszköz nem lesz sablonhoz rendelve, a függvény minden HTTP-hívása 403-as hibaállapotot ad vissza.

Ha az Application Elemzések használatával szeretné bekapcsolni a függvényalkalmazás naplózását, keresse meg a függvényalkalmazás figyelési > naplóit az Azure Portalon. Válassza az Application Insights bekapcsolása lehetőséget.

Kiépített erőforrások

A Resource Manager-sablon az alábbi erőforrásokat helyezi üzembe az Azure-előfizetésben:

  • Függvényalkalmazás
  • App Service-csomag
  • Storage account
  • Key Vault

A kulcstartó tárolja az IoT Central-alkalmazás SAS-csoportkulcsát.

A függvényalkalmazás egy használati terven fut. Bár ez a beállítás nem kínál dedikált számítási erőforrásokat, lehetővé teszi, hogy az eszközhíd percenként több száz eszközüzenetet kezeljen, amelyek kisebb eszközflottákhoz vagy ritkábban küldik az üzeneteket. Ha az alkalmazás nagy számú eszközüzenet streamelésétől függ, cserélje le a használati csomagot egy dedikált App Service-csomagra. Ez a csomag dedikált számítási erőforrásokat kínál, amelyek gyorsabb kiszolgálói válaszidőt biztosítanak. Egy standard App Service-csomag használatával az Azure-ból megfigyelt függvény maximális teljesítménye ebben az adattárban körülbelül 1500 eszközüzenet volt percenként. További információkért tekintse meg az Azure Functions üzemeltetési lehetőségeit.

Ha használatalapú csomag helyett dedikált App Service-csomagot szeretne használni, az üzembe helyezés előtt szerkessze az egyéni sablont. Válassza a Sablon szerkesztése lehetőséget.

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

Cserélje le a következő szegmenst:

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

nevű és

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

Ezután szerkessze a sablont úgy, hogy belefoglaljon "alwaysOn": true az erőforrás konfigurációjába az functionapp AlwaysOn konfiguráció alatt"properties": {"SiteConfig": {...}}, hogy a függvényalkalmazás mindig futjon.

Példák

Az alábbi példák bemutatják, hogyan konfigurálható az eszközhíd különböző IoT-felhőkhöz:

1. példa: részecskeeszközök Csatlakozás az eszközhídon keresztül

Ha egy Részecske eszközt az eszközhídon keresztül szeretne csatlakoztatni az IoT Centralhoz, lépjen a Részecske konzolra, és hozzon létre egy új webhook-integrációt. Állítsa a kérelem formátumát JSON-ra. A Speciális Gépház csoportban használja az alábbi egyéni törzsformátumot:

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

Illessze be a függvény URL-címét a függvényalkalmazásból, és láthatja, hogy a részecskeeszközök hozzárendeletlen eszközökként jelennek meg az IoT Centralban. További információkért tekintse meg a részecskealapú projektek Azure IoT Centralnal való integrálását ismertető blogbejegyzést.

2. példa: Sigfox-eszközök Csatlakozás az eszközhídon keresztül

Előfordulhat, hogy egyes platformok nem engedélyezik a webhookon keresztül küldött eszközüzenetek formátumának megadását. Ilyen rendszerek esetén az üzenet hasznos adatait a várt törzsformátumra kell konvertálnia, mielőtt az eszközhíd feldolgozza azt. Az átalakítást ugyanabban a függvényben hajthatja végre, amely az eszközhidat futtatja.

Ez a szakasz bemutatja, hogyan konvertálhatja a Sigfox webhook-integráció hasznos adatait az eszközhíd által várt törzsformátumra. A Sigfox-felhő hexadecimális sztringformátumban továbbítja az eszközadatokat. A kényelem kedvéért az eszközhíd ehhez a formátumhoz tartalmaz egy konverziós függvényt, amely elfogadja a Sigfox-eszközök hasznos adattípusainak egy részhalmazát: intuint 8, 16, 32 vagy 64 bit; 32 vagy 64 bit; float kis endian és big-endian. A Sigfox webhook-integrációból származó üzenetek feldolgozásához végezze el az alábbi módosításokat az IoTCIntegration/index.js fájlban a függvényalkalmazásban.

Az üzenet hasznos adatainak konvertálásához adja hozzá a következő kódot a hívás előtt a handleMessage 21. sorban, és cserélje le payloadDefinition a Sigfox hasznos adatdefinícióját:

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

A Sigfox-eszközök válaszkódot várnak 204 . Adja hozzá a következő kódot a 21. sorban lévő handleMessage hívás után:

context.res = {
    status: 204
};

3. példa: eszközök Csatlakozás az Eszközök hálózatról az eszközhídon keresztül

A Things Network-eszközök csatlakoztatása az IoT Centralhoz:

  • Új HTTP-integráció hozzáadása az alkalmazáshoz a The Things Networkben: Az alkalmazásintegrációk > integrációs > HTTP-integrációt adnak > hozzá.
  • Győződjön meg arról, hogy az alkalmazás tartalmaz egy dekóderfüggvényt, amely automatikusan JSON-ra alakítja át az eszközüzenetek hasznos adatait, mielőtt elküldené azt a függvénynek: Application > Payload Functions > dekóder.

Az alábbi minta egy JavaScript-dekóderfüggvényt mutat be, a bináris adatokból származó gyakori numerikus típusok dekódolásához:

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

Az integráció definiálása után adja hozzá a következő kódot a függvényalkalmazás handleMessage IoTCIntegration/index.js fájljának 21. sorához. Ez a kód lefordítja a HTTP-integráció törzsét a várt formátumra.

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

Megjegyzés:

Az előző kódrészlet az emberbarát eszközazonosítót használja. A Things Network üzenet tartalmaz egy technikai azonosítót is, amelyet a használatával req.body.dev_eui.toLowerCase()érhet el. További információ: The Things Network – Data Formats.

Korlátozások

Az eszközhíd csak az IoT Centralnak továbbítja az üzeneteket, és nem küld vissza üzeneteket az eszközöknek. Ennek a korlátozásnak az az oka, hogy a tulajdonságok és parancsok nem működnek az IoT Centralhoz ezen az eszközhídon keresztül csatlakozó eszközökön. Mivel az ikereszköz-műveletek nem támogatottak, az eszköztulajdonságok nem frissíthetők az eszközhídon keresztül. A funkciók használatához az eszköznek közvetlenül az IoT Centralhoz kell csatlakoznia az Azure IoT-eszköz SDK-k egyikével.

Következő lépések

Most, hogy megismerte az IoT Central eszközhíd üzembe helyezését, a következő javasolt lépés: