در این راهنما از طریق بررسی مثالهای مختلف با نود رد آشنا خواهیم شد. نود رد یک محیط برنامهنویسی برای کار با اینترنت اشیا است. در این راهنما ابتدا شیوه نصب نود رد روی رایانه لوکال و رزبری پای را بررسی میکنیم، سپس کاربردهای برخی از مهمترین گرههای آن را معرفی کرده و با طرز کار درونی آن آشنا میشویم. با ما همراه باشید.
نود رد چیست؟
نود رد (Node-RED) یک ابزار برنامهنویسی است یا شاید بهتر باشد آن را محیط برنامهنویسی بنامیم. نود رد از رسمهای گرافیکی و گرهها استفاده میکند، به طوری که اجزای منفردی را پشت سر هم چیده و در عمل یک برنامه میسازد. نکته جالب در مورد نود رد این است که محیطی گرافیکی دارد و از این رو میتوان به صورت بصری یک برنامه ساخت. همچنین از سوی دیگر از طریق جاوا اسکریپت میتوان کنترل کارکردی زیادی روی این برنامه اعمال کرد. جاوا اسکریپت یک زبان برنامهنویسی است که زیربنای نود رد را تشکیل میدهد.
بنابراین به طور کلی میتوان گفت که نود رد یک محیط برنامهنویسی است که درون مرورگر اجرا میشود. از نود رد میتوان برای ساخت برنامههای گرافیکی استفاده کرد که «فلو» (Flow) نامیده میشوند. فلوها از گرهها تشکیل یافتهاند که نمونههایی از آن را میتوانید به صورت اشیای مستطیلی در شکل زیر ببینید.
برای ساخت یک فلو میتوانید از رابط کاربری کشیدنی-رها کردنی این برنامه بهره بگیرید. به این ترتیب میتوان به سادگی گرهها را در پیکربندیهای مختلف کنار هم چید تا برنامهای تشکیل شود که کار مفیدی انجام میدهد. هر گره از قبل برنامهنویسی شده تا کار خاصی را انجام دهد. از این جهت گرهها را میتوان به مفهوم تابع در زبانهای برنامهنویسی مانند پایتون یا روبی تشبیه کرد. در برخی گرههای نود رد میتوان کدهای جاوا اسکریپت نوشت و از این رو شبیه تابعهای خاص در زبانهای برنامهنویسی هستند.
نود رد چندین گره پیشفرض دارد، اما میتوان برخی گرههای جانبی نیز نصب کرد. همانند آردوینو در «نود رد» (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_
کاربرد خط فرمان
نورد رد را میتوان با استفاده از دستور 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) چیست ؟ — انواع رسپبری پای، کاربردها و راه اندازی اولیه
آپدیت npm
ابتدا با اکانت pi در رزبری پای لاگین کنید. رمز کاربر pi به صورت پیشفرض به صورت raspberry است. در ادامه ابزارهای ریپازیتوری git را به همراه ابزارهای ضروری مورد نیاز برای گامهای بعدی نصب میکنیم:
~$ sudo apt install build-essential git
خروجی دستور چنین است:
نصب نود رد
در ادامه دستور بش زیر را برای نصب نسخه جدیدی از نود رد اجرا میکنیم.
~$ bashنصاب پیش از شروع فرایند نصب دو سؤال از شما میپرسد که باید با حرف Y موافقت خود را اعلام کنید.
در حدود 20 دقیقه دیگر فرایند نصب کامل میشود و اطلاعاتی در مورد ستاپ نود رد در کنسول میبینید. در صورت موفقیتآمیز بودن نصب چنین تصویری خواهید دید:
اکنون نود رد نصب شده است. توجه کنید که اینستالر پیشنهاد میکند سرویس 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) رزبری پای است و شما باید از هاستنیم مخصوص خود استفاده کنید.
برای متوقف کردن سرویس Node-RED کافی است کلیدهای ترکیبی Ctrl+C را بگیرید.
اجرای Node-RED به عنوان یک سرویس
Node-RED را میتوان به عنوان یک سرویس پسزمینه اجرا کرد. مزیت این روش آن است که میتوان طوری تنظیم کرد که وقتی سیستم بوت میشود، به طور خودکار آغاز شود و دیگر نیازی به استارت دستی نباشد.
برای استارت دستی نود رد میتوانید از دستور node-red-start استفاده کنید که خروجی مانند تصویر زیر دارد.
خروجی فوق نشانی IP و شماره پورت سرویس نود رد جدید را نشان میدهد. همچنین دستورهای Systemd برای آغاز و توقف سرویس را نمایش داده است. نود رد اکنون به عنوان یک سرویس فعال شده و میتوانید در نشانی مربوطه روی مرورگرتان آن را مشاهده کنید.
آغاز خودکار سرویس نود رد در زمان بوت سیستم
برای آغاز به کار خودکار سرویس نود رد در زمان بوت شدن سیستم باید از دستور زیر استفاده کنید:
~$ sudo systemctl enable nodered.serviceاکنون زمانی که رزبری پای آغاز میشود، سرویس نود رد نیز همراه با آن به طور خودکار شروع به کار میکند. برای تست آن کارهای زیر را انجام دهید.
- دستور sudo reboot را وارد کنید که باعث ریبوت شدن رزبری پای میشود.
- چند دقیقه صبر کنید تا فرایند ریبوت تکمیل شود.
- با استفاده از مرورگر به نشانی نود رد بروید تا از کارکرد صحیح آن مطمئن شوید.
اکنون نود رد باید در مرورگر بارگذاری شود و به طور معمول کار کند. نود رد گزینههای پیکربندی زیادی دارد که در بخش بعدی آنها را مورد بررسی قرار میدهیم.
فایل پیکربندی نود رد
اکنون که موفق شدیم نود رد را نصب و اجرا کنیم، نوبت به آن رسیده که با برخی تنظیمات اساسی آن آشنا شویم. پیکربندیهای عمده نود رد از طریق یک فایل تنظیمات انجام مییابد. محل این فایل در رزبری پای به صورت زیر است:
/home/pi/.node-redفلوها، نودها و البته فایل پیکربندی در دایرکتوری node-red قرار دارند. نام فایل پیکربندی نود رد به صورت settings.js است. با استفاده از ادیتور نانو این فایل را باز میکنیم:
pi@rpi4:~ $ cd.node-red/ pi@rpi4:~/.node-red $ nano settings.jsدر تصویر زیر بخشی از این فایل را میبینید.
بسیاری از گزینههای پیکربندی کامنت شدهاند. با حذف دو اسلش ابتدای هر خط میتوانید این تنظیمات را فعال کنید.
برخی از گزینههای پیکربندی که کاربرد بیشتری دارند به شرح زیر هستند.
- flowFile – این فایلی است که فلوها را در خود جای داده است. شما میتوانید محل و نام آن را با این تنظیمات سفارشیسازی کنید.
- uiPort – این تنظیمات شماره پورتی که میتوان از طریق آن به اینترفیس کاربر وب دسترسی داد را مشخص میکند. مقدار پیشفرض 1880 است، اما میتوانید هر مقدار دلخواه دیگری برایان تعیین کنید.
- userDir – این تنظیمات محل دایرکتوری نود را مشخص میکند که همان محل قرارگیری این فایل تنظیمات است و همچنین فلوها و نودها در آن ذخیره میشوند.
- nodesDir – شما میتوانید محل دیگری را برای ذخیره نودها تعیین کنید که مجزا از دایرکتوری قبلی باشد. در صورتی که این تنظیم را فعال کنید، نود رد دایرکتوری nodeDir را برای یافتن گرههای دیگر اسکن میکند.
- adminAuth – شما میتوانید کارکردهای مدیریتی یا ادیتوری سرویس نود رد را با تعیین نامهای کاربری و رمزهای عبور مختلف تفکیک و کنترل کنید. هر کاربر میتواند رمزهای خاص خود را داشته باشد. همچنین موارد زیاد دیگری وجود دارند که میتوانید از طریق این فایل کنترل کنید.
نودهای نود رد
در این بخش با یکی از اساسیترین مفاهیم در محیط نود رد یعنی نود یا گره آشنا میشویم. با ما همراه باشید تا با مهمترین نودها، کارکردشان و همچنین روش نصب نودهای شخص ثالث آشنا شوید.
نوار ابزار نودها
در نوار ابزار سمت چپ اینترفیس وب نود رد، فهرستی از نودهای پیشفرض یا ثالث میبینید که به همراه نود رد نصب شدهاند. امکان افزودن نودهای بیشتر از طریق کتابخانه نود رد و البته ساخت نودهای جدید وجد دارد.
مثالی از یک نود: دیباگ
یکی از متداولترین نودها نود debug نام دارد که آن را میتوانید زیر برچسب common پیدا کرده و به روی بوم بکشید. هدف نود دیباگ این است که یک خروجی متنی در پنجره دیباگ نشان دهد که در نوار ابزار سمت راست نود رد ظاهر میشود.
در تصویر زیر یک گره دیباگ را روی بوم میبینید که زبانه مشخصات و زبانه خروجی آن باز است.
برای مشاهده مشخصات هر نود کافی است روی آن دابل-کلیک کنید. به این ترتیب بخش ادیت باز میشود. بسته به نوع گره، زبانه مشخصات گزینههای پیکربندی مختلفی را عرضه میکند و تعدادی ویجت دارد که امکان تعامل با نود را فراهم میسازند.
نود دیباگ به ما امکان میدهد که یک رشته متنی را به بخش دیباگ ارسال کنیم. در تصویر زیر این حالت را مشاهده میکنید. رشتهای که در بخش دیباگ ظاهر شده از نود دیگری به نود دیباگ ارسال شده است. البته امکان پیکربندی مستقیم خروجی نود دیباگ به طور کامل فراهم آمده است.
نود دیباگ یکی از متداولترین نودها در فلوهای نود رد محسوب میشود. در واقع این نود معادل تابع ()Serial.print در اسکچ آردوینو به حساب میآید.
به خاطر بسپارید که یک نود دیباگ میتواند رشتهای را به بخش دیباگ و همچنین کنسول سیستم ارسال کند. در اغلب موارد، لازم داریم که این متن به کنسول ارسال شود. ممکن است لازم باشد پیامهای دیباگ به کنسول سیستم ارسال شوند که در صورت اجرای نود رد در خط فرمان بسیار مفید خواهد بود.
امکان سفارشیسازی نام نود وجود دارد. برای مثال در این مورد ما نام نود را example debug node میگذاریم. کافی است نامی که میخواهید را در خصوصیت name نود وارد کنید.
همواره باید نامهای مناسبی به نودها بدهیم تا بهتر متوجه شویم چه اتفاقی در فلوها میافتد. این روند مشابه انتخاب اسامی معنیدار برای متغیرها و تابعها در یک زبان برنامهنویسی است.
اطلاعات نود
برای کسب اطلاع در مورد مشخصات نود میتوانید روی دکمه i مانند تصویر زیر کلیک کنید تا زبانه info باز شود.
اطلاعاتی که در زبانه info دیده میشود به نوع نود مورد بررسی بستگی دارد، اما همه نودها دست کم خصوصیتهای شناسه نود، نوع و فعال بودن یا نبودن را دارند.
مستندات نود
نود رد یک سیستم مستندات داخلی دارد. برای مشاهده مستندات مربوط به یک نود میتوانید روی آیکون کتاب کلیک کنید.
مثالی از نود: inject
در این بخش به بررسی یک نمونه از نود inject میپردازیم. نود inject در مواردی به کار میآید که بخواهیم یک رشته را در نود دیگری درج کنیم.
در مثال زیر بخش Edit یک نود اینجکت به نام Hello نمایش یافته است. در زبانه «مشخصات» (Properties) میتوانید انواع مختلفی از پیلودها که نود اینجکت میتواند در نود دیگر وارد کند از قبیل نود دیباگ مشاهده کنید.
پیلود میتواند یک رشته ثابت، عدد، مقدار بولی، عبارت جیسون، متغیر فلو و یا خیلی چیزهای دیگر باشد. در مثال زیر پیلود را به صورت یک رشته ثابت به عنوان بخشی از تست به همراه یک نود گوگل شیت آوردهایم.
مدیریت پالتها
برای نصب یک نود یا فلو از کتابخانه نود رد باید از ابزار «مدیریت پالتها» (Palettes Manager) استفاده کنیم. امکان دسترسی به ابزار مدیریت پالت از طریق منوی همبرگری در گوشه راست-بالای پنجره ادیتور نود رد وجود دارد.
از طریق ابزار مدیریت پالت میتوان فلوهای دخیل، نودها یا مجموعهای از نودها را نصب کرد.
یک مجموعه از نودها که به طور خاص مفید هستند و به طور مکرر استفاده میشوند، مجموعه node-red-dashboard نام دارند. برای نصب این مجموعه کافی است عبارت dashboard را وارد کنید تا در میان نتایج جستجو ظاهر شود و سپس روی install کلیک کنید.
همچنین میتوانید در ابزار مدیریت پالت به دنبال عبارت dht22 بگردید و این نود را نیز نصب کنید. این نودهای جدید در نوار ابزار سمت چپ ظاهر میشوند که ظاهری مانند تصویر زیر دارد.
امکان استفاده از این نودها در فلوها جهت ایجاد داشبوردهایی مانند تصویر زیر وجود دارد:
تنظیمات
امکان دسترسی به صفحه dht22 از طریق منوی همبرگری وجود دارد.
در صفحه تنظیمات میتوان محیط کاری، زبان اپلیکیشن، اندازه خطوط شبکهای و موارد بسیار دیگر را پیکربندی کرد. همچنین میتوان میانبرهای دلخواهی را برای کیبرد تنظیم نمود.
برای این که بتوان از نودها به شیوه بهینهای استفاده کرد، باید آنها را از طریق فلوها به هم وصل کرد. در بخش بعدی این مقاله با روش ساخت لوهای ساده با بهرهگیری از برخی از مفیدترین نودها آشنا میشویم.
فلوهای نود رد
نودها به تنهایی فایده چندانی ندارند و باید به یکدیگر وصل و داخل فلوها پیکربندی شوند و در ادامه برخی مثالها را بررسی میکنیم که نشان میدهد نودها چطور میتوانند داخل فلوها پیکربندی شوند. در این مثالها از نود DHT22 استفاده میکنیم و از این رو سنسور DHT22 را به رزبری پای خود وصل کردهایم. برای آشنایی با روش اتصال این سنسور به رزبری پای میتوانید این مقاله (+) را مطالعه کنید.
ساخت یک فلوی جدید
برای ساخت یک فلوی جدید روی دکمه + در گوشه راست-بالای بوم طراحی کلیک کنید.
این فلو شامل دو نود به نامهای inject و debug است. این دو گره را میتوانید زیر گروه common مشاهده کند. سپس آنها را مانند تصویر زیر روی بوم قرار دهید.
این فلو کارهای زیر را انجام میدهد. هنگامی که روی دکمه گره اینجکت کلیک کنیم، رشته HELLO به گره بعدی ارسال میشود. در این حالت، گره بعدی که گره دیباگ است، پیام را در پنجره دیباگ نمایش میدهد.
گره اینجکت در سمت چپ و گره دیباگ در سمت راست قرار دارند. این دو گره از طریق کلیک کردن و نگه داشتن ماوس روی دایره گره اینجکت و سپس قرار دادن کرسر ماوس روی دایره گره دیباگ و رها کردن کلیک ماوس به هم متصل میشوند.
در ادامه گره اینجکت را پیکربندی میکنیم. به این منظور باید روی آن دابل-کلیک کنیم تا پنجره مشخصات باز شود. در فیلد msg گزینه payload را انتخاب کرده و برای آن یک مقدار رشتهای انتخاب میکنیم که با آیکون az نمایش یافته است. در فیلد پیلود عبارت HELLO را وارد میکنیم. در نهایت روی Done کلیک میکنیم تا از صفحه گره اینجکت خارج شویم.
در ادامه روی گره دیباگ دابل-کلیک میکنیم تا برخی خصوصیتهای آن را تغییر دهیم. نخستین مورد خصوصیت output است. در گره اینجکت رشته را در متغیر msg.payload ذخیره کردیم. از این رو در گره دیباگ باید خروجی را از متغیر msg.payload بخوانیم. همچنین در خصوصیت Name نامی به صورت Example debug node به این گره میدهیم. به این ترتیب صفحه ادیت گره دیباگ به شکل زیر در میآید:
اکنون فلو را تست میکنیم. به این منظور روی دکمه قرمز رنگ Deploy کلیک کنید.
اکنون فلو در حال اجرا است.
روی دکمه گره اینجکت کلیک کنید تا رشتهای به صورت HELLO در صفحه گره دیباگ ظاهر شود. اگر صفحه دیباگ دیده نمیشود، روی دکمه کوچک کنار آیکون باگ کلیک کنید.
صفحه دیباگ هر بار که روی دکمه گره اینجکت کلیک کنید، یک پیام جدید نمایش میدهد. این پیام شامل یک «مُهر زمانی» (Timestamp)، نام گره دیباگ و نام متغیری است که آن را در خود جای داده است. همچنین توجه داشته باشید که هر بار که روی دکمه گره اینجکت کلیک میکنید، یک اعلان سبز رنگ در پنجره ادیتور نود رد ظاهر میشود.
ساخت فلویی با DHT22
در این بخش یک فلوی دیگر را با استفاده از گره DHT22 میسازیم تا خوانش دما را از سنسور دریافت کنیم. در این فلو از گره دیباگ برای نمایش دما بهره میگیریم.
ما میخواهیم هر ده ثانیه یک بار خوانش جدیدی از دما دریافت کنیم، از این رو یک گره تریگر به فلو اضافه میکنیم. چون میخواهیم فلو را به طور دستی نیز بتوانیم تحریک کنیم، یک گره اینجکت نیز اضافه میکنیم که دکمه مفیدی به این منظور دارد. در نهایت فلو به شکل زیر در میآید:
در ادامه پیکربندی هر گره را میبینید.
زمانی که این فلو را ساختید، روی Deploy کلیک کنید و سپس دکمه گره اینجکت را بزنید تا تریگر آغاز شود. در ادامه میبینید که مقدار دمای جدید هر ده ثانیه یک بار، در پنجره دیباگ ظاهر میشود.
ساخت فلو با گره function
در این بخش یک گره با استفاده از گره فانکشن میسازیم. گرههای فانکشن بسیار مفید و کاملاً انعطافپذیر هستند. به این ترتیب میتوانید کدهای خاص جاوا اسکریپت بنویسید تا درون گره اجرا شود و ورودیها را به هر ترتیب که دوست دارید پردازش کنید.
فلوی زیر شامل یک گره اینجکت، یک گره فانکشن و سه گره دیباگ است. این مثال نشان میدهد که چطور میتوانیم با استفاده از کدهای جاوا اسکریپت ورودی را پردازش کرده و سه خروجی متفاوت به دست آوریم. ظاهر فلو به صورت زیر است:
گره فانکشن در میانه فلو قرار دارد. توجه کنید که این فلو سه خروجی دارد که به گرههای دیباگ وصل هستند. یک گره دیباگ در واقع ورودی را از دو خروجی به فانکشن میگیرد. نکته جالب در مورد این فلو آن است که از کدهای جاوا اسکریپت در نود فانکشن استفاده شده است که به صورت زیر هستند:
این کد بسیار ساده است. سه متغیر لوکال به نامهای msg1, msg2 و msg3 تعریف شدهاند. هر یک شامل یک سند کوچک جیسون، یک پیلود و یک رشته تککاراکتری در داخل خود است. گزاره بازگشت آرایهای است که سه فیلد دارد. در انتهای پنجره ادیت تعداد خروجیها برابر با سه تعیین شده چون سه فیلد در آرایه بازگشت وجود دارد.
هر فیلد آرایه بازگشت یک خروجی محسوب میشود. فیلد اول از خروجی فوقانی در نماد گرافیکی گره فانکشن خارج میشود. فیلد دوم از خروجی میانی خارج میشود و فیلد سوم از خروجی زیرین حاصل میشود. چنان که میبینیم گرههای فانکشن بسیار کارآمد هستند. شما میتوانید هر کدی که دوست دارید و هر برنامهای که در نظر دارید را با استفاده از این فانکشنها پیادهسازی کنید. میتوانید ورودیهای مختلف را مورد پردازش قرار داده و سپس خروجی متناسب را به ادامه فلو تحویل دهید.
پیامها و متغیرهای نود رد
پیامها و متغیرهای نود رد به ما امکان میدهند که دادهها را بین گرهها و در داخل فلوها رد و بدل کنیم. در ادامه به بررسی این دو مفهوم در نود رد میپردازیم.
پیام چه تفاوتی با متغیر دارد؟
بسیاری از افراد که به تازگی با نود رد آشنا شدهاند در درک شباهتها و تفاوتهای پیامها و متغیرها مشکل دارند. در این بخش این دو مفهوم را از هم متمایز میکنیم.
شباهتهای پیامها و متغیرها
هم پیامها و هم متغیرها در نود رد برای ارسال دادهها از یک نود به نود دیگر مورد استفاده قرار میگیرند.
تفاوتهای پیامها و متغیرها
در نود رد یک پیام میتواند از گرهی به دقیقاً گره بعدی که وصل شده است، ارسال شود، اما متغیر میتواند از یک نود به هر چند نود دیگر با هر مسافتی ارسال شود. به این ترتیب متغیرها میتوانند به گرههایی که مستقیماً وصل نیستند هم ارسال شوند. متغیرها همچنین میتوانند بین گرههایی که به فلوهای متفاوت تعلق دارند رد و بدل شوند.
پیامها در نود رد
مهمترین نکتهای که در مورد پیامها باید به آن توجه کنید، این است که دادههایی که از طریق پیام رد و بدل میشوند درون یک شیء به نام msg قرار میگیرند. شیء msg میتواند شامل هر تعداد خصوصیتهایی باشد که لازم هستند. برخی از این خصوصیتها داخلی هستند، اما امکان ساخت خصوصیتهای جدید نیز وجود دارد. مهمترین خصوصیت payload نام دارد. اغلب گرهها به طور خودکار دادهها را در خصوصیت پیلود ذخیره میکنند. برای نمونه گره MQTT-in را در نظر بگیرید.
گره MQTT-in مانند اغلب گرههای دیگر دادهها را در خصوصیت msg.payload ذخیره میکند. این کار از طریق تبدیل انجام مییابد. به این منظور لازم نیست کار خاصی انجام بدهید. به همین دلیل میدانیم که برای بازیابی یا پردازش دادهها در گره بعدی کافی است محتوای خصوصیت payload را بخوانیم. در ادامه مثالی از نمایش دادههای گره msg.payload با استفاده از گره دیباگ را میبینید.
توجه کنید که خروجی گره دیباگ از شیء msg حاصل میشود. در فیلد متنی عبارت payload را وارد کردهایم و از این رو میتوانیم به دادههای پیلود دسترسی داشته باشیم. در پیلود امکان ذخیره دادههایی با انواع مختلف از جمله موارد زیر وجود دارد.
- مقادیر بولی: شامل دو مقدار true و false
- مقادیر عددی: مانند 0 یا 123.4
- مقادیر رشتهای: مانند “hello”
- آرایهها: مانند [1,2,3,4]
- شیء جیسون: ماند { “a”: 1, “b”: 2}
- مقدار تهی (Null)
پیلودهای شیء جیسون بسیار منعطف هستند. تا زمانی که عبارت جیسون معتبر باشد، آن را میتوان در پیلود پیام ذخیره کرد. در مثال زیر گره اینجکت را میبیند که پیلود آن شامل یک سند جیسون است.
در گره اینجکت میتوان سند JSON را از طریق انتخاب نوع داده متناسب در پیلود وارد کرده و سپس روی دکمه سهنقطه کلیک کرد. به این ترتیب متن در ادیتور JSON نمایش مییابد.
ادیتور JSON به سادگی امکان ساخت سندهای جیسون را فراهم میسازد و یک زبانه ادیتور بصری نیز دارد که امکان جستجوی درون سند را ممکن ساخته است. شما میتوانید پیلود JSON را به گره بعدی ارسال کنید. برای مثال اگر گره بعدی گره دیباگ باشد، به صورت زیر پیکربندی میشود:
در پنجره دیباگ سند JSON به شکل زیر ظاهر میشود.
برخی گرهها مانند گره اینجکت میتوانند با خصوصیتهای سفارشی که به شیء msg الصاق یافتهاند نیز کار کنند. به مثال زیر توجه کنید:
در این مثال، دو خصوصیت سفارشی ساختهایم که یکی عدد و دیگری رشته است. میتوان به وسیله ارجاع دادن از این خصوصیتها در گره بعدی استفاده کرد.
متغیرها در نود رد
در نود رد با بهرهگیری از متغیرها میتوان دادهها را بین هر گرههای مختلف و حتی فلوهای متفاوت به اشتراک گذاشت. متغیرهای نود را میتوان مانند متغیرها در زبانهای برنامهنویسی از قبیل روبی یا پایتون تصور کرد. در چین زبانهایی ما متغیرهای محلی و سراسری داریم. امکان دسترسی به متغیرها به «حیطه متغیر» (Variable’s Scope) بستگی دارد.
در نود رد نیز همین مفهوم حیطه متغیر را داریم و در نتیجه امکان دسترسی به متغیرها به حیطه آنها وابسته است. به طور کلی در نود رد سه حیطه وجود دارد:
- Node (معادل متغیر لوکال در پایتون است). در این حالت متغیر تنها داخل آن گره که تنظیم شده قابل مشاهده است.
- Flow (معادل متغیر سراسری در پایتون است). در این حالت متغیر در همه گرههایی که در یک فلو قرار دارند، قابل مشاهده است.
- Global (معادل متغیر سیستمی در پایتون است). در این حالت متغیر در همه گرهها قابل مشاهده است.
متغیر گلوبال یا سراسری را میتوان از طریق یک گره در فلو تنظیم کرد و در گره دیگر در هر فلوی متفاوت آن را خواند. در یک زبان برنامهنویسی مانند پایتون این مفهوم تقریباً معادل «ارتباط بین پردازشی» (cross-process یا inter-process communication) است.
ما در اغلب موارد در یک «چارچوب فلو» (Flow Context) کار میکنیم. در این حالت امکان تعیین متغیر فلو با استفاده از تابع flow.set() وجود دارد. در ادامه مثالی از پروژه Terrarium را میبینید.
در این مثال، متغیری به نام soil_humidity_threshold میبینیم که در مقدار آن در msg.payload ذخیره شده است. برای خواندن یک متغیر فلو میتوانیم از تابع flow.get() بهره بگیریم. در ادامه مثالی از گره فانکشن را میبینید.
در این مثال مقدار ذخیره شده در متغیر فلو به نام raw_humidity_value خوانده شده و در محاسبه استفاده میشود.
گره complete در نود رد
با استفاده از گره complete در نود رد میتوانید در صورت تکمیل شدن کار هر گره دیگر در فلو، یک گره دیگر را تریگر کنید. در این بخش از مقاله نود رد چیست با کاربرد گره complete از طریق بررسی یک مثال آشنا میشویم. گره complete زیر عنوان common در نوار ابزار سمت چپ قرار دارد.
راهاندازی گره complete
در این بخش از مثال بخش قبلی در مورد فلوها برای آشنایی با کارکرد گره complete آشنا میشویم.
در فلوی اصلی دو گره اضافه کردهایم که یکی گره 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 است میبینید.
اگر روی گره complete صفحه ادیت آن باز میشود. در زبانه مشخصات فهرستی از گرههای دیگر داخل فلو میبینید که نوتیفیکیشنهای تکمیل شدن را ارسال میکنند. کافی است روی یک یا چند گره دیگر که این گره complete از آنها نوتیفیکیشن تکمیل شدن دریافت میکند.
پس از آن که فلو را دیپلوی کردید، هر بار که یکی از گرههای منتخب کاری را تکمیل کند، گره complete اطلاع خواهد یافت و هر بار که گره این اطلاع را یابد، خروجی تریگر میشود. شیء msg گره complete نیز به گره تریگر شده ارسال میشود.
گره catch در نود رد
گره catch برای به دام انداختن استثناها در فلو استفاده میشود. هنگامی که گره کَچ یک «استثنا» (exception) را به دام میاندازد، اطلاعات مرتبط را از طریق شیء msg به گره دیگر ماند گره دیباگ ارسال میکند تا در آنجا مدیریت شود.
در واقع گره catch مشابه گزاره try در پایتون یا گزاره throw در روبی عمل میکند. همه این موارد وظیفه یکسانی دارند و آن این است که امکان شناسایی شرایط استثنا را فراهم ساخته و آن را به شیوه صحیحی مدیریت کنند تا برنامه از کار نیفتد. برای مشاهده گره catch به گروه common در نوار ابزار سمت چپ سر بزنید.
راهاندازی گره catch
برای راهاندازی گره catch از فلوی test که در بخش بعدی بررسی کردیم، استفاده میکنیم.
به فلوی اولیه دو گره اضافه میکنیم. گره catch وقوع استثناها را بررسی میکند و گره دیباگ اطلاعاتی در مورد استثنا نمایش میدهد. نام گره catch را Catch all errors و نام گره دیباگ را Errors میگذاریم.
در تابع test فلوی اصلی یک خطا معرفی کردهایم. این خطا را میتوانید در تصویر زیر ببینید.
گره catch تنها دو گزینه برای پیکربندی دارد:
- دریافت خطاها از همه گرهها
- دریافت خطاها از گرههای منتخب
هنگامی که خطایی به دام میافتد، گره catch اطلاعات مرتبط را درون شیء msg به شکل خصوصیتهای الحاقی ذخیره میکند:
- error.message
- error.source.id
- error.source.type
- error.source.name
این گزینهها را میتوانید در صفحه ادیت گره و همچنین در اطلاعات (مستندات) گره مشاهده کنید. هر دوی این موارد در تصویر زیر نمایش یافتهاند.
برای نمایش اطلاعات در مورد خطایی که در گره فانکشن جاسازی کردهایم، میتوانیم از گره دیباگ استفاده کنیم که به صورت زیر پیکربندی شده است.
هنگامی که فلو را دیپلوی کنیم، روی دکمه گره اینجکت کلیک میکنیم تا گره فانکشن یک استثنا صادر کند که متعاقباً از سوی گره catch دریافت میشود. گره catch اطلاعاتی در مورد استثنا به گره دیباگ ارسال میکند تا در کنسول به صورت زیر نمایش یابد.
اکنون که از وجود باگ آگاه شدیم، میتوانیم آن را رفع کرده و فلو را مجدداً دیپلوی کنیم. به طور کلی بهتر است در فلوها یک گره catch داشته باشیم تا در صورت وجود غلط املایی در گره فانکشن یا هر نوع خطای دیگر از آن آگاه شویم.
گرههای link out و link in
گرههای link out و link in در نود رد به ما امکان میدهند که بین گرههای مختلف اتصال برقرار ساخته و دادهها را بین گرههایی که به فلوهای مختلف تعلق دارند، مبادله کنیم.
ما در بخشهای قبلی این مقاله با روش تبادل دادهها از طریق متغیرهای گلوبال بین گرههایی که به یک فلو تعلق ندارند، آشنا شدیم. گرههای link out و link in یک روش دیگر برای این منظور در اختیار ما قرار میدهند. راهاندازی این گرهها آسان است و به طور خاص برای این که صرفاً دادهها را مستقیماً از یک گره در یک فلو به گره دوم در فلوی دیگر انتقال دهیم مناسب هستند. گرههای link out و link in در گروه common نوار ابزار سمت چپ قرار دارند.
راهاندازی گرههای link out و link in
برای نمایش طرز کار گرههای link out و link in از فلوی آشنایی که در بخشهای قبلی ساختیم، بهره میگیریم. در این بخش برخی تغییرات کوچک در فلوی test ایجاد میکنیم. به این ترتیب که یک خروجی جدید در گره فانکشن اضافه کردهایم که به گره link out وصل شده است.
همچنین تغییر کوچکی در گره فانکشن ایجاد کردهایم. در این گره یک خروجی چهارم اضافه کرده و کد جاوا اسکریپت را طوری تغییر دادهایم که یک رشته متن به خروجی جدید ارسال شود.
توجه کنید که در این جا لازم نیست در مورد پیکربندی گره link out دغدغه چندانی داشته باشیم و پس از افزودن یک گره link in به این موضوع خواهیم پرداخت. به این منظور یک فلوی جدید ایجاد کرده و گرههای link in و debug را به صورت زیر در آن قرار میدهیم.
روی گره link in دابل کلیک کنید تا مشخصاتش را ببینید. در فیلد Name عبارت Link in 1 یا هر نام مناسب دیگر را وارد کنید. این نام در مشخصات link out نمایش خواهد یافت تا بتوانید به سادگی گره خروجی را انتخاب کنید. مشخصات گره link in به صورت زیر است:
توجه کنید که گره link out زیر فیلد name نمایش یافته است. از آنجا که گره link out هنوز نامی ندارد، نود رد ID نود را نمایش میدهد. زمانی که نامی به گره link out تخصیص دهید، به جای شناسه کره، نام آن را مشاهده خواهید کرد.
کار خود را با فلویی که شامل گره link out است پی میگیریم. روی گره link out دابل-کلیک کنید تا مشخصاتش را بیینید. نام آن را Link out node 1 یا هر نام دیگری که مناسب است، بگذارید. مشخصات link out اینک به صورت زیر باید باشد:
چنان که میبینید گره link in 1 به عنان گره مقصد برای گره حاضر فهرست شده است. هر گره link in دیگر که در همه فلوها ایجاد شده باشد، در این بخش نمایش مییابد. گره link in ر انتخاب کرده و روی Done کلیک کنید.
پیش از آن که تغییرها را دیپلوی کنید، را بررسی کنید که نام گره link out در گره link in نمایش یافته باشد. اکنون به جای شناسه گره باید نام واقعی این گره را ببینید. شما میتوانید ارتباط بین گره link in و link out را از هر کدام از این گرهها برقرار سازید. تغییرها را دیپلوی کرده و روی دکمه گره اینجکت کلیک کنید. به این ترتیب پیام زیر را در زبانه دیباگ مشاهده میکنید.
گرههای link in و link out یک روش جایگزین برای انتقال دادهها میان گرههایی هستند که به فلوی یکسانی تعلق ندارند.
گره Switch
گره switch به فلو امکان میدهد که یکی از چند مسیر ممکن را بسته به قواعدی که تعیین شده است انتخاب کند. به این ترتیب میتوان گفت که گره switch مانند گزاره if در زبانهای برنامهنویسی عمل میکند.
در یک گره switch میتوان مانند گزاره if یک یا چند قاعده منطقی تعریف کرد و بر اساس صدق یا کذب این گزارهها، گره سوئیچ طوری پیکربندی میشود که یک یا چند مسیر اجرایی مختلف را پیگیری کند. گره سوئیچ در گروه function در نوار ابزار سمت چپ قرار دارد.
راهاندازی گره سوئیچ
برای این که با طرز کار گره سوئیچ آشنا شویم، از فلوی ساده زیر کمک میگیریم:
این فلو با یک گره اینجکت آغاز میشود که وقتی روی دکمهاش کلیک کنید، مقدار عددی 6 را ارائه میکند. این پیلود وارد گره سوئیچ میشود که به ارزیابی آن خواهد پرداخت. اگر پیلود بزرگتر از 5 باشد، خروجی فوقانی تریگر میشود. اگر پیلود برابر با 5 یا کمتر باشد، خروجی پایین تریگر خواهد شد. به تصویر زیر دقت کنید.
فیلدهای مهم در صفحه ادیت با کادر زردرنگ مشخص شدهاند. ابتدا باید مشخصهای که ارزیابی خواهد شد را مشخص کنیم. در این مثال، گره را طوری پیکربندی میکنیم که مقدار را از پیلود پیام دریافت کند. سپس باید دست کم یک قاعده تعریف کنیم تا ارزیابی شود. قاعده به وسیله یک مقایسهگر بولی روی مقدار تعریف میشود و همچنین یک خروجی تعریف میشود که در صورت درست بودن مقایسه تریگر خواهد شد. مقایسهگرهای قابل استفاده بسیار زیاد هستند.
فیلد آخر در صفحه ادیت، حالت ارزیابی است. میتوان آن را طوری تنظیم کرد که وقتی قاعده مورد ارزیابی صادق است متوقف شود یا این که همه قواعد را ارزیابی کند. این فلو را دیپلوی کنید و سپس روی دکمه گره اینجکت کلیک نمایید. به این ترتیب خروجی مقدار 6 را میدهد که بزرگتر از 5 است.
گره سوئیچ مقدار عددی 6 را ارزیابی کرده و ادامه گردش اجرایی را از خروجی فوقانی پیگیری خواهد کرد.
گره range در نود رد
گره range کارکردی مشابه تابع map در زبان برنامهنویسی آردوینو دارد. این گره یک عدد میگیرد که به یک بازه خاص تعلق دارد و آن را به یک عدد جدید در بازهای جدید باز-نگاشت میکند. گره range در گروه function نوار ابزار سمت چپ قرار دارد.
راهاندازی گره range
برای توضیح چگونگی عملکرد گره range فلوی ساده زیر را ساختهایم.
از گره inject برای ارسال عدد به گره range که عنوانش scale input است استفاده میکنیم. گره range مقدار را از ورودی خود گرفته و آن را باز-نگاشت میکند. در ادامه با شیوه پیکربندی گره range آشنا میشوید. بازه ورودی 0 تا 1023 است و بازه خروجی 0 تا 100 است.
در ادامه چند مقدار ورودی مختلف را بررسی میکنیم. یک مقدار 1023 از قبل روی گره inject تنظیم شده است. فلو را دیپلوی کرده و روی دکمه گره اینجکت کلیک میکنیم. اگر به خروجی در صفحه دیباگ نگاه کنیم به شکل زیر در آمده است:
مقدار 1023 به بازه 0 تا 1023 تعلق دارد. باز-نگاشت این مقدار به بازه 0 تا 100 موجب میشود که عدد 100 به دست آید. در ادامه مقدار دیگری را به صورت 500 بررسی میکنیم. گره اینجکت را بر این مبنا ویرایش کرده و پس از دیپلوی مجدد روی دکمه کلیک میکنیم تا فلو آغاز شود. نتیجه به صورت زیر است.
مقدار باز-نگاشت شده 500 از 1023 به صورت 48.875855 از 100 است. اگر به این همه دقت اعشاری نیاز ندارید، میتوانید با انتخاب چکباکس مربوطه در مشخصات گره range نتیجه را به نزدیکترین عدد صحیح گرد کنید.
فلو را مجدداً دیپلوی کرده و روی دکمه اینجکت کلیک کنید تا نتیجه سرراستتری نمایش یابد.
گره range در موارد مختلف به خصوص زمانی که با اعدادی در بازههای خاص کار میکنیم به کارمان میآید. برای نمونه میتوان از این گره در پروژه تراریوم برای انتخاب ورودی آنالوگ عرضه شده از سنسور ESP32 برای سنجش رطوبت خاک و تبدیل آن به درصد برای نمایش میزان رطوبت خاک به درصد استفاده کرد.
گره delay در نود رد
گره delay در نود رد دو وظیفه بر عهده دارد. این گره امکان ایجاد تأخیر در پیامرسانی به میزان مشخص و همچنین محدودسازی نرخ ارسال پیام عبوری را فراهم میسازد. در این بخش از مقاله آموزش نود رد با شیوه استفاده از گره delay برای ایجاد تأخیر در انتشار پیام در فلو و همچنین شیوه محدود کردن نرخ ارسال پیامهای مختلف در فلو آشنا خواهیم شد.
کارکرد محدودسازی نرخ به طور خاص در مواردی مفید است که بخواهیم فلو را به یک منبع بیرونی در کلاد وصل کنیم. به طور معمول منابع IoT در مورد میزان گرفتن بازخورد یک نرخ محدودسازی اعمال میکنند. اگر اپلیکیشن شما از این محدودیت تجاوز کند، حساب شما معلق میشود یا دست کم برای مدتی از کار میافتد. با استفاده از گره delay میتوانیم مطمئن شویم که فلو باعث نمیشود منابع IoT بیش از حد مشخصی اشغال شوند.
راهاندازی گره delay
برای درک طرز کار گره تأخیر یا delay فلوی ساده زیر را ایجاد میکنیم.
در این فلو از یک گره اینجکت برای ارسال زمان فعلی به دو گره دیباگ بهره میگیریم. در این فلو دو کار مختلف با گره delay انجام میدهیم. در هر دو مورد پیکربندی گره اینجکت یکسان و به شکل زیر است.
آزمایش اول: تأخیر ساده
در نخستین آزمایش از گره delay برای نگه داشتن پیامهای ورودی به میزان 5 ثانیه بهره میگیریم. در ادامه آن را به گره دیباگ ارسال میکنیم. به این منظور گره delay را به صورت زیر تنظیم میکنیم.
در ادامه فلو را دیپلوی و روی دکمه اینجکت کلیک میکنیم. گره دیباگ اول بیدرنگ زمان را نشان میدهد. اما گره دیباگ دوم که از سوی گره delay تغذیه میشود، پیام را پیش از ارسال به مدت پنج ثانیه در خود نگه میدارد. به این ترتیب گره دیباگ دوم پیام را با تأخیر پنجثانیهای نمایش میدهد که این وضعیت در کادرهای زردرنگ تصویر زیر مشخص است.
آزمایش دوم: محدودسازی نرخ
در آزمایش دوم از گره delay به عنوان ابزاری برای محدودسازی نرخ ارسال پیام بهره میگیریم. در حال حاضر اگر به سرعت روی دکمه گره اینجکت کلیک کنید، برای هر کلیک یک زمان در صفحه دیباگ مشاهده میکنید و در مدت زمان اندکی تعداد زیادی پیام روی هم انباشته میشود.
برای کاهش تعداد پیامهایی که به گره دیباگ میرسند برای نمونه به یک پیام در ثانیه میتوانیم گره delay را به صورت زیر پیکربندی کنیم.
اکنون مهم نیست که چه قدر سریع روی دکمه گره اینجکت کلیک میکنید، چون در نهایت هر ثانیه تنها یک پیام در صفحه دیباگ طاهر میشود. زمانهایی که در فاصله بین این دو پیام قرار بود ارسال شوند، در این حالت حذف میشوند.
قابلیت محدودسازی نرخ گره delay نیز کاربرد خاصی در پروژه تراریوم دارد. برای نمونه فرض کنید فیچری در این پروژه دارید که قرار است وقتی ولتاژ پمپ از مقدار خاصی پایینتر رفت به ما اطلاع دهد. بدیهی است که ما نمیخواهیم حساب IFFT یا اینباکس ما از چنین پیامهایی پر شود. بنابراین یک محدودسازی نرخ برای ارسال پیام در هر ده دقیقه یک بار تنظیم میکنیم.
نود trigger در نود رد
نود تریگر به ما امکان میدهد که یک پیام را در دورههای زمانی دلخواه تکرار کنیم. این گره در گروه function نوار ابزار سمت چپ قرار دارد.
راهاندازی نود trigger
برای درک طرز کار نود trigger فلوی زیر را ساختیم.
هنگامی که روی گره اینجکت با نام Start کلیک کنیم، نود trigger رشته متنی tap… را به گره دیباگ ارسال کرده و پس از آن هر 1 ثانیه یک بار این کار را تکرار میکند. هنگامی که روی دکمه گره اینجکت به نام Stop کلیک کنیم، نود تریگر ریست شده و منتظر پیام بعدی از سوی Start میماند. پیکربندی گره Stgart به صورت زیر است.
پیکربندی نود تریگر به شکل زیر است.
این نود گزینههای محدودی دارد. ما نود تریگر را طوری تنظیم کردهایم که هر شیء پیام که در ورودی دریافت میکند را منتشر کرده و هر ثانیه یک بار بازنشر کند. توجه کنید که گزینه دیگری برای ریست کردن از طریق ارسال msg.reset یا به وسیله تعیین مقدار مشخص در خصوصیت msg.payload وجود دارد.
در مثال زیر از روش msg.reset استفاده کردهایم. پیکربندی گره Stop به صورت زیر است.
در پیکربندی گره Stop یک خصوصیت reset از نوع شیء msg داریم که شامل یک timestamp است. چیزی که در خصوصیت ریست ذخیره میکنید، اهمیتی ندارد. این مقدار میتواند یک عدد، رشته، یا شیء JSON باشد. محتوای واقعی از سوی نود تریگر نادیده گرفته میشود و آن چه اهمیت دارد وجود خود خصوصیت reset است.
برای نمونه در پروژه تراریوم میتوان از نود تریگر برای دریافت یک خوانش از سنسور DHT22 در بازههای هر 10 ثانیه یک بار استفاده کرد.
نود RBE در نود رد
نود RBE یا Report by Exception تنها تغییرها را به خروجی خود ارسال میکند. فرض کنید دستورهای روشن/خاموش را به یک موتور یا راهانداز ارسال میکند. موتور پس از دریافت دستور ON روشن میشود و دستورهای ON بعدی که ارسال میشوند، تأثیری روی کارکرد آن ندارند.
در این موقعیتها در فلوی نود رد میتوان از یک نود RBE برای انتشار تغییرها در محتوای یک پیام بهره گرفت. با استفاده از نود RBE پیامی که معادل پیام قبلی باشد، منتشر نمیشود تا این که پیام متفاوتی دریافت شود.
در مثال موتور، فلوی RBE در صورتی که قبلاً پیام ON را دریافت کرده باشد، پیامهای ON بعدی را مسدود میکند، اما پیامهای OFF دریافتی را عبور میدهد. نود RBE در گروه فانکشن نوار ابزار سمت چپ قرار دارد.
راهاندازی نود RBE
برای توضیح شیوه استفاده از نود RBE، فلوی ساده زیر را میسازیم.
این فلو به وسیله دو گره اینجکت سمت چپ تریگر میشود. نود دیباگ در سمت راست صرفاً مقادیر 0 و 1 را بسته به نودی که کلیک شده است، پرینت میکند. نکته جالبتر اینجا است که پیام رسیده به نود دیباگ به وسیله یک نود RBE کنترل میشود و تنها تغییرها در پیلود پیام منتشر میشوند.
از این رو اگر نود اینجکت شماره 1 را چند بار کلیک کنید، در خروجی تنها یک بار مشاهده میکنید. اگر نود 2 را نیز چند بار کلیک کنید، رفتار مشابهی خواهید دید. با این حال اگر بین 1 و 2 به طور متناوب کلیک کنید، همه پیامها در صفحه دیباگ پرینت میشوند. روش راهاندازی نود RBE به صورت زیر است.
ما حالت این نود را روی گزینه block unless value changes قرار دادهایم که باعث میشود تا زمانی که پیام تغییر نیافته است، آن را مسدود کند و مقداری که ارزیابی میشود نیز برابر با msg.payload است. برای تست کردن فلو، آن را دیپلوی و روی دکمههای گره اینجکت کلیک میکنیم. خروجی به صورت زیر است.
توجه کنید که پیامها همواره به طور متناوب بین 1 و 2 عوض میشوند، هر چند روی یک نود چند بار پشت سر هم کلیک کنید.
ترفندهای نود رد
در آخرین بخش از راهنمای نود رد برخی ترفندها را معرفی میکنیم که در زمان کار با این نرمافزار به شما کمک زیادی خواهد کرد.
جستجوی نود
به مرور که با نود رد کار میکنید، مجموعه نودهای شما افزایش مییابد و پیدا کردن آنها نیز دشوار خواهد شد. شما میتوانید با کلیدهای ترکیبی Ctrl+Click صفحه جستجوی نودها را باز کنید و به دنبال نود مورد نظر خود بگردید.
فعال یا غیرفعال کردن فلو
گاهی اوقات ممکن است لازم باشد که به دلایل مختلف یک فلو را فعال یا غیرفعال کنید. این کار با استفاده از یکی از دو روش زیر ممکن است.
- نود Controller – این نود در یک فلوی موجود قرار گرفته و بر اساس مقداری که تنظیم میشود امکان ارسال پیام را فراهم میسازد.
- فلوی controlling – فلوی کنترل را میتوان هر جایی تنظیم کرد. هدف این است که یک مشخصه global.controller روی نودی تنظیم شود که مقدار true/false بگیرد. امکان استفاده از نودهای MQTT, HTTP، تایمرها و یا نود اینجکت به این منظور وجود دارد.
ساخت کتابخانه اختصاصی فلوها
زمانی که در زمینه کار با نود رد تبحر بیشتری کسب کردید، به طور طبیعی مسائلی که قبلاً حل کردهاید را به فلوهای جدید کپی میکنید. اما روش بهتر این است که فلوها را داخل یک کتابخانه (Library) درج کنید. به این ترتیب میتوانید بیدرنگ آنها را در هر فلوی دیگری وارد کنید. کافی است نودی که میخواهید ذخیره کنید را انتخاب کرده و به منوی اکسپورت بروید و گزینه کتابخانه را انتخاب نمایید.
کتابخانه تابعها
همین کار را در مورد قطعه کدهای مختلف نیز میتوانید انجام دهید. نود فانکشن امکان اکسپورت کدها و ذخیره آنها را داخل یک کتابخانه میدهد. بدین ترتیب میتوانید برای نمونه یک کد برای ارسال متد HTTP POST یا کد تغییر رنگ متن یا هر چیز دیگری را در داخل این کتابخانه ذخیره کرده و در موارد لزوم در آینده آنها را به سادگی مورد استفاده قرار دهید.
سخن پایانی
نود رد یک محیط برنامهنویسی است که به طور دائم در پسزمینه عمل کرده و وظایف سرور را اجرا میکند. به این ترتیب شما میتوانید در یک محیط کاملاً گرافیکی و ساده معماری نرمافزاری مورد نظر خود را پیادهسازی کرده و کدهای مورد نیاز را به زبان برنامهنویسی جاوا اسکریپت بنویسید تا اهداف مورد نظرتان اجرا شود. کارهایی که با استفاده از قابلیتهای متنوع نود رد میتوان اجرا کرد، تقریباً نامتناهی هستند.