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
apporthread_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.