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.

Ön koş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'deki 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:

Screenshot of an Azure Functions definition showing the code.

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ü dağıtma

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:

    Deploy to Azure Button

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:

    Screenshot that shows the restart option in Azure Functions.

  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 > Get işlevi URL'sine gidin:

    Screenshot that shows the get function URL in Azure Functions.

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.

Dekont

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

Uygulama Analizler 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ı
  • Storage account
  • Key Vault

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 App Service Planı kullanıldığında, bu depoda Azure'dan gelen işlevin gözlemlenen performansı dakikada yaklaşık 1.500 cihaz iletisiydi. 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.

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

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

örneklerini şununla değiştirin:

{
  "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 yapılandırması altındaki "properties": {"SiteConfig": {...}}kaynağın yapılandırmasına functionapp dahil "alwaysOn": true etmek için şablonu düzenleyin ve işlev uygulamasının her zaman çalıştığından emin olun.

Örnekler

Aşağıdaki örneklerde çeşitli IoT bulutları için cihaz köprüsünün nasıl yapılandırıldığından emin olmak gerekir:

Örnek 1: Parçacık cihazlarının cihaz köprüsü aracılığıyla Bağlan

Cihaz köprüsü aracılığıyla IoT Central'a parçacık cihazı bağlamak için Parçacık konsoluna gidin ve yeni bir web kancası tümleştirmesi oluşturun. İstek Biçimi'ni JSON olarak ayarlayın. Gelişmiş Ayarlar 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ü aracılığıyla Bağlan

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 web kancası tümleştirmesinin yükünün cihaz köprüsü tarafından beklenen gövde biçimine nasıl dönüştürüldüğü gösterilir. Sigfox bulutu, cihaz verilerini onaltılık dize biçiminde iletir. Kolaylık sağlamak amacıyla, cihaz köprüsü bu biçim için bir dönüştürme işlevi içerir. Bu işlev Sigfox cihaz yü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; little-endian ve big-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, 21. satırdaki çağrısından handleMessage önce öğesini Sigfox yük tanımınızla değiştirerek payloadDefinition 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 çağrısından handleMessage 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ğlan

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

  • Things Network: Application Integrations > add integration HTTP Integration bölümünde uygulamanıza yeni bir HTTP tümleştirmesi >> ekleyin.
  • Uygulamanızın, cihaz iletilerinizin yükünü şu işleve gönderilmeden ö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 IoTCIntegration/index.js dosyasının 21. satırına çağrısından handleMessage önce 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
};

Dekont

Ö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.

Sonraki adımlar

IoT Central cihaz köprüsünü dağıtmayı öğrendiğinize göre, önerilen sonraki adım şu şekildedir: