Skip to content

Notifications

Kamerplanter can keep you informed about due care tasks, sensor alarms, tank levels, and other important events — not only when you open the app, but actively through one or more channels of your choice. This page covers the notification center and how to set up the four available delivery channels.


Prerequisites

  • A Kamerplanter account with access to Settings → Notifications (/settings#notifications)
  • For the Home Assistant channel: an already configured Home Assistant connection (see Home Assistant Integration)
  • For the Browser Push channel: a Kamerplanter instance with Web Push enabled (see Setting Up Browser Push) — your operator sets this up once
  • For the Apprise channel: at least one valid Apprise URL for the service you want (e.g. Telegram, ntfy, Gotify)

The Notification Center

The bell icon in the top-right corner of the app shows how many unread notifications you have. Clicking it opens the notification list as a side drawer.

  1. Open — Click the bell icon. The badge number refreshes automatically about once a minute.
  2. Read — Clicking a notification marks it as read and opens the related page if one exists (e.g. the care overview for a watering reminder).
  3. Mark all as read — Use the Mark all read button at the top of the drawer.
  4. Load more — The list initially shows the newest 20 entries; use Load more to page further back.

Each card has a colored left border indicating urgency:

Color Urgency
Red Critical (e.g. frost warning)
Orange High
Blue Normal
Gray Low

Unread count is independent of the delivery channel

A notification appears in the notification center as soon as it is created — regardless of whether delivery through an external channel (see below) succeeded. This way you won't miss anything even if, for example, Home Assistant is temporarily unreachable.


Always Up to Date: Notifications Follow Their Source

If the underlying task or care reminder changes, the matching notification in the center follows along automatically — you never have to clean it up yourself:

  • Rescheduled — move a task to a new date, and its notification immediately shows the new due date.
  • Reassigned — reassign a task to another member, and that person receives a new assignment notification; your own due notification for that task disappears in the process.
  • Deleted — delete a task, and its notification disappears from the center too.
  • Completed — complete a task, and its notification is automatically marked done and no longer counts toward the unread badge.
  • Watering interval changed — change the interval of a care reminder (e.g. watering), and the existing reminder notification updates with the new date; no second, duplicate reminder is created for the same plant and reminder type.
  • Care confirmed — confirm a care task (e.g. via the care overview), and its notification is likewise marked done immediately.

Only the in-app center reacts immediately

This synchronization applies to the in-app notification center. Messages already delivered through an external channel (Home Assistant, email, browser push, Apprise) are not recalled or re-sent afterward — only the display in the center and the unread badge follow the change immediately.

Done Directly From the Notification

Care notifications (e.g. a watering reminder) additionally show a Done button on the card in the notification center. Clicking it:

  1. confirms the underlying care task — the same as confirming it through the care overview,
  2. marks the notification itself as read and done, so it immediately disappears from the unread badge.

This saves you the detour through the care overview: you confirm directly from the notification, in a single step.

A failure is automatically rolled back

If the confirmation fails (e.g. due to a connection problem), Kamerplanter automatically rolls back the marking and shows an error message — the Done button then stays visible so you can try again.

Plain task-due or task-assignment notifications without a care link do not currently show the Done button; you still confirm those through the task list.


The Four Delivery Channels

Open Settings → Notifications to enable channels. Each channel can be toggled independently. If multiple channels are enabled at the same time, every notification is delivered to all enabled channels in parallel (there is no fallback to a "next" channel on failure — if one channel fails, the others still receive the message).

The status chip next to each channel shows Available or Not configured, depending on whether the channel is set up on the server side.

Home Assistant

The recommended primary channel for users with smart-home integration. Requires your operator to have configured the backend's Home Assistant connection (see Environment Variables).

Available options:

  • HA Persistent Notifications — the message appears as a banner in the Home Assistant frontend (default: on)
  • Mobile Push (Companion App) — sends to all companion app devices registered in Home Assistant (default: on)
  • Text-to-Speech (TTS) — reads the message aloud through a selected speaker entity (e.g. media_player.kitchen); disabled by default and requires specifying the entity ID

Allowed targets

The text-to-speech entity ID must be a media_player.* or tts.* entity. Kamerplanter only calls services in the notify and tts domains of Home Assistant; any other value is rejected when you save. An invalid value saved earlier is no longer sent — correct it so the settings can be saved again.

Additionally, Kamerplanter fires a Home Assistant event for every notification (e.g. kamerplanter_care_due), which you can use to trigger your own HA automations — for example, opening an irrigation valve on a watering reminder.

Multiple reminders are bundled

If several care reminders occur at the same time, the Home Assistant channel merges them into a single summary message instead of overwhelming you with many individual notifications.

Email

The email channel sends notifications to the confirmed email address of your account. You cannot enter a different address here; to use another one, change it in your account settings under “Change email address” and confirm it through the link. While your address is unconfirmed, Kamerplanter sends no emails, and the settings show a notice.

Choose the delivery mode:

  • Immediate — every notification is sent as a separate email
  • Daily digest — all of the day's notifications are bundled into a single email

Delivery uses the email channel configured by your operator — either an SMTP server (mail-sending server) or the Resend service (see Environment Variables — Email). If neither is configured, development mode only prints emails to the backend log.

Browser Push (PWA)

Enables Web Push notifications directly in the browser or in the app when installed as a PWA (an installable web app) — even when Kamerplanter is not currently open. You activate this per device: click Enable on this device and grant the browser's notification permission.

Requires operator setup

Browser push only works once your operator has provisioned a VAPID key pair (the cryptographic key for web push). If the channel shows Not configured, this has not happened yet — see Setting Up Browser Push.

If the channel is not supported in this browser (e.g. an older browser) or you previously blocked notifications, the page shows an explanatory message instead of the enable button. Use Disable to remove this device's push registration.

A push registration always belongs to exactly one account: if someone else turns on push in the same browser, your account no longer receives messages through that device. Logging out removes this device's registration; after your next sign-in, turn push on there again if you want it.

Apprise

Connects to more than 100 messaging services via the open-source Apprise library — for example Telegram, Slack, Discord, ntfy, Gotify, or Pushover. Enter one or more Apprise URLs (one per line), for example:

tgram://<bot-token>/<chat-id>
slack://<token-a>/<token-b>/<channel>
gotify://<hostname>/<token>

You can find the exact URL syntax for your desired service in the Apprise documentation. Kamerplanter itself requires no additional operator configuration for this channel — you manage the target URLs entirely yourself in your notification settings. The one exception: a server in a private network (see below).

Allowed services

For security, Kamerplanter only accepts Apprise URLs for Telegram (tgram://, telegram://), Slack, Discord, ntfy (ntfy://, ntfys://), Gotify (gotify://, gotifys://), Pushover (pover://, pushover://) and Matrix (matrix://, matrixs://). Other schemes such as mailto://, json:// or https:// are rejected when you save, as are several URLs on one line and addresses such as localhost or 169.254.x.x. For Gotify and Matrix (and ntfy with your own server), Kamerplanter resolves the host name and rejects the URL if it points at such an address or cannot be resolved; addresses in private networks (such as your home network, 192.168.x.x, 10.x.x.x) are allowed in the single-user installation without sign-in; on a server with sign-in and several users only if the operator has allowed them. Otherwise Kamerplanter refuses them when you save and when it sends. A URL that was stored before this rule and is not allowed is no longer sent; remove it so the settings can be saved again.

Saved URLs are shown masked

An Apprise URL contains the service's access key (for example the Telegram bot token). Kamerplanter therefore stores the URLs encrypted and, once saved, shows them only as placeholders, for example tgram://****#1 — the service and the position, not the URL itself. Keep a masked line to keep that URL; delete it to remove the URL; enter a new URL on its own line. To change a saved URL, delete its line and enter the new one in full. Your data export likewise states only how many URLs are configured.

Operator prerequisite: install the Apprise package

The Apprise channel is active on the server by default, but requires the apprise Python package, which is not shipped automatically with the backend image. If it is not installed, the channel shows Not configured and test messages fail with "apprise package is not installed". The operator needs to add the package to the backend image (pip install apprise).


Sending a Test Notification

After enabling a channel, you can verify it directly in the notification settings:

  1. Enable the desired channel and save any related details (Apprise URLs, Home Assistant options, …).
  2. Click Send test for that channel.
  3. A success or error message appears as a brief notification (snackbar) at the bottom of the screen.

The test message itself has the lowest urgency level and does not appear in the notification center.


Quiet Hours

Under Quiet hours, set a daily time window (default: 22:00–07:00) during which Kamerplanter does not deliver notifications through external channels — the notification is still created and appears in the notification center, just without push, email, HA notification, or Apprise delivery during that window.

  • Sensor alarms and frost warnings always ignore quiet hours and are delivered immediately through all enabled channels — these two types are hard-coded and cannot be turned off.
  • The time zone for quiet hours is currently fixed to Europe/Berlin.

Not yet implemented

Notifications withheld during quiet hours are not automatically re-delivered through external channels once the window ends. You will see them in the notification center, but you will not receive a delayed HA push, email, or Apprise message for them. Automatic re-delivery after quiet hours end will be available in a future version.


Batching and Escalation

Batching

Multiple reminders that fall due at the same time are combined into a single message within a batching window (default: 30 minutes, adjustable from 1 to 120 minutes) instead of being delivered individually.

Daily Summary

Enabling Daily summary additionally sends you a once-daily overview of all pending and overdue care tasks through the selected channel, at the configured time.

Escalation for Overdue Watering

If a watering reminder remains unconfirmed, Kamerplanter repeats it with increasing urgency:

Time Urgency
+2 days overdue High
+4 days overdue Critical
+7 days overdue Critical (final reminder)

These escalation days are fixed and currently not individually configurable; you can, however, turn escalation for watering reminders on or off entirely. There is no escalation for other reminder types (fertilizing, repotting, pest check).


Frost Early-Warning

For your outdoor and greenhouse sites, Kamerplanter checks the current weather forecast once a day and proactively lets you know when a frost night is coming up — before the temperature has actually dropped. The notification names the site, the expected date, and the predicted minimum temperature.

  • Urgency: High (orange) — it appears like any other notification in the notification center and is delivered through all your enabled delivery channels.
  • No repeat spam: For the same frost night at a site, you receive the warning exactly once. Only a new or earlier expected frost date triggers a new notification.
  • Quiet hours apply normally: Unlike sensor alarms, this frost early-warning is subject to your configured quiet hours — if it's created during your quiet hours, it initially appears only in the notification center.

Prerequisites

The frost early-warning requires a configured weather source for the affected site and stored GPS coordinates. Without these, the warning simply doesn't fire — your existing reactive frost signal based on the currently measured temperature is unaffected.

You can see the same forecast window and minimum temperature directly on the dashboard as well — see Dashboard: Weather Forecast and Frost Early-Warning.


Frequently Asked Questions

I enabled multiple channels — will I get every notification multiple times?

Yes, that's by design: if, for example, Home Assistant and Email are both enabled, you receive every notification through both channels. There is currently no "primary channel only" setting for individual notification types in the interface.

Can I choose a different channel for specific notification types than for others?

Not yet through the interface. You enable channels globally for all notification types. Finer control per notification type is prepared in the data model but not yet available in the notification settings.

Why does Home Assistant show 'Not configured' even though I use HA?

The channel checks your operator's backend configuration of the Home Assistant connection, not your personal HA instance. Contact your operator if this connection is still missing.

I see a notification in the center, but no push message arrived — why?

First check whether the notification was created during your configured quiet hours (see above) — in that case, it is intentionally shown only in the center. Otherwise, check the status chip of the relevant channel and send a test notification.


See Also