إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
جسر جهاز IoT Central هو حل مفتوح المصدر يربط سحابات IoT الأخرى مثل Sigfox و Particle Device Cloud و The Things Network بتطبيق IoT Central الخاص بك. يعمل جسر الجهاز عن طريق إعادة توجيه البيانات من الأجهزة المتصلة بسحابات IoT الأخرى إلى تطبيق IoT Central الخاص بك. يقوم جسر الجهاز بإعادة توجيه البيانات إلى IoT Central فقط، ولا يرسل الأوامر أو تحديثات الخصائص من IoT Central مرة أخرى إلى الأجهزة.
يتيح لك جسر الجهاز دمج قوة IoT Central مع أجهزة مثل:
- أجهزة تتبع الأصول متصلة بشبكة Sigfox منخفضة الطاقة واسعة النطاق.
- أجهزة مراقبة جودة الهواء على سحابة جهاز الجسيمات.
- أجهزة مراقبة رطوبة التربة على شبكة الأشياء.
يمكنك استخدام ميزات تطبيق IoT Central مثل القواعد والتحليلات على البيانات، أو إنشاء مهام سير عمل في تطبيقات Power Automate وAzure Logic، أو تصدير البيانات.
يوفر حل جسر الجهاز العديد من موارد Azure في اشتراك Azure الخاص بك والتي تعمل معا لتحويل رسائل الجهاز وإعادة توجيهها إلى IoT Central.
المتطلبات الأساسية
لإكمال الخطوات الواردة في هذا الدليل الإرشادي، تحتاج إلى:
اشتراك Azure نشط. في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.
تطبيق IoT Central تم إنشاؤه من قالب التطبيق المخصص . لمعرفة المزيد، راجع إنشاء تطبيق IoT Centralوكيف يمكنني الحصول على معلومات حول التطبيق الخاص بي؟.
Overview
جسر جهاز IoT Central هو حل مفتوح المصدر في GitHub. يستخدم قالب Azure Resource Manager مخصصا لنشر العديد من الموارد إلى اشتراك Azure الخاص بك، بما في ذلك تطبيق الوظائف في Azure Functions.
تطبيق الوظائف هو الجزء الأساسي من جسر الجهاز. يتلقى طلبات HTTP POST من منصات إنترنت الأشياء الأخرى من خلال خطاف ويب بسيط. يتضمن مستودع Azure IoT Central Device Bridge أمثلة توضح كيفية توصيل سحابات Sigfox وParticle وThe Things Network. يمكنك توسيع هذا الحل للاتصال بسحابة IoT المخصصة إذا كان النظام الأساسي الخاص بك يمكنه إرسال طلبات HTTP POST إلى تطبيق الوظائف الخاص بك.
يقوم تطبيق الوظائف بتحويل البيانات إلى تنسيق مقبول بواسطة IoT Central وإعادة توجيهها باستخدام خدمة توفير الجهاز وواجهات برمجة تطبيقات عميل الجهاز:
إذا كان تطبيق IoT Central يتعرف على معرف الجهاز في الرسالة المعاد توجيهها، فستظهر بيانات تتبع الاستخدام من الجهاز في IoT Central. إذا لم يتعرف تطبيق IoT Central على معرف الجهاز، يحاول تطبيق الوظائف تسجيل جهاز جديد باستخدام معرف الجهاز. يظهر الجهاز الجديد كجهاز غير معين في صفحة الأجهزة في تطبيق IoT Central الخاص بك. من صفحة الأجهزة ، يمكنك تعيين الجهاز الجديد إلى قالب جهاز ثم عرض بيانات تتبع الاستخدام.
نشر جسر الجهاز
لنشر جسر الجهاز إلى اشتراكك:
في تطبيق IoT Central، انتقل إلى صفحة مجموعات اتصال جهاز الأذونات>.
قم بتدوين نطاق المعرف. يمكنك استخدام هذه القيمة عند نشر جسر الجهاز.
في الصفحة نفسها، افتح مجموعة تسجيل أجهزة SAS-IoT-Devices . في صفحة مجموعة أجهزة SAS-IoT ، انسخ المفتاح الأساسي. يمكنك استخدام هذه القيمة عند نشر جسر الجهاز.
استخدم الزر Deploy to Azure التالي لفتح قالب Resource Manager المخصص الذي ينشر تطبيق الوظائف إلى اشتراكك. استخدم نطاق المعرفوالمفتاح الأساسي من الخطوة السابقة:
بعد اكتمال النشر، تحتاج إلى تثبيت حزم npm التي تتطلبها الوظيفة:
في مدخل Microsoft Azure، افتح تطبيق الوظائف الذي تم نشره في اشتراكك. ثم انتقل إلىوحدة تحكم> التطوير. في وحدة التحكم، قم بتشغيل الأوامر التالية لتثبيت الحزم:
cd IoTCIntegration npm installقد يستغرق تشغيل هذه الأوامر عدة دقائق. يمكنك تجاهل أي رسائل تحذير بأمان.
بعد انتهاء تثبيت الحزمة، حدد إعادة التشغيل في صفحة نظرة عامة لتطبيق الوظائف:
الوظيفة جاهزة الآن للاستخدام. يمكن للأنظمة الخارجية استخدام طلبات HTTP POST لإرسال بيانات الجهاز عبر جسر الجهاز إلى تطبيق IoT Central الخاص بك. للحصول على عنوان URL للدالة ، انتقل إلى Functions > IoTCntegration > Code + Test > Get عنوان URL للوظيفة:
يجب أن تحتوي نصوص الرسائل المرسلة إلى جسر الجهاز على التنسيق التالي:
"device": {
"deviceId": "my-cloud-device"
},
"measurements": {
"temp": 20.31,
"pressure": 50,
"humidity": 8.5,
"ledColor": "blue"
}
يجب أن يتطابق كل مفتاح في الكائن measurements مع اسم نوع بيانات تتبع الاستخدام في قالب الجهاز في تطبيق IoT Central. لا يدعم هذا الحل تحديد معرف الواجهة في نص الرسالة. لذلك إذا كان لواجهتين مختلفتين نوع بيانات تتبع الاستخدام بنفس الاسم، يظهر القياس في كلا دفقي القياس عن بعد في تطبيق IoT Central الخاص بك.
يمكنك تضمين حقل timestamp في النص الأساسي لتحديد تاريخ ووقت UTC للرسالة. يجب أن يكون هذا الحقل بتنسيق ISO 8601. على سبيل المثال، 2020-06-08T20:16:54.602Z. إذا لم تقم بتضمين طابع زمني، استخدام التاريخ والوقت الحاليين.
يمكنك تضمين حقل modelId في الجسم. استخدم هذا الحقل لتعيين الجهاز إلى قالب جهاز أثناء التوفير.
يجب أن تكون أبجدية deviceId رقمية وصغيرة ويمكن أن تحتوي على واصلات.
إذا لم تقم بتضمين modelId الحقل، أو إذا لم يتعرف IoT Central على معرف الطراز، فإن رسالة تحتوي على غير معروف deviceId تنشئ جهازا جديدا غير معين في IoT Central. يمكن للمشغل ترحيل الجهاز يدويا إلى قالب الجهاز الصحيح. لمعرفة المزيد، راجع إدارة الأجهزة في تطبيق > Azure IoT Central ترحيل الأجهزة إلى قالب.
إشعار
حتى يتم تعيين الجهاز إلى قالب، ترجع جميع استدعاءات HTTP إلى الوظيفة حالة خطأ 403.
لتشغيل التسجيل لتطبيق الوظائف باستخدام Application Insights، انتقل إلى سجلات المراقبة > في تطبيق الوظائف في مدخل Microsoft Azure. حدد تشغيل Application Insights.
الموارد المتوفرة
يوفر قالب Resource Manager الموارد التالية في اشتراك Azure:
- تطبيق الوظائف
- خطة خدمة التطبيقات
- حساب التخزين
- Key Vault
يخزن مخزن المفاتيح مفتاح مجموعة SAS لتطبيق IoT Central الخاص بك.
يعمل تطبيق الوظائف على خطة استهلاك. على الرغم من أن هذا الخيار لا يوفر موارد حوسبة مخصصة، إلا أنه يمكن جسر الجهاز من التعامل مع مئات رسائل الجهاز في الدقيقة، وهو مناسب للأساطيل الأصغر من الأجهزة أو الأجهزة التي ترسل الرسائل بشكل أقل. إذا كان تطبيقك يعتمد على دفق عدد كبير من رسائل الجهاز، فاستبدل خطة الاستهلاك بخطة خدمة تطبيقات مخصصة. توفر هذه الخطة موارد حوسبة مخصصة ، والتي توفر أوقات استجابة أسرع للخادم. باستخدام خطة App Service القياسية، كان الحد الأقصى للأداء المرصود للوظيفة من Azure في هذا المستودع حوالي 1,500 رسالة جهاز في الدقيقة. لمعرفة المزيد، راجع خيارات استضافة Azure Functions.
لاستخدام خطة App Service مخصصة بدلا من خطة استهلاك، قم بتحرير القالب المخصص قبل النشر. حدد تحرير القالب.
يستعاض عن الجزء التالي:
{
"type": "Microsoft.Web/serverfarms",
"apiVersion": "2015-04-01",
"name": "[variables('planName')]",
"location": "[resourceGroup().location]",
"properties": {
"name": "[variables('planName')]",
"computeMode": "Dynamic",
"sku": "Dynamic"
}
},
مع:
{
"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')]"
}
},
بعد ذلك، قم بتحرير القالب لتضمينه "alwaysOn": true في تكوين المورد functionapp ضمن "properties": {"SiteConfig": {...}}التكوين alwaysOn يضمن تشغيل تطبيق الوظائف دائما.
الأمثلة
توضح الأمثلة التالية كيفية تكوين جسر الجهاز لسحب IoT المختلفة:
مثال 1: توصيل أجهزة الجسيمات من خلال جسر الجهاز
لتوصيل جهاز جسيمات من خلال جسر الجهاز ب IoT Central، انتقل إلى وحدة تحكم الجسيمات وقم بإنشاء تكامل جديد لخطاف الويب. اضبط تنسيق الطلب على JSON. ضمن الإعدادات المتقدمة، استخدم تنسيق النص الأساسي المخصص التالي:
{
"device": {
"deviceId": "{{{PARTICLE_DEVICE_ID}}}"
},
"measurements": {
"{{{PARTICLE_EVENT_NAME}}}": "{{{PARTICLE_EVENT_VALUE}}}"
}
}
الصق عنوان URL للوظيفة من تطبيق الوظائف، وسترى أجهزة الجسيمات تظهر كأجهزة غير معينة في IoT Central. لمعرفة المزيد، راجع إليك كيفية دمج مشاريعك المدعومة بالجسيمات مع منشور مدونة Azure IoT Central .
مثال 2: توصيل أجهزة Sigfox من خلال جسر الجهاز
قد لا تسمح لك بعض الأنظمة الأساسية بتحديد تنسيق رسائل الجهاز المرسلة من خلال خطاف ويب. بالنسبة لمثل هذه الأنظمة، يجب تحويل حمولة الرسالة إلى تنسيق النص المتوقع قبل معالجتها بواسطة جسر الجهاز. يمكنك إجراء التحويل في نفس الوظيفة التي تقوم بتشغيل جسر الجهاز.
يوضح هذا القسم كيفية تحويل حمولة تكامل خطاف الويب Sigfox إلى تنسيق النص الأساسي المتوقع من قبل جسر الجهاز. تنقل سحابة Sigfox بيانات الجهاز بتنسيق سلسلة سداسي عشري. للراحة ، يشتمل جسر الجهاز على وظيفة تحويل لهذا التنسيق ، والتي تقبل مجموعة فرعية من أنواع الحقول المحتملة في حمولة جهاز Sigfox: int و uint 8 أو 16 أو 32 أو 64 بت ؛ float من 32 بت أو 64 بت ؛ endian الصغير وendian الكبير. لمعالجة الرسائل من تكامل خطاف ويب Sigfox، قم بإجراء التغييرات التالية على ملف IoTCIntegration/index.js في تطبيق الوظائف.
لتحويل حمولة الرسالة، أضف الرمز التالي قبل المكالمة إلى handleMessage السطر 21، واستبدل payloadDefinition بتعريف حمولة 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)
};
تتوقع أجهزة Sigfox رمز استجابة 204 . أضف الرمز التالي بعد المكالمة إلى handleMessage السطر 21:
context.res = {
status: 204
};
مثال 3: توصيل الأجهزة من شبكة الأشياء عبر جسر الجهاز
لتوصيل أجهزة شبكة الأشياء ب IoT Central:
- أضف تكامل HTTP جديدا إلى تطبيقك في The Things Network: > تضيف عمليات تكامل > التطبيقات تكامل > HTTP.
- تأكد من أن تطبيقك يتضمن وظيفة فك التشفير التي تقوم تلقائيا بتحويل حمولة رسائل جهازك إلى JSON قبل إرسالها إلى الوظيفة: وحدة فك ترميز وظائف > حمولة التطبيق>.
يوضح النموذج التالي دالة فك ترميز JavaScript التي يمكنك استخدامها لفك تشفير الأنواع الرقمية الشائعة من البيانات الثنائية:
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)
};
}
بعد تحديد التكامل، أضف التعليمات البرمجية التالية قبل الاستدعاء في handleMessage السطر 21 من ملف IoTCIntegration/index.js لتطبيق الدالة. تترجم هذه التعليمات البرمجية نص تكامل HTTP إلى التنسيق المتوقع.
req.body = {
device: {
deviceId: req.body.end_device_ids.device_id.toLowerCase()
},
measurements: req.body.uplink_message.decoded_payload
};
إشعار
يستخدم المقتطف السابق رقم تعريف الجهاز المتوافق مع الإنسان. تتضمن رسالة شبكة الأشياء أيضا معرفا تقنيا يمكنك الوصول إليه باستخدام req.body.dev_eui.toLowerCase(). لمعرفة المزيد، راجع شبكة الأشياء - تنسيقات البيانات.
Limitations
يقوم جسر الجهاز بإعادة توجيه الرسائل إلى IoT Central فقط، ولا يرسل الرسائل مرة أخرى إلى الأجهزة. هذا القيد هو سبب عدم عمل الخصائص والأوامر للأجهزة التي تتصل ب IoT Central من خلال جسر الجهاز هذا. نظرا لعدم دعم عمليات الجهاز المزدوجة، لا يمكن تحديث خصائص الجهاز من خلال جسر الجهاز. لاستخدام هذه الميزات، يجب أن يتصل الجهاز مباشرة ب IoT Central باستخدام إحدى حزم SDK لجهاز Azure IoT.