Push-Nachrichten ohne Cloud: Home Assistant mit selbst gehostetem ntfy

von Patrick · · 7 Min. Lesezeit · Automation


Ein Smart Home, das nur still vor sich hin automatisiert, ist nett. Ein Smart Home, das sich meldet, wenn etwas nicht stimmt, ist nützlich. Meine Meldungen laufen über ntfy, einen kleinen, schlanken Benachrichtigungsdienst, den ich selbst betreibe. In diesem Artikel erzähle ich, warum ich ihn der Home-Assistant-Companion-App zur Seite gestellt habe und wie ich ihn nutze.

Was ntfy ist

ntfy (gesprochen „notify“) ist ein Dienst, über den man Push-Nachrichten per einfachem HTTP-Aufruf verschickt. Es gibt Topics, das sind benannte Kanäle. Wer ein Topic abonniert, bekommt jede Nachricht, die dorthin geschickt wird, aufs Handy. Es gibt Apps für Android und iOS, und der Server lässt sich selbst hosten, bei mir in einem Container auf dem Heimserver.

Der Reiz liegt in der Einfachheit. Eine Nachricht verschicken heißt: ein HTTP-Request mit Text drin. Das kann Home Assistant, das kann jedes Shell-Skript, jeder Cronjob und jeder Docker-Container.

Warum nicht einfach die Companion App?

Die Companion App von Home Assistant kann ebenfalls Benachrichtigungen empfangen, und für Meldungen, die direkt mit Home Assistant zu tun haben, ist das völlig in Ordnung. Ich habe trotzdem ntfy dazugenommen, aus drei Gründen:

  1. Alles an einem Ort. Meine Skripte (Backups, Watchdog, Dokumentation, Blog-Veröffentlichung) schicken ebenfalls Nachrichten. Wenn die alle im selben Kanal landen wie die von Home Assistant, habe ich eine einzige Stelle, die ich im Blick behalten muss.
  2. Unabhängigkeit von Home Assistant. Der wichtigste Fall: Home Assistant selbst ist ausgefallen. Dann kann es keine Nachricht schicken, aber mein Watchdog auf dem Server kann es. Nach einem Stromausfall hat mir genau das gezeigt, wie nützlich das ist; die Geschichte steht im Artikel Was ein Stromausfall mir über mein Smart Home beigebracht hat.
  3. Mehrere Empfänger. Ein Topic kann von mehreren Personen abonniert werden, ohne dass sie ein Home-Assistant-Konto brauchen.

Zugriff absichern

Ein selbst gehosteter ntfy-Server sollte nicht für jeden offen sein. Ich habe ihn so konfiguriert, dass Lesen und Schreiben Anmeldung verlangt: Zum Senden benutze ich ein Zugriffs-Token und zum Lesen ein Benutzerkonto. Diese Zugangsdaten gehören in Home Assistant nicht in die Automation selbst, sondern in die Integration bzw. in secrets.yaml. Und sie gehören nie in ein Screenshot oder einen Forumsbeitrag.

Die Integration einrichten

Home Assistant bringt eine eigene ntfy-Integration mit. Ihr tragt die Adresse eures Servers ein, wählt die Anmeldung per Token oder Benutzer und legt fest, welche Topics ihr nutzen wollt. Für jedes Topic entsteht eine Notify-Entität, die ihr in Automationen anspricht.

Eine einfache Automation, die mich informiert, wenn die Waschmaschine fertig ist:

alias: "Waschmaschine fertig"
triggers:
  - trigger: numeric_state
    entity_id: sensor.waschmaschine_leistung
    below: 3
    for:
      minutes: 3
conditions:
  - condition: state
    entity_id: input_boolean.waschmaschine_laeuft
    state: "on"
actions:
  - action: notify.send_message
    target:
      entity_id: notify.ntfy_allgemein
    data:
      title: "Waschmaschine"
      message: "Die Wäsche ist fertig."
  - action: input_boolean.turn_off
    target:
      entity_id: input_boolean.waschmaschine_laeuft
mode: single

Der Entity-Name notify.ntfy_allgemein hängt davon ab, wie euer Topic heißt. Die Leistungsdaten kommen bei mir von einer Steckdose mit Energiemessung, wie ich sie im GRILLPLATS-Artikel beschrieben habe. Ein Hilfsschalter merkt sich, dass die Maschine überhaupt gelaufen ist, damit ihr nicht bei jedem kurzen Leistungseinbruch eine Meldung bekommt.

Priorität, Tags und Klick-Aktionen

Das Praktische an ntfy sind die Zusatzfelder. Nachrichten können eine Priorität haben (wichtige Meldungen durchbrechen dann auch den „Nicht stören“-Modus), Tags (daraus werden Emojis im Titel) und eine Klick-Aktion, die beim Antippen eine Adresse öffnet, etwa das Dashboard. Für diese Felder gibt es in der ntfy-Integration eine eigene Aktion; ihr findet sie unter den Aktionen im Entwicklerwerkzeug.

Meine Faustregel für Prioritäten:

  • Niedrig oder normal: Informationen („Wäsche fertig“, „Backup erledigt“).
  • Hoch: Dinge, die ich heute noch anschauen will („Gefrierschrank zieht auffällig viel Strom“).
  • Dringend: Sachen, bei denen ich sofort reagieren muss. Davon gibt es bei mir sehr wenige, und genau das soll so bleiben.

Auch Skripte können senden

Außerhalb von Home Assistant reicht ein einzelner curl-Aufruf:

curl -H "Authorization: Bearer $NTFY_TOKEN" \
     -H "Title: Backup" \
     -H "Tags: floppy_disk" \
     -d "Nächtliches Backup abgeschlossen" \
     https://ntfy.example.org/allgemein

Das Token liegt bei mir in einer Datei mit eingeschränkten Rechten und wird im Skript gelesen, nicht im Skript selbst festgehalten. So kann ich ein Skript zeigen oder sichern, ohne ein Geheimnis mitzukopieren.

Was ich bewusst nicht schicke

Ein Benachrichtigungskanal verliert seinen Wert, wenn er zugespammt wird. Deshalb gilt bei mir: Nachrichten nur, wenn ich etwas tun oder wissen muss. Dinge, die einfach funktionieren, bekommen keine Meldung. Wer einen Kanal wegen zu vieler Meldungen stummschaltet, übersieht genau die eine wichtige.

Fazit

ntfy ist ein kleines Werkzeug mit großer Wirkung: Es holt Home Assistant, Server, Skripte und Cronjobs in einen einzigen Kanal. Die Einrichtung dauert eine halbe Stunde, die Nachrichten laufen ohne Cloud-Abhängigkeit, und der wichtigste Vorteil zeigt sich im Ernstfall, wenn Home Assistant selbst nicht mehr senden kann.

Kommentare

Fragen, Ergänzungen oder eigene Erfahrungen? Ich freue mich über deinen Kommentar. Zum Kommentieren brauchst du ein kostenloses GitHub-Konto.

Beim Laden werden Daten an GitHub übertragen. Mehr dazu in der Datenschutzerklärung.