I finally got a new doorbell! I settled on a Reolink WiFi doorbell and other than figuring out some of the mislabeled or unlabeled wiring in the house, install was a breeze, and Frigate/HomeAssistant integration was super simple (more on Frigate and home infra updates in a later post).
Reolink does offer a pretty robust local API to the device, and it’s well documented, but unfortunately the chime settings are not currently exposed. I wanted to setup an automation to disable the chime at 10PM and re-enable it once we get back up for the day, and I sure wasn’t going to use a smart plug for it.
After referencing the API documentation here, I was able to determine a few things:
The local API supports a debug mode, letting you see all the functions and the JSON sent during the REST calls. Once enabled you can see output in the developer console of the browser. All you need to do is append your camera’s URL with ?debug=1.
It’s very easy to build a token - Either securely or via the quick method (user/pass in the URL). For my example, I’m using the user/pass in the browser.
The JSON documentation is really well structured so it’s easy to build out your own.
So after a bit of snooping (Log in to the debug URL, open developer tools to console, then navigate to Settings > Chime and adjust the chime volume) I was able to come back with something similar to the below string:
"request params: [{\"cmd\":\"DingDongOpt\",\"action\":0,\"param\":{\"DingDong\":{\"channel\":0,\"option\":3,\"id\":123456789,\"name\":\"Reolink Chime\",\"volLevel\":4,\"ledState\":1}}}]"
So I formatted it into structured JSON:
[
{
"cmd":"DingDongOpt",
"action":0,
"param":{
"DingDong":{
"channel":0,
"option":3,
"id":123456789,
"name":"Reolink Chime",
"volLevel":4,
"ledState":1
}
}
}
]
And did a quick test with a REST client knowing I have to hit the DingDongOpt endpoint:
http://192.168.0.12/api.cgi?cmd=DingDongOpt&user=admin&password=WhateverYourPasswordIs
And it worked! So from there I added the rest_command service to my HomeAssistant config along with the two commands for chime volume 0, and chime volume 4, with an example below:
rest_command:
chimevol4:
url: "http://192.168.0.12/api.cgi?cmd=DingDongOpt&user=admin&password=WhateverYourPasswordIs"
method: POST
headers:
accept: "application/json"
payload: '[
{
"cmd":"DingDongOpt",
"action":0,
"param":{
"DingDong":{
"channel":0,
"option":3,
"id":123456789,
"name":"Reolink Chime",
"volLevel":4,
"ledState":1
}
}
}
]'
content_type: 'application/json; charset=utf-8'
verify_ssl: false
And now I can tie the chime into my automations - off at 10PM, and back on when we get up in the morning! Of course since it’s an undocumented API endpoint, there’s no guarantee it’ll stick around, but for the time being I’ll take the convenience.