Připojení dalších cloudů IoT ke službě IoT Central pomocí mostu zařízení IoT Central

Most zařízení IoT Central je opensourcové řešení, které spojuje další cloudy IoT, jako je Sigfox, Particle Device Cloud a The Things Network , s vaší aplikací IoT Central. Most zařízení funguje předáváním dat ze zařízení připojených k jiným cloudům IoT do aplikace IoT Central. Zařízení přemístit jenom data do IoT Central, neodesílá příkazy ani aktualizace vlastností ze služby IoT Central zpět do zařízení.

Most zařízení umožňuje kombinovat výkon IoT Central se zařízeními, jako jsou:

  • Zařízení pro sledování prostředků připojená k síti s nízkou spotřebou energie v síti Sigfox.
  • Zařízení pro monitorování kvality ovzduší v cloudu částic.
  • Zařízení pro monitorování vlhkosti půdy v síti Věcí.

Můžete použít funkce aplikací IoT Central, jako jsou pravidla a analýzy dat, vytváření pracovních postupů v Power Automate a aplikacích logiky Azure nebo export dat.

Řešení mostu zařízení zřídí několik prostředků Azure do vašeho předplatného Azure, které společně transformují a přeposílají zprávy zařízení do IoT Central.

Předpoklady

K dokončení kroků v tomto průvodci postupy potřebujete:

Přehled

Most zařízení IoT Central je opensourcové řešení na GitHubu. Používá vlastní šablonu Azure Resource Manageru k nasazení několika prostředků do předplatného Azure, včetně aplikace funkcí ve službě Azure Functions.

Aplikace funkcí je základní částí mostu zařízení. Přijímá požadavky HTTP POST z jiných platforem IoT prostřednictvím jednoduchého webhooku. Úložiště mostu zařízení Azure IoT Central obsahuje příklady, které ukazují, jak připojit cloudy Sigfox, Částice a The Things Network. Toto řešení můžete rozšířit tak, aby se připojilo k vašemu vlastnímu cloudu IoT, pokud vaše platforma může odesílat požadavky HTTP POST do vaší aplikace funkcí.

Aplikace funkcí transformuje data do formátu přijatého službou IoT Central a předává je pomocí služby zřizování zařízení a klientských rozhraní API zařízení:

Screenshot of an Azure Functions definition showing the code.

Pokud vaše aplikace IoT Central rozpozná ID zařízení v přeposlané zprávě, telemetrie ze zařízení se zobrazí v IoT Central. Pokud vaše aplikace IoT Central nerozpozná ID zařízení, aplikace funkcí se pokusí zaregistrovat nové zařízení s ID zařízení. Nové zařízení se zobrazí jako nepřiřazené zařízení na stránce Zařízení v aplikaci IoT Central. Na stránce Zařízení můžete přiřadit nové zařízení k šabloně zařízení a pak zobrazit telemetrii.

Nasazení mostu zařízení

Nasazení mostu zařízení do předplatného:

  1. V aplikaci IoT Central přejděte na stránku Skupiny připojení zařízení oprávnění>.

    1. Poznamenejte si obor ID. Tuto hodnotu použijete při nasazení mostu zařízení.

    2. Na stejné stránce otevřete skupinu registrací SAS-IoT-Devices . Na stránce skupiny SAS-IoT-Devices zkopírujte primární klíč. Tuto hodnotu použijete při nasazení mostu zařízení.

  2. Pomocí následujícího tlačítka Nasadit do Azure otevřete vlastní šablonu Resource Manageru, která nasadí aplikaci funkcí do vašeho předplatného. Použijte obor ID a primární klíč z předchozího kroku:

    Deploy to Azure Button

