توسيع Azure IoT Central باستخدام قواعد مخصصة باستخدام Stream Analytics ووظائف Azure وSendGrid
يوضح لك هذا الدليل الإرشادي كيفية توسيع تطبيق IoT Central باستخدام قواعد وإشعارات مخصصة. يوضح المثال إرسال إشعار إلى مشغل عندما يتوقف جهاز عن إرسال القياس عن بعد. يستخدم الحل استعلام Azure Stream Analytics للكشف عن وقت توقف الجهاز عن إرسال القياس عن بعد. تستخدم مهمة Stream Analytics وظائف Azure لإرسال رسائل إعلام بالبريد الإلكتروني باستخدام SendGrid.
يوضح لك هذا الدليل الإرشادي كيفية توسيع IoT Central إلى ما هو أبعد مما يمكنه فعله بالفعل باستخدام القواعد والإجراءات المضمنة.
في هذا الدليل الإرشادي، ستتعرف على كيفية:
- دفق القياس عن بعد من تطبيق IoT Central باستخدام تصدير البيانات المستمر.
- أنشئ طلب بحث Stream Analytics يكتشف متى توقف الجهاز عن إرسال البيانات.
- أرسل إعلاما بالبريد الإلكتروني باستخدام وظائف Azure وخدمات SendGrid.
المتطلبات الأساسية
لإكمال الخطوات الواردة في هذا الدليل الإرشادي، تحتاج إلى اشتراك Azure نشط.
إذا لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانياً قبل أن تبدأ.
تطبيق IoT Central
قم بإنشاء تطبيق IoT Central على موقع مدير تطبيقات Azure IoT Central على الويب باستخدام الإعدادات التالية:
| الإعداد | القيمة |
|---|---|
| خطة الأسعار | Standard |
| قالب التطبيق | التحليلات داخل المتجر - مراقبة الحالة |
| اسم التطبيق | قبول الإعداد الافتراضي أو اختيار اسمك الخاص |
| عنوان URL | قبول الإعداد الافتراضي أو اختيار بادئة عنوان URL الفريدة الخاصة بك |
| الدليل | مستأجر Azure Active Directory الخاص بك |
| اشتراك Azure | اشتراكك في Azure |
| المنطقة | أقرب منطقة إليك |
تستخدم الأمثلة ولقطات الشاشة في هذه المقالة منطقة الولايات المتحدة . اختر موقعا قريبا منك وتأكد من إنشاء جميع مواردك في نفس المنطقة.
يتضمن قالب التطبيق هذا جهازي ترموستات محاكيين يرسلان القياس عن بعد.
مجموعة الموارد
استخدم مدخل Azure لإنشاء مجموعة موارد تسمى DetectStoppedDevices لاحتواء الموارد الأخرى التي تقوم بإنشائها. قم بإنشاء موارد Azure الخاصة بك في نفس موقع تطبيق IoT Central الخاص بك.
مساحة اسم "مراكز الأحداث"
استخدم مدخل Azure لإنشاء مساحة اسم مراكز الأحداث باستخدام الإعدادات التالية:
| الإعداد | القيمة |
|---|---|
| الاسم | اختر اسم مساحة الاسم الخاصة بك |
| مستوى الأسعار | أساسي |
| الاشتراك | اشتراكك |
| مجموعة الموارد | DetectStoppedDevices |
| الموقع | شرق الولايات المتحدة |
| وحدات معدل النقل | 1 |
وظيفة تحليلات البث
استخدم مدخل Azure لإنشاء مهمة Stream Analytics باستخدام الإعدادات التالية:
| الإعداد | القيمة |
|---|---|
| الاسم | اختر اسم وظيفتك |
| الاشتراك | اشتراكك |
| مجموعة الموارد | DetectStoppedDevices |
| الموقع | شرق الولايات المتحدة |
| بيئة الاستضافة | السحابة |
| وحدات البث | 3 |
تطبيق الوظيفة
استخدم مدخل Azure لإنشاء تطبيق وظيفي بالإعدادات التالية:
| الإعداد | القيمة |
|---|---|
| اسم التطبيق | اختيار اسم تطبيق الوظيفة |
| الاشتراك | اشتراكك |
| مجموعة الموارد | DetectStoppedDevices |
| نظام التشغيل | Windows |
| خطة الاستضافة | خطة الاستهلاك |
| الموقع | شرق الولايات المتحدة |
| مكدس وقت التشغيل | .NET |
| التخزين | إنشاء جديد |
حساب SendGrid ومفاتيح واجهة برمجة التطبيقات
إذا لم يكن لديك حساب Sendgrid ، فقم بإنشاء حساب مجاني قبل البدء.
من لوحة معلومات Sendgrid الإعدادات في القائمة اليمنى، حدد مفاتيح واجهة برمجة التطبيقات.
انقر على إنشاء مفتاح واجهة برمجة التطبيقات.
قم بتسمية مفتاح واجهة برمجة التطبيقات الجديد AzureFunctionAccess.
انقر على إنشاء & طريقة عرض.
بعد ذلك ، سيتم إعطاؤك مفتاح API. احفظ هذه السلسلة لاستخدامها لاحقا.
إنشاء مراكز أحداث
يمكنك تكوين تطبيق IoT Central لتصدير القياس عن بعد باستمرار إلى مركز أحداث. في هذا القسم، يمكنك إنشاء مركز أحداث لتلقي القياس عن بعد من تطبيق IoT Central الخاص بك. يوفر مركز الأحداث القياس عن بعد لمهمة Stream Analytics الخاصة بك للمعالجة.
- في مدخل Azure، انتقل إلى مساحة اسم مراكز الأحداث وحدد + مركز الأحداث.
- قم بتسمية مركز الأحداث centralexport، وحدد إنشاء.
تبدو مساحة اسم مراكز الأحداث مثل لقطة الشاشة التالية:
## Define the function
This solution uses an Azure Functions app to send an email notification when the Stream Analytics job detects a stopped device. To create your function app:
1. In the Azure portal, navigate to the **App Service** instance in the **DetectStoppedDevices** resource group.
1. Select **+** to create a new function.
1. Select **HTTP Trigger**.
1. Select **Add**.
:::image type="content" source="media/howto-create-custom-rules/add-function.png" alt-text="Image of the Default HTTP trigger function":::
## Edit code for HTTP Trigger
The portal creates a default function called **HttpTrigger1**:
```:::image type="content" source="media/howto-create-custom-rules/default-function.png" alt-text="Screenshot of Edit HTTP trigger function.":::
1. Replace the C# code with the following code:
```csharp
#r "Newtonsoft.Json"
#r "SendGrid"
using System;
using SendGrid.Helpers.Mail;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
public static SendGridMessage Run(HttpRequest req, ILogger log)
{
string requestBody = new StreamReader(req.Body).ReadToEnd();
log.LogInformation(requestBody);
var notifications = JsonConvert.DeserializeObject<IList<Notification>>(requestBody);
SendGridMessage message = new SendGridMessage();
message.Subject = "Contoso device notification";
var content = "The following device(s) have stopped sending telemetry:<br/><br/><table><tr><th>Device ID</th><th>Time</th></tr>";
foreach(var notification in notifications) {
log.LogInformation($"No message received - Device: {notification.deviceid}, Time: {notification.time}");
content += $"<tr><td>{notification.deviceid}</td><td>{notification.time}</td></tr>";
}
content += "</table>";
message.AddContent("text/html", content);
return message;
}
public class Notification
{
public string deviceid { get; set; }
public string time { get; set; }
}
```
You may see an error message until you save the new code.
1. Select **Save** to save the function.
## Add SendGrid Key
To add your SendGrid API Key, you need to add it to your **Function Keys** as follows:
1. Select **Function Keys**.
1. Choose **+ New Function Key**.
1. Enter the *Name* and *Value* of the API Key you created before.
1. Click **OK.**
:::image type="content" source="media/howto-create-custom-rules/add-key.png" alt-text="Screenshot of Add Sangrid Key.":::
## Configure HttpTrigger function to use SendGrid
To send emails with SendGrid, you need to configure the bindings for your function as follows:
1. Select **Integrate**.
1. Choose **Add Output** under **HTTP ($return)**.
1. Select **Delete.**
1. Choose **+ New Output**.
1. For Binding Type, then choose **SendGrid**.
1. For SendGrid API Key Setting Type, click New.
1. Enter the *Name* and *Value* of your SendGrid API key.
1. Add the following information:
| Setting | Value |
| ------- | ----- |
| Message parameter name | Choose your name |
| To address | Choose the name of your To Address |
| From address | Choose the name of your From Address |
| Message subject | Enter your subject header |
| Message text | Enter the message from your integration |
1. Select **OK**.
:::image type="content" source="media/howto-create-custom-rules/add-output.png" alt-text="Screenshot of Add SandGrid Output.":::
### Test the function works
To test the function in the portal, first choose **Logs** at the bottom of the code editor. Then choose **Test** to the right of the code editor. Use the following JSON as the **Request body**:
```json
[{"deviceid":"test-device-1","time":"2019-05-02T14:23:39.527Z"},{"deviceid":"test-device-2","time":"2019-05-02T14:23:50.717Z"},{"deviceid":"test-device-3","time":"2019-05-02T14:24:28.919Z"}]
تظهر رسائل سجل الوظائف في لوحة السجلات :
After a few minutes, the **To** email address receives an email with the following content:
```txt
The following device(s) have stopped sending telemetry:
Device ID Time
test-device-1 2019-05-02T14:23:39.527Z
test-device-2 2019-05-02T14:23:50.717Z
test-device-3 2019-05-02T14:24:28.919Z
إضافة استعلام "إحصاءات البث"
يستخدم هذا الحل استعلام Stream Analytics للكشف عن الوقت الذي يتوقف فيه الجهاز عن إرسال القياس عن بعد لأكثر من 120 ثانية. يستخدم الاستعلام القياس عن بعد من مركز الحدث كمدخلات له. ترسل المهمة نتائج الاستعلام إلى تطبيق الوظيفة. في هذا القسم، يمكنك تكوين مهمة Stream Analytics:
في مدخل Azure، انتقل إلى مهمة Stream Analytics، ضمن طوبولوجيا الوظائف ، حدد المدخلات، واختر + إضافة إدخال البث، ثم اختر مركز الأحداث.
استخدم المعلومات الواردة في الجدول التالي لتكوين الإدخال باستخدام مركز الأحداث الذي أنشأته مسبقا، ثم اختر حفظ:
الإعداد القيمة اسم الإدخال المستعار القياس المركزي عن بعد الاشتراك اشتراكك مساحة اسم Event Hub مساحة اسم مركز الأحداث اسم Event Hub استخدام القائمة - سنترال إكسبورت ضمن طبولوجياالوظائف، حدد المخرجات، واختر + إضافة، ثم اختر دالة Azure.
استخدم المعلومات الواردة في الجدول التالي لتكوين الإخراج، ثم اختر حفظ:
الإعداد القيمة اسم مستعار للإخراج إشعار البريد الإلكتروني الاشتراك اشتراكك تطبيق الوظيفة تطبيق الوظائف الخاص بك الوظيفة HttpTrigger1 ضمن طبولوجيا الوظائف، حدد استعلام واستبدل الاستعلام الموجود SQL التالية:
with LeftSide as ( SELECT -- Get the device ID from the message metadata and create a column GetMetadataPropertyValue([centraltelemetry], '[EventHub].[IoTConnectionDeviceId]') as deviceid1, EventEnqueuedUtcTime AS time1 FROM -- Use the event enqueued time for time-based operations [centraltelemetry] TIMESTAMP BY EventEnqueuedUtcTime ), RightSide as ( SELECT -- Get the device ID from the message metadata and create a column GetMetadataPropertyValue([centraltelemetry], '[EventHub].[IoTConnectionDeviceId]') as deviceid2, EventEnqueuedUtcTime AS time2 FROM -- Use the event enqueued time for time-based operations [centraltelemetry] TIMESTAMP BY EventEnqueuedUtcTime ) SELECT LeftSide.deviceid1 as deviceid, LeftSide.time1 as time INTO [emailnotification] FROM LeftSide LEFT OUTER JOIN RightSide ON LeftSide.deviceid1=RightSide.deviceid2 AND DATEDIFF(second,LeftSide,RightSide) BETWEEN 1 AND 120 where -- Find records where a device didn't send a message 120 seconds RightSide.deviceid2 is NULLحدد حفظ.
لبدء مهمة Stream Analytics، اختر نظرة عامة، ثم ابدأ، ثم الآن، ثم ابدأ:
تكوين التصدير في IoT Central
على موقع ويب مدير تطبيقات Azure IoT Central، انتقل إلى تطبيق IoT Central الذي أنشأته.
في هذا القسم، يمكنك تكوين التطبيق لدفق القياس عن بعد من أجهزته المحاكية إلى مركز الأحداث. لتكوين التصدير:
انتقل إلى صفحة تصدير البيانات، وحدد+ جديد، ثم مراكز أحداث Azure.
استخدم الإعدادات التالية لتكوين التصدير، ثم حدد حفظ:
الإعداد القيمة اسم العرض التصدير إلى مراكز الأحداث تم التمكين تشغيل نوع البيانات التي سيتم تصديرها بيانات تتبع الاستخدام الإثراء أدخل المفتاح المطلوب / قيمة الطريقة التي تريد بها تنظيم البيانات المصدرة الوجهة إنشاء جديد وإدخال معلومات عن المكان الذي سيتم تصدير البيانات إليه
انتظر حتى يتم تشغيل حالة التصدير قبل المتابعة .
الاختبار
لاختبار الحل، يمكنك تعطيل تصدير البيانات المستمر من IoT Central إلى الأجهزة المتوقفة للمحاكاة:
في تطبيق IoT Central، انتقل إلى صفحة تصدير البيانات وحدد تكوين تصديرالتصدير إلى مراكز الأحداث .
اضبط ممكن على إيقاف التشغيل واختر حفظ.
بعد دقيقتين على الأقل، يتلقى عنوان البريد الإلكتروني إلى رسالة بريد إلكتروني واحدة أو أكثر تشبه محتوى المثال التالي:
The following device(s) have stopped sending telemetry: Device ID Time Thermostat-Zone1 2019-11-01T12:45:14.686Z
ترتيب
للترتيب بعد هذه الإرشادات وتجنب التكاليف غير الضرورية، احذف مجموعة موارد DetectStoppedDevices في مدخل Azure.
يمكنك حذف تطبيق IoT Central من صفحة الإدارة داخل التطبيق.
الخطوات التالية
في هذا الدليل الإرشادي، تعلمت كيفية:
- دفق القياس عن بعد من تطبيق IoT Central باستخدام تصدير البيانات المستمر.
- أنشئ طلب بحث Stream Analytics يكتشف متى توقف الجهاز عن إرسال البيانات.
- أرسل إعلاما بالبريد الإلكتروني باستخدام وظائف Azure وخدمات SendGrid.
الآن بعد أن تعرفت على كيفية إنشاء قواعد وإعلامات مخصصة، فإن الخطوة التالية المقترحة هي معرفة كيفية توسيع Azure IoT Central باستخدام التحليلات المخصصة.