عناوين الدرس

جولة حول العقد الأساسية

مبتدئ

مقدمة :

في هذا الدرس سوف نلقي نظرة على مجموعة أساسية من العقد الموجودة افتراضيا في  Node-REDثم  عرض مجموعة موسعة من العقد التي يدعمها FRED .

لكل عقدة، سترى لمحة موجزة عن وظائفها، و إشارة منها إلى مثال في سلسلة الدروس ، بحيث يمكنك النظر بمزيد من التفاصيل في كيفية التعامل مع العقدة، هذا الدرس هو قسم مرجعي. ومع ذلك، يجب أن يكون لديك فكرة عن الوظائف الأساسية المتاحة لك خلال استخدام العقد عندما تبدأ في صياغة التدفقات الخاصة بك .

عقد الـ Node-RED الإفتراضية :

عندما يتم تثبيت Node-RED  على جهازك مثل الراسبيري باي و Beagleboard ، ستظهر لك المجموعة الافتراضية من العقد. هناك ثمانية فئات رئيسية من العقد في التثبيت الافتراضي : المدخلات(input) ، المخرجات  (output) ، functions ، والاجتماعي (social)  و التخزين (storage)و تحليل (analysis) ، المتقدمة ( advanced) و الراسبيري باي ، قم بإلقاء نظرة على الشكل التالي :

basic-nodes-and-flows

عقد الإدخال (Input Node) :

هناك 7 عقد المدخلات الأساسية المثبتة بشكل افتراضي . أنها تغطي اليات الاتصال الأساسية التي يتم استخدامها في تطبيقات انترنت الأشياء . بدأ من البروتوكولات منخفضة المستوى مثل UDP و TCP  من خلال البروتوكول عالي المستوى HTTP  و النشر/والاشتراك MQTT .

اسم العقدة الوصف أمثلة على العقد
 inject لتوليد الطابع الزمني أو نص تم تكوينه من قبل المستخدم في رسالة . يمكن تكوينها يدوينا بإستخدام زر الضخ على الجانب الأيسر للعقدة أو في أوقات محددة باستخدام (Cron) . بناء التدفق الأول (Hello World)
 catch  تقوم بإلتقاط الأخطاء التي ألقاها العقد الأخرى على نفس التبويب. إذا ألقت عقدة خطأ أثناء التعامل مع الرسالة، فإن التدفق في العادة يتوقف. هذة العقدة يمكن استخدامها لالتقاط تلك الأخطاء و إرجاع الرسالة مع تفصيل الخطأ و عقدة المصدر و النوع.
 mqtt للإشتراك إلى MQTT broker  و الاستماع على موضوع معين، فتعيد أي بيانات منشورة حول هذا الموضوع كرسالة جديدة . ويدعم مستويات الخدمة و الاحتفاظ بالبيانات الأخيرة .   تلقي JSON عبر رسالة MQTT
 http يتلقى طلبات HTTP، مما يسمح للـ Node-RED  لتكون بمثابة خادم الويب الأساسي.  يتم تسليم هيكل HTTP كرسالة مخرجة كرد. يمكن أن تحتوي الرسالة على URL – البيانات المشفرة أو JSON . بناء خدمة ويب بسيطة باستخدام عقد HTTP
websocket يوفر نقطة النهاية للمتصفح لتأسيس اتصال websocket  مع Node-RED . يقدم اتصال duplex  لمجموعات المتصفح/الخادم . استخدام Websockets مع Node-RED
 tcp تستخدم لقبول طلبات TCP  الواردة على منفذ محدد أو للاتصال إلى منفذ TCP البعيد . تنتج رسائل تحتوي على بيانات TCP
حيث تولد رسائل تحتوي على بيانات TCP إما منفردة أو سلسلة من buffer أو string أو base64 encode .
udp تستخدم لقبول حزم(مجموعة الرسائل)UDP  الواردة على منفذ معين. يولد الرسائل التي تحتوي على بيانات UDP كـ BUFFER , String أو base64 string .
 serial in يقرأ من المنفذ التسلسلي على الجهاز المحلي. يمكن إعدادها لقراءة buffers أو لفترة زمزمنية محدودة أو عند الأنتهاء من السطر.

عقد الإخراج (Output Nodes) :

عقد الإخراج(output Nodes) هي صورة طبق الأصل من المجموعة الأساسية لعقد الإدخال (input Nodes)  و توفر وسيلة لإرسال البيانات على نفس مجموعة البروتوكولات mqtt,http,UDP  .