Po dokončení nasazení je potřeba nainstalovat balíčky npm, které funkce vyžaduje:

  1. Na webu Azure Portal otevřete aplikaci funkcí nasazenou do vašeho předplatného. Pak přejděte do konzoly vývojových nástrojů>. V konzole nainstalujte balíčky spuštěním následujících příkazů:

    cd IoTCIntegration
    npm install
    

    Spuštění těchto příkazů může trvat několik minut. Můžete bezpečně ignorovat všechny zprávy upozornění.

  2. Po dokončení instalace balíčku vyberte na stránce Přehled aplikace funkcí možnost Restartovat:

    Screenshot that shows the restart option in Azure Functions.

  3. Funkce je teď připravená k použití. Externí systémy můžou pomocí požadavků HTTP POST odesílat data zařízení prostřednictvím mostu zařízení do aplikace IoT Central. Adresu URL funkce získáte tak, že přejdete na adresu URL funkce Functions > IoTCIntegration > + Test > Get:

    Screenshot that shows the get function URL in Azure Functions.

Těla zpráv odesílaných do mostu zařízení musí mít následující formát:

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

Každý klíč v objektu measurements musí odpovídat názvu typu telemetrie v šabloně zařízení v aplikaci IoT Central. Toto řešení nepodporuje zadání ID rozhraní v textu zprávy. Pokud tedy dvě různá rozhraní mají typ telemetrie se stejným názvem, měření se zobrazí v obou datových proudech telemetrie ve vaší aplikaci IoT Central.

Do textu můžete zahrnout timestamp pole, které určuje datum a čas UTC zprávy. Toto pole musí být ve formátu ISO 8601. Například, 2020-06-08T20:16:54.602Z. Pokud nezadáte časové razítko, použije se aktuální datum a čas.

Do textu můžete zahrnout modelId pole. Pomocí tohoto pole přiřaďte zařízení k šabloně zařízení během zřizování.

Musí deviceId být alfanumerické, malé a může obsahovat pomlčky.

Pokud toto pole nezadáte modelId nebo IoT Central nerozpozná ID modelu, vytvoří zpráva s nerozpoznaným deviceId nerozpoznaným zařízením v IoT Central nové nepřiřazené zařízení . Operátor může zařízení ručně migrovat do správné šablony zařízení. Další informace najdete v tématu Správa zařízení v aplikaci > Azure IoT Central Migrace zařízení do šablony.

Poznámka:

Dokud nebude zařízení přiřazené k šabloně, vrátí všechna volání HTTP funkci stav chyby 403.

Pokud chcete zapnout protokolování aplikace funkcí pomocí aplikace Přehledy, přejděte v aplikaci funkcí na webu Azure Portal do protokolů monitorování>. Vyberte Zapnout Application Insights.

Zřízené prostředky

Šablona Resource Manageru zřídí následující prostředky ve vašem předplatném Azure:

  • Aplikace funkcí
  • Plán služby App Service
  • Storage account
  • Trezor klíčů

Trezor klíčů ukládá klíč skupiny SAS pro vaši aplikaci IoT Central.

Aplikace funkcí běží v plánu Consumption. I když tato možnost nenabízí vyhrazené výpočetní prostředky, umožňuje mostu zařízení zpracovávat stovky zpráv zařízení za minutu, což je vhodné pro menší flotily zařízení nebo zařízení, která odesílají zprávy méně často. Pokud vaše aplikace závisí na streamování velkého počtu zpráv zařízení, nahraďte plán Consumption vyhrazeným plánem služby App Service. Tento plán nabízí vyhrazené výpočetní prostředky, které poskytují rychlejší dobu odezvy serveru. Při použití standardního plánu služby App Service byl maximální pozorovaný výkon funkce z Azure v tomto úložišti přibližně 1 500 zpráv zařízení za minutu. Další informace najdete v tématu Možnosti hostování azure Functions.

Pokud chcete místo plánu Consumption použít vyhrazený plán služby App Service, před nasazením upravte vlastní šablonu. Vyberte Upravit šablonu.

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

Nahraďte následující segment:

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

with

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

Dále upravte šablonu tak, aby zahrnovala "alwaysOn": true konfiguraci prostředku functionapp v konfiguraci "properties": {"SiteConfig": {...}} AlwaysOn, zajišťuje, že aplikace funkcí bude vždy spuštěná.

