USB设备持久化

来自Domoticz

如果你连接了多个USB设备,当你重启树莓派时,设备的顺序可能会变化(ttyUSB0变成ttyUSB1或者其它)。

这里提供了解决方法:

找到USB设备的ID

确保所有需要的USB设备已连接到树莓派

执行以下命令:

sudo lsusb -v | more

将列出的以下几条信息记下来:

*idVendor
*idProduct
*iSerial

(你可以按空格键向下滚动)

例子

RFXtrx433返回:

 idVendor           0x0403 Future Technology Devices International, Ltd
 idProduct          0x6001 FT232 USB-Serial (UART) IC
 iProduct                2 RFXtrx433
 iSerial                 3 07VYAR1X

Aeon ZWave返回:

 idVendor           0x10c4 Cygnal Integrated Products, Inc.
 idProduct          0xea60 CP210x UART Bridge / myAVR mySmartUSB light

你需要'0x'后面的部分。所以,要记下'0403'而不是'0x0403'.

建立规则文件

使用以下命令新建一个规则文件:

sudo nano /etc/udev/rules.d/99-usb-serial.rules

RFX-433

将下面的代码保存到文件中:

SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="123YAOOW", SYMLINK+="ttyUSB-RFX433-A"

SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="123YX78C", SYMLINK+="ttyUSB-RFX433-B"

(Put in the values you've written down between the quotes (e.g. replace '0403' with the idVendor of your USB device).

Some devices don't show a serial, you can remove that part in the file, so it looks like this:

SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="ttyUSB-RFX433"

Names should be ttyUSB-UNIQUENAME so you can easily identify them within Domoticz.

AeoTec Z-Stick

Gen2: SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="ttyUSB-ZStick-2G"

Gen5: SUBSYSTEM=="tty", ATTRS{idVendor}=="0658", ATTRS{idProduct}=="0200", SYMLINK+="ttyUSB-ZStick-5G"

如果没有返回USB设备信息,执行以下命令

 sudo mknod /dev/ttyUSB0 c 188 0
 sudo mknod /dev/ttyUSB1 c 188 1

然后从头再来。

重启并检查结果

使用以下命令重启(也可以用sudo reboot)
sudo shutdown -r now
重启后你应该有两个端口(ttyUSB21,ttyUSB22),并且它们将始终分配给你在规则文件中配置的设备。

要使用新端口,在Domoticz中,进入 设置 -> 硬件 页面,点击 RFXtrx433,然后在端口下拉菜单中选择新端口'ttyUSB21'。
然后保存

或者,你可以通过以下命令来重载udev规则而不需要重启:
sudo udevadm control --reload
然后断开并重新连接USB设备,看看是否正常。

选择性筛选

当存在更多设备(例如,具有相同的供应商和产品,并且没有序列号)的情况时,可以使用以下命令添加一些其他筛选条件: udevadm info -a -n /dev/ttyUSBX

Udevadm信息以devpath指定的设备开头,然后向上遍历父设备链。它为每个找到的设备以udev规则格式输出所有可能的属性。 匹配的规则可以由设备的属性和来自单个父设备的属性组成。

然后比较两个设备的输出,找出不通之处并将其添加到99-usb-serial.rules文件中。

下列例子使用de devpath。devpath是总线和端口的序号,例如ATTRS{devpath}=="3.1"。要使层级更加直观,你可以用 lsusb -t 输出

/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/5p, 480M

   |__ Port 3: Dev 2, If 0, Class=hub, Driver=hub/4p, 480M
       |__ Port 1: Dev 7, If 0, Class=vend., Driver=pl2303, 12M