اسم العقدة الوصف أمثلة على العقد
debug يوفر وسيلة بسيطة لعرض الرسائل على لوحة الإخراج (تبويب debug) . يمكن تهيئتها لعرض msg.payload فقط او msg object كامل . بناء التدفق الأول (Hello World)
تنبيهات الطقس
تلقي JSON عبر رسالة MQTT
استخدام عقدة الإخراج MQTT لإختبار التدفق
mqtt للإشتراك في MQTT broker و مشاركة اي بيانات (msg.payload)  التي تتلقاها في الرسائل الواردة إلى الموضوع. وهو يعدم جودة مستويات الخدمة و الاحتفاظ في البيانات الأخيرة. استخدام عقدة الإخراج MQTT لإختبار التدفق
http ترسل إجابات إلى طلبات HTTP الواردة من عقدة إدخال HTTP . ويتم تحديد محتوى الرسالة من خلال msg.payload ، و يمكن أن تحتوي على رأس وتعريف رمز الحالة .  بناء خدمة ويب بسيطة باستخدام عقد  HTTP
websocket يرسل msg.payload  على websocket  . إذا تم تعريب msg_session ، فإنه يرسل إلى العميل الأصلي، وإلا يتم بثه إلى جميع العملاء.
tcp الردود على منفذ TCP الذي تم إعداده. ويمكن أيضا أن تستخدم للإرسال إلى منفذ معين. إرسال طلبات TCP
 udp يرسل رسالة UDP  إلى المضيف (host – ip address) الذي تم تكوينه و المنفذ .يدعم البث (broadcast) . مثل معظم العقد، يتم تهيئتها من خلال واجهة المستخدم أو خصائص الرسالة
serial out يرسل إلى المنفذ التسلسلي المحدد. يمكن تهيئتها لإرسال سطر جديد اختياري بعد أي حمولة رسالة .

عقد Function :

: تتضمن فئة عقد function  مجموعة متنوعة من العقد التي تنفذ وظائف معالجة محددة. هذة المجموعة تمتد من عقد Delay و التبديل(Switch) إلى عقدfunction  الخاصة بالبرمجة .

