Heartbeat Monitoring for ESP32, Scripts and Humans Using Home Assistant Webhooks

Hi everyone,

I wanted a simple way to trigger Home Assistant automations when something stops reporting.

Not when a sensor changes state.

Not when a webhook arrives.

But when an expected heartbeat disappears.

Some examples:

  • An ESP32 stops sending data.
  • A remote script stops running.
  • A Raspberry Pi goes offline.
  • A daily operational check is forgotten.
  • A person fails to check in for a predefined period.

I couldn't find a solution that worked the same way for both devices and people, so I built a small service called Dead Man's Hand.

The concept is straightforward:

  1. Create a timer.
  2. Periodically renew it through the web UI or REST API.
  3. If the timer expires, execute actions.

One of those actions can be a Home Assistant webhook.

This allows workflows such as:

ESP32 → periodic heartbeat → timer renewed

ESP32 offline → timer expires → Home Assistant webhook triggered → automation runs

The same mechanism can also be used for:

  • monitoring external services
  • monitoring remote locations
  • backup verification reminders
  • maintenance reminders
  • family safety check-ins
  • digital inheritance workflows

Anything capable of making an HTTP request can renew a timer, including:

  • ESPHome
  • ESP32
  • Raspberry Pi
  • Shell scripts
  • Cron jobs
  • CI/CD pipelines
  • External services

I would love feedback from the Home Assistant community.

How are you currently handling heartbeat monitoring and "if something stops reporting" automations?

Project:

https://deadmanshand.pp.ua

Maybe a stupid question, what is the registration for?

A watchdog timer?

There is no state change reported for missing state changes in HomeAssistant (obvious logic).

This could be a desired option, (especially for devices that have a protocol and name starting with the letter "Z"), but would be a change request, and probably involve configuring polling and timing loops.

sorry, WHAT? :slight_smile:

Hi!
Not bad. Generally speaking, registration is needed so that the system can distinguish one user from another and preserve state between sessions.

The renewal is the feature :slightly_smiling_face: It prevents "set and forget" reminders. You can renew it manually in the UI or automatically from Home Assistant via API.

Similar idea, but it's intentionally focused on people and their responsibility, not just the heartbeat of devices. A watchdog timer checks to see if the system is alive; a dead man's switch checks to see if anyone is still actively asserting responsibility.

The service has moved to a new address: https://dmh.syntrope.app/