Node-red nó là gì ? Node-RED được dựa trên Node.js, nó có thể được xem như một web server mà bạn có thể cấu hình tùy chỉnh các chức năng gọi là “flow” từ bất kỳ trình duyệt nào trên máy tính. Mỗi ứng dụng Node-RED bao gồm các node có thể liên kết được với nhau với các dạng là input, output và operation.

Một ví dụ đơn giản để chúng ta có thể hình dung được các node khác nhau sẽ tương tác như thế nào

Với Node-RED ta có thể hình dung cách tương tác và giao tiếp với các thiết bị một cách tổng quan như hình dưới. Ở đây máy tính của mình sẽ đóng vai trò là server và client

Nếu dùng Raspberry hay OrangePi thì thiết bị này sẽ đóng vai trò là Server, còn lại sẽ là client như hình


Hiểu được sơ bộ rồi thì mình đi vào cài đặt node-red để thử nghiệm thôi

Chuẩn bị

Trước hết thì chúng ta cần có một Raspberry PI/ Orange PI, nếu bạn không có 2 thứ trên thì chúng ta có thể cài đặt trực tiếp trên máy tính (lưu ý là dùng hệ điều hành ubuntu nhé). Ở đây thì quá trình cài đặt giống nhau, mình xin minh họa trên một máy tính dùng ubuntu.

Cài đặt

Cài đặt môi trường

Cách 1

Ta cài đặt nodejs và nodered theo lệnh sau

$ sudo apt-get update
$ sudo apt-get install node.js -y
$ sudo apt-get install nodejs-legacy
$ sudo apt-get install git -y
$ git clone https://github.com/node-red/node-red.git
$ cd node-red
$ sudo npm install n -g
$ sudo n stable
$ cd ..
$ sudo npm install -g grunt-cli
$ cd node-red
$ grunt build
$ node red

Bạn có thể tham khảo thêm một số cách cài khác(ví dụ cách 2 bên dưới) nếu vẫn còn trục trặc tại Nodered install

Cách 2

Cài nhanh gọn với lệnh

$ sudo apt-get install nodejs-legacy
$ sudo apt-get install npm
$ sudo npm install -g --unsafe-perm node-red node-red-admin
$ node-red

Giờ thì có thể truy cập vào Node-RED ở đường dẫn http://127.0.0.1:1880/#

Khởi động nodered tự động

Đây là một option khi bạn cài nodered lên ubuntu 16.04, ta cần tạo một service nodered với tên node-red.service với lệnh

$ sudo nano /etc/systemd/system/node-red.service

Copy đoạn bên dưới dán vào

[Unit]
Description=Node-RED
After=syslog.target network.target
 
[Service]
ExecStart=/usr/local/bin/node-red-pi --max-old-space-size=128 -v
Restart=on-failure
KillSignal=SIGINT
 
# log output to syslog as 'node-red'
SyslogIdentifier=node-red
StandardOutput=syslog
 
# non-root user to run as
WorkingDirectory=/home/sammy/
User=sammy
Group=sammy
 
[Install]
WantedBy=multi-user.target

Lưu ý: thay sammy bằng user hiện tại của bạn, ví dụ của mình dùng user ubuntu thì ubuntu sẽ được thay thế cho sammy

Sau đó chạy lệnh để auto start nodered

$ sudo systemctl enable node-red
$ sudo systemctl start node-red

Nếu muốn dừng chạy auto thì chạy command

$ sudo systemctl stop node-red

Tạo màn hình đăng nhập cho node-red

Để đảm bảo chỉ có mình bạn và những người liên quan có thể vào được trang nodered admin thì cần enable trang đăng nhập lên, để thực hiện được cần

Tạo hash-pw, sau đó copy lại pass này

$ node-red-admin hash-pw

Chỉnh sửa file settings.js với lệnh

$ nano ~/.node-red/settings.js

Kéo xuống và uncomment khối adminAuth(xóa các kí tự “// ” trước mỗi line). Đổi phần username thành cái bạn muốn và paste hash password đã tạo ở trên vào.

adminAuth: {
    type: "credentials",
    users: [{
        username: "admin",
        password: "$2a$08$Ab9prIr1M8a5a1/Zx8.B9.uIOCPe.v90ZGuZc2kAATp6BHJ/WV5KS",
        permissions: "*"
    }]
},

Ở đây bạn cần thay thế 2 chỗ là username và password
Sau khi chỉnh sửa hoàn tất, khởi động lại nodered với lệnh

$ sudo systemctl restart node-red

Ví dụ với Node-RED

Tiếp theo mình sẽ thử test xem Node-RED hoạt động thế nào, mình sẽ tạo 2 ra input kiểm tra thông tin khi tác động vào 2 input này là gì ?

Bước 1: Thực hiện kéo thả 3 khối gồm 2 input và 1 output

Bước 2: Cấu hình input 1, chọn Payload là boolean True, input 2 với Payload là boolean False

Bước 3: Chọn Deploy, đây giống như quá trình build trong lập trình C và quan sát debug

Node-red-dashboard

Bước ban đầu về Node-RED đã xong, giờ muốn có một cái dashboard giao diện như nút bấm này nọ thì làm thế nào ? Không lẽ tác động vào input mà tác động vào mấy cái flow thì cũng hơi chuối, cái đó chỉ dùng cho debug thôi. May mắn thay là Node-red có hỗ trợ dashboard cho chúng ta luôn. Thế dashboard nó có dạng như nào nhỉ, mọi người tiếp tục xem hình bên dưới để dễ hình dung

Nhìn khá là bắt mắt, giống như mấy cái app trên Android phết. Nhanh cài để thử thôi

Chạy lệnh sau để tải node-red-dashboard về và open lên

$ cd ~/node-red/node_modules
$ git clone https://github.com/node-red/node-red-dashboard.git
$ cd node-red-dashboard
$ npm install
$ cd ~/node-red/
$ node red

Nếu gặp lỗi node-red vẫn còn mở thì bạn cần tắt hết terminal đang mở hoặc tắt node red bằng lệnh killall node–red

Nếu vẫn còn vấn đề về cài đặt thì bạn có thể tham khảo thêm ở đây Dashboard

Sau khi khởi động lại node red bạn sẽ thấy thông bán về phiên bản dashboard và đường dẫn để vào giao diện

Ví dụ với Node-RED dashboard

Mình tiếp tục cái tiến ví dụ node-red cơ bản ở trên, giờ thêm 2 nút nhấn và kiểm tra trạng thái hiển thị 2 nút nhấn trên giao diện xem thế nào

Bước 1: Thực hiện kéo thả 3 khối gồm 2 button ON/ OFF, 1 switch để thay đổi trạng thái, 1 text để hiện giá trị hiện tại nút nhấn và 1 msq.payload để debug

Bước 2: Tạo layout giao diện dashboard

Bước 3:Cấu hình input, output

Bước 4: Chọn Deploy, quan sát debug và giao diện, chọn đường dẫn http://127.0.0.1:1880/ui/#/0

Quan sát trên nhiều thiết bị khác nhau

Đúng ra đến ví dụ node-red dashboard thì dừng rồi, nhưng lại nảy ý định quan sát điều khiển trên các thiết bị khác như smartphone thì có được không ? Mình tiếp tục thử tiếp bằng cách lấy ip của máy tính đang cài đặt nodered ở trên qua lệnh

$ ifconfig

Kết quả trả về là địa chỉ 192.168.1.13 (đây là IP local của máy mình nhé. Vậy có manh mối rồi, mình dùng điện thoại 192.168.1.13:1880/ui để vào giao diện điều khiển

Kết quả

Tạm kết

Tới đây là dừng thiệt rồi, tạm thời đã có một ít kiến thức về node red cũng như cách sử dụng cơ bản, hi vọng giúp các bạn bắt đầu đỡ mất thời gian và có chút gì đó để tiếp tục tìm kiếm phát triển thêm :D, hẹn gặp lại các bạn ở bài tiếp theo về Node-red và ESP8266