Sdílet prostřednictvím


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

Most pro zařízení IoT Central je open-source ř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í pouze předává data do IoT Central, neodesílá však 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 nízkoenergetické širokopásmové 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í pro propojení zařízení nastaví několik prostředků Azure ve vašem předplatném Azure, které společně transformují a přeposílají zprávy z zařízení do IoT Central.

Požadavky

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.

Funkční aplikace 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, Particle 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í:

Snímek obrazovky s definicí Azure Functions zobrazující kód

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í

Jak nasadit most zařízení do Vašeho předplatného:

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

    1. Poznamenejte si rozsah ID. Tuto hodnotu použijete při nasazení mostového 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í mostového 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:

    Tlačítko Nasadit do Azure

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 dokonzoly>. 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:

    Snímek obrazovky znázorňující možnost restartování ve službě 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. Chcete-li získat adresu URL funkce, přejděte na Functions > IoTCIntegration > Code + Test > Get function URL.

    Snímek obrazovky znázorňující adresu URL funkce Get ve službě 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í.

deviceId musí být alfanumerické, obsahovat malá písmena a pomlčky.

Pokud nezadáte pole modelId, nebo pokud IoT Central nerozpozná ID modelu, zpráva s nerozpoznaným deviceId vytvoří 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í pro aplikaci funkcí pomocí Application Insights, přejděte do Protokoly monitorování ve vaší aplikaci funkcí na webu Azure Portalu. Vyberte Aktivovat Application Insights.

Zřízené prostředky

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

  • Funkční aplikace
  • plán služby App Service
  • Účet úložiště
  • Úložiště klíčů

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

Funkční aplikace běží ve spotřebním plánu. 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. U standardního plánu služby App Service bylo 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.

Snímek obrazovky znázorňující možnost upravit šablonu pro šablonu Azure Resource Manageru

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

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

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

Examples

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

Příklad 1: Připojení částicových zařízení přes most zařízení

Pokud chcete připojit zařízení Particle prostřednictvím zařízení bridge k IoT Central, přejděte do konzoli Particle a vytvořte novou integraci webhooku. Nastavte formát požadavku na JSON. V rámci Upřesnit nastavení použijte následující vlastní formát těla:

{
  "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 poháněné platformou Particle s Azure IoT Central blogovým příspěvkem.

Příklad 2: Připojení zařízení Sigfox přes síťový most

Některé platformy nemusí umožnit určit formát zpráv zařízení odesílaných prostřednictvím webhooku. U takových systémů je nutné převést datovou část zprávy na očekávaný základní formát předtím, než ji most zařízení zpracuje. Převod můžete provést ve stejné funkci, která zajišťuje přemostění 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 usnadnění obsahuje zařízení bridge konverzní funkci pro tento formát, která přijímá podmnožinu možných typů polí v datové části zařízení Sigfox: int a uint ve velikostech 8, 16, 32 nebo 64 bitů; float ve velikostech 32 bitů nebo 64 bitů; formáty 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ím na handleMessage na řádku 21 přidejte následující kód a nahraďte payloadDefinition vaší 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. Po volání na handleMessage na řádku 21 přidejte následující kód:

context.res = {
    status: 204
};

Příklad 3: Připojení zařízení ze sítě Věcí přes most zařízení

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

  • Přidejte novou HTTP integraci do své aplikace v The Things Network: Application > Integrations > add integration > HTTP Integration.
  • Ujistěte se, že vaše aplikace obsahuje funkci dekodéru, která automaticky převádí datovou část zpráv zařízení na JSON, před odesláním do funkce: 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 na řádku 21 v souboru IoTCIntegration/index.js vaší funkční aplikace. 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 v rámci The Things Network rovněž obsahuje 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řenáší zprávy pouze do IoT Central a neodesílá zprávy zpět k zařízením. 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 digitálních dvojčat zařízení nejsou podporované, není možné aktualizovat vlastnosti zařízení prostřednictvím mostu pro 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.