Workflow Automation

تبسيط التعقيد: غوص عميق في Node-RED لأتمتة سير العمل

في مشهد تطوير البرمجيات الحديث، يواجه المطورون غالباً تحدي دمج الخدمات المتباينة. سواء كنت تربط مستشعراً لـ Raspberry Pi بلوحة تحكم سحابية، أو تنسق خدمات مصغرة، أو تبني خط أنابيب أتمتة قوي لأجهزة المنزل الذكي، فإن الشيفرة النمطية المطلوبة للتعامل مع طلبات HTTP، وتحليل JSON، وإدارة الحالة يمكن أن تصبح مرهقة. هنا تبرز Node-RED. مبنية على Node.js، تقدم Node-RED محرراً يعمل عبر المتصفح يسهل "ربط" الأجهزة وواجهات برمجة التطبيقات والخدمات عبر الإنترنت معاً، مما يخفض بشكل فعال حاجز الدخول لأتمتة سير العمل المعقدة دون التنازل عن القوة.

لماذا Node-RED لأتمتة سير العمل؟

في جوهرها، Node-RED هي أداة برمجة لربط الأجهزة المادية وواجهات برمجة التطبيقات والخدمات عبر الإنترنت. توفر محرراً يعمل عبر المتصفح يسهل إنشاء تدفقات باستخدام مجموعة واسعة من العقد في لوحة الأدوات التي تمثل كتل بناء قابلة لإعادة الاستخدام. ومع ذلك، ما يجعلها جذابة بشكل خاص للمطورين من المستوى المتوسط والمتقدم هو بنيتها التحتية. بينما تشجع الواجهة المرئية على النمذجة السريعة، يتم تخزين التدفق بأكمله كملف JSON، مما يسمح بإدارة الإصدارات، وإعادة الاستخدام، والتلاعب البرمجي.

على عكس منصات منخفضة الشيفرة التقليدية التي غالباً ما تحبسك في نظامها البيئي، تعمل Node-RED على Node.js. هذا يعني أنك لديك وصول إلى سجل npm بأكمله. إذا لم يكن التكامل المحدد موجوداً كعقدة مبنية مسبقاً، فيمكنك على الأرجح العثور على وحدة أو كتابة دالة مخصصة باستخدام JavaScript في ثوانٍ.

المفاهيم الأساسية: التدفقات، العقد، والرسائل

فهم Node-RED يتطلب استيعاب ثلاثة مفاهيم أساسية:

  • التدفقات (Flows): التدفق هو مجموعة من العقد المتصلة معاً لإنشاء سلسلة منطقية. يتم حفظ التدفقات كملفات JSON، مما يجعلها محمولة وسهلة المشاركة.
  • العقد (Nodes): العقد هي الكتل الفردية في تدفقك. تمثل المدخلات (أحداث التشغيل)، والمعالجة (الدوال، المفاتيح، الدمج)، والمخرجات (إرسال البيانات إلى الشاشات، قواعد البيانات، أو خدمات أخرى).
  • الرسائل (Messages): البيانات المتدفقة بين العقد مغلفة في كائن رسالة. بشكل افتراضي، تحتوي كل رسالة على خاصية payload، ولكن يمكنك توسيع هذا الكائن بخصائص مخصصة لنقل البيانات الوصفية alongside بياناتك.

مثال عملي: إنشاء عقدة دالة مخصصة

إحدى أقوى ميزات Node-RED هي القدرة على كتابة منطق JavaScript مخصص مباشرة داخل التدفق. بينما هناك مئات العقد المبنية مسبقاً لطلبات HTTP وقواعد البيانات SQL وموزعات MQTT، أحياناً تحتاج إلى منطق تحويل مخصص. تتيح لك العقدة function حقن JavaScript الذي يتلاعب بكائن الرسالة الوارد.

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

/**
 * تحويل الفهرنهايت إلى سلسيوس
 * يجب أن يكون msg.payload رقماً
 */

// استخراج قيمة درجة الحرارة من payload
var fahrenheit = msg.payload;

// التحقق من صحة المدخلات
if (typeof fahrenheit !== 'number') {
    // إذا لم يكن payload رقماً، ارمِ خطأً أو أعد قيمة فارغة
    // هنا نعيد قيمة فارغة ببساطة للإشارة إلى بيانات غير صالحة
    return null;
}

// التحويل إلى سلسيوس: C = (F - 32) * 5/9
var celsius = (fahrenheit - 32) * 5/9;

// التقريب إلى منزلتين عشريتين للنظافة
var roundedCelsius = parseFloat(celsius.toFixed(2));

// إنشاء كائن رسالة جديد بالقيمة المحولة
// نحافظ على سياق الرسالة الأصلية بنسخها، ولكننا نحدث payload
msg.payload = roundedCelsius;
msg.topic = "temperature/conversion";

// إرجاع الرسالة الجديدة لتمريرها إلى العقدة التالية
return msg;

في هذا المثال، نصل إلى كائن msg، الذي يتم توفيره تلقائياً بواسطة وقت تشغيل Node-RED. نقوم بتعديل payload وإضافة خاصية topic مخصصة. هذا يوضح كيف تربط Node-RED الفجوة بين تصميم سير العمل المرئي والبرمجة الأمرية. لا تحتاج إلى مغادرة المتصفح لكتابة منطق قوي، يتم التحقق من نوعه (بالحذر)، يدعم أتمتتك.

القابلية للتوسع والنشر

بينما تستخدم غالباً لمشاريع إنترنت الأشياء الهواة، فإن Node-RED جاهزة للإنتاج. تدعم التجميع (clustering)، مما يسمح لك بتشغيل نسخ متعددة من Node-RED خلف موزع حمل لتوفير توافر عالي. علاوة على ذلك، لأن التدفقات هي ملفات JSON، يمكنك نشرها في حاويات، أو آلات افتراضية، أو أجهزة طرفية باستخدام خطوط أنابيب CI/CD. يمكنك أيضاً تصدير التدفقات إلى مستودع مشترك أو استيرادها من لوحة المجتمع، مما يسرع دورات التطوير بشكل كبير.

الخاتمة

Node-RED هي أكثر من مجرد أداة لربط الأضواء الذكية؛ إنها منصة متعددة الاستخدامات لأتمتة سير العمل تحترم ذكاء المطور. من خلال الجمع بين واجهة مرئية وبديهية مع القوة الخام لـ Node.js وJavaScript، تتيح للفرق بناء ونشر وصيانة التكاملات المعقدة بسرعة غير مسبوقة. سواء كنت تقوم بنمذجة بوابة API جديدة أو تنسق تدفقات البيانات في بيئة إنترنت الأشياء، توفر Node-RED المرونة والتحكم اللازمين لتحويل الأفكار البسيطة إلى تدفقات عمل آلية وقوية.

Share: