Node-red cơ bản
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