Nelly’s Security Complete 8 Channel 1080P HD-TVI Dome Surveillance System Review

Nelly’s Security contacted me to write a review of their new 8 Channel HD-TVI system complete with video examples of a real-world installation in several different settings. In exchange for this review I was allowed to keep the unit as a gift.

The NVR is a NSDV-208QK, which is a rebranded Hikvision DS-7208HQHI-K1. OEM versions of Hikvision NVRs look pretty different from their retail counterparts, but inside the guts are the same. Nelly’s supplies the NVR with a 1TB Seagate Surveillance hard drive for recording the camera action. The NVR main board has space for 1 SATA drive, adding additional storage in the future will require removing the 1TB and replacing it with a new one. Unfortunately this case doesn’t have the ability to be mounted inside of a rack, but a simple shelf holds the NVR and provided power supply with ease.

Under the hood

Powering the cameras comes from an external power pack, similar to a laptop charger. A splitter then takes that power source and allows 8 cameras to be plugged into it. The NVR has its own power source separate from the cameras.

The cameras are NST-1080P-DM1, a model carried by Nelly’s. It has a 1/2.7″ OV 2.1MP CMOS sensor. It is IP66 rated which means it will work fine as a outdoor camera. The 3.6mm lens offers a wide field-of-view. Not many other details were available on Nelly’s site about this camera model.

The camera is comprised of several parts following a similar design to other turret style cameras.

and the pigtail is a typical 12v and HD-TVI connection.

In true Matt LaPaglia fashion I tore it apart (this will most likely void your warranty)

No clues on the inside as to who manufactures the lens. It did reveal the weatherproofing done to the pigtail to keep the elements out, the desiccant pack, and a nice rubber gasket where the two halves of the camera shells meet

There are several ways to install HD-TVI cameras. I opted for using ethernet and Balun adapters to connect the ethernet wiring to the cameras. The system I received included a 1000′ spool of ethernet to do this. For this installation I will be using ethernet already run to the camera mounting points for my existing system. The spool I received was good quality with solid copper conductors.

The Balun connector is used to transmit video (green and white/green), the rest of the wires are used for power (solid colors for positive, striped for negative)

Each camera is connected using the balun adapters. One of the four pairs of wires in each ethernet run is used for the video signal. The other 3 pairs are used to send power from where the NVR is to the camera. One reason I liked this approach over siamese cabling the the potential for upgrades down the road. If one decided to stick with HD-TVI they would be fine either way, but if someone wanted to upgrade to IP cameras later having the ethernet already run would be substantially easier. Just chop the ends of the wires off and terminate them with a network jack.

Since these are non-IP based cameras they don’t have a way to automatically control the gain or shutter speed used. This means these cameras won’t perform well for license plate capture at my mailbox because the camera will be pumping up the gain automatically at night which will overexpose the license plates and create white blurs. For general surveillance purposes this isn’t an issue however. The camera’s automatic exposure settings perform well during the day and night.

A quick day time indoor demo:

The on-board IR is decent for close quarters. When subjects are within 15-20 feet of the camera details come into focus for good facial recognition. Cameras placed next to doors or entryways got acceptable images of the occupants. I did not notice any bleeding of the IR into the lens due to the physical separation of the lens and IR LEDs. I noticed that if I manually turn the IR on by putting my finger over the sensor, and then slowly pull my finger away from the sensor, I could get the LEDs to “dim” slowly away until they finally turned off and the IR cut filter clicked back into place. I didn’t notice this affecting actual surveillance because this issue would only occur right before it would be bright enough to switch to day mode anyway. When transitioning from night to day mode the sensor seems much faster at getting correct exposure than some of my Hikvision cameras. On my IP cameras it takes the sensor 2-3 seconds to adjust the camera exposure to get an acceptable image.

Here’s a quick demo of the camera positioned inside a front door:

And outside facing the backyard:

The cameras are very easy to position once attached to a structure. Instead of having a set screw to hold the camera in place the base has a ring that turns to tighten the camera to the mount. The cameras are fairly discrete. I don’t have any size comparisons other than Hikvision models, but they are smaller than the 3mp EXIR turret with about half the footprint. The HD-TVI and power connector are much smaller than an ethernet pigtail, allowing me to drill smaller holes in my house to run the pigtail through into the attic.

Attaching the cameras to the NVR is trivial. After plugging a camera in the NVR was detecting and recording from it within 5 seconds. No worrying about passwords or individual camera settings that come with IP cameras.

Nelly’s currently sells this system for $399 through their website. This system is at an excellent price point considering it includes a NVR with 1TB of storage, 8 cameras, and a 1000′ spool of cat5 for wiring. The NVR comes with a 3 year warranty and the cameras a 1 year warranty. For the beginner looking to get into CCTV this would be a fool-proof system to start with.

Hikvision Separate Day / Night Settings with Raspberry Pi

The Hikvision cameras I use for LPR don’t have the ability to manually control the gain of the sensor when the camera is set in “Auto” mode. “Auto” mode pushes the camera from night to day mode automagically by detecting the ambient light in the scene. This is normally fine, but for LPR the gain needs to be set very low to compensate for the bright reflections that come from license plates. Manually pushing the camera into night or day mode enables the control of gain, but making the camera switch automagically becomes impossible.

To get around this issue I use a Raspberry Pi to push configuration changes to the camera manually. It finds the local sunrise/sunset times based on latitude/longitude and uses those times to schedule the change. If you are using a NVR you need to enable remote camera management in the settings so you can reach each individual camera.

Place this first block of code into a file named ALPR.py

import requests
import json
import time
import subprocess
from dateutil import tz
from datetime import datetime

longitude = ''
latitude = ''
timezone = ''#America/New_York
ips = [] #['192.168.1.2:65011', '192.168.1.2:65012']
user = ''
password = ''
nightOrDayPath = '/home/pi/setNightDay.py'

r = requests.get('http://api.sunrise-sunset.org/json?lat=' + latitude + '&lng=' + longitude + '&date=today')
json = json.loads(r.content.decode('utf-8'))

from_zone = tz.gettz('UTC')
to_zone = tz.gettz(timezone)

utcSunset = datetime.strptime(time.strftime("%Y-%m-%d") + " " + json['results']['sunset'], '%Y-%m-%d %I:%M:%S %p')
utcSunset = utcSunset.replace(tzinfo=from_zone)
utcSunrise = datetime.strptime(time.strftime("%Y-%m-%d") + " " + json['results']['sunrise'], '%Y-%m-%d %I:%M:%S %p')
utcSunrise = utcSunrise.replace(tzinfo=from_zone)
sunset = utcSunset.astimezone(to_zone)
sunrise = utcSunrise.astimezone(to_zone)

print("sunrise is " + sunrise.strftime('%H:%M %p'))
print("sunset is " +  sunset.strftime('%H:%M %p'))

for ip in ips:
        dayCommand = 'python3 ' + nightOrDayPath + ' --ip ' + ip + ' --user ' + user + ' --password ' + password + ' --dayornight day'
        nightCommand = 'python3 ' + nightOrDayPath + ' --ip ' + ip + ' --user ' + user + ' --password ' + password + ' --dayornight night'

        p = subprocess.Popen('at ' + sunrise.strftime('%H:%M') , stdin=subprocess.PIPE, shell=True)
        p.communicate(str.encode(dayCommand))
        p = subprocess.Popen('at ' + sunset.strftime('%H:%M'), stdin=subprocess.PIPE, shell=True)
        p.communicate(str.encode(nightCommand))

print('tasks are scheduled')

Create a cron job that will execute scheduler.py after midnight each day.

1 0 * * * /usr/bin/python3 /home/pi/alpr.py

Put the second block in setNightDay.py

#!/usr/bin/env python
import requests
from requests.auth import HTTPBasicAuth
import sys
import argparse

parser = argparse.ArgumentParser(description='Set day and night status on Hikvision cameras.')
parser.add_argument('--ip', help='IP address and port to send command to')
parser.add_argument('--user', help='Hikvision username')
parser.add_argument('--password', help='Hikvision password')
parser.add_argument('--dayornight', help='night or day', choices=['night', 'day'])

args=parser.parse_args()

xml = '<ImageChannel version="2.0" xmlns="http://www.hikvision.com/ver20/XMLSchema"><IrcutFilter version="2.0" xmlns="http://www.hikvision.com/ver20/XMLSchema"><IrcutFilterType>' + args.dayornight + '</IrcutFilterType></IrcutFilter></ImageChannel>'
requests.put('http://' + args.ip + '/ISAPI/Image/channels/1', data=xml, auth=HTTPBasicAuth(args.user, args.password));

To Infinity, Recursively!