-
Notifications
You must be signed in to change notification settings - Fork 71
Camera: Wuuk Y0510
The Wuuk Y0510 is an inexpensive camera with a great price point for the quality of the camera. It's currently seen with two different sensors, either the original, SC4336p or the less common SC401AI.
There is an awesome video from WLTechBlog on the Wuuk which got me started on my Wuuk flashing journey, and it's well worth a watch. The below written guide is based off the video and details the process used to flash a Wuuk Y0510
You must use a MBR type formatted sd-card, this will not work with a GPT formatted card.
Once your sd card is formatted then your should create a directory called FACTORY
in the root of the sd card, and in the FACTORY
directory place this script, naming itfactory_install.sh
.
At the time of writing the script is as follows, but I'd recommend checking the link above for the upstream source.
#!/bin/sh
# WUUK Y0510 https://amzn.to/4dFlKv1
#
# Instructions
#
# Note: If we increase uboot beyond 256k this needs to be adjusted.
# Build thingino firmware, up to make pack_full, or grab full firmware file from github releases
# -- UPDATE --
# There are now 2 versions of this camera. Most use the sc4336p sensor, a few have the sc401ai sensor.
# if you install the sc4336p file and don't have video, grab the sc401ai file, rename it to autoupdate-full.bin,
# remove autoupdate-full.done, and reboot the camera to flash the new one.
# ------------
# Copy full thingio image to sd as /autoupdate-full.bin
# Put this script on sd as /FACTORY/factory_install.sh
# Insert SD card and power on camera, wait about 10 minutes, it will reboot a few times along the way.
mount -t vfat /dev/mmcblk0p1 /mnt
if [ ! -f /mnt/autoupdate-full.bin ]
then
echo "Missing update file, aborting"
exit
fi
echo "Extracing uboot"
dd if=/mnt/autoupdate-full.bin of=/mnt/u-boot-t31x.bin bs=1k count=256
if [ -f /mnt/u-boot-t31x.bin ] && [ -f /mnt/autoupdate-full.bin ]
then
rm -f /mnt/autoupdate-full.done
echo "Flashing uboot"
flashcp /mnt/u-boot-t31x.bin /dev/mtd0
echo "Rebooting"
reboot
else
echo "Files missing, not flashing"
fi
As mentioned above this camera comes with two different sensor varieties. Don't worry too much about this, the easiest thing to do is pick a firmware, flash it, and get into the web interface of Thingino, if you happen to have picked the wrong one, you won't get any preview video stream and just repeat the process from this point using the alternative firmware.
Links to the two versions to download from the Thingino website, are included here for convenience.
In the root folder of the sd card place the .bin
you download, having renamed it autoupdate-full.bin
Your SD card should be MBR formatted and contain the following
├── autoupdate-full.bin
└── FACTORY
└── factory_install.sh
With your camera powered down insert the SD card and power it on.
The sequence I observed was as follows:
- Solid red light ~ 15s
- No light ~ 1m 40s
- Solid blue light ~ 10s
- Rapidly flashing blue light ~ 3s
- Slowly flashing blue light & camera motors moving ~ 15s
- No lights
When I had an unsuccessful flash (due to using a GPT formatted SD card I would observe slowly flashing blue lights (I had never paired the camera to the Wuuk app or services)
With a successful flashing process, the following files should be present on your SD card, with the creation of two new files, u-boot-t31x.bin
and autoupdate-full.done
├── autoupdate-full.bin
├── autoupdate-full.done
├── FACTORY
│ └── firmware_install.sh
└── u-boot-t31x.bin
You should now see a wireless access point available with the format:
THINGINO-xxxx
Connect to this and you should be able to see the following screen.
Fill in the data and click "Save credentials" then check the details on the following screen are correct and click "Proceed"
Frigate is a popular OpenSource, MIT Licensed, NVR solution that can be run at home and the below notes should be considered a starting point on integrating the Wuuk Y0510 into Frigate.
I couldn't reliably get x265 and audio working and this is my testing on an Intel 10th Gen CPU ( i5-10400). I also have a Google Coral TPU using a PCI-E interface, although a USB version exists and they are a fairly low cost solution to offload object detection workload from the CPU.
The below assumes you have a working Frigate instance and I'll cover the config in Thingino that works for me currently, I'm hoping as time goes by, this will get refined as we find out more and people will update this wiki.
In Settings => Streamer
Here's the prudynt.cfg
if you prefer a text based approach.
version = "1.0";
general :
{
loglevel = "INFO";
imp_polling_timeout = 500;
osd_pool_size = 1024;
};
rtsp :
{
auth_required = true;
name = "thingino prudynt";
password = "thingino";
username = "thingino";
est_bitrate = 5000;
out_buffer_size = 500000;
port = 554;
send_buffer_size = 307200;
};
sensor :
{
model = "sc401ai";
fps = 25;
height = 1440;
width = 2560;
i2c_address = 0x30;
};
image :
{
vflip = true;
hflip = true;
ae_compensation = 128;
anti_flicker = 2;
backlight_compensation = 0;
brightness = 128;
contrast = 128;
core_wb_mode = 0;
defog_strength = 128;
dpc_strength = 128;
drc_strength = 128;
highlight_depress = 0;
hue = 128;
max_again = 160;
max_dgain = 80;
running_mode = 0;
saturation = 128;
sharpness = 128;
sinter_strength = 128;
temper_strength = 128;
wb_bgain = 0;
wb_rgain = 0;
};
stream0 :
{
osd :
{
enabled = true;
font_stroke_enabled = true;
logo_enabled = true;
time_enabled = true;
uptime_enabled = true;
user_text_enabled = true;
font_path = "/usr/share/fonts/UbuntuMono-Regular2.ttf";
logo_path = "/usr/share/images/thingino_logo_1.bgra";
time_format = "%F %T";
uptime_format = "Up: %02lud %02lu:%02lu";
user_text_format = "%hostname";
font_size = 21;
font_stroke = 1;
font_xscale = 100;
font_yscale = 100;
font_yoffset = 3;
logo_height = 30;
logo_rotation = 0;
logo_transparency = 255;
logo_width = 100;
pos_logo_x = -10;
pos_logo_y = -10;
pos_time_x = 10;
pos_time_y = 10;
pos_uptime_x = -10;
pos_uptime_y = 10;
pos_user_text_x = 0;
pos_user_text_y = 10;
start_delay = 1;
time_rotation = 0;
time_transparency = 255;
uptime_rotation = 0;
uptime_transparency = 255;
user_text_rotation = 0;
user_text_transparency = 255;
font_stroke_color = 0xFF000000;
font_color = 0xFFFFFFFF;
};
audio_enabled = true;
enabled = true;
allow_shared = true;
format = "H264";
mode = "VBR";
rtsp_endpoint = "ch0";
bitrate = 3000;
buffers = 4;
fps = 25;
gop = 20;
height = 1440;
max_gop = 60;
rotation = 0;
width = 2560;
profile = 2;
};
stream1 :
{
osd :
{
enabled = true;
font_stroke_enabled = true;
logo_enabled = true;
time_enabled = true;
uptime_enabled = true;
user_text_enabled = true;
font_path = "/usr/share/fonts/NotoSansDisplay-Condensed2.ttf";
logo_path = "/usr/share/images/thingino_logo_1.bgra";
time_format = "%F %T";
uptime_format = "Up: %02lud %02lu:%02lu";
user_text_format = "%hostname";
font_size = 12;
font_stroke = 1;
font_xscale = 100;
font_yscale = 100;
font_yoffset = 3;
logo_height = 30;
logo_rotation = 0;
logo_transparency = 255;
logo_width = 100;
pos_logo_x = -3;
pos_logo_y = -3;
pos_time_x = 3;
pos_time_y = 3;
pos_uptime_x = -3;
pos_uptime_y = 3;
pos_user_text_x = 0;
pos_user_text_y = 3;
start_delay = 1;
time_rotation = 0;
time_transparency = 255;
uptime_rotation = 0;
uptime_transparency = 255;
user_text_transparency = 255;
user_text_rotation = 0;
font_color = 0xFFFFFFFF;
font_stroke_color = 0xFF000000;
};
audio_enabled = true;
enabled = true;
allow_shared = true;
rtsp_endpoint = "ch1";
format = "H264";
mode = "CAPPED_QUALITY";
bitrate = 1000;
buffers = 2;
fps = 25;
gop = 20;
height = 360;
max_gop = 60;
width = 640;
profile = 2;
};
stream2 :
{
enabled = true;
jpeg_path = "/tmp/snapshot.jpg";
jpeg_channel = 0;
jpeg_quality = 75;
jpeg_idle_fps = 1;
fps = 25;
};
websocket :
{
enabled = true;
ws_secured = true;
http_secured = true;
name = "wss prudynt";
usertoken = "";
loglevel = 4096;
port = 8089;
first_image_delay = 100;
};
audio :
{
input_enabled = true;
input_high_pass_filter = false;
input_agc_enabled = true;
input_format = "AAC";
input_bitrate = 32;
input_sample_rate = 16000;
input_vol = 80;
input_gain = 25;
input_alc_gain = 7;
input_agc_target_level_dbfs = 10;
input_agc_compression_gain_db = 0;
input_noise_suppression = 0;
};
motion :
{
enabled = false;
script_path = "/usr/sbin/motion";
debounce_time = 0;
post_time = 0;
ivs_polling_timeout = 1000;
cooldown_time = 5;
init_time = 5;
min_time = 1;
sensitivity = 1;
skip_frame_count = 5;
frame_width = 16384;
frame_height = 16384;
monitor_stream = 1;
roi_0_x = 0;
roi_0_y = 0;
roi_1_x = 16384;
roi_1_y = 16384;
roi_count = 1;
};
rois :
{
roi_0 = [ 0, 0, 0, 0 ];
};
I've found the most reliable way to test things are by restarting the Wuuk after changes, as sometimes I found the stream/codecs didn't always reflect the most recent changes I made.
You can test things on a Linux desktop with mpv installed with:
mpv --profile=fast rtsp://thingino:thingino@IP-ADDRESS-OF-WUUK:554/ch0
and I also found installing ffmpeg
and testing with the following command useful:
ffplay rtsp://thingino:thingino@IP-ADDRESS-OF-WUUK:554/ch0
Both mean you can look at the terminal for clues on what issues may be arising and what video/audio codecs are currently being used.
mqtt:
host: mosquitto
topic_prefix: frigate
client_id: frigate
go2rtc:
streams:
wuuk:
- rtsp://thingino:thingino@IP-ADDRESS-OF-WUUK:554/ch0
cameras:
wuuk:
enabled: True
ffmpeg:
hwaccel_args: preset-vaapi #Change appropriate to your host hardware
inputs:
- path: rtsp://thingino:thingino@IP-ADDRESS-OF-WUUK:554/ch0
input_args: preset-rtsp-udp
roles:
- record
- path: rtsp://thingino:thingino@IP-ADDRESS-OF-WUUK:554/ch1
input_args: preset-rtsp-udp
roles:
- detect
output_args:
record: preset-record-generic-audio-copy
detect:
width: 640
height: 360
fps: 5
objects:
track:
- person
record:
enabled: True
retain:
days: 3
mode: all # change to motion to only record when motion detected.
onvif:
host: IP-ADDRESS-OF-WUUK
port: 80
user: thingino
password: thingino
detectors: # Only valid for Google Coral on PCI
coral:
type: edgetpu
device: pci
version: 0.14
This is not intended to be a config that is the best possible configuration for Frigate, but is merely documented as a starting point for further refining and development as the community learns more.
So please feel free to update with any good changes you might make!