اعتبارسنجی دلتا تله‌متری

مورد استفاده

فرض کنید دستگاهی داریم که از حسگر دما برای جمع‌آوری و خواندن داده‌های دما در ThingsConnect استفاده می‌کند. علاوه بر این، فرض کنید که باید هشداری ایجاد کنیم هنگامی که اختلاف بین داده‌های دمای پنج دقیقه اخیر و آخرین داده دما از 5 درجه بیشتر شود. لطفاً توجه داشته باشید که این یک مورد استفاده ساده و نظری است که تنها برای نمایش قابلیت‌های پلتفرم ارائه شده است. شما می‌توانید از این آموزش به‌عنوان پایه‌ای برای سناریوهای بسیار پیچیده‌تر استفاده کنید.

پیش‌نیازها

فرض بر این است که شما راهنماهای زیر را تکمیل کرده‌اید و مقالات فهرست‌شده را مرور کرده‌اید:

  • راهنمای شروع.
  • نمای کلی موتور قوانین.
  • راهنمای ایجاد و پاک‌سازی هشدارها.

افزودن دستگاه

برای شروع، باید یک دستگاه با نام "Thermometer" به ThingsConnect اضافه کنید. نوع این دستگاه، حسگر دما است.

image

جریان پیام

در این بخش، هدف هر گره در این آموزش توضیح داده می‌شود. دو زنجیره قوانین درگیر خواهند بود:

  • زنجیره قانون ریشه - زنجیره قانونی که تلومتری دستگاه‌ها را در پایگاه داده ذخیره کرده و پیام‌ها را به زنجیره اعتبارسنجی تغییرات دما هدایت می‌کند.
  • اعتبارسنجی تغییرات دما - زنجیره قانونی که در واقع تفاوت بین دمای پنج دقیقه گذشته و آخرین مقدار دما را محاسبه می‌کند. در نتیجه، اگر مقدار تفاوت (Delta) بیش از ۵ درجه باشد، هشدار ایجاد یا به‌روزرسانی می‌شود. در غیر این صورت، هشدار پاک خواهد شد.

تصاویر زیر نمایش‌دهنده ساختار این زنجیره‌های قوانین هستند:

  • اعتبارسنجی تغییرات دما:
image
  • زنجیره قانون اصلی
image

فایل JSON پیوست‌شده را برای زنجیره قوانین اعتبارسنجی تغییرات دما دانلود کنید.

برای ارسال داده‌های تلومتری به زنجیره قوانین واردشده، گره G را همان‌طور که در تصویر بالا نشان داده شده است، در زنجیره قوانین اصلی ایجاد کنید.

بخش زیر نحوه ایجاد این زنجیره قانون را از ابتدا به شما نشان می‌دهد.

ایجاد زنجیره قانون جدید (اعتبارسنجی تغییرات دما)

به قسمت Rule Chains رفته و گزینه Add new Rule Chain را انتخاب کنید.

تنظیمات:

  • نام: اعتبارسنجی تغییرات دما (Temperature delta validation)
image

زنجیره قانون جدید ایجاد شد. اکنون دکمه Edit را فشار دهید و زنجیره را پیکربندی کنید.

اضافه کردن گره‌های مورد نیاز

در این زنجیره قوانین، شما شش گره ایجاد خواهید کرد که در بخش‌های زیر توضیح داده می‌شوند:

گره A: تله‌متری مبدأ

  • گره تله‌متری مبدأ را اضافه کرده و آن را به گره ورودی (Input) با نوع رابطه "موفقیت" (Success) متصل کنید. این گره تله‌متری انتخاب‌شده از مبدأ پیام را به متادیتای پیام برای بازه زمانی انتخاب‌شده اضافه می‌کند.

این گره دارای سه حالت استخراج است:

  • FIRST: تله‌متری را که به ابتدای بازه زمانی نزدیک‌تر است، از پایگاه داده بازیابی می‌کند.
  • LAST: تله‌متری را که به انتهای بازه زمانی نزدیک‌تر است، از پایگاه داده بازیابی می‌کند.
  • ALL: تمام تله‌متری موجود در بازه زمانی مشخص‌شده را از پایگاه داده بازیابی می‌کند.

ما از حالت استخراج LAST استفاده خواهیم کرد، با بازه زمانی از ۲۴ ساعت پیش تا ۵ دقیقه گذشته.

در قسمت "نام"، عنوان "آخرین رکورد پنج دقیقه‌ای" را وارد کنید.

image

حالت استخراج ALL

گره تله‌متری مبدأ قابلیت استخراج تمامی تله‌متری موجود در یک بازه زمانی خاص را نیز پشتیبانی می‌کند. ما در این آموزش از این قابلیت استفاده نخواهیم کرد، اما این قابلیت ممکن است زمانی مفید باشد که نیاز به محاسبه واریانس برای یک کلید خاص یا پیش‌بینی تغییرات بیشتر تله‌متری بر اساس تغییرات تله‌متری در بازه زمانی انتخاب‌شده داشته باشید.

در این حالت، شما باید حالت استخراج ALL را انتخاب کنید. این کار باعث می‌شود گره تمام تله‌متری را از بازه زمانی مشخص‌شده بازیابی کرده و به متادیتای پیام به‌صورت یک آرایه اضافه کند. این آرایه شامل اشیای JSON با زمان‌بندی (timestamp) و مقدار (value) خواهد بود.

  • متادیتای پیام خروجی یک سند JSON با ساختار زیر خواهد بود:
				
					  {
    "temperature": "[{\"ts\":1540892498884,\"value\":22.4},{\"ts\":1540892528847,\"value\":20.45},{\"ts\":1540892558845,\"value\":22.3}]"
  }
				
			
  • برای تبدیل آرایه به سند معتبر JSON، می‌توانید از تابع زیر استفاده کنید:
				
					  var temperatureArray = JSON.parse(metadata.temperature);
				
			
  • آرایه دما به شکل زیر خواهد بود:
				
					  {
      "temperatureArray": [{
          "ts": 1540892498884,
          "value": 22.4
      }, {
          "ts": 1540892528847,
          "value": 20.45
      }, {
          "ts": 1540892558845,
          "value": 22.3
      }]
  }
				
			

گره B: تبدیل با اسکریپت

  • گره تبدیل با اسکریپت را اضافه کرده و آن را به گره تغییر مبدأ (Change Originator) با نوع رابطه "موفقیت" (Success) متصل کنید.

این گره تغییر دلتا بین خواندن دما از بار پیام و خواندن دما پنج دقیقه‌ای گذشته از متادیتای پیام را با استفاده از اسکریپت زیر محاسبه خواهد کرد:

				
					   var newMsg = {};

   newMsg.deltaTemperature = parseFloat(Math.abs(msg.temperature - JSON.parse(metadata.temperature)).toFixed(2));

   return {msg: newMsg, metadata: metadata, msgType: msgType};
				
			
  • در فیلد "نام"، عبارت "محاسبه دلتا" را وارد کنید.
image

گره C: ذخیره سری زمانی

  • گره "ذخیره سری زمانی" را اضافه کرده و آن را به گره تبدیل با اسکریپت (Script Transformation) با نوع رابطه "موفقیت" (Success) متصل کنید. این گره داده‌های سری زمانی از بار پیام ورودی را در پایگاه داده ذخیره کرده و آن را به دستگاهی که به عنوان مبدأ پیام شناسایی شده است، مرتبط می‌کند.
  • در فیلد "نام"، عبارت "ذخیره سری زمانی" را وارد کنید.
image

گره D: فیلتر اسکریپت

گره "فیلتر اسکریپت" را اضافه کرده و آن را به گره "ذخیره سری زمانی" (Save TimeSeries) با نوع رابطه "موفقیت" (Success) متصل کنید. این گره بررسی خواهد کرد که آیا مقدار دلتا محاسبه‌شده بین آخرین خواندن دما و دمای پنج دقیقه پیش از ۵ درجه تجاوز نکرده است، با استفاده از اسکریپت زیر:

				
					   return msg.deltaTemperature > 5;
				
			
  • در فیلد "نام"، عبارت "اعتبارسنجی دلتا" را وارد کنید.

image

گره E: ایجاد هشدار

  • گره "ایجاد هشدار" را اضافه کرده و آن را به گره "فیلتر اسکریپت" (Filter Script) با نوع رابطه "درست" (True) متصل کنید. این گره جدیدترین هشدار با نوع هشدار پیکربندی‌شده برای مبدأ پیام، که به نام "ترمومتر" (Thermometer) است، را بارگذاری می‌کند، در صورتی که دمای دلتا منتشرشده در دامنه مورد انتظار نباشد (گره فیلتر اسکریپت مقدار True را برمی‌گرداند).
  • در فیلد "نام"، عبارت "ایجاد هشدار" را وارد کنید و در فیلد "نوع هشدار" (Alarm type)، گزینه "هشدار عمومی" (General Alarm) را انتخاب کنید.
image

گره F: پاک‌سازی هشدار

  • گره "پاک‌سازی هشدار" را اضافه کرده و آن را به گره "فیلتر اسکریپت" (Filter Script) با نوع رابطه "ناحق" (False) متصل کنید. این گره جدیدترین هشدار با نوع هشدار پیکربندی‌شده برای مبدأ پیام، که به نام "ترمومتر" (Thermometer) است، را بارگذاری کرده و در صورتی که دمای دلتا منتشرشده در دامنه مورد انتظار باشد (گره اسکریپت مقدار False را برمی‌گرداند)، هشدار را پاک‌سازی می‌کند.
  • در فیلد "نام"، عبارت "پاک‌سازی هشدار" را وارد کنید و در فیلد "نوع هشدار" (Alarm type)، گزینه "هشدار عمومی" (General Alarm) را انتخاب کنید.
image

ویرایش زنجیره قوانین اصلی

