• Work.
  • Blog.
  • Contact.
Menu

Jon Wolfe.

IT Professional. Photographer. Proven Geek.
  • Work.
  • Blog.
  • Contact.

Reolink WiFi Doorbell - Exposing the Chime API

April 4, 2024

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.

← Home Server 2024: Shifting ServicesStecker App - Automating Screen Brightness →

Latest Posts

Featured
Mar 26, 2025
Fujifilm X-T5: Impressions
Mar 26, 2025
Mar 26, 2025
Jan 29, 2025
New Bag: Peak Design Everyday Backpack Zip 20L
Jan 29, 2025
Jan 29, 2025
Jan 3, 2025
Fujifilm X-T5: The Return Of The Pro Kit
Jan 3, 2025
Jan 3, 2025
Sep 24, 2024
Airpods Max: First Impressions
Sep 24, 2024
Sep 24, 2024
Sep 18, 2024
Airpods Max: Alright, I'll bite
Sep 18, 2024
Sep 18, 2024