گرههای اکشن
گرههای اکشن اقدامات مختلفی را بر اساس پیام ورودی اجرا میکنند.
گره تابع ریاضی
گره قانون تابع ریاضی را اعمال کرده و نتیجه را در پیام و/یا پایگاه داده ذخیره میکند. جدول توابع پشتیبانیشده را در زیر مشاهده کنید:
فیلد |
نوع داده |
داده ورودی |
---|---|---|
latitude |
Double |
(عرض جغرافیایی دارایی) |
longitude |
Double |
(عرض جغرافیایی دارایی) |
units |
String |
"metric" برای سرعت باد به متر بر ثانیه و دمای سلسیوس، "imperial" برای سرعت باد به مایل بر ساعت و دمای فارنهایت، یا خالی برای سرعت باد به متر بر ثانیه و دمای کلوین |
شما میتوانید از ۵ نوع آرگومان استفاده کنید:
- مقدار ثابت؛
- مقدار از بدنه پیام؛
- مقدار از متادیتای پیام؛
- مقدار یکی از ویژگیهای متعلق به منبع پیام (مانند دستگاه یا دارایی). مقدار باید از نوع عددی یا رشتهای باشد که به عدد اعشاری (float) قابل تبدیل باشد؛
- مقدار جدیدترین دادههای سری زمانی متعلق به منبع پیام (مانند دستگاه یا دارایی). مقدار باید از نوع عددی یا رشتهای باشد که به عدد اعشاری (float) قابل تبدیل باشد.
استفاده اصلی از این گره قانون، دریافت یک یا چند مقدار از پایگاه داده و تغییر آنها بر اساس دادههای موجود در پیام است. برای مثال، میتوانید مقدار مصرف آب کل را بر اساس تغییرات گزارششده توسط دستگاه در مصرف آب افزایش دهید.
یکی از کاربردهای جایگزین این گره، استفاده به جای گرههای ساده اسکریپت JS است که پیادهسازی سبکتر و کارآمدتری دارند. به عنوان مثال، میتوانید دما را از فارنهایت به سلسیوس تبدیل کنید (C = (F - 32) / 1.8) با استفاده از عملیات CUSTOM و عبارت (x - 32) / 1.8.
اجرای این گره در محدوده منبع پیام (مانند دستگاه) و گره سرور هماهنگسازی میشود. اگر گرههای قانون در زنجیرههای قوانین مختلف داشته باشید، آنها پیامها را از منبع یکسان بهصورت همزمان در محدوده گره سرور پردازش خواهند کرد.
نتیجه تابع ممکن است به بدنه پیام یا متادیتا اضافه شود. همچنین میتوانید نتیجه را به عنوان یک ویژگی یا داده سری زمانی در پایگاه داده ذخیره کنید.
گره ایجاد آلارم
این گره تلاش میکند تا جدیدترین آلارم با نوع آلارم تنظیمشده برای منبع پیام را بارگذاری کند. اگر آلارم رفعنشدهای وجود داشته باشد، این آلارم بهروزرسانی میشود، در غیر این صورت، یک آلارم جدید ایجاد میشود.
پیکربندی گره:
- اسکریپت سازنده جزئیات آلارم
- نوع آلارم – هر رشتهای که نوع آلارم را نشان دهد
- شدت آلارم – {بحرانی | بزرگ | کوچک | هشدار | نامشخص}
- پراکندگی – آیا آلارم باید به تمام موجودیتهای والد مرتبط منتشر شود یا خیر.
نکته: از نسخه 2.3.0 ThingsConnect، گره قانون قادر است:
پیکربندی آلارم را از پیام بخواند:
نوع آلارم را با استفاده از الگو و فیلدهایی از متادیتای پیام دریافت کند:
نکته: از نسخه 2.4.3 ThingsConnect، گره قانون قادر است:
- پراکندگی به موجودیتهای والد را بر اساس انواع رابطهها فیلتر کند:
اسکریپت سازنده جزئیات آلارم برای تولید JsonNode مربوط به جزئیات آلارم استفاده میشود. این اسکریپت برای ذخیره پارامترهای اضافی در داخل آلارم مفید است. به عنوان مثال، میتوانید جفت نام/مقدار ویژگی را از بار اصلی پیام یا متادیتا ذخیره کنید.
اسکریپت سازنده جزئیات آلارم باید یک شیء جزئیات (details object) را برگرداند.
- محتوای پیام از طریق ویژگی msg قابل دسترسی است. به عنوان مثال: msg.temperature
- متادیتای پیام از طریق ویژگی metadata قابل دسترسی است. به عنوان مثال: metadata.customerName
- نوع پیام از طریق ویژگی msgType قابل دسترسی است. به عنوان مثال: msgType
اختیاری: جزئیات آلارم قبلی از طریق metadata.prevAlarmDetails قابل دسترسی است. اگر آلارم قبلی وجود نداشته باشد، این فیلد در متادیتا حضور نخواهد داشت. توجه داشته باشید که metadata.prevAlarmDetails یک فیلد رشتهای خام است و باید با استفاده از این ساختار به شیء تبدیل شود:
var details = {};
if (metadata.prevAlarmDetails) {
details = JSON.parse(metadata.prevAlarmDetails);
}
برای بررسی صحت عملکرد اسکریپت سازنده جزئیات آلارم، میتوانید از تابع Test JavaScript استفاده کنید.
مثال از تابع سازنده جزئیات آلارم:
این تابع ویژگی count را از آلارم قبلی گرفته و آن را افزایش میدهد. همچنین، ویژگی temperature را از محتوای پیام ورودی به جزئیات آلارم اضافه میکند.
این تابع ابتدا بررسی میکند که آیا آلارم قبلی وجود دارد یا خیر. اگر وجود داشته باشد، مقدار count افزایش مییابد و اگر وجود نداشته باشد، مقدار آن روی 1 تنظیم میشود. سپس مقدار temperature از پیام ورودی به جزئیات آلارم اضافه شده و در نهایت شیء جزئیات بازگردانده میشود.
var details = {temperature: msg.temperature, count: 1};
if (metadata.prevAlarmDetails) {
var prevDetails = JSON.parse(metadata.prevAlarmDetails);
if(prevDetails.count) {
details.count = prevDetails.count + 1;
}
}
return details;
آلارمی که با ویژگیهای مشخصی ایجاد یا بهروزرسانی شده است، شامل جزئیات زیر میباشد:
- جزئیات آلارم: این جزئیات از اسکریپت سازنده جزئیات آلارم استخراج میشوند.
- وضعیت آلارم: برای آلارم جدید، وضعیت بهعنوان ACTIVE_UNACK تعیین میشود. در صورتی که آلارم موجود باشد، وضعیت بدون تغییر باقی میماند.
- شدت آلارم، انتشار، و نوع آلارم، همه بر اساس پیکربندی گره مشخص میشوند.
- زمان شروع آلارم: برای آلارمهای جدید، زمان شروع برابر با زمان جاری سیستم خواهد بود، در حالی که برای آلارمهای موجود این زمان تغییر نخواهد کرد.
- زمان پایان آلارم: زمان پایان همیشه زمان جاری سیستم است.
ساختار پیام خروجی بهصورت زیر خواهد بود:
نوع پیام: ALARM
منبع پیام: همان منبع پیام ورودی
حمل و نقل: نمایش JSON از آلارم جدید که ایجاد یا بهروزرسانی شده است.
فراداده: تمامی فیلدهای فراداده پیام اصلی را شامل میشود.
در زمان ایجاد آلارم جدید، پیام خروجی یک ویژگی اضافی در فراداده به نام isNewAlarm با مقدار true خواهد داشت و از طریق زنجیره ایجاد شده ارسال خواهد شد. بهعلاوه، پس از بهروزرسانی آلارم موجود، پیام خروجی شامل ویژگی isExistingAlarm با مقدار true خواهد بود و از طریق زنجیره بهروزرسانی شده ارسال خواهد شد.
یک نمونه از payload پیام خروجی در زیر ارائه شده است:
{
"tenantId": {
"entityType": "TENANT",
"id": "22cd8888-5dac-11e8-bbab-ad47060c9bbb"
},
"type": "High Temperature Alarm",
"originator": {
"entityType": "DEVICE",
"id": "11cd8777-5dac-11e8-bbab-ad55560c9ccc"
},
"severity": "CRITICAL",
"status": "ACTIVE_UNACK",
"startTs": 1526985698000,
"endTs": 1526985698000,
"ackTs": 0,
"clearTs": 0,
"details": {
"temperature": 70,
"ts": 1526985696000
},
"propagate": true,
"id": "33cd8999-5dac-11e8-bbab-ad47060c9431",
"createdTime": 1526985698000,
"name": "High Temperature Alarm"
}
برای کسب اطلاعات بیشتر درباره آلارمها در ThingsConnect، میتوانید به این آموزش مراجعه کنید.
همچنین، برای مشاهده یک مثال واقعی از نحوه استفاده از این گره، به آموزش بعدی با عنوان:
- ایجاد و پاککردن آلارمها مراجعه کنید.
گره پاککردن آلارم
این گره آخرین آلارم را با نوع آلارم پیکربندیشده برای منبع پیام بارگذاری میکند و در صورت وجود، آلارم را پاک میکند.
پیکربندی گره:
- اسکریپت سازنده جزئیات آلارم
- نوع آلارم: هر رشتهای که نوع آلارم را نمایندگی میکند.
توجه: از نسخه 2.3.0 ThingsConnect، گره قانون قادر است نوع آلارم را با استفاده از الگوهایی که شامل فیلدهای متاداده پیام هستند، دریافت کند.
اسکریپت سازنده جزئیات آلارم بهمنظور بهروزرسانی JsonNode جزئیات آلارم به کار میرود و برای ذخیرهسازی پارامترهای اضافی درون آلارم بسیار مفید است. بهعنوان مثال، این امکان وجود دارد که جفت نام و مقدار ویژگیها را از بارگذاری پیام اصلی یا فراداده ذخیره کنید.
این اسکریپت باید شیء جزئیات را به عنوان خروجی بازگرداند.
- میتوانید payload پیام را از طریق ویژگی msg دسترسی پیدا کنید؛ به عنوان مثال، msg.temperature.
- متاداده پیام نیز از طریق ویژگی metadata قابل دسترسی است؛ برای مثال، metadata.customerName.
- نوع پیام را میتوان از طریق ویژگی msgType بررسی کرد؛ به عنوان مثال، msgType.
- برای دسترسی به جزئیات آلارم فعلی، از metadata.prevAlarmDetails استفاده میشود.
لازم به ذکر است که metadata.prevAlarmDetails یک فیلد رشتهای خام است و باید با استفاده از ساختار زیر به یک شیء تبدیل شود:
var details = {};
if (metadata.prevAlarmDetails) {
details = JSON.parse(metadata.prevAlarmDetails);
}
تابع اسکریپت سازنده جزئیات آلارم قابل تأیید با استفاده از تابع Test JavaScript است.
در اینجا مثالی از تابع سازنده جزئیات آمده است:
این تابع، ویژگی count را از آلارم قبلی دریافت کرده و مقدار آن را افزایش میدهد. علاوه بر این، ویژگی temperature را از بارگذاری پیام ورودی در جزئیات آلارم قرار میدهد.
var details = {temperature: msg.temperature, count: 1};
if (metadata.prevAlarmDetails) {
var prevDetails = JSON.parse(metadata.prevAlarmDetails);
if(prevDetails.count) {
details.count = prevDetails.count + 1;
}
}
return details;
این گره وظیفه بهروزرسانی آلارم فعلی را دارد:
- وضعیت آلارم را به CLEARED_ACK تغییر میدهد اگر قبلاً تأیید شده باشد، در غیر این صورت به CLEARED_UNACK تغییر میکند.
- زمان پاککردن را به زمان جاری سیستم تنظیم میکند.
- جزئیات آلارم را با شیء جدیدی که از اسکریپت سازنده جزئیات آلارم بازگشت داده شده است، بهروزرسانی میکند.
اگر آلارم وجود نداشته باشد یا قبلاً پاک شده باشد، پیام اصلی از طریق زنجیره False به گرههای بعدی منتقل خواهد شد.
در غیر این صورت، پیام جدید از طریق زنجیره Cleared ارسال میشود.
ساختار پیام خروجی بهصورت زیر خواهد بود:
- نوع پیام: ALARM
- منبع پیام: همان منبع پیام ورودی
- حمل و نقل: نمایش JSON از آلارم پاکشده.
- فراداده: شامل تمامی فیلدهای فراداده پیام اصلی. بهعلاوه، یک خاصیت اضافی به نام isClearedAlarm با مقدار true درون فراداده اضافه خواهد شد.
یک نمونه از payload پیام خروجی در زیر ارائه شده است:
{
"tenantId": {
"entityType": "TENANT",
"id": "22cd8888-5dac-11e8-bbab-ad47060c9bbb"
},
"type": "High Temperature Alarm",
"originator": {
"entityType": "DEVICE",
"id": "11cd8777-5dac-11e8-bbab-ad55560c9ccc"
},
"severity": "CRITICAL",
"status": "CLEARED_UNACK",
"startTs": 1526985698000,
"endTs": 1526985698000,
"ackTs": 0,
"clearTs": 1526985712000,
"details": {
"temperature": 70,
"ts": 1526985696000
},
"propagate": true,
"id": "33cd8999-5dac-11e8-bbab-ad47060c9431",
"createdTime": 1526985698000,
"name": "High Temperature Alarm"
}
برای کسب اطلاعات بیشتر درباره آلارمها در ThingsConnect، میتوانید به این آموزش مراجعه کنید.
همچنین، برای مشاهده یک مثال واقعی از نحوه استفاده از این گره، به آموزش بعدی با عنوان ایجاد و پاککردن آلارمها مراجعه کنید.
گره تأخیر (منسوخ شده)
این گره پیامهای ورودی را برای مدت زمانی که قابل پیکربندی است، به تأخیر میاندازد.
پیکربندی:
- دوره زمانی به ثانیه: مدت زمان معلق شدن پیام ورودی را تعیین میکند.
- حداکثر پیامهای معلق: تعداد حداکثر پیامهای معلق مجاز در صف را مشخص میکند.
هنگامی که دوره تأخیر برای یک پیام ورودی خاص به پایان برسد، پیام از صف معلق خارج شده و از طریق زنجیره موفقیت به گرههای بعدی منتقل میشود.
در صورتی که محدودیت حداکثر پیامهای معلق رعایت نشود، پیامهای بعدی از طریق زنجیره شکست هدایت خواهند شد.
گره مولد (Generator Node)
پیامهایی با دوره قابل تنظیم تولید میکند. برای تولید پیام از تابع JavaScript استفاده میشود.
پیکربندی گره:
- فرکانس تولید پیام به ثانیه
- منبع پیام
- تابع JavaScript که پیام اصلی را تولید میکند.
تابع JavaScript سه پارامتر ورودی دریافت میکند:
- prevMsg: محتوای پیام قبلی تولید شده.
- prevMetadata: دادههای متادیتای پیام قبلی تولید شده.
- prevMsgType: نوع پیام قبلی تولید شده.
اسکریپت باید ساختار زیر را بازگرداند:
{
msg: new payload,
metadata: new metadata,
msgType: new msgType
}
تمام فیلدهای موجود در شیء نتیجه اختیاری هستند و اگر مشخص نشوند، از پیام تولید شده قبلی دریافت خواهند شد.
پیام خروجی از این گره، پیام جدیدی خواهد بود که با استفاده از تابع JavaScript پیکربندی شده ساخته شده است.
تابع مولد JavaScript میتواند با استفاده از تابع "Test JavaScript" بررسی و صحتسنجی شود.
این گره میتواند برای اهداف اشکالزدایی (Debugging) در زنجیره قوانین (Rule Chain) مورد استفاده قرار گیرد.
گره ثبت لاگ (Log Node)
پیام ورودی را با استفاده از تابع JavaScript پیکربندیشده به رشته (String) تبدیل کرده و مقدار نهایی را در فایل لاگ ThingsConnect ثبت میکند.
سطح لاگ INFO برای ثبت این لاگها استفاده میشود.
تابع JavaScript سه پارامتر ورودی دریافت میکند:
- metadata: متادیتای پیام.
msg: محتوای پیام.
msgType: نوع پیام.
اسکریپت باید یک مقدار رشتهای (String) را بازگرداند.
تابع تبدیل JavaScript میتواند با استفاده از تابع "Test JavaScript" بررسی و صحتسنجی شود.
میتوانید مثال واقعی استفاده از این گره را در آموزش بعدی مشاهده کنید:
- پاسخ به فراخوانهای RPC (Reply to RPC Calls).
گره پاسخ به فراخوان
پاسخی به فراخواننده RPC ارسال میکند. تمام درخواستهای ورودی RPC از طریق زنجیره قوانین (Rule Chain) بهعنوان پیامها عبور میکنند. همچنین، همه درخواستهای RPC دارای فیلد شناسه درخواست (request ID) هستند که برای نگاشت (Mapping) درخواستها و پاسخها استفاده میشود. منبع پیام باید یک موجودیت دستگاه (Device entity) باشد زیرا پاسخ RPC به منبع پیام آغاز میشود.
پیکربندی گره دارای نگاشت خاصی برای فیلد شناسه درخواست است. اگر نگاشت مشخص نشود، بهطور پیشفرض از فیلد متادیتای شناسه درخواست (requestId) استفاده میشود.
درخواست RPC میتواند از طریق حمل و نقلهای مختلف دریافت شود:
- MQTT
- HTTP
- CoAP
نمونه محتوای پیام:
{
"method": "setGpio",
"params": {
"pin": "23",
"value": 1
}
}
پیام در موارد زیر از طریق زنجیره شکست (Failure chain) مسیریابی خواهد شد:
- منبع پیام ورودی، موجودیت دستگاه نیست.
- شناسه درخواست در متادیتای پیام وجود ندارد.
- محتوای پیام ورودی خالی است.
برای جزئیات بیشتر در مورد نحوه عملکرد RPC در ThingsConnect، لطفاً مقاله قابلیتهای RPC را مطالعه کنید.
میتوانید مثال واقعی استفاده از این گره را در آموزش بعدی مشاهده کنید:
- پاسخ به فراخوانهای
گره درخواست فراخوان
درخواستهای RPC را به دستگاه ارسال کرده و پاسخ را به گرههای قانون بعدی مسیریابی میکند. منبع پیام باید یک موجودیت دستگاه (Device entity) باشد، زیرا درخواست RPC فقط میتواند به دستگاه آغاز شود.
پیکربندی گره دارای فیلد زمانسنج (Timeout) است که برای مشخص کردن زمان انتظار برای پاسخ از دستگاه استفاده میشود.
محتوای پیام باید دارای فرمت صحیح برای درخواست RPC باشد و باید شامل فیلدهای method و params باشد. نمونه:
{
"method": "setGpio",
"params": {
"pin": "23",
"value": 1
}
}
اگر محتوای پیام دارای فیلد requestId باشد، مقدار آن برای شناسایی درخواست RPC به دستگاه استفاده میشود. در غیر این صورت، یک شناسه درخواست تصادفی تولید خواهد شد.
پیام خروجی دارای همان منبع و متادیتا بهعنوان پیام ورودی خواهد بود. پاسخ از دستگاه به محتوای پیام اضافه خواهد شد.
پیام در موارد زیر از طریق زنجیره شکست (Failure chain) مسیریابی خواهد شد:
- منبع پیام ورودی، موجودیت دستگاه نیست.
- پیام ورودی فیلدهای method یا params را از دست داده است.
- اگر گره در طول زمانسنج پیکربندیشده پاسخی دریافت نکند.
در غیر این صورت، پیام از طریق زنجیره موفقیت (Success chain) مسیریابی خواهد شد.
برای جزئیات بیشتر در مورد نحوه عملکرد RPC در ThingsConnect، لطفاً مقاله قابلیتهای RPC را مطالعه کنید.
گره ذخیره ویژگیها
ویژگیهای موجود در محتوای پیام ورودی را در پایگاه داده ذخیره کرده و آنها را به موجودیتی که توسط منبع پیام شناسایی میشود، مرتبط میسازد. دامنه پیکربندیشده برای شناسایی دامنه ویژگیها استفاده میشود.
انواع دامنههای پشتیبانیشده:
- ویژگیهای مشتری (Client attributes)
- ویژگیهای مشترک (Shared attributes)
- ویژگیهای سرور (Server attributes)
زمانی که ویژگیها از طریق API موجود (HTTP / MQTT / CoAP و غیره) بارگذاری میشوند، پیام با محتوای صحیح و نوع مناسب به گره ورودی زنجیره قوانین اصلی (Root Rule Chain) منتقل خواهد شد.
در مواردی که نیاز به فعالسازی ذخیره ویژگیها درون زنجیره قوانین است، زنجیره قوانین باید پیکربندی شود تا محتوای پیام را به فرمت مورد انتظار تبدیل کرده و نوع پیام را به POST_ATTRIBUTES_REQUEST تنظیم کند. این کار میتواند با استفاده از گره تبدیل اسکریپت (Script Transformation Node) انجام شود.
نمونه محتوای پیام مورد انتظار:
{
"firmware_version": "1.0.1",
"serial_number": "SN-001"
}
پس از ذخیره موفقیتآمیز ویژگیها، پیام اصلی از طریق زنجیره موفقیت (Success chain) به گرههای بعدی منتقل میشود، در غیر این صورت از زنجیره شکست (Failure chain) استفاده میشود.
گره ذخیره دادههای زمانسنجی
دادههای زمانسنجی را از محتوای پیام ورودی در پایگاه داده ذخیره کرده و آنها را به موجودیتی که توسط منبع پیام شناسایی میشود، مرتبط میسازد. ثانیههای TTL (مدت زمان انقضا) پیکربندیشده برای انقضای دادههای زمانسنجی استفاده میشود. مقدار 0 به این معنی است که دادهها هرگز منقضی نخواهند شد.
علاوه بر این، میتوانید بهروزرسانی مقادیر برای کلیدهای ورودی برای آخرین دادههای زمانسنجی (جدول ts_kv_latest) را غیرفعال کنید، اگر پرچم «صرفنظر کردن از ذخیرهسازی آخرین» (Skip latest persistence) روی true تنظیم شده باشد. این میتواند برای مواردی با بار زیاد مفید باشد تا فشار روی پایگاه داده کاهش یابد. توجه داشته باشید که این ویژگی میتواند در زمانی فعال شود که استفادهنامه نیاز به فیلترگذاری پیشرفته در داشبوردها نداشته باشد. برای دریافت آخرین مقدار، میتوان دادههای تاریخی را با محدودیت 1 و ترتیب نزولی (DESC) بازیابی کرد.
علاوه بر این، میتوانید بهروزرسانی مقادیر برای کلیدهای ورودی برای آخرین دادههای زمانسنجی (جدول ts_kv_latest) را غیرفعال کنید، اگر پرچم «صرفنظر کردن از ذخیرهسازی آخرین» (Skip latest persistence) روی true تنظیم شده باشد. این میتواند برای مواردی با بار زیاد مفید باشد تا فشار روی پایگاه داده کاهش یابد. توجه داشته باشید که این ویژگی میتواند در زمانی فعال شود که استفادهنامه نیاز به فیلترگذاری پیشرفته در داشبوردها نداشته باشد. برای دریافت آخرین مقدار، میتوان دادههای تاریخی را با محدودیت 1 و ترتیب نزولی (DESC) بازیابی کرد.
این گره انتظار پیامهایی با نوع پیام POST_TELEMETRY_REQUEST را دارد. اگر نوع پیام POST_TELEMETRY_REQUEST نباشد، پیام از طریق زنجیره شکست (Failure chain) مسیریابی خواهد شد.
زمانی که دادههای زمانسنجی از طریق API موجود (HTTP / MQTT / CoAP و غیره) منتشر میشوند، پیام با محتوای صحیح و نوع مناسب به گره ورودی زنجیره قوانین اصلی (Root Rule Chain) منتقل خواهد شد.
در مواردی که نیاز به فعالسازی ذخیره دادههای زمانسنجی درون زنجیره قوانین باشد، زنجیره قوانین باید پیکربندی شود تا محتوای پیام را به فرمت مورد انتظار تبدیل کرده و نوع پیام را به POST_TELEMETRY_REQUEST تنظیم کند. این کار میتواند با استفاده از گره تبدیل اسکریپت (Script Transformation Node) انجام شود.
متادیتای پیام باید شامل فیلد ts باشد. این فیلد زمانسنجی در میلیثانیه برای تلمتری منتشرشده را شناسایی میکند.
علاوه بر این، اگر متادیتای پیام شامل فیلد TTL باشد، مقدار آن برای انقضای دادههای زمانسنجی استفاده میشود، در غیر این صورت TTL از پیکربندی گره استفاده میشود.
از نسخه 3.3.3 TB، میتوانید پارامتر useServerTs را فعال کنید تا از زمانسنجی پردازش پیام بهجای زمانسنجی موجود در پیام استفاده شود. این مورد برای انواع مختلف پردازش توالی مفید است اگر شما پیامها را از منابع مختلف (دستگاهها، داراییها و غیره) ترکیب کنید.
در مورد پردازش توالی، پلتفرم تضمین میکند که پیامها به ترتیب ارسال آنها به صف پردازش میشوند. با این حال، زمانسنجی پیامهایی که از چندین دستگاه/سرور ناشی میشوند، ممکن است قبل از اینکه به صف افزوده شوند، ناهماهنگ باشد. لایه پایگاه داده بهینهسازیهای خاصی دارد تا بهروزرسانیهای جداول «ویژگیها» و «مقادیر آخرین» را نادیده بگیرد اگر رکورد جدید زمانسنجیای داشته باشد که از رکورد قبلی قدیمیتر باشد.
بنابراین، برای اطمینان از اینکه تمام پیامها بهدرستی پردازش شوند، باید این پارامتر را برای سناریوهای پردازش پیامهای توالی فعال کنید.
نمونه محتوای پیام مورد انتظار:
پس از ذخیره موفقیتآمیز دادههای زمانسنجی، پیام اصلی از طریق زنجیره موفقیت (Success chain) به گرههای بعدی منتقل میشود، در غیر این صورت از زنجیره شکست (Failure chain) استفاده میشود.
{
"values": {
"key1": "value1",
"key2": "value2"
}
}
پس از ذخیره موفقیتآمیز دادههای زمانسنجی، پیام اصلی از طریق زنجیره موفقیت (Success chain) به گرههای بعدی منتقل میشود، در غیر این صورت از زنجیره شکست (Failure chain) استفاده میشود.
گره ذخیره در جدول سفارشی
این گره دادهها را از محتوای پیام ورودی در پایگاه داده Cassandra به جدول سفارشی از پیش تعریفشدهای ذخیره میکند که باید با پیشوند cs_tb_ شروع شود تا از درج دادهها در جدولهای عمومی ThingsConnect جلوگیری شود.
توجه داشته باشید که این گره فقط برای پایگاه داده Cassandra قابل استفاده است.
پیکربندی:
مدیر باید نام جدول سفارشی را بدون پیشوند cs_tb_ تنظیم کند.
مدیر میتواند نگاشت بین نامهای فیلدهای پیام و نامهای ستونهای جدول را پیکربندی کند. اگر کلید نگاشت $entityId باشد، که توسط منبع پیام شناسایی میشود، آنگاه شناسه منبع پیام به ستون مناسب (مقدار نگاشت) نوشته خواهد شد.
اگر فیلد پیام مشخصشده در دادههای پیام وجود نداشته باشد یا یک نوع JSON Primitive نباشد، پیام خروجی از طریق زنجیره شکست (Failure chain) مسیریابی خواهد شد. در غیر این صورت، پیام از طریق زنجیره موفقیت (Success chain) مسیریابی میشود.
توجه: لطفاً اطمینان حاصل کنید که از کلیدهای متادیتا در پیکربندی استفاده نمیکنید - فقط کلیدهای دادهای ممکن است.
گره اختصاص به مشتری
تخصیص موجودیت فرستنده پیام به مشتری.
انواع زیر برای فرستنده پیام مجاز هستند: دارایی (Asset)، دستگاه (Device)، نمای موجودیت (Entity View)، داشبورد (Dashboard).
نام مشتری مورد نظر را با الگوی نام مشتری پیدا کرده و سپس موجودیت فرستنده را به این مشتری تخصیص میدهد.
در صورت عدم وجود مشتری، در صورت فعال بودن گزینه "ایجاد مشتری جدید در صورت عدم وجود"، مشتری جدید ایجاد خواهد شد.
پیکربندی:
- الگوی نام مشتری - میتوان نام مستقیم مشتری را تنظیم کرد یا از الگویی استفاده کرد که با استفاده از متادیتای پیام به نام واقعی مشتری تبدیل شود.
- ایجاد مشتری جدید در صورت عدم وجود - اگر فعال باشد، در صورت نبود مشتری، مشتری جدیدی ایجاد خواهد شد.
- زمان انقضای حافظه کش مشتریان - حداکثر فاصله زمانی به ثانیه را برای ذخیره رکوردهای مشتریان پیدا شده مشخص میکند. مقدار 0 به این معناست که رکوردها هرگز منقضی نمیشوند.
پیام در موارد زیر از طریق زنجیره خطا هدایت میشود:
- زمانی که نوع موجودیت فرستنده پشتیبانی نمیشود.
- مشتری هدف وجود ندارد و گزینه "ایجاد مشتری در صورت عدم وجود" غیرفعال است.
در سایر موارد، پیام از طریق زنجیره موفقیت هدایت میشود.
لغو تخصیص موجودیت فرستنده پیام از مشتری
لغو تخصیص موجودیت فرستنده پیام از مشتری.
انواع زیر برای فرستنده پیام مجاز هستند: دارایی (Asset)، دستگاه (Device)، نمای موجودیت (Entity View)، داشبورد (Dashboard).
نام مشتری مورد نظر را با الگوی نام مشتری پیدا کرده و سپس موجودیت فرستنده را از این مشتری لغو تخصیص میدهد.
پیکربندی:
- الگوی نام مشتری - میتوان نام مستقیم مشتری را تنظیم کرد یا از الگویی استفاده کرد که با استفاده از متادیتای پیام به نام واقعی مشتری تبدیل شود.
- زمان انقضای حافظه کش مشتریان - حداکثر فاصله زمانی به ثانیه برای ذخیره رکوردهای مشتریان پیدا شده را مشخص میکند. مقدار 0 به این معناست که رکوردها هرگز منقضی نمیشوند.
پیام در موارد زیر از طریق زنجیره خطا هدایت میشود:
- زمانی که نوع موجودیت فرستنده پشتیبانی نمیشود.
- مشتری هدف وجود ندارد.
در سایر موارد، پیام از طریق زنجیره موفقیت هدایت میشود.
ایجاد گره رابطه
ایجاد رابطه از موجودیت انتخابشده به مبدأ پیام بر اساس نوع و جهت.
انواع زیر برای مبدأ پیام مجاز هستند: دارایی، دستگاه، نمای موجودیت، مشتری، مستأجر، داشبورد.
ابتدا موجودیت هدف را با استفاده از الگوهای کلید متاداده پیدا میکند و سپس یک رابطه بین موجودیت مبدأ و موجودیت هدف ایجاد میکند.
اگر نوع موجودیت انتخابشده دارایی، دستگاه یا مشتری باشد، گره قانون در صورت عدم وجود، موجودیت جدیدی ایجاد میکند و اگر گزینه «ایجاد موجودیت جدید در صورت عدم وجود» انتخاب شده باشد، موجودیت جدید ایجاد خواهد شد.
نکته: اگر نوع موجودیت انتخابشده دارایی یا دستگاه باشد، باید دو الگو تعیین شوند:
- الگوی نام موجودیت؛
- الگوی نوع موجودیت.
در غیر این صورت، تنها باید الگوی نام تعیین شود.
پیکربندی:
- جهت - انواع زیر مجاز هستند: از، به.
- نوع رابطه - نوع ارتباطات جهتدار با موجودیت مبدأ پیام. انواع پیشفرض "شامل میشود" و "مدیریت میکند" از لیست کشویی قابل انتخاب هستند.
- الگوی نام و الگوی نوع - میتوانند به صورت مستقیم نام/نوع موجودیت را تعیین کنند یا از الگو استفاده شود که با استفاده از متاداده پیام به نام/نوع واقعی موجودیت ترجمه خواهد شد.
- زمان انقضای حافظه کش موجودیتها - حداکثر زمان ذخیره سوابق موجودیت هدف یافته شده را به ثانیه تعیین میکند. مقدار 0 به این معنی است که سوابق هرگز منقضی نمیشوند.
پیام در موارد زیر از طریق زنجیره شکست ارسال خواهد شد:
- زمانی که نوع موجودیت مبدأ پشتیبانی نمیشود.
- موجودیت هدف وجود ندارد.
در سایر موارد، پیام از طریق زنجیره موفقیت ارسال خواهد شد.
نکته: از نسخه 2.3 ThingsConnect، گره قانون قابلیتهای زیر را دارد:
حذف روابط فعلی از مبدأ پیام ورودی بر اساس جهت و نوع.
- مبدأ پیام ورودی را به موجودیت انتخابشده تغییر دهید و پیامهای خروجی را بهعنوان پیامهایی از یک موجودیت دیگر پردازش کنید:
حذف گره رابطه
رابطه بین موجودیت انتخابشده و مبدأ پیام را بر اساس نوع و جهت حذف کنید.
انواع زیر برای مبدأ پیام مجاز هستند: دارایی، دستگاه، نمای موجودیت، مشتری، مستأجر، داشبورد.
ابتدا موجودیت هدف را بر اساس الگوی نام موجودیت پیدا کرده و سپس رابطه بین موجودیت مبدأ و این موجودیت را حذف میکند.
پیکربندی:
- جهت - انواع زیر مجاز هستند: از، به.
- نوع رابطه - نوع ارتباطات جهتدار با موجودیت مبدأ پیام. انواع پیشفرض "شامل میشود" و "مدیریت میکند" از لیست کشویی قابل انتخاب هستند.
- الگوی نام - میتواند به صورت مستقیم نام موجودیت را تعیین کند یا از الگو استفاده شود که با استفاده از متاداده پیام به نام واقعی موجودیت ترجمه خواهد شد.
- زمان انقضای حافظه کش موجودیتها - حداکثر زمان ذخیره سوابق موجودیت هدف یافته شده را به ثانیه تعیین میکند. مقدار 0 به این معنی است که سوابق هرگز منقضی نمیشوند.
پیام در موارد زیر از طریق زنجیره شکست ارسال خواهد شد:
- زمانی که نوع موجودیت مبدأ پشتیبانی نمیشود.
- موجودیت هدف وجود ندارد.
در سایر موارد، پیام از طریق زنجیره موفقیت ارسال خواهد شد.
نکته: از نسخه 2.3 ThingsConnect، گره قانون قابلیت حذف رابطه از مبدأ پیام ورودی به موجودیت مشخص یا به لیستی از موجودیتها را بر اساس جهت و نوع دارد، که با غیرفعال کردن گزینه مربوطه در تنظیمات گره قانون انجام میشود.
گره رویدادهای GPS Geofencing
پیامهای ورودی را بر اساس پارامترهای GPS تولید میکند. مختصات طول و عرض جغرافیایی را از دادهها یا متاداده پیام ورودی استخراج کرده و رویدادهای مختلفی را بر اساس پارامترهای پیکربندیشده (حصار جغرافیایی) برمیگرداند.
گره قوانین بهطور پیشفرض اطلاعات پیرامونی را از فراداده پیام استخراج میکند. اگر گزینه "استخراج اطلاعات پیرامونی از فراداده پیام" غیرفعال باشد، باید اطلاعات اضافی پیکربندی شوند.
استخراج اطلاعات پیرامونی از فراداده پیام دو گزینه برای تعریف منطقه بر اساس نوع پیرامون وجود دارد: چندضلعی و دایره.
فراداده پیام ورودی باید شامل کلیدی با نام "پیرامون" و ساختار دادهای زیر باشد:
- چندضلعی
[[latitude1,longitude1],[latitude2,longitude2], ... ,[latitudeN,longitudeN]]
- دایره
{"latitude":"value1","longitude":"value2","radius":"value3","radiusUnit":"KILOMETER"}
کلیدهای "latitude" و "longitude" مختصات نقطه را نشان میدهند.
کلید "radius" فاصله از نقطه مختصات تا دایره را مشخص میکند.
تمام مقادیر این کلیدها از نوع دادهای اعشاری با دقت مضاعف هستند.
کلید "radiusUnit" نیازمند مقدار خاصی از لیستی شامل METER، KILOMETER، FOOT، MILE، NAUTICAL_MILE است (باید با حروف بزرگ نوشته شود).
استخراج اطلاعات پیرامونی از پیکربندی گره: دو گزینه برای تعریف منطقه بر اساس نوع پیرامون وجود دارد:
- چندضلعی
- دایره
انواع رویدادها
چهار نوع رویداد توسط گره قوانین ژئوفنسینگ مدیریت میشود:
- Entered (ورود): هنگامی گزارش میشود که عرض و طول جغرافیایی پیام ورودی برای اولین بار در محدوده پیرامون مورد نظر قرار میگیرند.
- Left (خروج): هنگامی گزارش میشود که عرض و طول جغرافیایی پیام ورودی برای اولین بار خارج از محدوده پیرامون مورد نظر قرار میگیرند.
- رویدادهای Inside (داخل) و Outside (خارج) برای گزارش وضعیت فعلی استفاده میشوند.
مدیر میتواند آستانه زمانی برای مدت گزارش رویدادهای داخل یا خارج را پیکربندی کند. به عنوان مثال، زمانی که حداقل زمان داخل به یک دقیقه تنظیم شود، فرستنده پیام ۶۰ ثانیه پس از ورود به منطقه به عنوان داخل محدوده تلقی میشود. حداقل زمان خارج تعیین میکند که چه زمانی فرستنده پیام به عنوان خارج از محدوده در نظر گرفته میشود.
زنجیره خرابی زمانی استفاده خواهد شد که:
- پیام ورودی فاقد کلیدهای پیکربندی شده برای عرض یا طول جغرافیایی در دادهها یا فرادادهها باشد.
- تعریف پیرامون وجود نداشته باشد.
گره پاسخ به فراخوان REST
پاسخ به فراخوان API که در ابتدا به موتور قوانین ارسال شده است را ارسال میکند.
این گره انتظار دریافت پیامهایی با هر نوع پیام دارد. پیام ورودی را بهعنوان پاسخی به فراخوان API ارسال شده به موتور قوانین، ارسال میکند.
پیکربندی:
ارسال دادهها یا پیامها از یک منبع محلی (Push to cloud)
پیامها را از لبه به ابر ارسال میکند. این گره تنها در لبه استفاده میشود تا پیامها را به ابر ارسال کند. هنگامی که پیامی وارد این گره میشود، به یک رویداد ابری تبدیل شده و در پایگاه داده محلی ذخیره میگردد. این گره پیامها را بهطور مستقیم به ابر ارسال نمیکند، بلکه رویداد(هایی) را در صف ابر ذخیره میکند.
از انواع فرستنده زیر پشتیبانی میکند:
- DEVICE (دستگاه)
- ASSET (دارایی)
- ENTITY_VIEW (نمایش موجودیت)
- DASHBOARD (داشبورد)
- TENANT (مستأجر)
- CUSTOMER (مشتری)
- EDGE (لبه)
همچنین از انواع پیامهای زیر پشتیبانی میکند:
- POST_TELEMETRY_REQUEST (درخواست ارسال تلومتری)
- POST_ATTRIBUTES_REQUEST (درخواست ارسال ویژگیها)
- ATTRIBUTES_UPDATED (بهروزرسانی ویژگیها)
- ATTRIBUTES_DELETED (حذف ویژگیها)
- ALARM (هشدار)
در صورت موفقیتآمیز بودن ذخیرهسازی رویداد لبه در پایگاه داده، پیام از طریق مسیر Success هدایت میشود.
پیام در موارد زیر از طریق زنجیره خرابی هدایت خواهد شد:
- گره نتوانسته است رویداد لبه را در پایگاه داده ذخیره کند.
- نوع فرستنده (originator) غیرقابل پشتیبانی وارد شده است.
- نوع پیام غیرقابل پشتیبانی وارد شده است.
Title text example
پیامها را از ابر (Cloud) به لبه (Edge) ارسال میکند. فرستنده پیام باید به لبه خاصی نسبت داده شود یا خود فرستنده پیام باید موجودیت لبه (EDGE) باشد. این گره فقط در نمونههای ابر استفاده میشود تا پیامها را از ابر به لبه منتقل کند. هنگامی که پیامی به این گره میرسد، به یک رویداد لبه تبدیل شده و در پایگاه داده ذخیره میشود. این گره پیامها را بهطور مستقیم به لبه ارسال نمیکند، بلکه رویداد(هایی) را در صف لبه ذخیره میکند.
پشتیبانی از انواع فرستندهها:
- DEVICE (دستگاه)
- ASSET (دارایی)
- ENTITY_VIEW (نمایش موجودیت)
- DASHBOARD (داشبورد)
- TENANT (مستأجر)
- CUSTOMER (مشتری)
- EDGE (لبه)
همچنین از انواع پیامهای زیر پشتیبانی میکند:
- POST_TELEMETRY_REQUEST (درخواست ارسال تلومتری)
- POST_ATTRIBUTES_REQUEST (درخواست ارسال ویژگیها)
- ATTRIBUTES_UPDATED (بهروزرسانی ویژگیها)
- ATTRIBUTES_DELETED (حذف ویژگیها)
- ALARM (هشدار)
در صورت موفقیتآمیز بودن ذخیرهسازی رویداد لبه در پایگاه داده، پیام از طریق مسیر Success هدایت میشود.
پیام در موارد زیر از طریق زنجیره خرابی هدایت خواهد شد:
- گره نتوانسته است رویداد لبه را در پایگاه داده ذخیره کند.
- نوع فرستنده (originator) غیرقابل پشتیبانی وارد شده است.
- نوع پیام غیرقابل پشتیبانی وارد شده است.