مشاريع Node-RED متوسطة التدفق (الجزء الثاني)

مبتدئ

image_pdf

مدخلات متعددة على عقدة function :

تم تصميم عقد function في Node-RED لمعالجة الرسائل ككيانات واحدة. ومع ذلك، قد تعتمك وظائفك في بعض الحالات على مصدرين منفصلين للبيانات. هناك العديد من الطرق للتعامل مع هذه الحالات في Node-RED . يستخدم النهج التالي كائن السياق (context) في Node-RED و الموضوعات للسماح لدالة الانتظار (function wait) لعدة رسائل للوصول من أجل العودة.  لقد تم عرض كيفية إعداد و استخدام بيانات السياق في الدروس السابقة .

سنبدأ من خلال ربط عقدتين inject، و عقدة Function ، وعقدة تصحيح كما هو موضح بالشكل التالي :

intermediate-flows-part2

سنقوم بتعديل عقدة Function وإضافة التعليمات البرمجية كما هو موضح أدناه. سيستخدم هذا الكود كائن السياق في Node-RED وإضافة عنصر البيانات.

context.data = context.data || {};
switch (msg.topic) {
    case "task1":
        context.data.task1 = msg.payload;
        msg = null;
        break;
    case "task2":
        context.data.task2 = msg.payload;
        msg = null;
        break;
    default:
        msg = null;
        break;
}

if(context.data.task1 != null && context.data.task2 != null){
    var ratio = context.data.task1 / context.data.task2;
    context.data=null;
    return {payload:ratio};
}else return msg;

شرح الكود:

السطر الأول، لتهيئة كائن السياق. ثم يتم استخدام switch statement  في السطر 2 ليتم البحث عن حقل الموضوع في الرسالة. يستخدم هذا لتعيين حقل task1 أو task2  للكائن context.data  .  وبالتالي يتم تجاهل أي موضوع رسالة أخرى. ثم يتحقق الشطر 16 لمعرفة ما إذا كانت الدالة قد تلقت رسائل من كلا النوعين من المواضيع (task1 and task2). إذا لم يكن الأمر كذلك، ترجع الدالة رسالة خالية (null) وتعود إلى انتظار رسالة أخرى. وإلا فإن السطر 17 يحسب النسبة وينتجها كرسالة.

قم بكتابة الكود اعلاه على عقدة Function كما هو موضح بالشكل التالي :

intermediate-flows-part2

قم بإعداد عقدة inject الأولى لإرجاع حمولة تحتوي على سلسلة من “3” ، مع موضوع “task1” .

intermediate-flows-part2

يجب عليك ايضا إعداد عقدة inject الثانية لإرجاع سلسلة الحمولة من “6” ، مع موضوع“task2” .

يمكنك بعد ذلك نشر التدفق (deploy) . قم بالنقر على الزر الأيسر لعقدة inject الأولى (task1: 3) . ستلاحظ ظهور رسالة تشير أن السلسلة تم ضخها عبر التدفق بنجاح، ولكن لن ترى أي شي على لوحة الإخراج عند تبويب debug . ثم قم بالنقر على الزر الأيسر لعقدة inject الثانية (task2: 6) . ستظهر رسالة تشير بنجاح ضح الرسالة، كما سيظهر على لوحة الإخراج النسبة كما هو موضح بالشكل التالي :

intermediate-flows-part2

X
تم إضافة المنتج إلى السلة بنجاح