Aracılığıyla paylaş


IoT Central cihaz köprüsünü kullanarak diğer IoT bulutlarını IoT Central'a bağlama

IoT Central cihaz köprüsü , Sigfox, Parçacık Cihaz Bulutu ve Things Network gibi diğer IoT bulutlarını IoT Central uygulamanıza bağlayan açık kaynaklı bir çözümdür. Cihaz köprüsü, diğer IoT bulutlarına bağlı cihazlardan IoT Central uygulamanıza veri ileterek çalışır. Cihaz köprüsü verileri yalnızca IoT Central'a iletir, IoT Central'dan cihazlara komut veya özellik güncelleştirmeleri göndermez.

Cihaz köprüsü, IoT Central'ın gücünü aşağıdaki gibi cihazlarla birleştirmenizi sağlar:

  • Sigfox'un düşük güçte geniş alan ağına bağlı varlık izleme cihazları.
  • Parçacık Cihazı Bulutu'nda hava kalitesi izleme cihazları.
  • The Things Network'te toprak nemi izleme cihazları.

Veriler üzerinde kurallar ve analizler gibi IoT Central uygulama özelliklerini kullanabilir, Power Automate ve Azure Logic uygulamalarında iş akışları oluşturabilir veya verileri dışarı aktarabilirsiniz.

Cihaz köprüsü çözümü, cihaz iletilerini IoT Central'a dönüştürmek ve iletmek için birlikte çalışan Azure aboneliğinize birkaç Azure kaynağı sağlar.

Önkoşullar

Bu nasıl yapılır kılavuzundaki adımları tamamlamak için şunları yapmanız gerekir:

Genel Bakış

IoT Central cihaz köprüsü, GitHub'da açık kaynaklı bir çözümdür. Azure İşlevleri'ndeki bir işlev uygulaması da dahil olmak üzere Azure aboneliğinize çeşitli kaynaklar dağıtmak için özel bir Azure Resource Manager şablonu kullanır.

İşlev uygulaması, cihaz köprüsünün temel parçasıdır. Basit bir web kancası aracılığıyla diğer IoT platformlarından HTTP POST istekleri alır. Azure IoT Central Cihaz Köprüsü deposu, Sigfox, Parçacık ve Nesnelerin Ağı bulutlarını bağlamayı gösteren örnekler içerir. Platformunuz işlev uygulamanıza HTTP POST istekleri gönderebiliyorsa, özel IoT bulutunuza bağlanmak için bu çözümü genişletebilirsiniz.

İşlev uygulaması, verileri IoT Central tarafından kabul edilen bir biçime dönüştürür ve cihaz sağlama hizmeti ile cihaz istemci API'lerini kullanarak iletir:

Kodu gösteren Azure İşlevleri tanımının ekran görüntüsü.

IoT Central uygulamanız iletilen iletideki cihaz kimliğini tanırsa, cihazdan alınan telemetri IoT Central'da görünür. IoT Central uygulamanız cihaz kimliğini tanımıyorsa işlev uygulaması cihaz kimliğine yeni bir cihaz kaydetmeyi dener. Yeni cihaz, IoT Central uygulamanızın Cihazlar sayfasında Atanmamış cihaz olarak görünür. Cihazlar sayfasında yeni cihazı bir cihaz şablonuna atayabilir ve ardından telemetriyi görüntüleyebilirsiniz.

Cihaz köprüsünü kur

Cihaz köprüsünü aboneliğinize dağıtmak için:

  1. IoT Central uygulamanızda İzinler > Cihaz bağlantı grupları sayfasına gidin.

    1. Kimlik Kapsamını not edin. Cihaz köprüsünü dağıtırken bu değeri kullanırsınız.

    2. Aynı sayfada SAS-IoT-Devices kayıt grubunu açın. SAS-IoT-Devices grup sayfasında Birincil anahtarı kopyalayın. Cihaz köprüsünü dağıtırken bu değeri kullanırsınız.

  2. İşlev uygulamasını aboneliğinize dağıtan özel Resource Manager şablonunu açmak için aşağıdaki Azure'a Dağıt düğmesini kullanın. Önceki adımda yer alan Kimlik Kapsamı ve Birincil anahtarı kullanın:

    Azure'a Dağıtma Düğmesi