Příklady

Následující příklady popisují, jak nakonfigurovat most zařízení pro různé cloudy IoT:

Příklad 1: Připojení zařízení částic prostřednictvím mostu zařízení

Pokud chcete připojit zařízení částic přes most zařízení k IoT Central, přejděte do konzoly částic a vytvořte novou integraci webhooku. Nastavte formát požadavku na JSON. V části Upřesnit Nastavení použijte následující vlastní základní formát:

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

Vložte adresu URL funkce z aplikace funkcí a v IoT Central se zobrazí zařízení s částicemi jako nepřiřazená zařízení. Další informace najdete v tomto článku, jak integrovat projekty založené na částicách s blogovým příspěvkem Azure IoT Central .

Příklad 2: Připojení zařízení Sigfox prostřednictvím mostu zařízení

Některé platformy nemusí umožnit zadat formát zpráv zařízení odesílaných prostřednictvím webhooku. U takových systémů je nutné před tím, než most zařízení zpracuje datovou část zprávy, převést na očekávaný základní formát. Převod můžete provést ve stejné funkci, na které běží most zařízení.

Tato část ukazuje, jak převést datovou část integrace webhooku Sigfox do základního formátu očekávaného mostem zařízení. Cloud Sigfox přenáší data zařízení v šestnáctkovém řetězcovém formátu. Pro pohodlí zahrnuje most zařízení funkci převodu pro tento formát, která přijímá podmnožinu možných typů polí v datové části zařízení Sigfox: int a uint 8, 16, 32 nebo 64 bitů; float z 32 bitů nebo 64 bitů; little-endian a big-endian. Pokud chcete zpracovávat zprávy z integrace webhooku Sigfox, proveďte v aplikaci funkcí následující změny souboru IoTCIntegration/index.js .

Pokud chcete převést datovou část zprávy, před volání na handleMessage řádek 21 přidejte následující kód a nahraďte payloadDefinition definicí datové části Sigfox:

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

Zařízení Sigfox očekávají 204 kód odpovědi. Za volání na handleMessage řádek 21 přidejte následující kód:

context.res = {
    status: 204
};

Příklad 3: Připojení zařízení ze sítě Věcí prostřednictvím mostu zařízení

Připojení síťových zařízení Věcí ke službě IoT Central:

  • Přidejte do své aplikace novou integraci HTTP v síti Věcí: Integrace > aplikací > přidávají integraci > HTTP Integration.
  • Ujistěte se, že vaše aplikace obsahuje funkci dekodéru, která před odesláním do funkce automaticky převede datovou část zpráv zařízení na JSON: Dekodér funkcí > datové části aplikace>.

Následující ukázka ukazuje funkci dekodéru JavaScriptu, kterou můžete použít k dekódování běžných číselných typů z binárních dat:

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

Po definování integrace přidejte následující kód před volání na handleMessage řádek 21 souboru IoTCIntegration/index.js vaší aplikace funkcí. Tento kód přeloží text integrace HTTP do očekávaného formátu.

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

Poznámka:

Předchozí fragment kódu používá ID zařízení vhodné pro člověka. Zpráva Sítě věcí obsahuje také technické ID, ke kterému můžete přistupovat pomocí req.body.dev_eui.toLowerCase(). Další informace najdete v tématu Věci – formáty dat.

Omezení

Zařízení přemísílá zprávy jenom do IoT Central a neodesílá zprávy zpět do zařízení. Toto omezení je důvod, proč vlastnosti a příkazy nefungují pro zařízení, která se připojují k IoT Central prostřednictvím tohoto mostu zařízení. Protože operace dvojčete zařízení nejsou podporované, není možné aktualizovat vlastnosti zařízení prostřednictvím mostu zařízení. Aby bylo možné tyto funkce používat, musí se zařízení připojit přímo ke službě IoT Central pomocí jedné ze sad SDK zařízení Azure IoT.

Další kroky

Teď, když jste se dozvěděli, jak nasadit most zařízení IoT Central, tady je navrhovaný další krok: