0917-062-0010

مشاوره رایگان

9 صبح تا 9 شب

شنبه تا پنجشنبه

d986d988d8af d8b1d8af node red da86db8cd8b3d8aad89f d8a2d985d988d8b2d8b4 d988 d8b1d8a7d987d986d985d8a7db8c d8aad8b5d988db8cd8b1db8c 6567921214541

در این راهنما از طریق بررسی مثال‌های مختلف با نود رد آشنا خواهیم شد. نود رد یک محیط برنامه‌نویسی برای کار با اینترنت اشیا است. در این راهنما ابتدا شیوه نصب نود رد روی رایانه لوکال و رزبری پای را بررسی می‌کنیم، سپس کاربردهای برخی از مهم‌ترین گره‌های آن را معرفی کرده و با طرز کار درونی آن آشنا می‌شویم. با ما همراه باشید.

فهرست مطالب این نوشته
نود رد چیست؟

نصب نود رد

نصب با npm

نصب با داکر

نصب با snap

اجرای نود رد

کاربرد خط فرمان

باطل کردن تنظیمات منفرد

ارسال آرگومان‌ها به پردازش زیربنایی Node.js

نصب نود رد روی رزبری پای

آپدیت npm

نصب نود رد

آغاز Node-RED

اجرای Node-RED به عنوان یک سرویس

آغاز خودکار سرویس نود رد در زمان بوت سیستم

فایل پیکربندی نود رد

نودهای نود رد

نوار ابزار نود‌ها

مثالی از یک نود: دیباگ

اطلاعات نود

مستندات نود

مثالی از نود: inject

مدیریت پالت‌ها

تنظیمات

فلوهای نود رد

ساخت یک فلوی جدید

ساخت فلویی با DHT22

ساخت فلو با گره function

پیام‌ها و متغیرهای نود رد

پیام چه تفاوتی با متغیر دارد؟

شباهت‌های پیام‌ها و متغیرها

تفاوت‌های پیام‌ها و متغیرها

پیام‌ها در نود رد

متغیرها در نود رد

گره complete در نود رد

راه‌اندازی گره complete

گره catch در نود رد

راه‌اندازی گره ‌catch

گره‌های link out و link in

راه‌اندازی گره‌های link out و link in

گره Switch

راه‌اندازی گره سوئیچ

گره range در نود رد

راه‌اندازی گره range

گره delay در نود رد

راه‌اندازی گره delay

آزمایش اول: تأخیر ساده

آزمایش دوم: محدودسازی نرخ

نود trigger در نود رد

راه‌اندازی نود trigger

نود RBE در نود رد

راه‌اندازی نود RBE

ترفندهای نود رد

جستجوی نود

فعال یا غیرفعال کردن فلو

ساخت کتابخانه اختصاصی فلوها

کتابخانه تابع‌ها

سخن پایانی

faradars mobile

نود رد چیست؟

نود رد (Node-RED) یک ابزار برنامه‌نویسی است یا شاید بهتر باشد آن را محیط برنامه‌نویسی بنامیم. نود رد از رسم‌های گرافیکی و گره‌ها استفاده می‌کند، به طوری که اجزای منفردی را پشت سر هم چیده و در عمل یک برنامه می‌سازد. نکته جالب در مورد نود رد این است که محیطی گرافیکی دارد و از این رو می‌توان به صورت بصری یک برنامه ساخت. همچنین از سوی دیگر از طریق جاوا اسکریپت می‌توان کنترل کارکردی زیادی روی این برنامه اعمال کرد. جاوا اسکریپت یک زبان برنامه‌نویسی است که زیربنای نود رد را تشکیل می‌دهد.

آموزش اینترنت اشیا Internet of Things یا IoT با نرم افزار Node – RED
فیلم آموزش اینترنت اشیا Internet of Things یا IoT با نرم افزار Node – RED در تم آف

کلیک کنید

بنابراین به طور کلی می‌توان گفت که نود رد یک محیط برنامه‌نویسی است که درون مرورگر اجرا می‌شود. از نود رد می‌توان برای ساخت برنامه‌های گرافیکی استفاده کرد که «فلو» (Flow) نامیده می‌شوند. فلوها از گره‌ها تشکیل یافته‌اند که نمونه‌هایی از آن را می‌توانید به صورت اشیای مستطیلی در شکل زیر ببینید.

01 NR 05 10 SCREEN Introduction to Node Red examples and documentation 00 04 03 439 768x432 1

برای ساخت یک فلو می‌توانید از رابط کاربری کشیدنی-رها کردنی این برنامه بهره بگیرید. به این ترتیب می‌توان به سادگی گره‌ها را در پیکربندی‌های مختلف کنار هم چید تا برنامه‌ای تشکیل شود که کار مفیدی انجام می‌دهد. هر گره از قبل برنامه‌نویسی شده تا کار خاصی را انجام دهد. از این جهت گره‌ها را می‌توان به مفهوم تابع در زبان‌های برنامه‌نویسی مانند پایتون یا روبی تشبیه کرد. در برخی گره‌های نود رد می‌توان کد‌های جاوا اسکریپت نوشت و از این رو شبیه تابع‌های خاص در زبان‌های برنامه‌نویسی هستند.

نود رد چندین گره پیش‌فرض دارد، اما می‌توان برخی گره‌های جانبی نیز نصب کرد. همانند آردوینو در «نود رد» (Node-RED) نیز می‌توانید کتابخانه‌های ثالث را نصب کنید که در این مورد در ادامه مقاله بیشتر صحبت خواهیم کرد.

نام نود رد از فناوری زیربنایی این محیط برنامه‌نویسی یعنی Node.js گرفته شده است که یک فریمورک جاوا اسکریپت است. نود‌جی‌اس امکان ساخت اپلیکیشن‌هایی را به ما می‌دهد که بسیار سریع و کارآمد هستند و می‌توانند روی سخت‌افزارهای ارزان قیمتی مانند رزبری پای نیز اجرا شوند.

نود رد یک فناوری «متن-باز | اوپن سورس» (Open Source) است، در نتیجه افراد زیادی در توسعه آن مشارکت دارند. نود رد مدت‌های زیادی است که عرضه شده و از این رو کاملاً پایدار است و از سوی افراد علاقه‌مند و حتی برخی شرکت‌های بزرگ مورد استفاده قرار می‌گیرد.

نصب نود رد

نشانی وب‌سایت نود رد به صورت nodered.org (+) است. سری به این وب‌سایت بزنید تا با قابلیت‌های آن از جمله گره‌ها (nodes) و فلوها آشنا شوید. برای نصب لوکال نود رد نیاز داریم که قبلاً Node.js روی سیستم نصب شده باشد. امکان نصب از طریق npm، داکر و یا روش‌های دیگر مهیا است که در ادامه توضیح می‌دهیم.

نصب با npm

برای نصب نود رد می‌توانید از دستور npm که به همراه نود‌جی‌‌اس عرضه می‌شود استفاده کنید.

sudo npm install -g --unsafe-perm node-red

اگر از ویندوز استفاده می‌کنید، لزومی به استفاده از عبارت sudo در ابتدای دستور فوق وجود ندارد. با بهره‌گیری از دستور فوق می‌توانید نود رد را به صورت یک ماژول سراسری همراه با وابستگی‌هایش نصب کنید. اگر خروجی دستور در انتها به صورت زیر بود، به این معنا است که نصب موفقیت‌آمیز بوده است.

+ node-red@1.1.0
added 332 packages from 341 contributors in 18.494s
found 0 vulnerabilities

نصب با داکر

برای اجرای داکر در ساده‌ترین حالت باید از دستور زیر استفاده کنید.

docker run -it -p 1880:1880 --name mynodered nodered/node-red

برای کسب اطلاعات بیشتر در مورد داکر می‌توانید از این راهنما (+) کمک بگیرید.

  • مطلب پیشنهادی برای مطالعه: آموزش داکر Docker رایگان — از صفر تا صد و به زبان ساده

نصب با snap

اگر سیستم عاملی که استفاده می‌کنید از Snap پشتیبانی کند، می‌توانید با دستور زیر نود رد را از طریق آن نصب کنید:

sudo snap install node-red

زمانی که پکیج اسنپ نصب شد، یک کانتینر امن اجرا می‌شود و ازاین جهت ممکن است به برخی الزامات دیگر دسترسی نداشته باشد. برخی از این موارد شامل فهرست زیر هستند:

  • دسترسی به فضای ذخیره‌سازی اصلی ندارد و تنها می‌تواند در دایرکتوری‌های لوکال بنویسد یا بخواند.
  • به Gcc دسترسی ندارد که در صورت لزوم نصب کامپوننت‌های باینری نود مورد نیاز خواهد بود.
  • Git در صورت نیاز به استفاده از فیچرهای پروژه لازم خواهد بود.
  • دسترسی مستقیم به سخت‌افزار gpio
  • دسترسی به دستورهای بیرونی که فلوها به همراه گره ‌اجرایی استفاده می‌کنند.

بنابراین در صورتی که به هر کدام از موارد فوق نیاز خواهید داشت، بهتر است نسخه کامل نود رد را نصب کنید.

اجرای نود رد

زمانی که نود رد به صورت ماژول گلوبال نصب شد، دستور node-red می‌تواند برای آغاز به کار Node-RED در ترمینال مورد استفاده قرار گیرد. امکان استفاده از Ctrl-C برای بستن پنجره ترمینال و توقف نود رد نیز وجود دارد.

$ node-red
Welcome to Node-RED
===================
30 Jun 23:43:39 - [info] Node-RED version: v1.3.5
30 Jun 23:43:39 - [info] Node.js version: v14.7.2
30 Jun 23:43:39 - [info] Darwin 19.6.0 x64 LE
30 Jun 23:43:39 - [info] Loading palette nodes
30 Jun 23:43:44 - [warn] rpi-gpio: Raspberry Pi specific node set inactive
30 Jun 23:43:44 - [info] Settings file: /Users/nol/.node-red/settings.js
30 Jun 23:43:44 - [info] HTTP Static: /Users/nol/node-red/web
30 Jun 23:43:44 - [info] Context store: 'default' [module=localfilesystem]
30 Jun 23:43:44 - [info] User directory: /Users/nol/.node-red
30 Jun 23:43:44 - [warn] Projects disabled: set editorTheme.projects.enabled=true to enable
30 Jun 23:43:44 - [info] Creating new flows file: flows_noltop.json
30 Jun 23:43:44 - [info] Starting flows
30 Jun 23:43:44 - [info] Started flows
30 Jun 23:43:44 - [info] Server now running at http://127.0.0.1:1880/red/

در ادامه می‌توانید با رفتن به نشانی http://localhost:1880 در مرورگر از ادیتور نود رد بهره بگیرید. خروجی لاگ اطلاعات مختلفی را در اختیار شما قرار می‌دهد.

  • نسخه‌های نود رد و نود جی اس
  • خطاهایی که در زمان تلاش برای بارگذاری گره‌های پالت رخ می‌دهند.
  • مکان فایل تنظیمات و دایرکتوری کاربری
  • نام فایل فلو که استفاده می‌شود.

نود رد از فایل flows_.json به عنوان فایل پیش‌فرض فلوها بهره می‌گیرد. امکان تغییر دادن این فایل با عرضه نام فایل فلو به صورت آرگومان در دستور node-red وجود دارد.

کاربرد خط فرمان

نورد رد را می‌توان با استفاده از دستور node-red اجرا کرد. این فرمان می‌تواند آرگومان‌های مختلف بگیرد.

node-red [-v] [-?] [--settings settings.js] [--userDir DIR]
[--port PORT] [--title TITLE] [--safe] [flows.json|projectName]
[-D X=Y|@file]
گزینه توضیح
‎-p, –port PORT پورت TCP را تعیین می‌کند که ران‌تایم را گوش می‌دهد و مقدار پیش‌فرض آن 1880 است.
–safe Node-RED را بدون آغاز فلوها اجرا می‌کند. به این ترتیب می‌توان فلوها را در ادیتور باز کرد و بدون نیاز به اجرا تغییراتی در آن ایجاد نمود. زمانی که این تغییرات دیپلوی شوند، فلوها اجرا خواهند شد.
-s, –settings FILE فایل تنظیمات که استفاده خواهد شد را معین می‌کند. مقدار پیش‌فرض آن settings.js در userDir است.
–title TITLE عنوان پنجره پردازش را تعیین می‌کند.
-u, –userDir DIR دایرکتوری کاربر که استفاده می‌شود را تعیین می‌کند. که مقدار پیش‌فرض آن ~/.node-red است.
-v خروجی verbouse (تفصیلی) را فعال می‌کند.
-D X=Y|@file تنظیمات منفرد را باطل می‌کند.
-?, –help راهنمای کاربرد خط فرمان را نمایش داده و خارج می‌شود.
flows.json|projectName اگر فیچرهای پروژه فعال نباشند، فایل فلو که قرار است استفاده شود را مشخص می‌کند. در صورتی که احتمال می‌رود رایانه مورد استفاده، دستخوش تغییر hostname شود، باید مطمئن شوید که نام یک فایل استاتیک را ارائه کرده‌اید، یا این که از طریق آرگومان خط فرمان به صورت ‌ گزینه flowsFile اقدام کنید.

باطل کردن تنظیمات منفرد

از نسخه 1.1.0 نود رد به بعد می‌توانید تنظیمات منفرد را از طریق گزینه –D در خط فرمان باطل کنید. برای نمونه برای تغییر سطح لاگ کردن می‌توانید از دستور زیر بهره بگیرید:

-D logging.console.level=trace

همچنین می‌توانید تنظیمات سفارشی را از طریق یک فایل معرفی کنید:

-D @./custom-settings.txt

این فایل باید شامل فهرستی از تنظیماتی باشد که باید باطل شوند:

logging.console.level=trace
logging.console.audit=true

ارسال آرگومان‌ها به پردازش زیربنایی Node.js

برخی موارد وجود دارند که لازم است آرگومان‌ها را به پردازش زیربنایی Node.js ارسال کنیم. برای نمونه زمانی که نود رد را روی دستگاه‌هایی مانند رزبری پای یا BeagleBone Black اجرا می‌کنیم که حافظه محدودی دارند بهتر است از این امکان بهره بگیریم.

به این منظور باید از اسکریپت آغازین node-red-pi به جای node-red استفاده کنیم. توجه کنید که این اسکریپت روی ویندوز ارائه نشده است. همچنین در صورتی که نود رد را با استفاده از دستور node اجرا کرده‌اید، باید آرگومان‌های مربوط به پردازش نود را قبل از تعیین red.js و آرگومان‌های ارسالی به خود نود رد ارائه کنید.

دو دستور زیر این رویکرد را نشان می‌دهند:

node-red-pi --max-old-space-size=128 --userDir /home/user/node-red-data/
node --max-old-space-size=128 red.js --userDir /home/user/node-red-data/

برای ارتقای نود رد که به صورت پکیج npm نصب شده است می‌توانید از دستور زیر کمک بگیرید:

sudo npm install -g --unsafe-perm node-red

بدیهی است که روی ویندوز نیازی به استفاده از sudo در ابتدای فرمان نیست.

نصب نود رد روی رزبری پای

برای نصب نود رد روی رزبری پای لازم است که ابتدا npm را آپدیت کنید.

  • مطلب پیشنهادی برای مطالعه: رزبری پای (Raspberry Pi) چیست ؟ — انواع رسپبری پای، کاربردها و راه اندازی اولیه
آموزش اینترنت اشیا Internet of Things یا IoT با نرم افزار Node – RED
فیلم آموزش اینترنت اشیا Internet of Things یا IoT با نرم افزار Node – RED در تم آف

کلیک کنید

آپدیت npm

ابتدا با اکانت pi در رزبری پای لاگین کنید. رمز کاربر pi به صورت پیش‌فرض به صورت raspberry است. در ادامه ابزارهای ریپازیتوری git را به همراه ابزارهای ضروری مورد نیاز برای گام‌های بعدی نصب می‌کنیم:

~$ sudo apt install build-essential git

خروجی دستور چنین است:

02 NR 05 20 SCREEN Install Node Red 00 01 37 283

نصب نود رد

در ادامه دستور بش زیر را برای نصب نسخه جدیدی از نود رد اجرا می‌کنیم.

~$ bash 
03 NR 05 20 SCREEN Install Node Red 00 02 21 115 768x792 1

نصاب پیش از شروع فرایند نصب دو سؤال از شما می‌پرسد که باید با حرف Y موافقت خود را اعلام کنید.

در حدود 20 دقیقه دیگر فرایند نصب کامل می‌شود و اطلاعاتی در مورد ستاپ نود رد در کنسول می‌بینید. در صورت موفقیت‌آمیز بودن نصب چنین تصویری خواهید دید:

04

اکنون نود رد نصب شده است. توجه کنید که اینستالر پیشنهاد می‌کند سرویس Node-RED را با استفاده از دستور node-red-start آغاز کنید، اما در بخش بعدی توضیح می‌دهیم چرا این بهترین گزینه محسوب نمی‌شود.

آغاز Node-RED

چندین روش برای آغاز سرویس Node-RED وجود دارد. آسان‌ترین روش این است که در اعلان فرمان دستور زیر را وارد کنیم.

~$ node-red-start

این روش به خصوص روی رزبری پای 4 که بیش از دو گیگابایت رم دارد، به خوبی کار می‌کند.

در مورد نسخه‌های قدیمی‌تر رزبری پای یا رایانه‌هایی که رم محدودی دارند، بهتر است رم موجود را به روش زیر مشخص کنیم:

~$ node-red-pi --max-old-space-size=256

به این ترتیب به سرویس Node-RED اعلام می‌کنیم که حافظه استفاده نشده را به سرعت آزاد کند تا سرویس‌های دیگر سیستم عامل نیز بتوانند به درستی کار کنند. صرف‌نظر از روشی که استفاده می‌کنید، سرویس Node-RED در طی چند ثانیه آغاز می‌شود و اعلام می‌کند که روی لوکال هاست و پورت 1880 فعال شده است. در این مرحله باید به مرورگر وب رفته و نشانی http://nodered.local:1880 را وارد کنید.

توجه کنید که عبارت nodered.local «نام میزبان» (hostname) رزبری پای است و شما باید از هاست‌نیم مخصوص خود استفاده کنید.

05 NR 05 20 SCREEN Install Node Red 00 11 35 361

برای متوقف کردن سرویس Node-RED کافی است کلیدهای ترکیبی Ctrl+C را بگیرید.

اجرای Node-RED به عنوان یک سرویس

Node-RED را می‌توان به عنوان یک سرویس پس‌زمینه اجرا کرد. مزیت این روش آن است که می‌توان طوری تنظیم کرد که وقتی سیستم بوت می‌شود، به طور خودکار آغاز شود و دیگر نیازی به استارت دستی نباشد.

برای استارت دستی نود رد می‌توانید از دستور node-red-start استفاده کنید که خروجی مانند تصویر زیر دارد.

06 NR 05 20 SCREEN Install Node Red 00 12 28 663 768x638 1

خروجی فوق نشانی IP و شماره پورت سرویس نود رد جدید را نشان می‌دهد. همچنین دستورهای Systemd برای آغاز و توقف سرویس را نمایش داده است. نود رد اکنون به عنوان یک سرویس فعال شده و می‌توانید در نشانی مربوطه روی مرورگرتان آن را مشاهده کنید.

آغاز خودکار سرویس نود رد در زمان بوت سیستم

برای آغاز به کار خودکار سرویس نود رد در زمان بوت شدن سیستم باید از دستور زیر استفاده کنید:

~$ sudo systemctl enable nodered.service

اکنون زمانی که رزبری پای آغاز می‌شود، سرویس نود رد نیز همراه با آن به طور خودکار شروع به کار می‌کند. برای تست آن کارهای زیر را انجام دهید.

  1. دستور sudo reboot را وارد کنید که باعث ریبوت شدن رزبری پای می‌شود.
  2. چند دقیقه صبر کنید تا فرایند ریبوت تکمیل شود.
  3. با استفاده از مرورگر به نشانی نود رد بروید تا از کارکرد صحیح آن مطمئن شوید.

اکنون نود رد باید در مرورگر بارگذاری شود و به طور معمول کار کند. نود رد گزینه‌های پیکربندی زیادی دارد که در بخش بعدی آن‌ها را مورد بررسی قرار می‌دهیم.

فایل پیکربندی نود رد

اکنون که موفق شدیم نود رد را نصب و اجرا کنیم، نوبت به آن رسیده که با برخی تنظیمات اساسی آن آشنا شویم. پیکربندی‌های عمده نود رد از طریق یک فایل تنظیمات انجام می‌یابد. محل این فایل در رزبری پای به صورت زیر است:

/home/pi/.node-red

فلوها، نودها و البته فایل پیکربندی در دایرکتوری node-red قرار دارند. نام فایل پیکربندی نود رد به صورت settings.js است. با استفاده از ادیتور نانو این فایل را باز می‌کنیم:

pi@rpi4:~ $ cd.node-red/

pi@rpi4:~/.node-red $ nano settings.js

در تصویر زیر بخشی از این فایل را می‌بینید.

07 NR 05 10 SCREEN Node Red configuration 00 02 03 964 768x791 1

بسیاری از گزینه‌های پیکربندی کامنت شده‌اند. با حذف دو اسلش ابتدای هر خط می‌توانید این تنظیمات را فعال کنید.

برخی از گزینه‌های پیکربندی که کاربرد بیشتری دارند به شرح زیر هستند.

  • flowFile – این فایلی است که فلوها را در خود جای داده است. شما می‌توانید محل و نام آن را با این تنظیمات سفارشی‌سازی کنید.
  • uiPort – این تنظیمات شماره پورتی که می‌توان از طریق آن به اینترفیس کاربر وب دسترسی داد را مشخص می‌کند. مقدار پیش‌فرض 1880 است، اما می‌توانید هر مقدار دلخواه دیگری برایان تعیین کنید.
  • userDir – این تنظیمات محل دایرکتوری نود را مشخص می‌کند که همان محل قرارگیری این فایل تنظیمات است و همچنین فلوها و نودها در آن ذخیره می‌شوند.
  • nodesDir – شما می‌توانید محل دیگری را برای ذخیره نودها تعیین کنید که مجزا از دایرکتوری قبلی باشد. در صورتی که این تنظیم را فعال کنید، نود رد دایرکتوری nodeDir را برای یافتن گره‌های دیگر اسکن می‌کند.
  • adminAuth – شما می‌توانید کارکردهای مدیریتی یا ادیتوری سرویس نود رد را با تعیین نام‌های کاربری و رمزهای عبور مختلف تفکیک و کنترل کنید. هر کاربر می‌تواند رمزهای خاص خود را داشته باشد. همچنین موارد زیاد دیگری وجود دارند که می‌توانید از طریق این فایل کنترل کنید.

نودهای نود رد

در این بخش با یکی از اساسی‌ترین مفاهیم در محیط نود رد یعنی نود یا گره آشنا می‌شویم. با ما همراه باشید تا با مهم‌ترین نودها، کارکردشان و همچنین روش نصب نود‌های شخص ثالث آشنا شوید.

نوار ابزار نود‌ها

در نوار ابزار سمت چپ اینترفیس وب نود رد، فهرستی از نودهای پیش‌فرض یا ثالث می‌بینید که به همراه نود رد نصب شده‌اند. امکان افزودن نودهای بیشتر از طریق کتابخانه نود رد و البته ساخت نودهای جدید وجد دارد.

08 NR 05 40 SCREEN Nodes 00 00 31 485

مثالی از یک نود: دیباگ

یکی از متداول‌ترین نودها نود debug نام دارد که آن را می‌توانید زیر برچسب common پیدا کرده و به روی بوم بکشید. هدف نود دیباگ این است که یک خروجی متنی در پنجره دیباگ نشان دهد که در نوار ابزار سمت راست نود رد ظاهر می‌شود.

در تصویر زیر یک گره دیباگ را روی بوم می‌بینید که زبانه مشخصات و زبانه خروجی آن باز است.

09 NR 05 40 SCREEN Nodes 00 02 46 175 768x699 1

برای مشاهده مشخصات هر نود کافی است روی آن دابل-کلیک کنید. به این ترتیب بخش ادیت باز می‌شود. بسته به نوع گره، زبانه مشخصات گزینه‌های پیکربندی مختلفی را عرضه می‌کند و تعدادی ویجت دارد که امکان تعامل با نود را فراهم می‌سازند.

نود دیباگ به ما امکان می‌دهد که یک رشته متنی را به بخش دیباگ ارسال کنیم. در تصویر زیر این حالت را مشاهده می‌کنید. رشته‌ای که در بخش دیباگ ظاهر شده از نود دیگری به نود دیباگ ارسال شده است. البته امکان پیکربندی مستقیم خروجی نود دیباگ به طور کامل فراهم آمده است.

نود دیباگ یکی از متداول‌ترین نودها در فلوهای نود رد محسوب می‌شود. در واقع این نود معادل تابع ()Serial.print در اسکچ آردوینو به حساب می‌آید.

به خاطر بسپارید که یک نود دیباگ می‌تواند رشته‌ای را به بخش دیباگ و همچنین کنسول سیستم ارسال کند. در اغلب موارد، لازم داریم که این متن به کنسول ارسال شود. ممکن است لازم باشد پیام‌های دیباگ به کنسول سیستم ارسال شوند که در صورت اجرای نود رد در خط فرمان بسیار مفید خواهد بود.

امکان سفارشی‌سازی نام نود وجود دارد. برای مثال در این مورد ما نام نود را example debug node می‌گذاریم. کافی است نامی که می‌خواهید را در خصوصیت name نود وارد کنید.

همواره باید نام‌های مناسبی به نودها بدهیم تا بهتر متوجه شویم چه اتفاقی در فلوها می‌افتد. این روند مشابه انتخاب اسامی معنی‌دار برای متغیرها و تابع‌ها در یک زبان برنامه‌نویسی است.

10 NR 05 40 SCREEN Nodes 00 02 46 807

اطلاعات نود

برای کسب اطلاع در مورد مشخصات نود می‌توانید روی دکمه i مانند تصویر زیر کلیک کنید تا زبانه info باز شود.

11 NR 05 40 SCREEN Nodes 00 03 30 703 768x686 1

اطلاعاتی که در زبانه info دیده می‌شود به نوع نود مورد بررسی بستگی دارد، اما همه نودها دست کم خصوصیت‌های شناسه نود، نوع و فعال بودن یا نبودن را دارند.

مستندات نود

نود رد یک سیستم مستندات داخلی دارد. برای مشاهده مستندات مربوط به یک نود می‌توانید روی آیکون کتاب کلیک کنید.

12 NR 05 40 SCREEN Nodes 00 03 49 067 768x599 1

مثالی از نود: inject

در این بخش به بررسی یک نمونه از نود inject می‌پردازیم. نود inject در مواردی به کار می‌آید که بخواهیم یک رشته را در نود دیگری درج کنیم.

در مثال زیر بخش Edit یک نود اینجکت به نام ‌Hello نمایش یافته است. در زبانه «مشخصات» (Properties) می‌توانید انواع مختلفی از پی‌لودها که نود اینجکت می‌تواند در نود دیگر وارد کند از قبیل نود دیباگ مشاهده کنید.

پی‌لود می‌تواند یک رشته ثابت، عدد، مقدار بولی، عبارت جیسون، متغیر فلو و یا خیلی چیزهای دیگر باشد. در مثال زیر پی‌لود را به صورت یک رشته ثابت به عنوان بخشی از تست به همراه یک نود گوگل شیت آورده‌ایم.

13 2020 08 14 13 37 59 768x701 1

مدیریت پالت‌ها

برای نصب یک نود یا فلو از کتابخانه نود رد باید از ابزار «مدیریت پالت‌ها» (Palettes Manager) استفاده کنیم. امکان دسترسی به ابزار مدیریت پالت از طریق منوی همبرگری در گوشه راست-بالای پنجره ادیتور نود رد وجود دارد.

14 NR 05 40 SCREEN Nodes 00 06 05 556

از طریق ابزار مدیریت پالت می‌توان فلو‌های دخیل، نودها یا مجموعه‌ای از نودها را نصب کرد.

یک مجموعه از نودها که به طور خاص مفید هستند و به طور مکرر استفاده می‌شوند، مجموعه node-red-dashboard نام دارند. برای نصب این مجموعه کافی است عبارت dashboard را وارد کنید تا در میان نتایج جستجو ظاهر شود و سپس روی install کلیک کنید.

15 NR 05 40 SCREEN Nodes 00 06 48 950

همچنین می‌توانید در ابزار مدیریت پالت به دنبال عبارت dht22 بگردید و این نود را نیز نصب کنید. این نودهای جدید در نوار ابزار سمت چپ ظاهر می‌شوند که ظاهری مانند تصویر زیر دارد.

16 NR 05 40 SCREEN Nodes 00 10 00 513

امکان استفاده از این نودها در فلوها جهت ایجاد داشبوردهایی مانند تصویر زیر وجود دارد:

17 2020 07 07 14 24 01 624x236 1

تنظیمات

امکان دسترسی به صفحه dht22 از طریق منوی همبرگری وجود دارد.

18 2020 08 14 13 56 05 768x884 1

در صفحه تنظیمات می‌توان محیط کاری، زبان اپلیکیشن، اندازه خطوط شبکه‌ای و موارد بسیار دیگر را پیکربندی کرد. همچنین می‌توان میانبرهای دلخواهی را برای کی‌برد تنظیم نمود.

19 2020 08 14 13 56 17 768x620 1

برای این که بتوان از نودها به شیوه بهینه‌ای استفاده کرد، باید آن‌ها را از طریق فلوها به هم وصل کرد. در بخش بعدی این مقاله با روش ساخت لوهای ساده با بهره‌گیری از برخی از مفیدترین نودها آشنا می‌شویم.

فلوهای نود رد

نودها به تنهایی فایده چندانی ندارند و باید به یکدیگر وصل و داخل فلوها پیکربندی شوند و در ادامه برخی مثال‌ها را بررسی می‌کنیم که نشان می‌دهد نودها چطور می‌توانند داخل فلوها پیکربندی شوند. در این مثال‌ها از نود DHT22 استفاده می‌کنیم و از این رو سنسور DHT22 را به رزبری پای خود وصل کرده‌ایم. برای آشنایی با روش اتصال این سنسور به رزبری پای می‌توانید این مقاله (+) را مطالعه کنید.

ساخت یک فلوی جدید

برای ساخت یک فلوی جدید روی دکمه + در گوشه راست-بالای بوم طراحی کلیک کنید.

20 NR 05 50 SIDE Flows 00 02 52 526 768x432 1

این فلو شامل دو نود به نام‌های inject و debug است. این دو گره را می‌توانید زیر گروه common مشاهده کند. سپس آن‌ها را مانند تصویر زیر روی بوم قرار دهید.

21 2020 08 14 14 35 22

این فلو کارهای زیر را انجام می‌دهد. هنگامی که روی دکمه گره اینجکت کلیک کنیم، رشته HELLO به گره بعدی ارسال می‌شود. در این حالت، گره بعدی که گره دیباگ است، پیام را در پنجره دیباگ نمایش می‌دهد.

گره اینجکت در سمت چپ و گره دیباگ در سمت راست قرار دارند. این دو گره از طریق کلیک کردن و نگه داشتن ماوس روی دایره گره اینجکت و سپس قرار دادن کرسر ماوس روی دایره گره دیباگ و رها کردن کلیک ماوس به هم متصل می‌شوند.

در ادامه گره اینجکت را پیکربندی می‌کنیم. به این منظور باید روی آن دابل-کلیک کنیم تا پنجره مشخصات باز شود. در فیلد msg گزینه payload را انتخاب کرده و برای آن یک مقدار رشته‌ای انتخاب می‌کنیم که با آیکون ‌az نمایش یافته است. در فیلد پی‌لود عبارت HELLO را وارد می‌کنیم. در نهایت روی Done کلیک می‌کنیم تا از صفحه گره اینجکت خارج شویم.

22 NR 05 50 SCREEN Flows 00 03 34 425

در ادامه روی گره دیباگ دابل-کلیک می‌کنیم تا برخی خصوصیت‌های آن را تغییر دهیم. نخستین مورد خصوصیت output است. در گره اینجکت رشته را در متغیر msg.payload ذخیره کردیم. از این رو در گره دیباگ باید خروجی را از متغیر msg.payload بخوانیم. همچنین در خصوصیت Name نامی به صورت Example debug node به این گره می‌دهیم. به این ترتیب صفحه ادیت گره دیباگ به شکل زیر در می‌آید:

23 NR 05 50 SCREEN Flows 00 04 49 579

اکنون فلو را تست می‌کنیم. به این منظور روی دکمه قرمز رنگ Deploy کلیک کنید.

24 NR 05 50 SCREEN Flows 00 04 44 120

اکنون فلو در حال اجرا است.

25 2020 08 14 15 01 37

روی دکمه گره اینجکت کلیک کنید تا رشته‌ای به صورت HELLO در صفحه گره دیباگ ظاهر شود. اگر صفحه دیباگ دیده نمی‌شود، روی دکمه کوچک کنار آیکون باگ کلیک کنید.

صفحه دیباگ هر بار که روی دکمه گره اینجکت کلیک کنید، یک پیام جدید نمایش می‌دهد. این پیام شامل یک «مُهر زمانی» (Timestamp)، نام گره دیباگ و نام متغیری است که آن را در خود جای داده است. همچنین توجه داشته باشید که هر بار که روی دکمه گره اینجکت کلیک می‌کنید، یک اعلان سبز رنگ در پنجره ادیتور نود رد ظاهر می‌شود.

26 NR 05 50 SCREEN Flows 00 05 35 494

ساخت فلویی با DHT22

در این بخش یک فلوی دیگر را با استفاده از گره DHT22 می‌سازیم تا خوانش دما را از سنسور دریافت کنیم. در این فلو از گره دیباگ برای نمایش دما بهره می‌گیریم.

ما می‌خواهیم هر ده ثانیه یک بار خوانش جدیدی از دما دریافت کنیم، از این رو یک گره تریگر به فلو اضافه می‌کنیم. چون می‌خواهیم فلو را به طور دستی نیز بتوانیم تحریک کنیم، یک گره اینجکت نیز اضافه می‌کنیم که دکمه مفیدی به این منظور دارد. در نهایت فلو به شکل زیر در می‌آید:

27 NR 05 50 SCREEN Flows 00 12 40 841

در ادامه پیکربندی هر گره را می‌بینید.

28 NR 05 50 SCREEN Flows 00 11 52 894
گره تریگر
29 NR 05 50 SCREEN Flows 00 08 52 444
گره DHT22

 

30 NR 05 50 SCREEN Flows 00 08 46 396
گره دیباگ

 

31 NR 05 50 SCREEN Flows 00 08 18 734
گره اینجکت

 

زمانی که این فلو را ساختید، روی Deploy کلیک کنید و سپس دکمه گره اینجکت را بزنید تا تریگر آغاز شود. در ادامه می‌بینید که مقدار دمای جدید هر ده ثانیه یک بار، در پنجره دیباگ ظاهر می‌شود.

32 NR 05 50 SCREEN Flows 00 09 38 110

ساخت فلو با گره function

در این بخش یک گره با استفاده از گره فانکشن می‌سازیم. گره‌های فانکشن بسیار مفید و کاملاً انعطاف‌پذیر هستند. به این ترتیب می‌توانید کدهای خاص جاوا اسکریپت بنویسید تا درون گره اجرا شود و ورودی‌ها را به هر ترتیب که دوست دارید پردازش کنید.

فلوی زیر شامل یک گره اینجکت، یک گره فانکشن و سه گره دیباگ است. این مثال نشان می‌دهد که چطور می‌توانیم با استفاده از کدهای جاوا اسکریپت ورودی را پردازش کرده و سه خروجی متفاوت به دست آوریم. ظاهر فلو به صورت زیر است:

33 NR 05 50 SCREEN Flows 00 17 17 773

گره فانکشن در میانه فلو قرار دارد. توجه کنید که این فلو سه خروجی دارد که به گره‌های دیباگ وصل هستند. یک گره دیباگ در واقع ورودی را از دو خروجی به فانکشن می‌گیرد. نکته جالب در مورد این فلو آن است که از کدهای جاوا اسکریپت در نود فانکشن استفاده شده است که به صورت زیر هستند:

34 NR 05 50 SCREEN Flows 00 18 12 447

این کد بسیار ساده است. سه متغیر لوکال به نام‌های ‎msg1, msg2 و msg3 تعریف شده‌اند. هر یک شامل یک سند کوچک جیسون، یک پی‌لود و یک رشته تک‌کاراکتری در داخل خود است. گزاره بازگشت آرایه‌ای است که سه فیلد دارد. در انتهای پنجره ادیت تعداد خروجی‌ها برابر با سه تعیین شده چون سه فیلد در آرایه بازگشت وجود دارد.

هر فیلد آرایه بازگشت یک خروجی محسوب می‌شود. فیلد اول از خروجی فوقانی در نماد گرافیکی گره فانکشن خارج می‌شود. فیلد دوم از خروجی میانی خارج می‌شود و فیلد سوم از خروجی زیرین حاصل می‌شود. چنان که می‌بینیم گره‌های فانکشن بسیار کارآمد هستند. شما می‌توانید هر کدی که دوست دارید و هر برنامه‌ای که در نظر دارید را با استفاده از این فانکشن‌ها پیاده‌سازی کنید. می‌توانید ورودی‌های مختلف را مورد پردازش قرار داده و سپس خروجی متناسب را به ادامه فلو تحویل دهید.

پیام‌ها و متغیرهای نود رد

پیام‌ها و متغیرهای نود رد به ما امکان می‌د‌هند که داده‌ها را بین گره‌ها و در داخل فلوها رد و بدل کنیم. در ادامه به بررسی این دو مفهوم در نود رد می‌پردازیم.

پیام چه تفاوتی با متغیر دارد؟

بسیاری از افراد که به تازگی با نود رد آشنا شده‌اند در درک شباهت‌ها و تفاوت‌های پیام‌ها و متغیرها مشکل دارند. در این بخش این دو مفهوم را از هم متمایز می‌کنیم.

شباهت‌های پیام‌ها و متغیرها

هم پیام‌ها و هم متغیرها در نود رد برای ارسال داده‌ها از یک نود به نود دیگر مورد استفاده قرار می‌گیرند.

تفاوت‌های پیام‌ها و متغیرها

در نود رد یک پیام می‌تواند از گرهی به دقیقاً گره بعدی که وصل شده است، ارسال شود، اما متغیر می‌تواند از یک نود به هر چند نود دیگر با هر مسافتی ارسال شود. به این ترتیب متغیرها می‌توانند به گره‌هایی که مستقیماً وصل نیستند هم ارسال شوند. متغیرها همچنین می‌توانند بین گره‌هایی که به فلوهای متفاوت تعلق دارند رد و بدل شوند.

پیام‌ها در نود رد

مهم‌ترین نکته‌ای که در مورد پیام‌ها باید به آن توجه کنید، این است که داده‌هایی که از طریق پیام رد و بدل می‌شوند درون یک شیء به نام msg قرار می‌گیرند. شیء msg می‌تواند شامل هر تعداد خصوصیت‌هایی باشد که لازم هستند. برخی از این خصوصیت‌ها داخلی هستند، اما امکان ساخت خصوصیت‌های جدید نیز وجود دارد. مهم‌ترین خصوصیت payload نام دارد. اغلب گره‌ها به طور خودکار داده‌ها را در خصوصیت پی‌لود ذخیره می‌کنند. برای نمونه گره MQTT-in را در نظر بگیرید.

35 2020 08 15 10 37 08

گره MQTT-in مانند اغلب گره‌های دیگر داده‌ها را در خصوصیت msg.payload ذخیره می‌کند. این کار از طریق تبدیل انجام می‌یابد. به این منظور لازم نیست کار خاصی انجام بدهید. به همین دلیل می‌دانیم که برای بازیابی یا پردازش داده‌ها در گره بعدی کافی است محتوای خصوصیت payload را بخوانیم. در ادامه مثالی از نمایش داده‌های گره msg.payload با استفاده از گره دیباگ را می‌بینید.

36 2020 08 15 10 40 19

توجه کنید که خروجی گره دیباگ از شیء msg حاصل می‌شود. در فیلد متنی عبارت payload را وارد کرده‌ایم و از این رو می‌توانیم به داده‌های پی‌لود دسترسی داشته باشیم. در پی‌لود امکان ذخیره داده‌هایی با انواع مختلف از جمله موارد زیر وجود دارد.

  • مقادیر بولی: شامل دو مقدار true و false
  • مقادیر عددی: مانند 0 یا 123.4
  • مقادیر رشته‌ای: مانند “hello”
  • آرایه‌ها: مانند [1,2,3,4]
  • شیء جیسون: ماند { “a”: 1, “b”: 2}
  • مقدار تهی (Null)

پی‌لودهای شیء جیسون بسیار منعطف هستند. تا زمانی که عبارت جیسون معتبر باشد، آن را می‌توان در پی‌لود پیام ذخیره کرد. در مثال زیر گره اینجکت را می‌بیند که پی‌لود آن شامل یک سند جیسون است.

37 NR 05.60 Messages 00 09 14 967

در گره اینجکت می‌توان سند JSON را از طریق انتخاب نوع داده متناسب در پی‌لود وارد کرده و سپس روی دکمه سه‌نقطه کلیک کرد. به این ترتیب متن در ادیتور JSON نمایش می‌یابد.

38 NR 05.60 Messages 00 10 10 934

ادیتور JSON به سادگی امکان ساخت سند‌های جیسون را فراهم می‌سازد و یک زبانه ادیتور بصری نیز دارد که امکان جستجوی درون سند را ممکن ساخته است. شما می‌توانید پی‌لود JSON را به گره بعدی ارسال کنید. برای مثال اگر گره بعدی گره دیباگ باشد، به صورت زیر پیکربندی می‌شود:

39 NR 05.60 Messages 00 10 24 027

در پنجره دیباگ سند JSON به شکل زیر ظاهر می‌شود.

40 NR 05.60 Messages 00 10 49 690

برخی گره‌ها مانند گره اینجکت می‌توانند با خصوصیت‌های سفارشی که به شیء msg الصاق یافته‌اند نیز کار کنند. به مثال زیر توجه کنید:

41 2020 08 15 11 47 25

در این مثال، دو خصوصیت سفارشی ساخته‌ایم که یکی عدد و دیگری رشته است. می‌توان به وسیله ارجاع دادن از این خصوصیت‌ها در گره بعدی استفاده کرد.

42 2020 08 15 11 49 49

متغیرها در نود رد

در نود رد با بهره‌گیری از متغیرها می‌توان داده‌ها را بین هر گره‌های مختلف و حتی فلوهای متفاوت به اشتراک گذاشت. متغیر‌های نود را می‌توان مانند متغیرها در زبان‌های برنامه‌نویسی از قبیل روبی یا پایتون تصور کرد. در چین زبان‌هایی ما متغیرهای محلی و سراسری داریم. امکان دسترسی به متغیرها به «حیطه متغیر» (Variable’s Scope) بستگی دارد.

در نود رد نیز همین مفهوم حیطه متغیر را داریم و در نتیجه امکان دسترسی به متغیرها به حیطه آن‌ها وابسته است. به طور کلی در نود رد سه حیطه وجود دارد:

  • Node (معادل متغیر لوکال در پایتون است). در این حالت متغیر تنها داخل آن گره که تنظیم شده قابل مشاهده است.
  • Flow (معادل متغیر سراسری در پایتون است). در این حالت متغیر در همه گره‌هایی که در یک فلو قرار دارند، قابل مشاهده است.
  • Global (معادل متغیر سیستمی در پایتون است). در این حالت متغیر در همه گره‌ها قابل مشاهده است.

متغیر گلوبال یا سراسری را می‌توان از طریق یک گره در فلو تنظیم کرد و در گره دیگر در هر فلوی متفاوت آن را خواند. در یک زبان‌ برنامه‌نویسی مانند پایتون این مفهوم تقریباً معادل «ارتباط بین پردازشی» (cross-process یا inter-process communication) است.

ما در اغلب موارد در یک «چارچوب فلو» (Flow Context) کار می‌کنیم. در این حالت امکان تعیین متغیر فلو با استفاده از تابع flow.set()‎ وجود دارد. در ادامه مثالی از پروژه Terrarium را می‌بینید.

43 2020 08 15 12 00 21

در این مثال، متغیری به نام soil_humidity_threshold می‌بینیم که در مقدار آن در msg.payload ذخیره شده است. برای خواندن یک متغیر فلو می‌توانیم از تابع flow.get()‎ بهره بگیریم. در ادامه مثالی از گره فانکشن را می‌بینید.

44 2020 08 15 12 04 16

در این مثال مقدار ذخیره شده در متغیر فلو به نام raw_humidity_value خوانده شده و در محاسبه استفاده می‌شود.

گره complete در نود رد

با استفاده از گره complete در نود رد می‌توانید در صورت تکمیل شدن کار هر گره دیگر در فلو، یک گره دیگر را تریگر کنید. در این بخش از مقاله نود رد چیست با کاربرد گره complete از طریق بررسی یک مثال آشنا می‌شویم. گره complete زیر عنوان common در نوار ابزار سمت چپ قرار دارد.

45 NR 05.100 The complete node 00 00 00 000

راه‌اندازی گره complete

در این بخش از مثال بخش قبلی در مورد فلو‌ها برای آشنایی با کارکرد گره complete آشنا می‌شویم.

46 NR 05.100 The complete node 00 02 03 125

