Cài đặt MQTT, Nodered và Rhasspy trên Orange Pi không sử dụng docker

Như ở bài trước, tôi đã hướng dẫn các bạn cài đặt Rhasspy và Home Assistant trên Orange Pi đều qua Docker, rất dễ dàng và đơn giản. Với bài này, tôi sẽ hướng dẫn phức tạp hơn 1 chút đó là cài đặt cả MQTT, Nodered và Rhassy trên Orange Pi mà không sử dụng docker .

Trên thực tế cả gói này được hướng dẫn cài đặt trên RPi được gọi là Sherlock – Offline Voice Assistant. Địa chỉ tại: https://ip-team4.intia.de. Tuy nhiên, do file cài tự động của Sherlock không chạy được trên Orange Pi, do vậy tôi đã tách ra thành từng phần một và đã cài hoàn chỉnh được trên Orange Pi PC Plus. Để chuẩn bị bạn cần:

Về cách cài hệ điều hành ban đầu, sau đó cài lên emmc của PC Plus, bạn có thể tham khảo bài trước. Tôi vẫn dùng Armbian 22.08 Jammy như bài trước để bắt đầu cài đặt.

Cấu hình âm thanh

Đầu tiên, hãy cấu hình âm thanh để có thể phát loa qua cổng AV và Mic thu câu lệnh trên Orange Pi PC Plus. Ở bài trước, tôi đã quên mất phần này và mặc định nó hoạt động trên docker. Giờ bạn phải cấu hình lại bằng câu lệnh quen thuộc alsa-mixer. Nhấn F3 để lựa chọn cấu hình Playback. sử dụng dấu mũi tên di chuyển đến phần Line Out, nếu ở đó đang có 2 chữ MM, nhấn chữ M để nó chuyển thành OO như hình minh họa dưới đây, làm tương tự với DAC.

Tiếp đó nhấn F4 để chuyển sang cấu hình Capture là thu âm bằng micro built-in. Cũng di chuyển con trỏ đến Mic1 như hình, ở đó nó chưa hiển thị gì cả, nhấn phím SPACE để nó chuyển sang chữ L R như hình minh họa. Tiếp đó không cần bấm gì để lưu lại, đơn giản chỉ là bấm ESC để thoát ra

Hãy thử lại loa và mic bằng các câu lệnh sau

Thử loa ở hw:0 2 kênh Stereo, nếu 2 loa phát ra 2 tiếng Left Front và Right Front là ok
speaker-test -twav -c2 -Dhw:0

Thu âm bằng mic hw:0,0, nhấn lệnh sau đó thử mic bằng cách nói vào mic, nếu không báo lỗi là ok
record --device="hw:0,0" ~/test-mic.wav

Phát lại file vừa thu âm
aplay --device="hw:0,0" ~/test-mic.wav

Cài đặt phần mềm

Tiếp theo đây là các câu lệnh để cài đặt phần mềm, mỗi câu lệnh tôi sẽ chú thích bên dưới như 3 lệnh thử âm thanh trên

Cập nhật lại repo và cài các gói cần cập nhật, lệnh này luôn nên được triển khai để Orange Pi được cập nhật repo và các gói mới nhất
sudo apt update && sudo apt upgrade -y

Cài đặt MQTT
sudo apt-get install mosquitto mosquitto-clients -y

Tài về file cài đặt NodeJS và Nodered
wget https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered
sudo chmod 755 ./update-nodejs-and-nodered
./update-nodejs-and-nodered

Khi cài xong sẽ có kết quả như hình kèm bên trên, truy cập vào http://<ip-adress>:1880 để kiểm tra. Nếu chưa được hãy khởi động lại nodered service, sau đó cài nodered chạy mỗi khi khởi động như 1 service.
sudo systemctl restart nodered.service
sudo systemctl enable nodered.service

Sau đó, cài Rhasspy qua gói deb trên github. Github của Rhasspy có tại địa chỉ sau https://github.com/rhasspy/rhasspy/ . Bạn tìm tới phần release để tìm bản release mới nhất, chọn phiên bản armhf để tải về. Tại thời điểm viết bài này, bản mới nhất là v2.5.11. Do đó câu lệnh sẽ là

