|
|
@@ -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 )
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|