Amcrest Doorbel AD110: Expose Call Button

Hi guys! Does anyone have the Amcrest Doorbel AD110 here?

Did anyone find a way to expose the Call Button to Home Assistant? It looks like the available integration doesn’t have this feature (https://www.home-assistant.io/integrations/amcrest/).

My idea is to create an automation. When someone presses the Call button all my google home speakers will say “There is someone at your door”.

Any hints?

Unfortunately, the button wasn’t included in the API. Several people (including myself) have asked for them to add it , they said that they will look into it.

There is this here… Amcrest Doorbell AD110 API/Local Only

It seemed to work, I set it up but I already had a sensor in my chime so didn’t really need to worry about it working all the time … but it did seem to change when button was pressed


- platform: rest
  resource: http://<AD110-IP>/cgi-bin/configManager.cgi?action=getConfig&name=CallInfo
  username: !secret amcrest-username
  password: !secret amcrest-password
  authentication: digest
  name: Amcrest Doorbell Count Sensor
  value_template: >
    {{value.split('=')[-1]}}

3 Likes

Nice one. It worked!

It changes the state everytime someone presses the button.

The only thing that could be better is the delay between the time someone presses the button and the time HA receives the info.

How much of a delay do you have?

1 Like

It depends if I am lucky. It took almost 5 minutes at the last atempt.

I’ll try to look at it again after the holiday there has to be a way to “subscribe” to the event similar to how you can get camera motion alerts… I use this: https://github.com/psyciknz/CameraEvents/blob/master/README.md
To get camera motion events from my nvr… there may be a way to modify it to watch for the CallInfo thing, but as I mentioned I already have a sensor in my chime so I never pursued it much further…

In the meantime you may be able to make a command line sensor using curl and set the scan interval to a few seconds or something…

amcrest_doorbell: "curl -s --digest -u admin:<yourpassword> 'http://192.168.<doorbell-ip>/cgi-bin/configManager.cgi?action=getConfig&name=CallInfo'"

you’d probably want to use the same value_template as the rest sensor, and then could make a binary sensor with/from that…

Nevermind… it looks like @GaryOkie already did the heavy lifting on this one… :slight_smile:

1 Like

The Amcrest camera integration is dependent on the pypi python-amcrest library for all I/O such as subscribing to events. Recently this library was updated to be able to subscribe to any and all events (and their associated json payloads) the camera or doorbell can produce.

What this means is that doorbell button presses can now be recognized by subscribing to either "_DoTalkAnswer_ with Action=“Invite” or “CallNoAnswer” with Action=“Start”. The former event is unique to SmartHome App communication, and the latter event is common to other Dahua VTO/doorbell devices as well, so I would prefer to use it.

The Amcrest integration PR to be able to leverage this new capability is pending review, but unfortunately, it is very slow going. Some folks have set up a python script to subscribe to CallNoAnswer and trigger events to HA for immediate button alerts.

I am currently using Tasker on a dedicated Android device to catch SmartHome notifications and trigger immediate motion or button press events which works quite well. I’m now looking into using AppDaemon to run an event-monitoring python script in the HA background.

EDIT: 10/9/21 - For those that missed it (like me) the Amcrest Integration was updated several months ago to provide complete Amcrest & Dahua camera/doorbell Event handling. So quite simple now to trigger on the doorbell push event “CallNoAnswered” action “Start”. There is also a new Dahua camera custom integration that uses a different library (Dahua-VTO) that also returns events as well as creates binary sensors for each event start/stop. I’ve used both and they work great.

2 Likes

Any update on the button support?

I have looked at all the other video doorbell options for HA and they all seem terrible, especially the video quality on the DYI ones.

This works for me… I have read a post where someone said it wasn’t updating immediately when button pressed but I haven’t ran into that myself yet

1 Like

That’s me a few posts above. Sometimes I had to wait 5 minutes to actually see the state change and get notified.

I decided to give up for the moment and wait for a few more months to see if anyone would come up with something new.

Nothing has happened (not that I know)

So it still has that delay? You have this on right?

Maybe worth a factory reset just to see if that helps.

Well… The last time I tried was when I wrote this topic. It’s been 3 months now. I should give it another trying. Idk if there are any changes or firmware updates.

At that time I tried reseting. Call notification was ON.

Here is my config based on this (note that I only have one device; not sure how this changes to differentiate between different devices):

- alias: "Notify Doorbell Rang"
  initial_state: true
  trigger:
    - platform: event
      event_type: amcrest
      event_data:
        event: CallNoAnswered
  mode: queued
  condition:
    - condition: template
      value_template: "{{ trigger.event.data.payload.action == 'Start' }}"
  action:
    - service: persistent_notification.create
      data:
        title: Security
        message: >-
          "Someone rang the doorbell"
    - service: camera.snapshot
      data:
        entity_id: camera.doorbell
        filename: '/tmp/camera.doorbell_{{ now().strftime("%Y%m%d-%H%M%S") }}.jpg'

Example event:

{
    "event_type": "amcrest",
    "data": {
        "camera": "Doorbell",
        "event": "CallNoAnswered",
        "payload": {
            "Code": "CallNoAnswered",
            "action": "Start",
            "index": "0",
            "data": {
                "CallID": "3"
            }
        }
    },
    "origin": "LOCAL",
    "time_fired": "2021-10-16T14:59:57.236917+00:00",
    "context": {
        "id": "381f8debeef10751b18edc4acf3f4491",
        "parent_id": null,
        "user_id": null
    }
}

That’s close to what I have, except I included the payload start as part of the event_data trigger and didn’t need a condition. Either way is fine.

Also, if you have more than 1 doorbell, you can get the name of it from
{{ trigger.event.data.camera }}

  trigger:
  - platform: event
    event_type: amcrest
    id: doorbell
    event_data:
      event: CallNoAnswered
      payload:
        action: Start

In my actions, I have it sending a snapshot to our phones via Telegram and casting the live(-ish) video to Google nest hubs.

1 Like

I like your version better, thanks. I made this a new style binary sensor template (that I can use in my automation or anywhere else I’d like).

When using the normal amcrest integration should there be an event listener called amcrest? Or does it just show up? I was going to watch for the event but expected to see an event topic to subscribe to (same with rrollers dahua, no binary sensor for button press and didn’t see an event topic either). Also I don’t see the 110 mentioned on rrollers docs

I think you’re talking about a HACS integration. I’m using the built-in integration. These two expose different event types, as per the docs.

i am talking about two different, the official and another but I know @GaryOkie is familiar with both so I figured he’d know… with the official did you get an amcrest event on the events page of listeners?

The event_type for the core Amcrest Integration is “Amcrest” and it does show up in the developer’s event tool as an active listener. This doorbell press “CallNoAnswered” event is the same for the AD110 and AD410, and can be triggered in the exact same way as rroller’s custom dahua integration except the event_type/listener is “dahua_event_received”.

Motion event handling is different between the AD110 and AD410, since the latter has the excellent human detection which leverages IVS/intrusion detection AI.

EDIT: Since all I care about is the “start” of an event and not when/if “stop” occurs, I don’t need to create binary sensors. Triggering on events is just as easy once you understand how to include the payload. It’s true that rroller’s custom integration automatically creates binary sensors for events that are selected, but I prefer not to use them.