Dağıtım tamamlandıktan sonra işlevin gerektirdiği npm paketlerini yüklemeniz gerekir:

  1. Azure portalında aboneliğinize dağıtılan işlev uygulamasını açın. Ardından Geliştirme Araçları>Konsolu'na gidin. Konsolda aşağıdaki komutları çalıştırarak paketleri yükleyin:

    cd IoTCIntegration
    npm install
    

    Bu komutların çalıştırılması birkaç dakika sürebilir. Uyarı iletilerini güvenle yoksayabilirsiniz.

  2. Paket yüklemesi tamamlandıktan sonra işlev uygulamasının Genel Bakış sayfasında Yeniden Başlat'ı seçin:

    Azure İşlevleri'nde yeniden başlatma seçeneğini gösteren ekran görüntüsü.

  3. İşlev artık kullanıma hazırdır. Dış sistemler, IoT Central uygulamanıza cihaz köprüsü aracılığıyla cihaz verileri göndermek için HTTP POST isteklerini kullanabilir. İşlev URL'sini almak için İşlevler > IoTCIntegration > Code + Test > İşlev URL'sini Al bölümüne gidin:

    Azure İşlevleri'nde işlev URL'sini gösteren ekran görüntüsü.

Cihaz köprüsüne gönderilen ileti gövdeleri aşağıdaki biçime sahip olmalıdır:

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

Nesnedeki measurements her anahtar, IoT Central uygulamasındaki cihaz şablonundaki bir telemetri türünün adıyla eşleşmelidir. Bu çözüm, ileti gövdesinde arabirim kimliğini belirtmeyi desteklemez. Dolayısıyla iki farklı arabirimin aynı ada sahip bir telemetri türü varsa, ölçüm IoT Central uygulamanızdaki her iki telemetri akışında da görünür.

İletinin UTC tarihini ve saatini belirtmek için gövdeye bir timestamp alan ekleyebilirsiniz. Bu alan ISO 8601 biçiminde olmalıdır. Örneğin, 2020-06-08T20:16:54.602Z. Zaman damgası eklemezseniz geçerli tarih ve saat kullanılır.

Gövdeye bir modelId alan ekleyebilirsiniz. Sağlama sırasında cihazı bir cihaz şablonuna atamak için bu alanı kullanın.

deviceId alfasayısal, küçük harfli olmalı ve kısa çizgi içermelidir.

Alanı eklemezseniz modelId veya IoT Central model kimliğini tanımıyorsa tanınmayan deviceId bir ileti IoT Central'da atanmamış yeni bir cihaz oluşturur. Operatör, cihazı el ile doğru cihaz şablonuna geçirebilir. Daha fazla bilgi edinmek için bkz. Azure IoT Central uygulamanızdaki > cihazları yönetme Cihazları şablona geçirme.

Uyarı

Cihaz bir şablona atanana kadar işleve yapılan tüm HTTP çağrıları 403 hata durumu döndürür.

Application Insights ile işlev uygulamasının günlüğünü açmak için Azure portalında işlev uygulamanızdaki İzleme > Günlükleri'ne gidin. Application Insights'ı aç'ı seçin.

Sağlanan kaynaklar

Resource Manager şablonu Azure aboneliğinizde aşağıdaki kaynakları sağlar:

  • İşlev uygulaması
  • App Service planı
  • Depolama hesabı
  • Güvenli Anahtar Havuzu

Anahtar kasası, IoT Central uygulamanız için SAS grup anahtarını depolar.

İşlev uygulaması bir tüketim planı üzerinde çalışır. Bu seçenek ayrılmış işlem kaynakları sunmasa da, cihaz köprüsünün dakika başına yüzlerce cihaz iletisini işlemesini sağlar ve daha az sıklıkla ileti gönderen daha küçük cihaz veya cihaz filoları için uygundur. Uygulamanız çok sayıda cihaz iletisi akışına bağımlıysa tüketim planını ayrılmış bir App service planıyla değiştirin. Bu plan, sunucu yanıt sürelerini hızlandıran ayrılmış işlem kaynakları sunar. Standart bir Uygulama Hizmeti Planı ile bu depodaki Azure'dan gelen işlevin gözlemlenen performansı dakikada yaklaşık 1.500 cihaz mesajıydı. Daha fazla bilgi edinmek için bkz. Azure İşlevleri barındırma seçenekleri.

Tüketim planı yerine ayrılmış bir App Service planı kullanmak için dağıtmadan önce özel şablonu düzenleyin. Şablonu düzenle'yi seçin.

Azure Resource Manager şablonu için şablonu düzenle seçeneğini gösteren ekran görüntüsü.

Aşağıdaki kesimi değiştirin:

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

İle:

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

Ardından, "alwaysOn": true altında functionapp kaynağının yapılandırmasına "properties": {"SiteConfig": {...}} dahil etmek için şablonu düzenleyin. alwaysOn yapılandırması işlev uygulamasının her zaman çalışmasını sağlar.

Örnekler