در فلوی اصلی دو گره اضافه کرده‌ایم که یکی گره complete و دیگری گره test است. گره complete گره test را تحت نظارت قرار می‌دهد تا به محض این که کارش خاتمه یافت به گره دیباگ اطلاع دهد.

عنوان گره complete به صورت Start when Function node completes است. عنوان گره debug به صورت Completed است. در مورد 5 گره دیگر که در مثال قبلی بررسی کردیم هیچ تغییری ایجاد نشده است.

زمانی که فانکشن test کار خود را پایان دهد، گره Start when Function node completes اطلاع می‌یابد و گره Completed را تریگر می‌کند. علاوه بر نوتیفیکیشن، داده‌های گرهی که تکمیل شده است (در این مثال گره test) نیز ارسال می‌شود. بنابراین گره Completed به شیء msg گره test دسترسی دارد. در تصویر زیر شیوه پیکربندی گره Completed را که عنوان آن Start when Function node completes است می‌بینید.

47 NR 05.100 The complete node 00 01 43 812

اگر روی گره complete صفحه ادیت آن باز می‌شود. در زبانه مشخصات فهرستی از گره‌های دیگر داخل فلو می‌بینید که نوتیفیکیشن‌های تکمیل شدن را ارسال می‌کنند. کافی است روی یک یا چند گره دیگر که این گره complete از آن‌ها نوتیفیکیشن تکمیل شدن دریافت می‌کند.

پس از آن که فلو را دیپلوی کردید، هر بار که یکی از گره‌های منتخب کاری را تکمیل کند، گره complete اطلاع خواهد یافت و هر بار که گره این اطلاع را یابد، خروجی تریگر می‌شود. شیء msg گره complete نیز به گره تریگر شده ارسال می‌شود.

گره catch در نود رد

گره catch برای به دام انداختن استثناها در فلو استفاده می‌شود. هنگامی که گره کَچ یک «استثنا» (exception) را به دام می‌اندازد، اطلاعات مرتبط را از طریق شیء msg به گره دیگر ماند گره دیباگ ارسال می‌کند تا در آنجا مدیریت شود.

در واقع گره catch مشابه گزاره try در پایتون یا گزاره throw در روبی عمل می‌کند. همه این موارد وظیفه یکسانی دارند و آن این است که امکان شناسایی شرایط استثنا را فراهم ساخته و آن را به شیوه صحیحی مدیریت کنند تا برنامه از کار نیفتد. برای مشاهده گره catch به گروه common در نوار ابزار سمت چپ سر بزنید.

48 NR 05.110 The catch node 00 00 23 013b

راه‌اندازی گره ‌catch

برای راه‌اندازی گره catch از فلوی test که در بخش بعدی بررسی کردیم، استفاده می‌کنیم.

49 NR 05.110 The catch node 00 00 23 013b copy

به فلوی اولیه دو گره اضافه می‌کنیم. گره catch وقوع استثناها را بررسی می‌کند و گره دیباگ اطلاعاتی در مورد استثنا نمایش می‌دهد. نام گره catch را Catch all errors و نام گره دیباگ را Errors می‌گذاریم.

در تابع test فلوی اصلی یک خطا معرفی کرده‌ایم. این خطا را می‌توانید در تصویر زیر ببینید.

50 NR 05.110 The catch node 00 01 05 699

گره catch تنها دو گزینه برای پیکربندی دارد:

  • دریافت خطاها از همه گره‌ها
  • دریافت خطاها از گره‌های منتخب

هنگامی که خطایی به دام می‌افتد، گره catch اطلاعات مرتبط را درون شیء msg به شکل خصوصیت‌های الحاقی ذخیره می‌کند:

  • error.message
  • error.source.id
  • error.source.type
  • error.source.name

این گزینه‌ها را می‌توانید در صفحه ادیت گره و همچنین در اطلاعات (مستندات) گره مشاهده کنید. هر دوی این موارد در تصویر زیر نمایش یافته‌اند.

51 2020 08 17 10 01 56

برای نمایش اطلاعات در مورد خطایی که در گره فانکشن جاسازی کرده‌ایم، می‌توانیم از گره دیباگ استفاده کنیم که به صورت زیر پیکربندی شده است.

52 NR 05.110 The catch node 00 00 45 568

هنگامی که فلو را دیپلوی کنیم، روی دکمه گره اینجکت کلیک می‌کنیم تا گره فانکشن یک استثنا صادر کند که متعاقباً از سوی گره catch دریافت می‌شود. گره catch اطلاعاتی در مورد استثنا به گره دیباگ ارسال می‌کند تا در کنسول به صورت زیر نمایش یابد.

53 NR 05.110 The catch node 00 00 00 000

اکنون که از وجود باگ آگاه شدیم، می‌توانیم آن را رفع کرده و فلو را مجدداً دیپلوی کنیم. به طور کلی بهتر است در فلوها یک گره catch داشته باشیم تا در صورت وجود غلط املایی در گره فانکشن یا هر نوع خطای دیگر از آن آگاه شویم.

گره‌های link out و link in

گره‌های link out و link in در نود رد به ما امکان می‌دهند که بین گره‌های مختلف اتصال برقرار ساخته و داده‌ها را بین گره‌هایی که به فلوهای مختلف تعلق دارند، مبادله کنیم.

ما در بخش‌های قبلی این مقاله با روش تبادل داده‌ها از طریق متغیرهای گلوبال بین گره‌هایی که به یک فلو تعلق ندارند، آشنا شدیم. گره‌های link out و link in یک روش دیگر برای این منظور در اختیار ما قرار می‌دهند. راه‌اندازی این گره‌ها آسان است و به طور خاص برای این که صرفاً داده‌ها را مستقیماً از یک گره در یک فلو به گره دوم در فلوی دیگر انتقال دهیم مناسب هستند. گره‌های link out و link in در گروه common نوار ابزار سمت چپ قرار دارند.

54 NR 05.120 The linkout and linkin nodes 00 00 49 272

راه‌اندازی گره‌های link out و link in

برای نمایش طرز کار گره‌های link out و link in از فلوی آشنایی که در بخش‌های قبلی ساختیم، بهره می‌گیریم. در این بخش برخی تغییرات کوچک در فلوی test ایجاد می‌کنیم. به این ترتیب که یک خروجی جدید در گره فانکشن اضافه کرده‌ایم که به گره link out وصل شده است.

55 2020 08 17 10 54 25 768x465 1

همچنین تغییر کوچکی در گره فانکشن ایجاد کرده‌ایم. در این گره یک خروجی چهارم اضافه کرده و کد جاوا اسکریپت را طوری تغییر داده‌ایم که یک رشته متن به خروجی جدید ارسال شود.

56 2020 08 17 11 09 06 768x575 1

توجه کنید که در این جا لازم نیست در مورد پیکربندی گره link out دغدغه چندانی داشته باشیم و پس از افزودن یک گره link in به این موضوع خواهیم پرداخت. به این منظور یک فلوی جدید ایجاد کرده و گره‌های link in و debug را به صورت زیر در آن قرار می‌دهیم.

57 2020 08 17 10 56 09 768x222 1

روی گره link in دابل کلیک کنید تا مشخصاتش را ببینید. در فیلد Name عبارت Link in 1 یا هر نام مناسب دیگر را وارد کنید. این نام در مشخصات link out نمایش خواهد یافت تا بتوانید به سادگی گره خروجی را انتخاب کنید. مشخصات گره link in به صورت زیر است:

58 2020 08 17 10 59 17 768x468 1

توجه کنید که گره link out زیر فیلد name نمایش یافته است. از آنجا که گره link out هنوز نامی ندارد، نود رد ID نود را نمایش می‌دهد. زمانی که نامی به گره link out تخصیص دهید، به جای شناسه کره، نام آن را مشاهده خواهید کرد.

کار خود را با فلویی که شامل گره link out است پی می‌گیریم. روی گره link out دابل-کلیک کنید تا مشخصاتش را بیینید. نام آن را Link out node 1 یا هر نام دیگری که مناسب است، بگذارید. مشخصات link out اینک به صورت زیر باید باشد:

59 2020 08 17 11 03 40 copy 768x497 1

چنان که می‌بینید گره link in 1 به عنان گره مقصد برای گره حاضر فهرست شده است. هر گره link in دیگر که در همه فلوها ایجاد شده باشد، در این بخش نمایش می‌یابد. گره link in ر انتخاب کرده و روی Done کلیک کنید.

پیش از آن که تغییرها را دیپلوی کنید، را بررسی کنید که نام گره link out در گره link in نمایش یافته باشد. اکنون به جای شناسه گره باید نام واقعی این گره را ببینید. شما می‌توانید ارتباط بین گره link in و link out را از هر کدام از این گره‌ها برقرار سازید. تغییرها را دیپلوی کرده و روی دکمه گره اینجکت کلیک کنید. به این ترتیب پیام زیر را در زبانه دیباگ مشاهده می‌کنید.

60 2020 08 17 11 12 53 1

گره‌های link in و link out یک روش جایگزین برای انتقال داده‌ها میان گره‌هایی هستند که به فلوی یکسانی تعلق ندارند.

گره Switch

گره switch به فلو امکان می‌دهد که یکی از چند مسیر ممکن را بسته به قواعدی که تعیین شده است انتخاب کند. به این ترتیب می‌توان گفت که گره switch مانند گزاره if در زبان‌های برنامه‌نویسی عمل می‌کند.

