~/jackwent.co.uk
jack@jackwent:~$ cat llm-doorbell.yaml

A Sarcastic AI Doorbell

published 7 October 20264 min read

Most doorbell notifications say something like “Person detected at Front Door”. Useful, but dull. Mine said this about a recent caller:

A man in a hooded coat stands on the path, squinting into the sun. Visitor spotted, looking like a low-budget supervillain at an audition.

It’s still useful, because I know at a glance who’s there before I get up. It’s just a lot more fun.

Here’s how it works.

The pieces

  • A Reolink PoE doorbell, connected to Home Assistant with the Reolink integration. It gives me a camera entity and a visitor sensor that turns on when someone presses the button.
  • LLM Vision, a custom integration (install it through HACS) that sends camera images to an AI model and gives you back a description.
  • An AI provider. I use OpenAI’s gpt-5-mini, which is quick and very cheap at doorbell volumes. LLM Vision also supports Anthropic, Google and local models through Ollama if you’d rather keep images at home.

LLM Vision comes with a blueprint called Event Summary that does most of the work. You pick the trigger sensor, the camera and the phones to notify, write a prompt, and it handles the snapshot, the AI call and the notification.

The settings that matter

use_blueprint:
  path: valentinfrlch/event_summary.yaml
  input:
    motion_sensors:
      - binary_sensor.doorbell_visitor
    camera_entities:
      - camera.doorbell
    trigger_state: "on"
    cooldown:
      seconds: 30
    analysis_mode: Snapshot
    preview_mode: Snapshot
    max_frames: 1
    target_width: 512
    model: gpt-5-mini
    notify: true
    notification_time: 'at {{ now().strftime("%-I:%M %p") }}'
    tap_navigate: /front-door/0
  • Snapshot mode with one frame. A single still is all you need to say who’s at the door. Sending a video clip costs more and takes longer.
  • 512 pixels wide. Plenty for the model to work with, and a smaller image means a faster reply.
  • A thirty second cooldown. Impatient visitors press the button three times. One comment is enough.
  • Tap to open. Tapping the notification opens my front door dashboard with the live camera.

The prompt

This is where the personality comes from. Here’s my prompt in full:

You are a sarcastic but helpful home assistant describing what is happening at the front door.
Comment on what you see like someone looking out the window and making a quick remark.
Do not greet the user and do not mention cameras, frames, images, or analysis.
Describe a single moment in time. Do not describe movement over time.
Refer to people clearly as "a man", "a woman", "a child", "men", "women", or "children".
Make the comment playful, cheeky, or mildly sarcastic. It should feel like a human making a funny observation.
Do not shorten words. For example write "T-shirt", not "tee".
Only use the words "package", "parcel", or "delivery" if a parcel is clearly visible in the person's hands.
If there is no clearly visible parcel, do not use the words "package", "parcel", or "delivery" anywhere in the response.
Never say phrases like "no parcel", "no package", or "not a delivery". Simply describe the person as a visitor.
If the person's hands are not clearly visible, assume they are a visitor.
When unsure, always assume the person is a visitor.
If no people are visible say: "No one is at the front door."
Use dry British humour when it fits the situation.

Every line is there for a reason:

  • “Do not mention cameras, frames, images” stops it starting every message with “In this image I can see…”, which kills the joke.
  • “A single moment in time” stops it inventing a story about someone walking up the path when all it has is one still.
  • The parcel rules are the big one. Left to itself, a model assumes anyone standing at a front door is delivering something. That’s no good when it’s actually a neighbour, and you rush to the door expecting a parcel. Now it only mentions a delivery when it can actually see a box.
  • “Never say no parcel” fixes the side effect of the rule above. Tell a model not to talk about parcels and it starts saying “no parcel in sight” in every message instead.
  • The fallback line gives it something sensible to say when the bell is pressed by someone just out of shot.

Some of my favourites

A few real ones from the last month, all strangers, couriers and callers:

A man in a helmet is at the door holding two pizza boxes. Peak commitment to dinner.

A man stands in the open doorway holding a bicycle and wearing a backpack, clearly here to make the whole street look underdressed.

A man in a hi-vis vest and sunglasses is leaning up to the doorbell, peering off to the side, either checking the house number or deciding if he should ask for directions and a cup of tea.

A man in a striped T-shirt with a beard is standing at the front door, close enough to critique your garden, so maybe do not invite him in for tea just yet.

It isn’t perfect. The visitor rule makes it a bit literal at times (“he is a visitor. How thrilling.”), and it’s very fond of a dramatic dash. But it’s right about who’s there far more often than not.

The main lesson I’d pass on about prompts for things like this: write down what you want, then watch what it actually says for a week and add a rule for each thing that annoys you.

Keeping the old-school version too

AI is lovely, but it’s another thing that can be slow or fail. So I also kept a plain automation that runs on the same doorbell press. It flashes the downstairs lights three times and announces “Someone is at the front door” through the office speaker with Piper, the local text-to-speech engine. That works even if the internet is down, and the AI comment arrives on my phone a few seconds later.

A note on privacy

This sends a picture of whoever is at your door to an AI provider. I’m comfortable with that for a doorbell that only fires when someone presses the button, but it’s worth thinking about. If you’d rather keep everything at home, LLM Vision works with local vision models through Ollama. They’re slower and not quite as funny, but nothing leaves your network.

If you build one, I’d love to hear the best line yours comes up with. You can get in touch here.

[jackwent]