浏览代码

Merge pull request #50 from virmaior/master

Create usb-direct.md
gtxaspec 3 年之前
父节点
当前提交
5232be3167
共有 1 个文件被更改,包括 236 次插入0 次删除
  1. 236 0
      documentation/usb-direct.md

+ 236 - 0
documentation/usb-direct.md

@@ -0,0 +1,236 @@
+# wz_mini_hacks -> USB Direct Implementation
+
+There's a lot of confusing information about usb direct. There are several different standards and several different arrangements you can find information about:
+
+This is *ethernet over usb* -- not *usb over ethernet* and not *an ethernet adapter over usb*.
+
+## On the Device
+
+set:
+```
+ENABLE_USB_DIRECT="true"
+```
+
+make sure that `ENABLE_USB_ETH="false"` and `ENABLE_USB_RNDIS="false"` as you can't use them all at once.
+
+I also strongly recommend setting 
+
+```
+USB_DIRECT_MAC_ADDR="02:FF:FF:FF:FF:01"
+```
+for each device both to avoid conflicts and to be able to assign ip addresses.
+
+
+## The Cable
+
+The cable supplied with the wyze v3 is a power-only cable. It will not work for USB DIRECT because it doesn't have the data lines
+
+
+## On Your Host
+
+I'm using Raspbian "Buster" but much of what I'm writing will apply to most modern linux distributions.
+
+When you plug in a usb direct NCM device, it will create a **network.** Assuming you have no other usb-based networks, it will be usb0. 
+
+Since it is a **network**, the host will have a *host ip* and the wyze cam will be accessible via its *client ip*.
+
+If you don't set any options beforehand, the *host ip* will be a private ip (169.254.xxx.xxx/16). **In other words, you won't be able to access the camera**.
+
+### One-Camera Setup
+
+To resolve this for *one camera*, you need to give the network interface:
+1. a static *host ip* address
+2. an ip range for the network
+3. assign an ip address for the *client ip*.
+
+
+#### One-Camera with /etc/network/interfaces
+
+if you are using /etc/network/interfaces, this looks like:
+
+```
+allow-hotplug usb0
+auto usb0
+iface usb0 inet manual
+        address 192.168.9.1
+        netmask 255.255.255.0
+```
+
+and then for dnsmasq.conf:
+```
+interface=usb0
+dhcp-range=usb0,192.168.5.2,192.168.5.255,255.255.255.0,24h
+dhcp-host=usb0,02:FF:FF:FF:FF:01,192.168.5.101
+```
+
+#### One-Camera with dhcpcd.conf / dnsmasq.conf
+if you are using /etc/dhcpcd.conf, this looks like:
+```
+interface usb0
+        static ip_address=192.168.5.1/24
+        nohook wpa_supplicant
+```
+in conjunction with /etc/dnsmasq.conf :
+
+```
+interface=usb0
+dhcp-range=usb0,192.168.5.2,192.168.5.255,255.255.255.0,24h
+dhcp-host=usb0,02:FF:FF:FF:FF:01,192.168.5.101
+```
+
+after that, restart dhcdpcd and dnsmasq and connect your wyze v3 and it should work.
+
+#### One-camera with systemd-networkd
+
+(Unfortunately I don't have a system with this configuration).
+
+### Multiple-Camera Setup
+
+Since each usb direct device will create its own **network interface**, if you use the above solution for multiple cameras, you're going to wind up with quite a few different networks that can't see each other.
+
+WORSE: Depending on the order in which you turn on the usb direct devices, they will be assigned to different **network interfaces**. E.g.,
+ * On Monday: Camera 1 turns on first = usb0; Camera 2 turns on second = usb1 ...
+ * On Tuesday: Camera 2 turns on first = usb0; Camera 2 turns on second = usb2 ...
+
+This will break the dhcp behavior above and make your cameras inaccessible. You could play whack-a-mole by setting up assignments for each camera in each subnet and then trying them all ...
+
+The solution is to bridge together all of your usb direct devices so they appear as a single subnet. This will make it so that all *client ip* addresses are visible in the same subnet and can be assigned using the same dhcp-range.
+
+#### Multiple Camera bridge setup systemd-networkd
+
+I think this is also possible using systemd-networkd using for instance: https://forums.raspberrypi.com/viewtopic.php?t=298451
+
+The systemd-networkd solution has the added bonus of being less lengthy since you can use wildcards
+
+#### Multiple Camera bridge setup : dhcpcd.conf , dnsmasq.conf , /etc/network/interfaces
+In my case, I was wary to switch to networkd since my pi is already running a few other network related items.
+
+As far as I can tell, this cannot be done using *only* dhcpcd.conf because the usb direct interfaces hotplug.
+
+
+First, Install bridging or make sure its installed
+
+
+
+Second, start the bridge:
+
+```
+$ brctl addbr br0
+$ ip link add name br0 type bridge
+$ ip link set dev br0 up
+```
+
+Third, edit /etc/dhcpcd.conf:
+
+```
+denyinterfaces br0 usb0 usb1 usb2 usb3 usb4 usb5 usb6
+
+interface br0
+        static ip_address=192.168.9.1/24
+        nohook wpa_supplicant
+
+```
+Deny interfaces tells dhcpcd not to control those items.
+
+
+Fourth, add network interfaces to the  /etc/network/interfaces system
+
+In my case, I had to put them in a different file /etc/network/interfaces.d/10-bridge.conf to avoid a check that dhcpcd does:
+```
+auto br0
+iface br0 inet static
+        address 192.168.9.1
+        netmask 255.255.255.0
+        bridge_ports usb0 usb1 usb2 usb3 usb4 usb5 usb6
+
+allow-hotplug usb0
+allow-hotplug usb1
+allow-hotplug usb2
+allow-hotplug usb3
+allow-hotplug usb4
+allow-hotplug usb5
+allow-hotplug usb6
+
+auto usb0
+iface usb0 inet manual
+        address 192.168.9.10
+        netmask 255.255.255.0
+        up ifconfig usb0 up
+        up brctl addif br0 usb0
+
+auto usb1
+iface usb1 inet manual
+        address 192.168.9.11
+        netmask 255.255.255.0
+        up ifconfig usb1 up
+        up brctl addif br0 usb1
+
+auto usb2
+iface usb2 inet manual
+        address 192.168.9.12
+        netmask 255.255.255.0
+        up ifconfig usb2 up
+        up brctl addif br0 usb2
+
+auto usb3
+iface usb3 inet manual
+        address 192.168.9.13
+        netmask 255.255.255.0
+        up ifconfig usb3 up
+        up brctl addif br0 usb3
+
+auto usb4
+iface usb4 inet manual
+        address 192.168.9.14
+        netmask 255.255.255.0
+        up ifconfig usb4 up
+        up brctl addif br0 usb4
+
+
+auto usb5
+iface usb5 inet manual
+        address 192.168.9.15
+        netmask 255.255.255.0
+        up ifconfig usb5 up
+        up brctl addif br0 usb5
+
+auto usb6
+iface usb6 inet manual
+        address 192.168.9.16
+        netmask 255.255.255.0
+        up ifconfig usb6 up
+        up brctl addif br0 usb6
+
+
+```
+
+Fifth,
+
+dnsmasq.conf:
+
+```
+interface=br0
+dhcp-range=br0,192.168.9.2,192.168.9.255,255.255.255.0,24h
+dhcp-host=br0,02:FF:FF:FF:FF:01,192.168.9.101
+dhcp-host=br0,02:FF:FF:FF:FF:02,192.168.9.102
+dhcp-host=br0,02:FF:FF:FF:FF:03,192.168.9.103
+dhcp-host=br0,02:FF:FF:FF:FF:04,192.168.9.104
+dhcp-host=br0,02:FF:FF:FF:FF:05,192.168.9.105
+dhcp-host=br0,02:FF:FF:FF:FF:06,192.168.9.106
+dhcp-host=br0,02:FF:FF:FF:FF:07,192.168.9.107
+
+
+```
+**interface** tells dnsmasq what network interface to monitor
+**dhcp-range** tells it what range it assigns over
+**dhcp-host** tells what interface / what mac address gets what ip address (apparently in *very* old version of dnsmasq you could not set the interface at the beginning)
+
+Finally, restart dhcpcd and dnsmasq and turn on your usb direct device
+
+You should be able to access the cameras at 192.168.9.101 -  192.168.9.107
+
+(you would need to modify /etc/network/interfaces and dnsmasq.conf to expand past 7 cameras )
+
+
+
+