در یک گره switch می‌توان مانند گزاره if یک یا چند قاعده منطقی تعریف کرد و بر اساس صدق یا کذب این گزاره‌ها، گره سوئیچ طوری پیکربندی می‌شود که یک یا چند مسیر اجرایی مختلف را پیگیری کند. گره سوئیچ در گروه function در نوار ابزار سمت چپ قرار دارد.

61 NR 05.130 The switch node 00 00 00 000 0

راه‌اندازی گره سوئیچ

برای این که با طرز کار گره سوئیچ آشنا شویم، از فلوی ساده زیر کمک می‌گیریم:

62 NR 05.130 The switch node 00 00 04 876

این فلو با یک گره اینجکت آغاز می‌شود که وقتی روی دکمه‌اش کلیک کنید، مقدار عددی 6 را ارائه می‌کند. این پی‌لود وارد گره سوئیچ می‌شود که به ارزیابی آن خواهد پرداخت. اگر پی‌لود بزرگ‌تر از 5 باشد، خروجی فوقانی تریگر می‌شود. اگر پی‌لود برابر با 5 یا کمتر باشد، خروجی پایین تریگر خواهد شد. به تصویر زیر دقت کنید.

63 NR 05.130 The switch node 00 00 14 390 1

فیلدهای مهم در صفحه ادیت با کادر زردرنگ مشخص شده‌اند. ابتدا باید مشخصه‌ای که ارزیابی خواهد شد را مشخص کنیم. در این مثال، گره را طوری پیکربندی می‌کنیم که مقدار را از پی‌لود پیام دریافت کند. سپس باید دست کم یک قاعده تعریف کنیم تا ارزیابی شود. قاعده به وسیله یک مقایسه‌گر بولی روی مقدار تعریف می‌شود و همچنین یک خروجی تعریف می‌شود که در صورت درست بودن مقایسه تریگر خواهد شد. مقایسه‌گرهای قابل استفاده بسیار زیاد هستند.

64 NR 05.130 The switch node 00 00 51 513

فیلد آخر در صفحه ادیت، حالت ارزیابی است. می‌توان آن را طوری تنظیم کرد که وقتی قاعده مورد ارزیابی صادق است متوقف شود یا این که همه قواعد را ارزیابی کند. این فلو را دیپلوی کنید و سپس روی دکمه گره اینجکت کلیک نمایید. به این ترتیب خروجی مقدار 6 را می‌دهد که بزرگ‌تر از 5 است.

65 NR 05.130 The switch node 00 01 40 231 0

گره سوئیچ مقدار عددی 6 را ارزیابی کرده و ادامه گردش اجرایی را از خروجی فوقانی پیگیری خواهد کرد.

گره range در نود رد

گره range کارکردی مشابه تابع map در زبان برنامه‌نویسی آردوینو دارد. این گره یک عدد می‌گیرد که به یک بازه خاص تعلق دارد و آن را به یک عدد جدید در بازه‌ای جدید باز-نگاشت می‌کند. گره range در گروه function نوار ابزار سمت چپ قرار دارد.

66 NR 05.140 The range node 00 00 13 843

راه‌اندازی گره range

برای توضیح چگونگی عملکرد گره range فلوی ساده زیر را ساخته‌ایم.

67 NR 05.140 The range node 00 00 16 076

از گره inject برای ارسال عدد به گره range که عنوانش scale input است استفاده می‌کنیم. گره range مقدار را از ورودی خود گرفته و آن را باز-نگاشت می‌کند. در ادامه با شیوه پیکربندی گره range آشنا می‌شوید. بازه ورودی 0 تا 1023 است و بازه خروجی 0 تا 100 است.

68 NR 05.140 The range node 00 00 30 933

در ادامه چند مقدار ورودی مختلف را بررسی می‌کنیم. یک مقدار 1023 از قبل روی گره inject تنظیم شده است. فلو را دیپلوی کرده و روی دکمه گره اینجکت کلیک می‌کنیم. اگر به خروجی در صفحه دیباگ نگاه کنیم به شکل زیر در آمده است:

69 NR 05.140 The range node 00 01 16 715

مقدار 1023 به بازه 0 تا 1023 تعلق دارد. باز-نگاشت این مقدار به بازه 0 تا 100 موجب می‌شود که عدد 100 به دست آید. در ادامه مقدار دیگری را به صورت 500 بررسی می‌کنیم. گره اینجکت را بر این مبنا ویرایش کرده و پس از دیپلوی مجدد روی دکمه کلیک می‌کنیم تا فلو آغاز شود. نتیجه به صورت زیر است.

70 NR 05.140 The range node 00 01 30 687

مقدار باز-نگاشت شده 500 از 1023 به صورت 48.875855 از 100 است. اگر به این همه دقت اعشاری نیاز ندارید، می‌توانید با انتخاب چک‌باکس مربوطه در مشخصات گره range نتیجه را به نزدیک‌ترین عدد صحیح گرد کنید.

71 NR 05.140 The range node 00 01 35 026

فلو را مجدداً دیپلوی کرده و روی دکمه اینجکت کلیک کنید تا نتیجه سرراست‌تری نمایش یابد.

72 NR 05.140 The range node 00 01 41 776

گره range در موارد مختلف به خصوص زمانی که با اعدادی در بازه‌های خاص کار می‌کنیم به کارمان می‌آید. برای نمونه می‌توان از این گره در پروژه تراریوم برای انتخاب ورودی آنالوگ عرضه شده از سنسور ESP32 برای سنجش رطوبت خاک و تبدیل آن به درصد برای نمایش میزان رطوبت خاک به درصد استفاده کرد.

گره delay در نود رد

گره delay در نود رد دو وظیفه بر عهده دارد. این گره امکان ایجاد تأخیر در پیام‌رسانی به میزان مشخص و همچنین محدودسازی نرخ ارسال پیام عبوری را فراهم می‌سازد. در این بخش از مقاله آموزش نود رد با شیوه استفاده از گره delay برای ایجاد تأخیر در انتشار پیام در فلو و همچنین شیوه محدود کردن نرخ ارسال پیام‌های مختلف در فلو آشنا خواهیم شد.

کارکرد محدودسازی نرخ به طور خاص در مواردی مفید است که بخواهیم فلو را به یک منبع بیرونی در کلاد وصل کنیم. به طور معمول منابع IoT در مورد میزان گرفتن بازخورد یک نرخ محدودسازی اعمال می‌کنند. اگر اپلیکیشن شما از این محدودیت تجاوز کند، حساب شما معلق می‌شود یا دست کم برای مدتی از کار می‌افتد. با استفاده از گره delay می‌توانیم مطمئن شویم که فلو باعث نمی‌شود منابع IoT بیش از حد مشخصی اشغال شوند.

73 2020 08 18 10 43 35

راه‌اندازی گره delay

برای درک طرز کار گره تأخیر یا delay فلوی ساده زیر را ایجاد می‌کنیم.

74 NR 05.150 The delay node 00 00 59 266

در این فلو از یک گره اینجکت برای ارسال زمان فعلی به دو گره دیباگ بهره می‌گیریم. در این فلو دو کار مختلف با گره delay انجام می‌دهیم. در هر دو مورد پیکربندی گره اینجکت یکسان و به شکل زیر است.

75 NR 05.150 The delay node 00 00 56 481

آزمایش اول: تأخیر ساده

در نخستین آزمایش از گره delay برای نگه داشتن پیام‌های ورودی به میزان 5 ثانیه بهره می‌گیریم. در ادامه آن را به گره دیباگ ارسال می‌کنیم. به این منظور گره delay را به صورت زیر تنظیم می‌کنیم.

76 NR 05.150 The delay node 00 01 16 403

در ادامه فلو را دیپلوی و روی دکمه اینجکت کلیک می‌کنیم. گره دیباگ اول بی‌درنگ زمان را نشان می‌دهد. اما گره دیباگ دوم که از سوی گره delay تغذیه می‌شود، پیام را پیش از ارسال به مدت پنج ثانیه در خود نگه می‌دارد. به این ترتیب گره دیباگ دوم پیام را با تأخیر پنج‌ثانیه‌ای نمایش می‌دهد که این وضعیت در کادرهای زردرنگ تصویر زیر مشخص است.

77 NR 05.150 The delay node 00 01 39 742

آزمایش دوم: محدودسازی نرخ

در آزمایش دوم از گره delay به عنوان ابزاری برای محدودسازی نرخ ارسال پیام بهره می‌گیریم. در حال حاضر اگر به سرعت روی دکمه گره اینجکت کلیک کنید، برای هر کلیک یک زمان در صفحه دیباگ مشاهده می‌کنید و در مدت زمان اندکی تعداد زیادی پیام روی هم انباشته می‌شود.

78 NR 05.150 The delay node 00 02 13 572

برای کاهش تعداد پیام‌هایی که به گره دیباگ می‌رسند برای نمونه به یک پیام در ثانیه می‌توانیم گره delay را به صورت زیر پیکربندی کنیم.

79 NR 05.150 The delay node 00 02 23 153

