:::

解決「/dev/serial/by-id/」找不到USB裝置的問題 / How to display the USB dongle under "/dev/serial/by-id/"?

5月 03, 2023 , , , 1 Comments Edit Copy Download

2023-0315-234433.png

一切都可能是因為QinHeng Electronics CH340這塊USB控制晶片的問題。


Linux環境 / Linux Environment

sg-11134201-22120-5c9szmk9yqkvfc.jpeg

(圖片來源:蝦皮)

為了能夠讓Home Assistant連上zigbee裝置,我買了cc2652p晶片的zigbee USB連結器。以下我將zigbee USB連接器稱為USB裝置。

orange-pi-3-lts-banner-img.png

(圖片來源: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

2023-0315-231420.png

將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

https://askubuntu.com/a/1403754 

網路有人反應電腦使用的USB控制器晶片CH340有些問題。我沿著這個線索繼續研究,發現到Pablo Bianchi提出的解決方案。看起來似乎是CH340的晶片ID「1a86:7523」跟其他裝置的ID起了衝突,我們得來修正這個問題,做法如下:

  1. 編輯檔案「/usr/lib/udev/rules.d/85-brltty.rules」
  2. sudo nano /usr/lib/udev/rules.d/85-brltty.rules
  3. 用ID「1a86:7523」搜尋檔案內容。nano的搜尋功能要按Ctrl + w。
  4. 將以下設定的開頭加上「#」,表示註解該段。
  5. #ENV{PRODUCT}=="1a86/7523/*", ENV{BRLTTY_BRAILLE_DRIVER}="bm", GOTO="brltty_usb_run"
  6. 將電腦重新啟動。不過Orange Pi 3 LTS好像沒辦法用指令重新啟動,必須要用實體開關或電源斷電才行。
  7. sudo reboot

找到USB裝置 / USB device appear in the "/dev/serial/by-id/"

2023-0315-232738.png

重新啟動後,執行「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虛擬機器啟動。

2023-0315-233724.png

之後的步驟就是到Home Assistant的Integrations裡面搜尋ZHA (Zigbee Home Automation)。如果USB裝置正常運作,在設定ZHA的時候它會自動偵測,後面就讓它自動配置即可完成。

https://youtu.be/sezePzMmiHs?t=203

安裝ZHA的步驟就跟JuanMTech影片在3:23後面的步驟一樣。不過我目前買的zigbee設備都還沒送到,之後再來看看能不能連上吧。


你的智慧家庭有遭遇過類似的困難嗎?

下面一起取個暖吧。

總共1 則留言 ( 我要發問 , 隱藏留言 顯示留言 )

  1. 後來zigbee裝置買來後連接上都很順利,意外地簡單呢。
    本來還以為zigbee網關什麼的聽起來很像很麻煩的樣子,其實也還好啦。

    回覆刪除