بررسی رابطه میان موجودیتها
هدف این آموزش، نشان دادن نحوه استفاده از گره Check Relation برای بررسی رابطه میان موجودیتها است.
کاربرد:
فرض کنید سناریوی زیر را داریم:
- شما دو دستگاه دارید:
- آشکارساز دود که دارای سنسور دود است و در صورت تشخیص دود، دادهها را به ThingsConnect ارسال میکند.
- سیستم هشدار حریق که در صورت وجود دود، هشدار حریق میدهد.
با این حال، راههای مختلفی برای پیادهسازی این سناریو وجود دارد. برای مثال، این کار را میتوان با استفاده از گره Switch که پیامهای ورودی را به یک یا چند زنجیره خروجی هدایت میکند، پیادهسازی کرد.
برای اطلاعات بیشتر درباره نحوه استفاده از گره Switch، میتوانید به مقاله مرتبط با گره Switch در بخش «همچنین ببینید» مراجعه کنید.
پیشنیازها
قبل از شروع این آموزش، لازم است راهنماهای زیر را مطالعه کنید:
- راهنمای شروع به کار
- مرور کلی موتور قوانین
افزودن دستگاهها و ایجاد رابطه میان آنها
در ThingsConnect دو موجودیت دستگاه اضافه کنید:
- آشکارساز دود به عنوان یک دستگاه اضافه میشود. نام آن Smoke Detector و نوع آن Smoke Sensor است.
- سیستم هشدار حریق نیز به عنوان یک دستگاه اضافه میشود. نام آن Fire Alarm System و نوع آن Fire Alarm Device است.
سپس یک رابطه از نوع Uses ایجاد کنید:
- از Smoke Detector به Fire Alarm System.
تصاویر زیر نحوه انجام این کار را نشان میدهند:
![image](https://img.thingsboard.io/user-guide/rule-engine-2-0/tutorials/check relation/smoke-sensor.png)
![image](https://img.thingsboard.io/user-guide/rule-engine-2-0/tutorials/check relation/fire-alarm-system.png)
![image](https://img.thingsboard.io/user-guide/rule-engine-2-0/tutorials/check relation/add-relation.png)
جریان پیام
در این بخش، هدف هر گره در این آموزش توضیح داده میشود:
- گره A: گره Check Relation
- رابطه میان دستگاه Fire Alarm System و منبع پیام یعنی Smoke Detector را با استفاده از نوع و جهت رابطه بررسی میکند.
- گره B: گره Change Originator
- منبع پیام را از دستگاه Smoke Detector به دستگاه مرتبط Fire Alarm System تغییر میدهد و پیام ارسالشده بهعنوان پیامی از دستگاه Fire Alarm System پردازش میشود.
- گره C: اسکریپت Transformation
- پیام اصلی را به یک پیام درخواست RPC تبدیل میکند.
- گره D: گره درخواست فراخوانی RPC
- بار پیام را میگیرد و آن را بهعنوان پاسخ به سیستم هشدار حریق ارسال میکند.
- گره E: گره اسکریپت Filter
- بررسی میکند که آیا دادههای پیام ورودی مربوط به دود است یا خیر.
- گره F: گره Clear Alarm
- آخرین هشدار با نوع تنظیمشده برای منبع پیام Smoke Detector را بارگذاری کرده و در صورت وجود، هشدار را پاک میکند.
- گره G: گره Create Alarm
- تلاش میکند آخرین هشدار با نوع تنظیمشده برای منبع پیام یعنی Smoke Detector را بارگذاری کند.
- گره H: گره Rule Chain
- پیام ورودی را به زنجیره قوانین مشخصشده برای Fire Alarm System ارسال میکند.
پیکربندی زنجیرههای قوانین
در این آموزش، زنجیره قوانین اصلی (Root Rule Chain) را تغییر دادیم و همچنین زنجیره قوانین مربوط به Fire Alarm System را ایجاد کردیم.
تصاویر زیر نشان میدهند که زنجیرههای قوانین فوق چگونه باید باشند:
- زنجیره قوانین مربوط به Fire Alarm System:
![image](https://img.thingsboard.io/user-guide/rule-engine-2-0/tutorials/check relation/fire-alarm-chain.png)
- زنجیره قوانین اصلی
![image](https://img.thingsboard.io/user-guide/rule-engine-2-0/tutorials/check relation/chain.png)
برای دانلود فایل JSON مربوط به زنجیره قوانین اصلی (Root Rule Chain)، به پیوست مراجعه کنید. فراموش نکنید که این زنجیره قوانین را به عنوان زنجیره اصلی (Root) علامتگذاری کنید تا تمامی پیامها از طریق آن مدیریت شوند.
![image](https://img.thingsboard.io/user-guide/rule-engine-2-0/tutorials/check relation/root-chain.png)
شما همچنین باید زنجیره قوانین مربوط به Fire Alarm System را ایجاد کنید. یا میتوانید فایل JSON پیوستشده مربوط به این زنجیره را دانلود کرده و آن را وارد کنید.
بخش زیر نحوه ایجاد این زنجیره را توضیح میدهد.
ایجاد زنجیره قوانین جدید (آموزش درخواست تماس RPC)
به بخش Rule Chains بروید و روی Add new Rule Chain کلیک کنید.
پیکربندی:
- نام: Related Fire Alarm System
![image](https://img.thingsboard.io/user-guide/rule-engine-2-0/tutorials/check relation/add-fire-alarm-chain.png)
زنجیره قوانین جدید ایجاد شد. بر روی دکمه Edit کلیک کرده و زنجیره را پیکربندی کنید.
افزودن گرههای مورد نیاز
در این زنجیره قوانین، شما ۴ گره ایجاد خواهید کرد که در بخشهای زیر توضیح داده خواهد شد:
گره A: بررسی رابطه
گره Check Relation را اضافه کرده و آن را به گره ورودی (Input node) متصل کنید.
این گره رابطه میان دستگاه Fire Alarm System و منبع پیام یعنی Smoke Detector را با استفاده از نوع و جهت رابطه بررسی میکند. اگر رابطه وجود داشته باشد، پیام از طریق زنجیره True ارسال خواهد شد.
فیلدها را با دادههای ورودی که در جدول زیر نشان داده شده است، پر کنید:
جدول
![image](https://img.thingsboard.io/user-guide/rule-engine-2-0/tutorials/check relation/check-relation.png)
گره B: تغییر منبع پیام
گره Change Originator را اضافه کرده و آن را به گره Check Relation با نوع رابطه True متصل کنید.
این گره منبع پیام را از دستگاه Smoke Detector به دستگاه مرتبط Fire Alarm System تغییر میدهد و پیام ارسالشده بهعنوان پیامی از موجودیت دیگری، یعنی Fire Alarm System پردازش میشود.
فیلدها را با دادههای ورودی که در جدول زیر نشان داده شده است، پر کنید:
جدول
![image](https://img.thingsboard.io/user-guide/rule-engine-2-0/tutorials/check relation/change-originator.png)
گره C: اسکریپت تبدیل
- گره Script Transformation را اضافه کرده و آن را به گره Change Originator با نوع رابطه Success متصل کنید.
این گره پیام اصلی را به یک پیام درخواست RPC تبدیل میکند. - درخواست RPC دارای ۲ ویژگی خواهد بود:
فیلد |
مقدار |
---|---|
Name |
Fetch Wind Sensor Telemetry |
Direction |
From |
Max relationship level |
1 |
Relationship type |
Uses |
Entity type |
Device |
Latest telemetry |
true |
Source telemetry |
windDirection |
Target telemetry |
windDirection |
گره D: تغییر مبدأ (Change Originator)
گره Change Originator را اضافه کرده و آن را با نوع رابطه Success به گره Save TimeSeries متصل کنید.
این گره مبدأ را از دستگاههای حسگر جهت باد و سیستم چرخان به دارایی مرتبط توربین بادی تغییر میدهد که نوع رابطه آن با هر یک از آنها Contains (شامل) است. در نتیجه، پیام ارسالشده به عنوان پیامی از این موجودیت (توربین بادی) پردازش خواهد شد.برای پر کردن فیلدها از دادههای ورودی نمایش دادهشده در جدول زیر استفاده کنید:
فیلد |
مقدار |
---|---|
Name |
Create New Telemetry |
Direction |
To |
Max relationship level |
1 |
Relationship type |
Contains |
Entity type |
Asset |
گره E: ذخیره سریهای زمانی (Save TimeSeries)
گره ذخیره سریهای زمانی را اضافه کنید و آن را با استفاده از رابطهای از نوع "موفقیت" (Success) به گره تغییر مبدأ (Change Originator) متصل کنید.
این گره دادههای سریهای زمانی (TimeSeries) موجود در payload پیام ورودی را از دارایی توربین بادی که مبدأ پیام (Message Originator) است، در پایگاه داده ذخیره میکند.در قسمت Name، عبارت "ذخیره سریهای زمانی" (Save Time Series) را وارد کنید.
![image](https://img.thingsboard.io/user-guide/rule-engine-2-0/tutorials/rpc-request/save-ts.png)
گره F: اسکریپت تغییر (Transform Script)
- گره اسکریپت تغییر را اضافه کنید و آن را با استفاده از رابطهای از نوع "موفقیت" (Success) به گره بارگذاری ویژگیهای مرتبط (Related attributes) متصل کنید.
این گره، پیام اولیه را به یک پیام درخواست RPC تبدیل میکند. - فراخوانی RPC شامل دو ویژگی خواهد بود:
- method: چرخش به چپ (spinLeft) یا چرخش به راست (spinRight).
- params: مقدار (value).
![image](https://img.thingsboard.io/user-guide/rule-engine-2-0/tutorials/rpc-request/save-ts.png)
در قسمت Name، عبارت "New RPC Message" را وارد کنید.
اسکریپت زیر را اضافه کنید:
var newMsg = {};
var value = Math.abs(msg.turbineDirection - metadata.windDirection);
if ((value < 180 && msg.turbineDirection < metadata.windDirection)||
(value > 180 && msg.turbineDirection > metadata.windDirection)) {
newMsg.method = 'spinLeft';
}
if ((value <= 180 && msg.turbineDirection > metadata.windDirection)||
(value >= 180 && msg.turbineDirection < metadata.windDirection)) {
newMsg.method = 'spinRight';
}
if(newMsg.method == 'spinLeft' || 'spinRight'){
msgType = 'RPC message';
}
newMsg.params = Math.round(value * 100) / 100;
return {msg: newMsg, metadata: metadata, msgType: msgType};
گره G: اسکریپت فیلتر (Filter Script)
- گره اسکریپت فیلتر را اضافه کنید و آن را با استفاده از رابطهای از نوع "موفقیت" (Success) به گره اسکریپت تغییر (Transform Script) متصل کنید.
- این گره بررسی میکند که آیا msgType پیام ورودی از نوع پیام RPC است یا خیر.
: return msgType == 'RPC message';
![image](https://img.thingsboard.io/user-guide/rule-engine-2-0/tutorials/rpc-request/check-validity.png)
گره H: درخواست فراخوانی RPC (RPC call request)
- گره درخواست فراخوانی RPC را اضافه کنید و آن را با استفاده از رابطهای از نوع "True" به گره اسکریپت فیلتر (Filter Script) متصل کنید.
این گره، payload پیام را گرفته و بهعنوان پاسخ به مبدأ پیام ارسال میکند. - در قسمت Name، عبارت "Rotating System" را وارد کنید.
- مقدار Timeout را ۶۰ ثانیه تنظیم کنید.
این زنجیره قوانین اکنون آماده است و شما باید آن را ذخیره کنید.
چگونه زنجیره قوانین را تأیید کنیم
- برای شبیهسازی دستگاه سنسور جهت باد، از کد جاوااسکریپت زیر استفاده کنید:
- WindDirectionEmulator.js
- برای شبیهسازی دستگاه سیستم چرخشی، از کد جاوااسکریپت زیر بهره ببرید. این کد دارای متدی است که تغییر جهت توربین را بر اساس پیام RPC ورودی شبیهسازی میکند:
- RotatingSystemEmulator.js
برای اجرای این اسکریپتها، مراحل زیر را دنبال کنید:
- توکن دسترسی دستگاه سنسور جهت باد و توکن دسترسی دستگاه سیستم چرخشی را کپی کنید و آنها را در اسکریپت بچسبانید. میتوانید توکن دسترسی را از صفحه دستگاه کپی کنید.
در این آموزش،- توکن دسترسی دستگاه سنسور جهت باد: Z61K03FAGSziW9b0nKsm توکن
- دسترسی دستگاه سیستم چرخشی: jSuvzrURCbw7q4LGtygc
توجه داشته باشید که این توکنها منحصر به فرد هستند و شما باید توکنهای دسترسی دستگاههای خود را استفاده کنید.
- ترمینال را باز کنید و به پوشهای که شامل این اسکریپتهای شبیهساز است بروید. سپس دستورات زیر را وارد و اجرا کنید:
- node WindDirectionEmulator.js
- node RotatingSystemEmulator.js
پیکربندی داشبوردها
فایل JSON مربوط به داشبورد را دانلود کرده و وارد کنید.
داشبورد باید به این صورت نمایش داده شود:
![image](https://img.thingsboard.io/user-guide/rule-engine-2-0/tutorials/rpc-request/dashboard.png)
فایل JSON پیوست شده برای داشبورد مورد نظر را دانلود کرده و آن را وارد کنید.
- به مسیر Dashboards -> Add new Dashboard -> Import Dashboard بروید و فایل JSON دانلود شده را بارگذاری کنید.
در مرحله بعد، باید مستعارهایی که توسط داشبورد وارد شده استفاده میشود را پیکربندی کنید.
![image](https://img.thingsboard.io/user-guide/rule-engine-2-0/tutorials/rpc-request/aliases.png)
بر روی دکمه Edit alias کلیک کنید و دادههای ورودی که در جدول زیر نشان داده شدهاند را وارد کنید:
فیلد |
مقدار |
---|---|
Name |
Get Weather Data |
Endpoint URL pattern |
. |
Request method |
GET |
Use simple client HTTP factory |
False |
پیکربندی داشبورد به پایان رسیده و میتوانید بررسی کنید که به درستی کار میکند.
همچنین، میتوانید ببینید:
چگونه با گره قانون پاسخ RPC تماس کار کنید
برای این کار، لطفاً به لینک دوم در بخش See Also مراجعه کنید.
گامهای بعدی
- راهنماهای شروع به کار: این راهنماها مرور سریعی از ویژگیهای اصلی ThingsConnect ارائه میدهند. طراحی شدهاند تا در 15 تا 30 دقیقه تکمیل شوند.
- اتصال دستگاه شما: یاد بگیرید چگونه دستگاههای خود را بر اساس تکنولوژی اتصال یا راهحلهای خود متصل کنید.
- بصریسازی دادهها: این راهنماها شامل دستورالعملهایی برای پیکربندی داشبوردهای پیچیده ThingsConnect هستند.
- تحلیل دادههای IoT: یاد بگیرید چگونه از موتور قوانین برای انجام وظایف پایه تحلیل استفاده کنید.
- نمونههای سختافزاری: یاد بگیرید چگونه پلتفرمهای سختافزاری مختلف را به ThingsConnect متصل کنید.
- ویژگیهای پیشرفته: با ویژگیهای پیشرفته ThingsConnect آشنا شوید.
- مشارکت و توسعه: با نحوه مشارکت و توسعه در ThingsConnect آشنا شوید.