Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[Plugin] Dead Man's Switch - Automated actions on missed check-ins

Featured Replies

deadman-switch-icon.png


Dead Man's Switch is a plugin that requires periodic check-ins from the server owner. If you stop checking in, it triggers configurable actions (deleting files/folders,

running scripts) after a deadline passes.

Built for privacy-conscious users who want automated cleanup if they become unable to manage their server.

Requirements: Unraid 6.12.0 or later

Install URL:

https://raw.githubusercontent.com/dereckhall/unraid-deadmans-switch/main/plugin/deadman-switch.plg

After installing, go to Settings > Dead Man's Switch to configure.

Features

  • Configurable check-in interval (default: 30 days)

  • Grace period with extra hours after the deadline before actions fire

  • Trigger actions: delete files/folders with glob pattern support, or run custom bash scripts

  • Dry run mode to safely preview exactly what would happen before going live

  • Arm / Disarm / Pause controls

  • Double-miss protection: optionally require two consecutive missed deadlines before triggering

  • Dashboard tile with real-time countdown

Notifications

  • Discord webhooks with rich embeds, color-coded severity, and one-click check-in links

  • Custom webhooks to any HTTP endpoint

  • Uptime Kuma push heartbeat monitoring

  • Warning thresholds at 50%, 75%, 90%, and 95% of elapsed time

External API (port 3801)

A lightweight API server runs on port 3801, separate from Unraid's authenticated nginx. Supports remote check-ins, status queries, and token-based quick check-in URLs. CORS

enabled for Home Assistant and browser clients.

Screenshots

Unraid's dashboard with DMS card

dashboard-tile.png

Unraid's settings main menu for DMS

settings-dashboard.png

Unraid's settings actions menu for DMS

actions-tab.png

DMS's Home Assistant dashboard created by leveraging the built-in API

home-assistant-card.png

DMS's Home Assistant phone notification example created by leveraging the built-in API

ha-phone-notification.png

Discord's webhook with rich embed for DMS

discord-notification.png

Troubleshooting

Common issues and solutions are documented in the README:

https://github.com/dereckhall/unraid-deadmans-switch#troubleshooting

Source / Issues: https://github.com/dereckhall/unraid-deadmans-switch

License: MIT

Edited by Dereck

  • 3 months later...

I'm running a script and it's not working correctly, basically I've named it dmsshutdown.sh and inside, I just put

shutdown -t now

It throws an error saying that the time variable is mandatory. Don't know what I'm doing wrong...

  • Author
On 7/5/2026 at 4:49 PM, Anthwerp said:

I'm running a script and it's not working correctly, basically I've named it dmsshutdown.sh and inside, I just put

shutdown -t now

It throws an error saying that the time variable is mandatory. Don't know what I'm doing wrong...

i would change the script to the recommended way to shutdown your unraid system:

#!/bin/bash

/usr/local/sbin/powerdown

if you must use shutdown i would use the full path and the correct syntax:
/sbin/shutdown -h now

How can I add a status card with a check-in button to Home Assistant?

  • Author
On 7/14/2026 at 7:27 AM, ICDeadPpl said:

How can I add a status card with a check-in button to Home Assistant?

yeah, this is easy to set up. the plugin runs a little api server on port 3801 that home assistant talks to directly, no unraid login needed. you just need your server's lan ip and your api key from the plugin's settings > api tab. three parts: a rest sensor that reads status, a rest command that does the check-in, and a card that ties it together with a button.

first, in configuration.yaml:

rest:

- scan_interval: 60

resource: "http://YOUR_UNRAID_IP:3801/?action=status&key=YOUR_API_KEY"

method: GET

sensor:

- name: "DMS Status"

unique_id: "dms_status"

value_template: "{{ value_json.status }}"

json_attributes:

- armed

- paused

- dry_run

- warning_level

- days_remaining

- time_remaining_display

- last_checkin

- next_deadline

- elapsed_pct

- checkin_interval_days

rest_command:

dms_checkin:

url: "http://YOUR_UNRAID_IP:3801/?action=checkin&key=YOUR_API_KEY"

method: GET

restart ha (or reload yaml). then add a card to your dashboard (edit > add card > manual). i use a few stacked cards so it looks decent. the status one uses a markdown card so instead of showing the raw "armed_ok" text it shows a colored alert:

type: markdown

content: >

{% set s = states('sensor.dms_status') %}

{% set remaining = state_attr('sensor.dms_status', 'time_remaining_display') %}

{% set info = {

'armed_ok': {'label': 'OK - ' ~ remaining ~ ' remaining', 'type': 'success'},

'armed_reminder': {'label': 'Reminder - ' ~ remaining ~ ' remaining', 'type': 'warning'},

'armed_warning': {'label': 'Warning - ' ~ remaining ~ ' remaining', 'type': 'warning'},

'armed_critical': {'label': 'Critical - ' ~ remaining ~ ' remaining', 'type': 'error'},

'grace_period': {'label': 'Grace Period - ' ~ remaining ~ ' remaining', 'type': 'error'},

'triggered': {'label': 'TRIGGERED - deleted files', 'type': 'error'},

'paused': {'label': 'Paused - ' ~ remaining ~ ' remaining', 'type': 'success'},

'disarmed': {'label': 'Disarmed', 'type': 'success'}

} %}

{% set i = info.get(s, {'label': s, 'type': 'info'}) %}

<ha-alert alert-type="{{ i.type }}">

{{ i.label }}

</ha-alert>

then an entities card for the details:

type: entities

entities:

- entity: sensor.dms_status

type: attribute

attribute: time_remaining_display

name: Time Remaining

icon: mdi:timer-sand

- entity: sensor.dms_status

type: attribute

attribute: last_checkin

name: Last Check-in

icon: mdi:clock-check-outline

- entity: sensor.dms_status

type: attribute

attribute: next_deadline

name: Next Deadline

icon: mdi:clock-alert-outline

and the check-in button. this is the important bit, it uses a confirmation prompt so you can't fat-finger a check-in:

type: button

name: Check In

icon: mdi:check-circle

tap_action:

action: perform-action

perform_action: rest_command.dms_checkin

confirmation:

text: Are you sure you want to check in to the Dead Man's Switch?

tap it, confirm, and it hits the check-in endpoint and resets your timer. the status updates on the next poll (60s above).

couple notes:

- this assumes ha and unraid are on the same lan. through a reverse proxy you'd need to forward port 3801.

- since you've got the rest_command set up you can also fire it from an automation or an actionable notification, so you get a check-in button right on your phone's lock screen when the timer's running low. that's how i've got mine, i barely open the dashboard.

i've also updated the readme with all of this. let me know if you get stuck.

Edited by Dereck

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.