اسم العقدة الوصف أمثلة على العقد
function عقدة function  للبرمجة. يتم استخدام الجافا سكريبت (JavaScript) ، العقدة يمكن أن تكون مصممة لتنفيذ معالجة معقدة على الرسائل الواردة وتوليد رسالة او اكثر كمخرج.  بناء التدفق الأول (Hello World)تنبيهات الطقس
إرسال طلبات TCP
template عقدة القالب بشكل عام هي واجهة للمستخدم ، هذة العقدة تأخذ الرسالة المدخلة التي تحتوي على زوج من (الاسم:القيمة ) و يتم درجهم في قالب. مفيدة لبناء الرسائل، HTML ، وتكوين الملفات .
delay العقدة بشكل عام هي التي تؤخر الرسائل إلى وقت محدد أو عشوائي. ويمكن أيضا أن يتم تهيئتها للتحكم في تدفق الرسائل ( 10 رسائل كل ثانية ( .
trigger تنشئ رسالتين كمخرج مفصولتين بفترة زمنية معينة كلما تلقت رسالة مدخلة . كما يمكن استخدامها كمؤقت الحراسة (watchdog timer) . استخدام التويتر للتحكم بالراسبيري باي
comment عقدة التعليق يتم تهيئتها لتحتوي على عنوان و نص . وهي مفيدة جدا عند عمل تدفقات معقدة .  بناء التدفق الأول (Hello World)
http request يسمح لك لإنشاء و إرسال طلب HTTP  إلى عنوان URL معين . بطريقة (PUT , GET) تحتوي على رأس و حمولة payload  ويتم تهيئتها من خلال واجهة المستخدم أو برمجيا.
tcp request هي عقدة طلب TCP بسيطة. ترسل msg.payload إلى خادم منفذ tcp  وتتوقع الاستجابه. يمكن تهيئتها لانتظار البيانات، او حرف معين ، او العودة مباشرة. إرسال طلبات TCP
switch هذه العقدة تعمل على توجية الرسائل بناءا على خصائصهم. يتم  تهيئة الخصائص باستخدام واجهة المستخدم ، حيث يمكنك استخدام المنطق (<،>،=< ….) على خصائص الرسالة. استخدام عقدة التبديل لتوجية الرسالة
change عقدة التغيير يمكن استخدامها لتعيين أو تغيير أو حذف خصائص الرسائل الواردة. وهناك مجموعة متنوعة من قواعد التهيئة التي تسمح بعمل تغيرات معقدة بما في ذلك البحث و الاستبدال في msg.payload . التلاعب في محتوى الرسائل بإستخدام عقدة التغيير
range عقدة Scaling  من شأنها تعيين المدخلات الرقمية إلى مخرجات جديدة . وهي مفيدة لتحويل أو إحاطة نطاقات قيم المدخلات، مثل درجة الحرارة.

 

اسم العقدة الوصف أمثلة على العقد
csv هذه العقدة تقوم بتوزييع msg.payload  و تحاول تحويل من/إلى CSV  . إذا تلقت سلسلة، فإنها تخرج كائن جافا سكريبت ، واذا استقبلت كائن جافا سكريبت (JavaScript) ، فإنها تقوم بإخراج سلسلة CSV .
html استخراج العناصر من وثيقة HTML  في msg.payload  باستخدام محدد شكلي ( CSS ) . بالأساس يسمح لك لتحليل خروج HTML  و إرجاع مجموعة من العناصر التي تتطابق.
json هذه العقدة تقوم بالتحويل من/إلى كائنJSON  . إذا تمت استقبال كائن جافا سكريبت (JavaScript) ، فتقوم بإخراج النواتج JSON  . أما إذا تلقت JSON ، فتقوم بإخراج كائن جافا سكريبت (JavaScript) .   تلقي JSON عبر رسالة MQTT
xml هذه العقدة تقوم بالتحويل من/إلى صيغة XML  . إذا تلقت كائن جافا سكريبت (JavaScript) ، فتقوم بإخراج سلسلة XML، أما إذا استقبلت سلسلة XML ، فتقوم بإخراج كائن جافا سكريبت (JavaScript) .
rbe تقوم بتوليد الرسالة فقط إذا طرأ تغيير مختلف على المدخلات السابقة (سلسلة أو رقم )، أو إذا تغيرت المدخلات بمقدار معين (في حال وضع deadband) – فقط للأرقام . استخدام عقدة RBE

 عقد Social :

عقد وسائل الاعلام الاجتماعية الأساسية تدعم التفاعل مع البريد الإلكتروني و التويتر. فإنها تتيح للتدفقات لإرسال أو استقبال رسائل البريد الإلكتروني ، أو إرسال أو تلقي تويت.

اسم العقدة الوصف أمثلة على العقد
email in يمكن تهيئتها لقراءة عدة مرات من خادم IMAP  وإرجاع بريد إلكتروني جديد . وضع msg.topic  إلى موضوع  البريد الإلكتروني و إما وضع msg.payload  إلى محتوى نص البريد الإلكتروني أو msg.html إذا كان البريد الإلكتروني هو HTML .
twitter in يقوم بإرجاع تغريدة (tweets) كرسائل . يمكن استخدامها للبحث في العام أو على حساب المستخدم عن تغريدات تحتوي على مصطلح البحث الذي تم تهيئته بواسطة المستخدم أو رسائل المباشرة الواردة من قبل المستخدم. استخدام التويتر للتحكم بالراسبيري باي
email out يرسل رسالة واردة كرسالة بريد إلكترونيعبر خادم IMAP الذي تم إعداده. وسيتم تحويل البيانات الثنائية (binary data) إلى المرفق.  تنبيهات البريد الالكتروني
twitter out يقوم بتغريد msg.payload  على الحساب الذي يتم إعداده. يمكن ارسال الرسائل المباشرة و سيتم ارسال البيانات الثنائية كصورة .  تنبيهات الطقس

عقد التخزين :

العقدة الإفتراضية المحددة للتخزين، لأنها تستهدف أجهزة مثل الراسبيري باي  المحدودة للغاية ، و تركز على تخزين الملف .

basic-nodes-and-flows

ملاحظة : FRED  لأنه عبارة عن خدمة سحابية ، فإنه لا يدعم عقد الملفات الأساسية. وبدلا من ذلك يستبدل هذه مع مجموعة متنوعة من عقد التخزين تتراوح بين Mongo إلى Dropbox  . ومع ذلك ، للتاكد و تغطية هذة العقد الإفتراضية قم بثبيت Node-RED على جهازك .

اسم العقدة الوصف
tail تضيف ذيل إلى الملف الذي تم إعداده. تعمل على انظمة (Linux/Mac) فقط . هذه العقدة لا تعمل على ملف انظمة ويندوز، كما أنه يعتمد على الامر tail –F.
file in يقرأ الملف المحدد و يرسل المحتوى كـ msg.payload ، واسم الملف كـ msg.filename .
يمكن تهيئة اسم الملف في العقدة. إذا ترك فارغا، فإنه يجب تعيين على msg.filename في الرسالة الواردة .
file تقوم بكتابة msg.payload إلى الملف المحدد . يمكن تهيئة اسم الملف في العقدة. إذا ترك فرغا، فإنه يجب تعيينه على msg.filename في الرسالة الواردة . السلوك الافتراضي لها هي الإلحاق إلى الملف. ويمكن تغيير ذلك إلى الكتابة فوق الملف كل مرة . على سبيل المثال ، إذا كنت ترغب في إخراج صفحة ويب ثابته أو تقرير .

عقد التحليل (Analysis nodes):

عقد التحليل تنفذ التحاليل القياسية على الرسائل الواردة. العقدة الوحيدة الت قدمت هي عقدة sentiment ،والتي يمكن استخدامها في المحاولة و لتحديد الـ sentiment للرسالة الواردة على أساس الكلمات المستخدمة في الرسالة .على سبيل المثال ، البريد الإلكتروني أو التويتر .

اسم العقدة الوصف أمثلة على العقد
sentiment عقدة sentiment  تقوم بتحليل msg.payload  و تسجل نتيجة مشاعر الرسالة على أساس تحليل الكلمة. وتضيف كائن msg.sentiment  الذي يحتوي على الناتج AFINN-111 كـ msg.sentiment.score  . و النتيجة عادة تتراوح من 5- إلى 5 .

العقد المتقدمة (Advanced nodes) :

وهناك مجموعة من العقد المتنوعة التي تقدم أنواع مختلفة من الوظائف.

اسم العقدة الوصف
watch تراقب دليل أو ملف لإجراء التغييرات. يمكن إدخال قائمة من الدلائل مفصولة بفواصل أو الملفات. وسوف تحتاج إلى وضع علامات اقتباس “…..” حول أي مسافات. على نظام الويندوز، يجب عليك استخدام خطوط مائلة مزدوجة // في جميع اسماء الدليل.
يتم وضع إسم الملف كاملا للملف الذي تغير فعلا في msg.payload ، في حين يتم استرجاع نسخة stringfied من قائمة المراقبة في msg.topic  .
يحتوي الـ msg.file  على اسم قصير للملف الذي تغير. msg.type يحتوي على نوع التغير، عادة اما ملف او دليل، في حين msg.size  بحمل حجم الملف بالبايت (bytes) .
feedparse هذه العقدة تراقب RSS/atom feed  للمدخلات الجديدة و توفر إدخالات جديدة كالرسائل . ويمكن تهيئتها للاستعلام عن التغذية في فترة زمنية محددة .
exec يستدعي أمر النظام ويوفر ثلاث مخرجات : stdout, stderr, return code . افتراضيا يستخدم exec()، الذي يستدعي الأمر ، وينتظر الانتهاء ، ومن ثم إرجاع النتيجة كاملة دفعة واحدة ، جنبا إلى جنب مع أي أخطاء.

عقد الراسبيري باي (Raspberry Pi nodes) :

اسم العقدة الوصف أمثلة على العقد
rpi_gpio in عقدة الراسبيري باي الخاصة بالادخال. تولد msg.payload إما 0 أو 1 ، وهذا يتوقف على حالة إدخال الدبوس (pin) . يمكنك ايضا تفعيل المدخل pullup resistor أو pulldown resistor.
تم تعيين msg.topic إلى pi/{رقم Pin}
يتطلب مكتبة RPi.GPIO بايثون نسخة 0.5.8 (أو الأحدث) من أجل العمل .
ملاحظة : نحن نستخدم أرقام الـ pin  الفعلية على موصل P1 كما انها أسهل لتحديد الموقع.
rpi_gpio out عقدة الراسبيري باي الخاصة بالإخراج. تتوقع msg.payload  مع إما 0 أو 1 (true أو false) . وسوف يتم تعيين الدبوس إما HIGH أو LOW  اعتمادا على القيمة التي يتم تمريرها . ويمكن أيضا تعيين القيمة الأولية للدبوس وقت نشر التدفق إما 0 أو 1 . عند إستخدام PWM ، فهي تتوقع قيمة المدخلات بين 0-100 .
يتطلب مكتبة RPi.GPIO بايثون نسخة 0.5.8 (أو الأحدث) من أجل العمل .
rpi_mouse عقدة راسبيري باي زر الماوس. يولد msg.payload مع إما 1 أو 0 عندما يتم الضغط على زر الماوس المحدد ثم تحريره. يحدد أيضا msg.button إلى قيمة الرمز ، 1=اليسار، 2=اليمين ، 4= الوسط حتى تتمكن من العمل خارج أي زر او مجموعة تم الضغط عليها.