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:
Etkin bir Azure aboneliği. Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Özel uygulama şablonundan oluşturulan bir IoT Central uygulaması . Daha fazla bilgi edinmek için bkz . IoT Central uygulaması oluşturma ve Uygulamanız hakkında.
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:
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:
IoT Central uygulamanızda İzinler > Cihaz bağlantı grupları sayfasına gidin.
Kimlik Kapsamını not edin. Cihaz köprüsünü dağıtırken bu değeri kullanırsınız.
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.
İş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:
Dağıtım tamamlandıktan sonra işlevin gerektirdiği npm paketlerini yüklemeniz gerekir:
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.
Paket yüklemesi tamamlandıktan sonra işlev uygulamasının Genel Bakış sayfasında Yeniden Başlat'ı seçin:
İş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:
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.
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: