تستخدم التدفقات الفرعية (sub-flows) لإنشاء جزء قابل لإعادة الاستخدام من التدفق، عن طريق تحويل جزء من التدفق إلى عقدة. يمكن للتدفقات الفرعية توفر وسيلة لإعادة استخدام جزء من التدفق في التدفقات الأخرى. التدفقات الفرعية يمكن أيضا ضم التدفقات المعقدة في عقدة للسماح للتدفق ليظهر أكثر بساطة .
خلال هذا الدرس سيتم التعرف على التدفقات الفرعية (sub-flows) و كيفية إنشاءها لإستخدامها في تدفقات أخرى .كما سيتم الاستعلام عن الطقس من خلال Slack .
التدفقات الفرعية (Sub-Flows) :
التدفق الفرعي هو مجموعة من العقد المتصلة التي يمكن إعادة استخدامها بسهولة في تدفق اكبر . التدفقات الفرعية (Sub-flows) هي لإعادة استخدام أجزاء التدفق في الـ Node-RED كعقد كاملة في لوحة العقد التي يمكنك سحبها إلى التدفقات الخاصة بك. في حين أنه من الممكن حفظ تدفق الأجزاء بإستخدام مكتبة التدفق (كما هو موضح بنهاية الدرس 2) ، وجود أجزاء التدفقات في لوحة العقدة يوفر مستوى من التغليف و المعلومات المخفية. التغليف يعني تنظيمه في عنصر واحد (عقدة) يمكن ان تشير إلى استخدام اسم واحد. إخفاء المعلومات يعني أن الأعمال الداخلية للتدفق شبه مخفية .
يمكن إنشاءه بطريقيتين : إما عن طريق تحديد أجزاء التدفق الخاص بك وإنشاء تدفق فرعي ، أو إنشاء التدفق الفرعي من الصفر . لإنشاء تدفق فرعي عن طريق التحديد، قم بتحديد العقد ، ثم الضغط على menu > Subflows> Selection to Subflows. وهذا سينشئ عقدة تحتوي على التدفق تحت فئة “sub-flows” على لوحة العقد.
يمكنك أيضا إنشاء تدفق فرعية من الصفر عن طريق النقر على menu > Subflows > Create Subflow . بعد إنشاء التدفق الفرعي الجديد ، أو التعديل على تدفق موجود مسبقا بواسطة النقر المزدوج على العقدة في لوحة العقد، سوف تظهر علامة تبويب التدفق الفرعي في الجزء الرئيسي.
على عكس التويب العادي، هذا التبويب يحتوي على أربع أزرار في أعلى اليسار : “edit properties” ، “+ input”, “+ output” and “delete subflow”. في هذا الجزء، يمكنك تعديل التدفق الفرعي، كإضافة العقد عن طريق السحب و الإسقاط لهم إلى منطقة عمل التدفق الفرعي وربطهم بالاسلاك حسب الحاجة . لربط التدفق الفرعي مع التدفقات الأخرى ، قم بإضافة عقدة إدخال واحدة و أي عدد من عقد الإخراج، وذلك باستخدام ازرار + input و +output .
إنشاء التدفق الفرعي :
دعونا ننشئ تدفق فرعي الذي يستخدم التبديل للمخرجات اعتمادا على الـ sentiment للرسائل الواردة. حيث يمكنك استخدم هذا التدفق لتحليل الرسائل القادمة من مصادر مختلفة، بما في ذلك التويتر . أولا ، قم بإنشاء تدفق فرعي باستخدام :Menu>Create Subflow. قم بسحب عقدة تحليل Sentiment (Sentiment analysis node) إلى لوحة عمل التدفق، ثم قم بسحب عقدة التبديل (switch) ، قم بإعداد عقدة التبديل (switch) كما هو موضح بالصورة .
هذا سوف يظهر الرسالة إلى المخرج 1 ، اذا كانت النتيجة سالبة، و لمخرج 2 ، اذا كان محايدا، ولمخرج 3 ، إذا كان إيجابيا. الآن، قم بإضافة عقدة ادخال و ثلاث عقد إخراج . ثم قم بربط العقد معا كما هو موضح بالصورة أدناه :
لتعديل اسم التدفق الفرعي، انقر على ‘edit properties’في لوحة عمل التدفق قم بتسميتها شيء مثل Sentiment Switch . سترى العقدة الجديدة تم إدراجها أعلى لوحة العقدفي قسم التدفقات الفرعية ( sub-flows).
دعونا نستخدم هذا لإخراج الرسائل الايجابية فقط عن لعبة الـ Hocky القادمة من التويتر. قم بإضافة علامة تبويب جديدة لعمل تدفق، ثم قم بسحب عقدة التويتر،و عقدة التدفق الفرعي Sentiment Switch الذي قمت بإنشائها، وعقدة التصحيح ،كما هو مبين بالشكل أعلاه. قم بتوصيل عقدة التويتر إلى مدخل عقدة Sentiment Switch و عقدة debug إلى ثالث مخرج لعقدة Sentiment Switch. قم بتهيئة عقدة التويتر عن طريق اعتماد الحساب و إعدادها كما هو موضح أدناه :
قم بنشر deploy ، بعد دقيقة أو نحو ذلك، نأمل أن شخص قام بالتغريدة حول شيءا إجابيا عن الـهوكي ، وسترى بعض النتائج في لوحة الإخراج على تبويب debug .
تغليف عقد Function باستخدام التدفقات الفرعية :
التدفقات الفرعية هي أيضا وسيلة لحزم عقد الـ Function بحث تظهر في لوحة العرض الخاصة بك و يمكن سحبها إلى التدفقات الخاصة بك لتسهيل إعادة الاستخدام. ولتوضيح ذلك سنقوم بعمل حزمة لوظيفة العد داخل التدفق الفرعي. للبدء ، قم بإنشاء علامة تبويب لتدفق فرعي جديد. ثم قم بإسقاط عقدة function و إضافة الكود الموضح أدناه :
if (!context.value) { context.value = 0; } context.value +=1; msg.count = context.value; return msg;
إنشاء تدفق فرعي كما شرح بالسابق، ثم قم بربط المدخلات و المخرجات على عقدة function لإنشاء التدفق الفرعي كما هو موضح بالصورة أدناه ، قم بتسمية التدفق الفرعي بـ ‘Counter’ .
لإختبار التدفق ، قم بإضافة تبويب تدفق جديد ، ثم قم بإضافة عقدة inject و عقدة debug ، كما هو مبين بالشكل أدناه . قم بالتأكد بإختيار ‘complete msg object’ على عقدة debug لرؤية خاصية عدد الرسائل التي تم إضافتها .
الآن لديك التدفق الفرعي ‘Counter’ يمكنك استخدامه في اي وقت تشاء في مواقع متعددة في التدفق .
إنشاء Slack Bot للاستعلام عن البيانات :
دعونا نختم هذا الدرس مع مثال أكثر تعقيدا يستخدم أحد العقد ضمن المجموعة الموسعة التي تقدمها FRED -عقدة slack bot و الاستفسارات عن البيانات من منصة Openweathermap .
Openweathermap هي المنصة التي توفر بيانات توقعات الطقس في جميع أنحاء العالم. بإستخدام APIs من الموقع، أنت قادر على الاستعلام عن اي موقع في Slack . سوف تحتاج إلى اعداد حساب مطور على Openweathermap من أجل استخدام عقدة openweathermap في FRED .
في هذا المثال، سوف تتعلم كيفية بناء Slack التي تسمح لمستخدم Slack للإستعلام من منصة openweathermap و إرجاع بيانات الطقس على أساس ما تم الاستعلام عنه.
في هذا المثال سوف تحتاج إلى إنشاء عضوية Slack Bot (يمكنك الاطلاع على مزيد من المعلومات من هنـا) الذي من شأنه أن تكون بمثابة المستخدم الواقعي في تطبيق Slack الخاص بك .لذلك قم بإنشاء Bot جديد من خلال الرابط هنـا ، انظر إلى الصورة ادناه. إذا لم يكن لديك حساب Slack ، سيتم إرشادك من خلال إنشاء حساب قبل أن تتمكن من العودة إلى خدمة bot .
بعد إنشاء Slack Bot الخاص بك سوف تحصل على رمز (API Token) ، كما هو موضح بالصورة التالية :
بعد ذلك، سوف تحتاج إلى أن يكون لديك عقدة openweathermap المثبتة في FRED . ببساطة يتم تثبيت عقدة openweathermap من خلال “Add or Remove Nodes” من الشريط الجانبي .
للقيام بذلك، يجب عليك تسجيل الدخول إلى حساب FRED ، وإعداد لوحة جديدة للتدفق. قم بسحب و اسقاط عقدة Slack Bot إلى لوحة عمل التدفق. قم بالضغط مرتين على العقدة ليتم إضافة Slack Bot API الخاص بك ، كما هو مبين بالشكل أدناه. يمكنك الاستماع إلى قناه محددة عن طريق تعيينها في حقل Channel .
الآن قم بربط عقدة function و انقر مرتيين عليها ليتم تهيئتها. سوف تحتاج إلى إعداد مخرجين إلى عقدة function .
قم بنسخ ولصق الكود أدناه، وظيفية الكود هي تحليل استعلام يستند إلى نص:
var query = msg.payload.split(","); if (query.length == 2){ msg.location={ city:query[0], country:query[1] } return [msg, null]; } else { msg.payload="invalid search"; return [null,msg] }
وظيفة عقدة Function هو تحليل الرسائل الواردة من قبلBot الخاص بنا . إذا كانت الرسائل تحتوي على كلمتين ويتم فصل الكلمات بواسطة “,” ، سيتم قطع(فصل) أجزاء السلسلة و إنشاء معلمة استعلام في راسلة الإخراج. وهذا الذي سيكون في متناول اليد في الخطوة التالية .
بعد ذلك، يتم ربط عقدة openweathermap إلى عقدة Function ولا تنسى إضافة API في علامة التبويب التهيئة في الحقل المخصص .
بعد ذلك، يتم ربط عقدة Function بعد عقدة openweathermap لتحليل استجابة الانتاج.
ثم قم بإضافة التعليمات البرمجية التالية داخل عقدة Function المضافه:
var newMsg = msg; newMsg.payload="The city you asked was "+ msg.location.city+", "+msg.location.country+", "+ "the weather is "+msg.payload.weather+" with "+ msg.payload.detail+". "+ "The temperature is "+msg.payload.tempc+"C right now."; return newMsg;
وأخيرا، سوف تحتاج إلى إضافة عقدة Slack bot للإخراج و تهيئتها مع Bot API Token و القناه. و تصميم التدفق النهائي لهذا الدرس موضح بالصورة أدناه :
الآن، لإختبار عمل التدفق، عد إلى صفحة الرئيسية Slack الخاصة بك ، ثم قم بإضافة الـ Botاالذي قمت بإنشاءه على قناه #general كما هو موضح بالصورة أدناه :
عند نشر التدفق و عد إلى الصفحة الرئيسية للـ Slack الخاصة بك وقم بكتابة Jeddah, SA ، سوف يقوم التدفق بالاستعلام عن الطقس منopenweathermap وتحليل بيانات توقعات الطقس إلى Slack bot ، سوف يظهر لك على Bot الخاص بك بيانات الطقس كما هو موضح بالصورة أدناه :