mirror of
https://github.com/gtxaspec/wz_mini_hacks.git
synced 2024-12-23 12:43:35 +00:00
fe0febd33d
instructions for how to use usb direct for one or multiple cameras
237 lines
6.8 KiB
Markdown
237 lines
6.8 KiB
Markdown
# 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 )
|
|
|
|
|
|
|
|
|