blog Homelab Notification Method History

For the past many years I have used various notification methods in my projects.

Prowl

Prowl is one that I have been using for the longest time. It has a simple API that can be used easily from curl and other applications.

# https://www.prowlapp.com/api.php#add
import requests

requests.post(
    url="https://api.prowlapp.com/publicapi/add",
    data={
        "apikey": api_key,
        "application": "my-application",
        "event": 'Event Title',
        "description": 'Event description',
        "priority": 0, # Optional
        "url": "http://example.com", # Optional
    }
)

While it has generally been very reliable, UI is very simple, and doesn’t allow a lot of options. Over time, I have often wanted to have something a bit more robust.

Line

Living in Japan, most people use LINE and for a while I used LINE Notify as another notification method. LINE retired their notification service last year, so it is no longer available. While it generally worked ok, notification content was even simpler than prowl, and all messages went into a single chat.

Home Assistant

Home assistant is pretty flexible

Using RESTful Notifications one can send various Notifications using a simple REST call.

import request

name = 'notify'   # To Send to all
name = 'MyGroup'  # to send to a notify group named MyGroup

request.post(
    url=f'http://homeassistant.example.com/api/services/notify/{name}',
    headers={"Authorization": f"Bearer {self.config.key}"},
    json={
        'title': title,
        'message': message,
        'data': {
            'group': 'group-name',
            'url': 'http://example.com'
        }
    }
)

grouped notifications can be handled by adding a notification group to your settings.

notify:
  - name: MyGroup
    platform: group
    services:
      - action: mobile_app_iphone_one
      - action: mobile_app_iphone_two
      - action: mobile_app_ipad_one
      - action: mobile_app_pixel_4_xl

if you add a url to your messages, then they can become more actionable, and direct you to any web page. Most of my home lab notifications currently come in via home assistant.

Brrr

Recently I started experimenting with brrr . It has a similarly simple API like Prowl or Home Assistant.

# Example from https://brrr.now/docs/#send-json-to-customize
curl -X POST https://api.brrr.now/v1/<apikey> \
  -H 'Content-Type: application/json' \
  -d '{
    "message": "The coffee machine is currently unreachable. Morale is expected to drop.",
    "title": "Coffee Machine Offline",
    "thread_id": "ops-coffee",
    "sound": "upbeat_bells",
    "expiration_date": "2026-04-23T09:00:00.000Z",
    "volume": 0.8
  }'

On the surface, brrr is quite simple, like prowl, but has some nice improvements, like being able to attach an image. This has allowed me to add a visual indicator to most messages as a hint to where they come from. For many of my git and ci notifications, I have moved to brrr since the additional icon is useful in parsing more information out of a notification at a glance.

Something else?

In some ways, simple notifcations can be one of the easier parts to swap out (assuming they provide a simple rest api). While I do not really want to write my own, a few thoughts I have should I attempt it.

  • replacing message: Home assistant has this but brrr doesn’t. The ability to use some kind of uuid and replace a previous message can be useful when things change and to avoid overload.
  • filtered history: Both prowl and brrr have history, but it would be useful to filter based on some kind of app or thread_id. Example: Filter messages from my git repo vs my ci tasks.
  • unread, read, archive as states. Once messages are archived they could be automatically deleted (or force deleted) after a certain duration.