Aşağıdaki örneklerde çeşitli IoT bulutları için cihaz köprüsünün nasıl yapılandırılacağını gösterilmektedir:

Örnek 1: Parçacık cihazlarını cihaz köprüsü üzerinden bağlama

IoT Central'a Cihaz köprüsü üzerinden Particle cihazı bağlamak için Particle konsoluna gidin ve yeni bir webhook tümleştirmesi oluşturun. İstek Biçimi'niJSON olarak ayarlayın. Gelişmiş Ayarlar'ın altında aşağıdaki özel gövde biçimini kullanın:

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

İşlev uygulamanızdan işlev URL'sini yapıştırdığınızda Parçacık cihazlarının IoT Central'da atanmamış cihazlar olarak göründüğünü görürsünüz. Daha fazla bilgi edinmek için Parçacık destekli projelerinizi Azure IoT Central ile şu şekilde tümleştirebilirsiniz blog gönderisine bakın.

Örnek 2: Sigfox cihazlarını cihaz köprüsü üzerinden bağlama

Bazı platformlar, web kancası aracılığıyla gönderilen cihaz iletilerinin biçimini belirtmenize izin vermeyebilir. Bu tür sistemler için, cihaz köprüsü işlemeden önce ileti yükünü beklenen gövde biçimine dönüştürmeniz gerekir. Dönüştürmeyi, cihaz köprüsünü çalıştıran aynı işlevde yapabilirsiniz.

Bu bölümde, Sigfox webhook tümleştirmesinin yükünün cihaz köprüsünün beklediği gövde biçimine nasıl dönüştürüleceği açıklanmaktadır. Sigfox bulutu, cihaz verilerini onaltılık dize biçiminde iletir. Kolaylık olması için, cihaz ara birimi bu format için bir dönüştürme işlevi içerir ve bu işlev, Sigfox cihaz veriyükündeki olası alan türlerinin bir alt kümesini kabul eder: int ve uint 8, 16, 32 veya 64 bit; float 32 bit veya 64 bit; küçük endian ve büyük endian. Sigfox web kancası tümleştirmesinden gelen iletileri işlemek için, işlev uygulamasında IoTCIntegration/index.js dosyasında aşağıdaki değişiklikleri yapın.

İleti yükünü dönüştürmek için, handleMessage öğesini Sigfox yük tanımınızla değiştirerek payloadDefinition çağrısından önce 21. satıra aşağıdaki kodu ekleyin:

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 cihazları bir 204 yanıt kodu bekler. 21. satırdaki handleMessage çağrısından sonra aşağıdaki kodu ekleyin:

context.res = {
    status: 204
};

Örnek 3: Cihaz köprüsü aracılığıyla The Things Network'ten cihazları bağlama

Things Network cihazlarını IoT Central'a bağlamak için:

  • Things Network: Application > Integrations > HTTP Tümleştirmesi Ekle > bölümüne yeni bir HTTP tümleştirmesi uygulamanıza ekleyin.
  • Uygulamanızın, cihaz iletilerinizi şu işleve göndermeden önce otomatik olarak JSON'a dönüştüren bir kod çözücü işlevi içerdiğinden emin olun: Uygulama > Yükü İşlevleri > kod çözücüsü.

Aşağıdaki örnekte, ikili verilerden yaygın sayısal türlerin kodunu çözmek için kullanabileceğiniz bir JavaScript kod çözücü işlevi gösterilmektedir:

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

Tümleştirmeyi tanımladıktan sonra, işlev uygulamanızın handleMessage dosyasının 21. satırında, çağrısının önüne aşağıdaki kodu ekleyin. Bu kod, HTTP tümleştirmenizin gövdesini beklenen biçime çevirir.

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

Uyarı

Önceki kod parçacığı, insan dostu cihaz kimliğini kullanır. Things Network iletisi, kullanarak req.body.dev_eui.toLowerCase()erişebileceğiniz bir teknik kimlik de içerir. Daha fazla bilgi edinmek için bkz . The Things Network - Veri Biçimleri.

Sınırlamalar

Cihaz köprüsü yalnızca iletileri IoT Central'a iletir ve cihazlara ileti göndermez. Bu sınırlama, özelliklerin ve komutların bu cihaz köprüsü aracılığıyla IoT Central'a bağlanan cihazlarda çalışmama nedenidir. Cihaz ikizi işlemleri desteklenmediğinden cihaz özelliklerini cihaz köprüsü aracılığıyla güncelleştirmek mümkün değildir. Bu özellikleri kullanmak için bir cihazın Azure IoT cihaz SDK'larından birini kullanarak doğrudan IoT Central'a bağlanması gerekir.