زنجیره قوانین اصلی اولیه با افزودن گره زیر تغییر یافته است:

گره G: زنجیره قوانین

  • گره "زنجیره قوانین" را اضافه کرده و آن را به گره "ذخیره سری زمانی" (Save TimeSeries) با نوع رابطه "موفقیت" (Success) متصل کنید. این گره پیام‌های ورودی را به زنجیره قوانین مشخص‌شده برای اعتبارسنجی دلتا دما ارسال می‌کند.
  • فیلد "زنجیره قوانین" (Rule Chain) را انتخاب کنید: "اعتبارسنجی دلتا دما" (Temperature delta validation).
image

تصویر زیر نحوه نهایی زنجیره قوانین اصلی را نمایش می‌دهد:

image
  • فایل JSON پیوست‌شده برای زنجیره قوانین مشخص‌شده در بالا را دانلود کرده و وارد کنید.
  • فراموش نکنید که زنجیره قوانین جدید را به عنوان زنجیره اصلی (root) علامت‌گذاری کنید.

چگونه زنجیره قوانین را تأیید کرده و تل‍متری را ارسال کنیم

برای ارسال تل‍متری دستگاه، از API های REST و API های بارگذاری تل‍متری استفاده خواهیم کرد. برای این کار، لازم است توکن دسترسی دستگاه ترمومتر را از دستگاه مربوطه کپی کنید.

image
				
					**you need to replace $ACCESS_TOKEN with actual device token**
				
			

برای تأیید اینکه زنجیره قوانین به درستی کار می‌کند، لازم است که تل‍متری را دو بار برای همان دستگاه ارسال کنیم، با فاصله‌ای که کمتر از ۵ دقیقه و بیشتر از ۲۴ ساعت نباشد. همچنین، دکمه حالت اشکال‌زدایی (debug mode) را در گره "ایجاد هشدار" (Create Alarm) فشار دهید تا تأیید کنید که هشدار پس از دومین درخواست ارسال تل‍متری ایجاد خواهد شد.

image

دما ارسال‌شده = ۲۰

				
					curl -v -X POST -d '{"temperature":20}' http://localhost:8080/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"
				
			
image

پس از تأخیر ۵ دقیقه‌ای، دما را با مقدار ۲۶ ارسال کنید.

				
					curl -v -X POST -d '{"temperature":26}' http://localhost:8080/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"
				
			
image

هشدار باید ایجاد شود.

image

همچنین می‌توانید:

  • پیکربندی عملکرد جزئیات هشدار در گره‌های "ایجاد هشدار" (Create Alarm) و "پاک‌سازی هشدار" (Clear Alarm).
  • پیکربندی داشبورد با افزودن یک ویجت هشدار برای نمایش هشدارها.
  • تعریف منطق اضافی برای پردازش هشدار، به عنوان مثال، ارسال ایمیل.

برای مشاهده نحوه انجام این کارها، لطفاً به لینک‌های دوم تا چهارم در بخش "همچنین مشاهده کنید" (See Also) مراجعه کنید.

همچنین مشاهده کنید

  • آموزش اعتبارسنجی تل‍متری ورودی - برای اطلاعات بیشتر در مورد چگونگی اعتبارسنجی تل‍متری ورودی با استفاده از گره فیلتر اسکریپت (Script Filter Node).
  • ایجاد و پاک‌سازی هشدارها: جزئیات هشدار - برای یادگیری نحوه پیکربندی عملکرد جزئیات هشدار در گره‌های هشدار.
  • ایجاد و پاک‌سازی هشدارها: پیکربندی داشبورد - برای یادگیری نحوه افزودن ویجت هشدار به داشبورد.
  • آموزش ارسال ایمیل - برای تعریف منطق اضافی برای پردازش هشدار، مانند ارسال ایمیل.

گام‌های بعدی

  • راهنمای شروع سریع - این راهنماها نمای کلی از ویژگی‌های اصلی ThingsConnect ارائه می‌دهند و طراحی شده‌اند تا در ۱۵-۳۰ دقیقه تکمیل شوند.
  • اتصال دستگاه خود - یاد بگیرید چگونه دستگاه‌ها را بر اساس فناوری یا راه‌حل اتصال خود متصل کنید.
  • تصویری‌سازی داده‌ها - این راهنماها شامل دستورالعمل‌هایی برای پیکربندی داشبوردهای پیچیده ThingsConnect هستند.
  • تحلیل داده‌های IoT - یاد بگیرید چگونه از موتور قوانین برای انجام وظایف تحلیلی پایه استفاده کنید.
  • نمونه‌های سخت‌افزاری - یاد بگیرید چگونه پلتفرم‌های سخت‌افزاری مختلف را به ThingsConnect متصل کنید.
  • ویژگی‌های پیشرفته - با ویژگی‌های پیشرفته ThingsConnect  آشنا شوید.
  • مشارکت و توسعه - درباره مشارکت و توسعه در ThingsConnect اطلاعات کسب کنید.

عناوین هر بخش