Trying to get my Foscam doorbell to work with Home Assistant

I’m trying to get my Foscam VD1 doorbell camera working with Home Assistant.
The goal is: when someone presses the doorbell, Google Nest Hub speakers announce there’s someone at the door.
I’ve found in the Foscam software an option to open an URL on alarm, which is good.
So I think i created a proper webhook, i get no configuration errors, but it’s not working eighter.

    platform: webhook
    webhook_id: "doorbell"
    service: tts.google_say
    entity_id: media_player.woonkamer_home
      message: "Er staat iemand bij de voordeur"
      language: "nl"

I’ve created a ‘button’ from the UI, and the Google is announcing the text properly.
However curl -X POST -H “Content-Type: application/json” http://[my url]:[port]/api/webhook/doorbell
does nothing.
So i think i’m missing something.
I’ve looked up many other posts on this site, but every single one seems to be completely different in the configuration.
I have a clean config, as i installed home-assistant purely to this goal.
the lines are in configuration.yaml and i removed the automations include.

Please advice.

Bases on Frenck’s doorbell and Vorion’s motion detection blueprint, i combined both and created this blueprint:
Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.

I dont this this will work, as Home Assistant does not seem recognize a button within the camera.

there is probably something wrong with the webhook; manual trigger from command line should work…I still use vorion’s blueprint as well, but not for the doorbell; it is used for motion detection.
I use a webhook from Motioneye, that triggers an automation that set a binary input (and clears it again 30 secs later)

ps: my blueprint is for Frenck’s Doorbell;it uses an ESP01 relay board :wink:

Don’t you have an error message in the log?
Sending -H "Content-Type: application/json" without actual content generates an error. As you don’t send a payload, remove it from your curl call.

The example in the doc is wrong and/or incomplete

If i send it without the -H “Content-Type: application/json” curl spits out an error
Bad status line ‘invalid HTTP method’

I didn’t even think about consulting the log file (that new i am at this)

Logger: aiohttp.server
Source: /usr/local/lib/python3.9/site-packages/aiohttp/
First occurred: 13:01:37 (4 occurrences)
Last logged: 20:28:59

Error handling request
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/aiohttp/", line 314, in data_received
    messages, upgraded, tail = self._request_parser.feed_data(data)
  File "aiohttp/_http_parser.pyx", line 546, in aiohttp._http_parser.HttpParser.feed_data
aiohttp.http_exceptions.BadHttpMessage: 400, message='invalid character in header'

With the -H option i get below error:

Logger: homeassistant.components.webhook
Source: components/webhook/
Integration: Webhook (documentation, issues)
First occurred: 20:33:30 (1 occurrences)
Last logged: 20:33:30

Error processing webhook doorbell
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/webhook/", line 96, in async_handle_webhook
    response = await webhook["handler"](hass, webhook_id, request)
  File "/usr/src/homeassistant/homeassistant/components/webhook/", line 28, in _handle_webhook
    result["json"] = await request.json()
  File "/usr/local/lib/python3.9/site-packages/aiohttp/", line 614, in json
    return loads(body)
  File "/usr/local/lib/python3.9/json/", line 346, in loads
    return _default_decoder.decode(s)
  File "/usr/local/lib/python3.9/json/", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/local/lib/python3.9/json/", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Did you do this? Works for me.

curl -X POST http://[my url]:[port]/api/webhook/doorbell

Tried with external IP, external DNS name, even (Synology NAS, running Docker, remote access works to Home Assistant)

curl -X POST

0 output

But funny enough now the error in the log is diffrent

Logger: homeassistant.components.automation.automation_0
Source: components/automation/
Integration: Automatisering (documentation, issues)
First occurred: 20:40:02 (3 occurrences)
Last logged: 20:41:38

Error while executing automation automation.automation_0: Unable to find service tts.google_say

This … I can work with a little …
There was a typo in the code
it was not tts.google_say but tts.google_translate_say

Now however the newest error is it cant find the entity

Logger: homeassistant.helpers.service
Source: helpers/
First occurred: 20:43:29 (1 occurrences)
Last logged: 20:43:29

Unable to find referenced entities media_player.woonkamer_home

But that entity does exist …
I created a button to test with

                            "type": "button",
                            "tap_action": {
                                "action": "call-service",
                                "service": "tts.google_translate_say",
                                "service_data": {
                                    "entity_id": "media_player.woonkamer_home",
                                    "message": "Er staat iemand bij de voordeur",
                                    "language": "nl"
                                "target": {}

found this in loveace config and this button works …
How can it not recognize the entity??

Don’t know. Check that the entity exists, is enabled and is available?

How about http://homeassistant.local/api/webhook/doorbell ??

2021-07-26 06:43:23 ERROR (MainThread) [aiohttp.server] Error handling request
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/aiohttp/", line 314, in data_received
messages, upgraded, tail = self._request_parser.feed_data(data)
File "aiohttp/_http_parser.pyx", line 546, in aiohttp._http_parser.HttpParser.feed_data
aiohttp.http_exceptions.BadHttpMessage: 400, message='invalid character in header'

This error i get when i press the doorbell …
So i guess i’m done now, the doorbell utility does not send a ‘home automation compatible’ HTTP post/request/link/whatever … So in the end even fixing the entity will not make this work.

Any update on this item? I’m also looking to install a smart door bell. At this moment, I have two types in focus, the FOSCAM VD1 and the LOGI CIRCLE VIEW.

After reading this thread, it seems that the Foscam VD1 have still some issues to interact properly with the HA automation. On the other hand, I found an article in Dutch (Foscam video deubel VD1 > Notificaties in smarthome - Smarthome - GoT) that are some possibilities after updating the firmware. Has anyone some examples of can determinate if there’s a workaround that is proven by now?

The Logi is only working with Apple Homekit. I know we have the HA Homekit Controller integration (HomeKit Controller - Home Assistant), but there the question is, which triggers are there to use in an automation (for example if the doorbell button is pressed).

At the end, I don’t want to buy a doorbell, if I’m not sure it’s working within the HA framework.

in the meanwhile i came up with this

all in all, just €30,-

I have a foscam VD1 “working” in home assistant. You have to update the firmware (the firmware the device ships with has a bug and you can not configure it fully). Once updated, you can go to the “alarm linkage” tab and give it an http address that the camera will get when button is pressed. Annoyingly, it uses a get request, not a put, and home assistant doesn’t support Get for http hooks (as far as I know). So you can use Node-red to set up a http hook that presses a button in Home assistant to make it so home assistant is notified when the bell is pressed.

I can’t get audio to work though. Only video and the button…

UPDATE: Audio works fine in agentdvr.

Anyone who is still struggling with this, read this tutorial:

1 Like