wget https://github.com/rhasspy/rhasspy/releases/download/v2.5.11/rhasspy_armhf.deb
sudo apt --fix-broken install ./rhasspy_armhf.deb -y

Sau khi đã cài xong mà không phát sinh lỗi gì, hay khởi động Rhasspy qua câu lệnh
rhasspy --profile en
Ở đây profile en chính là profile tiếng anh sẵn có, nếu bạn định làm tiếng Việt hoặc sử dụng tiếng khác sẵn có của Rhasspy, hãy tham khảo tài liệu của Rhasspy để sử dụng

Rhasspy cũng sẽ được truy cập dễ dàng tại http://<ip-adress>:12101, như hình minh họa bên dưới

Hãy tạo 1 file rhasspy.service để rhasspy chạy tự động mỗi khi khởi động như 1 service, nội dung như sau

[Unit] Description=Rhasspy
After=syslog.target network.target sound.target

[Service] Type=simple
WorkingDirectory=/home/admin/.config/rhasspy
ExecStart=/bin/bash -lc 'rhasspy --profile en 2>&1 | cat'
RestartSec=1
Restart=on-failure
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=rhasspy

[Install] WantedBy=multi-user.target

Chạy 3 lệnh sau để cài service khi khởi động
sudo systemctl daemon-reload
sudo systemctl start rhasspy.service
sudo systemctl enable rhasspy.service

Cài đặt tiếp Zigbee2MQTT

Trong Sherlock, còn 1 gói nữa là Zigbee2mqtt, gói này sẽ cho phép bạn cài Orange Pi thành 1 Zigbee hub, sau đó sử dụng Rhasspy như Voice Assistant offline ra lệnh bằng giọng nói chuyển câu lệnh qua MQTT và điều khiển zigbee hub. Sẵn tiện tôi hướng dẫn bạn cài luôn:

Đầu tiên là cài python-pip và python-venv, ở đây tôi thấy rằng bản Armbian đã cài python3.8 làm mặc định, nhưng nếu bạn sử dụng bản HDH khác, nên kiểm tra lại version python của bạn
sudo apt install python3.8-venv python3.8-pip

Sau đó hãy đánh các lệnh sau:
sudo git clone https://github.com/Koenkk/zigbee2mqtt.git
cd zigbee2mqtt
python3 -m venv .
source /opt/zigbee2mqtt/bin/activate
pip install --upgrade pip wheel setuptools
pip install nodeenv
nodeenv -p -n 16.17.1

Ở phần nodeenv, các bạn chú ý là tôi chọn node version 16.17.1 để khớp với bản nodejs đã cài bên trên cho nodered, tùy trường hợp nodered bạn cài nodejs nào thì chạy môi trường python cài nodeenv bạn sử dụng bản đó. Chỉ là để cho chắc chắn không có lỗi phát sinh nào khác, còn bản khác ko ảnh hưởng gì. Sau đó hãy cài và khởi động Zigbee2MQTT qua

npm ci && npm start

Hãy tạo 1 file zigbee2mqtt.service để zigbee2mqtt chạy tự động mỗi khi khởi động như 1 service, nội dung như sau

[Unit] Description=zigbee2mqtt
After=network.target

[Service] ExecStart=/bin/bash -c 'source /opt/zigbee2mqtt/bin/activate; /opt/zigbee2mqtt/bin/npm start'
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=inherit
StandardError=inherit
Restart=always

[Install] WantedBy=multi-user.target

Cũng tương tự như trên, chạy 3 lệnh sau để cài service khi khởi động
sudo systemctl daemon-reload
sudo systemctl start zigbee2mqtt.service
sudo systemctl enable zigbee2mqtt.service

Zigbee2mqtt tương thích với các usb zigbee E18-2G4U04B, nên chỉ cần cắm usb zigbee vào Orange Pi PC là Zibgee hub sẵn sàng.

Chúc các bạn thành công

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *