Reolink Cameras - Privacy Masks

Around the time the Reolink integration became official, I switch my camera setup from UniFi Protect to Reolink.

The main feature of the Protect integration that I miss is probably the ability to add/remove the privacy mask. Not a custom mask, but the entire “screen”. Zero visibility.

Maybe I’m the only one (:rofl:), but I have cameras in living spaces for when I’m away to monitor the house/pets, and have no interest in being recorded by the NVR when I’m home.

This is not an urgent feature request. I’ve managed to work-around that missing feature by using shell_commands and this bash script that allows me to set/remove the privacy mask. But it’d be great if it existed in the integration itself.

Thoughts?

Can you turn OFF POE?

I dont trust software switch. If wifi, AC switch power OFF. Can also put on indoor cams on separate POE switch and OFF AC power on the switch if PoE.

To directly answer your question - not to my knowledge. I don’t think the Reolink NVR has the ability to toggle PoE. At least, not that I’ve found anyway. I’d be down for PoE toggling as well if it were possible.

Though before the Protect integration had the privacy mask feature, I’d cut PoE via the UniFi integration… it’d fail to work more often than I liked. The privacy mask feature is far and away more reliable. At least for UniFi. 🤷

Hi @mannkind,
what kind of command do you use for set/apply the privacy mask? commands GetMask/SetMask -field enable only-?
I ain’t got an nvr and i’m very interrested how do you know that a camera correspond with a channel number when you use a shell command. As i know, channel 0 is for the nvr and the other channels are for the cameras. I’m right? Wrong?
Thanks in advance foe your answers
Regards

@mnpg1

This isn’t super interesting, but basically I do it by pairing two commands:

./rl-api GetMask '{"channel":#}' | jq '.' -c > privacymask.json

And

./rl-api SetMask $(cat privacymask.json)

The NVR itself sorta tells you the channel before/as you connect the camera. I don’t know the API well enough to know if there’s a way to get that information programmatically.

@mannkind

I don’t have an NVR and I’m trying to find out how to choose the right channel (in your exemple '{"channel":#}') that corresponds with the camera on which I’m executing this command.
I have these 2 cases below, can you tell me which one is correct:

  • Case1 :
Channel # -> Camera
------------------  
# = 0         -> NVR
# = 1         -> Camera1
# = 2         -> Camera2
# = 3         -> Camera3
...

OR

  • Case2 :
Channel # -> Camera
------------------  
# = 0         -> Camera1
# = 1         -> Camera2
# = 2         -> Camera3
# = 3         -> Camera4
...

Thank in advance for your answer

FYI: i’m the person who has sharing these examples that you have found on jasonk gist hub.
The examples (privacy masks or detection zones) aren’t tested on nvr or binocular cameras (duo or duo2), just for the standalone cameras with single lens.
As i understand, you confirm they also work with cameras behind a nvr?

Channel → Camera mapping

It’s the second one; zero-indexed. I just looked at their latest Reolink API User Guide. The GetChannelStatus command can help find the channel. I just confirmed it worked on my NVR.

$  ./rl-api GetChannelStatus

{
  "count": 12,
  "status": [
    {
      "channel": 0,
      "name": "Den",
      "online": 1
    },
    {
      "channel": 1,
      "name": "Garage",
      "online": 1
    },
    …
  ]
}

As i understand, you confirm they also work with cameras behind a nvr?

In my limited testing, yup! :slight_smile:

Ok, so i understand how the NVR work.
My problem with NVR is the command GetDevInfo for the channel 0 (or 1, 2, 3…), it’s return the same thing.
Now, i know the commands which are specific to cameras behind a NVR, the first camera start at channel = 0
Thanks you for your answer and tests.

FYI : if you use only ONE blank privacy mask for your camera, you can use this other command instead :

./rl-api SetMask '{"Mask":{"channel":#, "enable":0}} ← to disable mask

./rl-api SetMask '{"Mask":{"channel":#, "enable":1}} ← to enable mask

Oh! Nice. Thank you.