اکنون مهم نیست که چه قدر سریع روی دکمه گره اینجکت کلیک می‌کنید، چون در نهایت هر ثانیه تنها یک پیام در صفحه دیباگ طاهر می‌شود. زمان‌هایی که در فاصله بین این دو پیام قرار بود ارسال شوند، در این حالت حذف می‌شوند.

قابلیت محدودسازی نرخ گره delay نیز کاربرد خاصی در پروژه تراریوم دارد. برای نمونه فرض کنید فیچری در این پروژه دارید که قرار است وقتی ولتاژ پمپ از مقدار خاصی پایین‌تر رفت به ما اطلاع دهد. بدیهی است که ما نمی‌خواهیم حساب ‌IFFT یا اینباکس ما از چنین پیام‌هایی پر شود. بنابراین یک محدودسازی نرخ برای ارسال پیام در هر ده دقیقه یک بار تنظیم می‌کنیم.

نود trigger در نود رد

نود تریگر به ما امکان می‌دهد که یک پیام را در دوره‌های زمانی دلخواه تکرار کنیم. این گره در گروه function نوار ابزار سمت چپ قرار دارد.

80 NR 05.160 The trigger node 00 00 00 000 0

راه‌اندازی نود trigger

برای درک طرز کار نود trigger فلوی زیر را ساختیم.

81 NR 05.160 The trigger node 00 00 00 000 1 1

هنگامی که روی گره اینجکت با نام Start کلیک کنیم، نود trigger رشته متنی tap… را به گره دیباگ ارسال کرده و پس از آن هر 1 ثانیه یک بار این کار را تکرار می‌کند. هنگامی که روی دکمه گره اینجکت به نام Stop کلیک کنیم، نود تریگر ریست شده و منتظر پیام بعدی از سوی Start می‌ماند. پیکربندی گره Stgart به صورت زیر است.

82 NR 05.160 The trigger node 00 00 51 341

پیکربندی نود تریگر به شکل زیر است.

83 NR 05.160 The trigger node 00 00 19 537 1

این نود گزینه‌های محدودی دارد. ما نود تریگر را طوری تنظیم کرده‌ایم که هر شیء پیام که در ورودی دریافت می‌کند را منتشر کرده و هر ثانیه یک بار بازنشر کند. توجه کنید که گزینه دیگری برای ریست کردن از طریق ارسال msg.reset یا به وسیله تعیین مقدار مشخص در خصوصیت msg.payload وجود دارد.

در مثال زیر از روش msg.reset استفاده کرده‌ایم. پیکربندی گره Stop به صورت زیر است.

84 NR 05.160 The trigger node 00 01 11 321 1

در پیکربندی گره Stop یک خصوصیت reset از نوع شیء msg داریم که شامل یک timestamp است. چیزی که در خصوصیت ریست ذخیره می‌کنید، اهمیتی ندارد. این مقدار می‌تواند یک عدد، رشته، یا شیء JSON باشد. محتوای واقعی از سوی نود تریگر نادیده گرفته می‌شود و آن چه اهمیت دارد وجود خود خصوصیت reset است.

برای نمونه در پروژه تراریوم می‌توان از نود تریگر برای دریافت یک خوانش از سنسور DHT22 در بازه‌های هر 10 ثانیه یک بار استفاده کرد.

نود RBE در نود رد

نود RBE یا Report by Exception تنها تغییرها را به خروجی خود ارسال می‌کند. فرض کنید دستورهای روشن/خاموش را به یک موتور یا راه‌انداز ارسال می‌کند. موتور پس از دریافت دستور ON روشن می‌شود و دستورهای ON بعدی که ارسال می‌شوند، تأثیری روی کارکرد آن ندارند.

در این موقعیت‌ها در فلوی نود رد می‌توان از یک نود RBE برای انتشار تغییرها در محتوای یک پیام بهره گرفت. با استفاده از نود RBE پیامی که معادل پیام قبلی باشد، منتشر نمی‌شود تا این که پیام متفاوتی دریافت شود.

در مثال موتور، فلوی RBE در صورتی که قبلاً پیام ON را دریافت کرده باشد، پیام‌های ON بعدی را مسدود می‌کند، اما پیام‌های OFF دریافتی را عبور می‌دهد. نود RBE در گروه فانکشن نوار ابزار سمت چپ قرار دارد.

85 NR 05.170 The RBE Report by Exception node 00 00 00 000 1

راه‌اندازی نود RBE

برای توضیح شیوه استفاده از نود RBE، فلوی ساده زیر را می‌سازیم.

86 NR 05.170 The RBE Report by Exception node 00 00 00 000 0

این فلو به وسیله دو گره اینجکت سمت چپ تریگر می‌شود. نود دیباگ در سمت راست صرفاً مقادیر 0 و 1 را بسته به نودی که کلیک شده است، پرینت می‌کند. نکته جالب‌تر اینجا است که پیام رسیده به نود دیباگ به وسیله یک نود RBE کنترل می‌شود و تنها تغییرها در پی‌لود پیام منتشر می‌شوند.

از این رو اگر نود اینجکت شماره 1 را چند بار کلیک کنید، در خروجی تنها یک بار مشاهده می‌کنید. اگر نود 2 را نیز چند بار کلیک کنید، رفتار مشابهی خواهید دید. با این حال اگر بین 1 و 2 به طور متناوب کلیک کنید، همه پیام‌ها در صفحه دیباگ پرینت می‌شوند. روش راه‌اندازی نود RBE به صورت زیر است.

87 NR 05.170 The RBE Report by Exception node 00 01 39 883 1

ما حالت این نود را روی گزینه block unless value changes قرار داده‌ایم که باعث می‌شود تا زمانی که پیام تغییر نیافته است، آن را مسدود کند و مقداری که ارزیابی می‌شود نیز برابر با msg.payload است. برای تست کردن فلو، آن را دیپلوی و روی دکمه‌های گره اینجکت کلیک می‌کنیم. خروجی به صورت زیر است.

88 NR 05.170 The RBE Report by Exception node 00 01 48 288 0

توجه کنید که پیام‌ها همواره به طور متناوب بین 1 و 2 عوض می‌شوند، هر چند روی یک نود چند بار پشت سر هم کلیک کنید.

89 NR 05.170 The RBE Report by Exception node 00 01 48 288

ترفندهای نود رد

در آخرین بخش از راهنمای نود رد برخی ترفندها را معرفی می‌کنیم که در زمان کار با این نرم‌افزار به شما کمک زیادی خواهد کرد.

جستجوی نود

click

به مرور که با نود رد کار می‌کنید، مجموعه نودهای شما افزایش می‌یابد و پیدا کردن آن‌ها نیز دشوار خواهد شد. شما می‌توانید با کلیدهای ترکیبی Ctrl+Click صفحه جستجوی نودها را باز کنید و به دنبال نود مورد نظر خود بگردید.

فعال یا غیرفعال کردن فلو

controlling flow

گاهی اوقات ممکن است لازم باشد که به دلایل مختلف یک فلو را فعال یا غیرفعال کنید. این کار با استفاده از یکی از دو روش زیر ممکن است.

  • نود Controller – این نود در یک فلوی موجود قرار گرفته و بر اساس مقداری که تنظیم می‌شود امکان ارسال پیام را فراهم می‌سازد.
  • فلوی controlling – فلوی کنترل را می‌توان هر جایی تنظیم کرد. هدف این است که یک مشخصه global.controller روی نودی تنظیم شود که مقدار true/false بگیرد. امکان استفاده از نودهای MQTT, HTTP، تایمرها و یا نود اینجکت به این منظور وجود دارد.
controller

ساخت کتابخانه اختصاصی فلوها

library

زمانی که در زمینه کار با نود رد تبحر بیشتری کسب کردید، به طور طبیعی مسائلی که قبلاً حل کرده‌اید را به فلوهای جدید کپی می‌کنید. اما روش بهتر این است که فلوها را داخل یک کتابخانه (Library) درج کنید. به این ترتیب می‌توانید بی‌درنگ آن‌ها را در هر فلوی دیگری وارد کنید. کافی است نودی که می‌خواهید ذخیره کنید را انتخاب کرده و به منوی اکسپورت بروید و گزینه کتابخانه را انتخاب نمایید.

کتابخانه تابع‌ها

code

همین کار را در مورد قطعه کدهای مختلف نیز می‌توانید انجام دهید. نود فانکشن امکان اکسپورت کدها و ذخیره آن‌ها را داخل یک کتابخانه می‌دهد. بدین ترتیب می‌توانید برای نمونه یک کد برای ارسال متد HTTP POST یا کد تغییر رنگ متن یا هر چیز دیگری را در داخل این کتابخانه ذخیره کرده و در موارد لزوم در آینده آن‌ها را به سادگی مورد استفاده قرار دهید.

سخن پایانی

نود رد یک محیط برنامه‌نویسی است که به طور دائم در پس‌زمینه عمل کرده و وظایف سرور را اجرا می‌کند. به این ترتیب شما می‌توانید در یک محیط کاملاً گرافیکی و ساده معماری نرم‌افزاری مورد نظر خود را پیاده‌سازی کرده و کدهای مورد نیاز را به زبان برنامه‌نویسی جاوا اسکریپت بنویسید تا اهداف مورد نظرتان اجرا شود. کارهایی که با استفاده از قابلیت‌های متنوع نود رد می‌توان اجرا کرد، تقریباً نامتناهی هستند.

ارسال پاسخ

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.