解決「/dev/serial/by-id/」找不到USB裝置的問題 / How to display the USB dongle under "/dev/serial/by-id/"?
一切都可能是因為QinHeng Electronics CH340這塊USB控制晶片的問題。
Linux環境 / Linux Environment
(圖片來源:蝦皮)
為了能夠讓Home Assistant連上zigbee裝置,我買了cc2652p晶片的zigbee USB連結器。以下我將zigbee USB連接器稱為USB裝置。
(圖片來源:Orange Pi 3 LTS)
http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/details/orange-pi-3-LTS.html
我的Home Assistant是以Docker的形式運作在Orange Pi 3 LTS這塊板子上,作業系統是基於Oriangepi3-lts_3.0.8_ubuntu_jammy_desktop_xfce_linux5.16.17映像檔。以下我將Orange Pi 3 LTS稱作電腦。
找不到USB裝置 / Cannot find the USB device
將USB連結器插上電腦後,在終端機執行「lsusb」指令,可以看到原本只有「root hub」的列表中的其中一項變得不一樣:
Bus 005 Device 002: ID 1a86:7523 QinHeng Electronics CH340 serial converter
正常情況下,USB裝置應該能夠正常偵測,並顯示在「/dev/serial/by-id/」資料夾底下。但如果執行「ls -l /dev/serial/by-id/」,此時只會看到「ls: cannot access '/dev/serial/by-id/': No such file or directory」錯誤訊息。這表示電腦本身沒能正確偵測到USB裝置。
如果換其他的Linux電腦進行一樣操作,該USB裝置會正常出現在「/dev/serial/by-id/」資料夾底下。這表示問題不是在USB裝置本身,而是在電腦本身。
解決USB裝置衝突問題 / Solve the conflict problem between USB IDs
https://askubuntu.com/a/1403754
網路有人反應電腦使用的USB控制器晶片CH340有些問題。我沿著這個線索繼續研究,發現到Pablo Bianchi提出的解決方案。看起來似乎是CH340的晶片ID「1a86:7523」跟其他裝置的ID起了衝突,我們得來修正這個問題,做法如下:
- 編輯檔案「/usr/lib/udev/rules.d/85-brltty.rules」
- 用ID「1a86:7523」搜尋檔案內容。nano的搜尋功能要按Ctrl + w。
- 將以下設定的開頭加上「#」,表示註解該段。
- 將電腦重新啟動。不過Orange Pi 3 LTS好像沒辦法用指令重新啟動,必須要用實體開關或電源斷電才行。
sudo nano /usr/lib/udev/rules.d/85-brltty.rules
#ENV{PRODUCT}=="1a86/7523/*", ENV{BRLTTY_BRAILLE_DRIVER}="bm", GOTO="brltty_usb_run"
sudo reboot
找到USB裝置 / USB device appear in the "/dev/serial/by-id/"
重新啟動後,執行「ls -l /dev/serial/by-id/」指令,可以看到USB裝置已經出現在「/dev/serial/by-id/」底下。
Home Assistant的docker-compose.yml設定 / docker-compose.yml for Home Assistant
接下來我們就可以將它分享給以Docker運作的Home Assistant。
以下是運作Home Assistant的docker-compose.yml的設定,僅供大家參考。請特別注意到「volumes」底下的「- /dev/serial/by-id/:/dev/serial/by-id」,以及「devices」底下的設定:
version: '3.9'
services:
homeassistant:
image: "ghcr.io/home-assistant/home-assistant:stable"
volumes:
- ./config:/config
- /etc/localtime:/etc/localtime:ro
- /run/dbus:/run/dbus:ro
- /dev/serial/by-id/:/dev/serial/by-id
devices:
- /dev/ttyUSB0:/dev/ttyUSB0
- /dev/ttyUSB1:/dev/ttyUSB1
- /dev/hidraw0:/dev/hidraw0
- /dev/hidraw1:/dev/hidraw1
restart: unless-stopped
privileged: true
network_mode: host
接著再執行「docker-comose up」指令,將Home Assistant虛擬機器啟動。
之後的步驟就是到Home Assistant的Integrations裡面搜尋ZHA (Zigbee Home Automation)。如果USB裝置正常運作,在設定ZHA的時候它會自動偵測,後面就讓它自動配置即可完成。
https://youtu.be/sezePzMmiHs?t=203
安裝ZHA的步驟就跟JuanMTech影片在3:23後面的步驟一樣。不過我目前買的zigbee設備都還沒送到,之後再來看看能不能連上吧。
你的智慧家庭有遭遇過類似的困難嗎?
下面一起取個暖吧。
後來zigbee裝置買來後連接上都很順利,意外地簡單呢。
回覆刪除本來還以為zigbee網關什麼的聽起來很像很麻煩的樣子,其實也還好啦。