ntfy client (Inoffiziell)

Inoffizieller ntfy.sh client Adapter für ioBroker

Aktueller Release
0.1.4
Entwickler
lubepi
Lizenz
MIT

Inoffizieller ntfy.sh-Clientadapter für ioBroker

Senden und empfangen Sie Benachrichtigungen direkt von ioBroker über ntfy.sh. Dieser Adapter ist ein Community-Projekt und steht in keiner Verbindung zu ntfy LLC.

Merkmale

  • Benachrichtigungen veröffentlichen mit vollständiger Unterstützung für ntfy-Parameter
  • Abonnieren Sie Themen und erhalten Sie Nachrichten in Echtzeit über SSE (Server-Sent Events).
  • Kontostatistiken - Nutzungsstatistiken anzeigen (Nachrichten, E-Mails, Anrufe, Anhänge, Reservierungen)
  • Serverversionsprüfung - Verfügbare Updates für selbstgehostete ntfy-Instanzen erkennen
  • Verbindungsstatus - Überwachen Sie die Verbindung des Adapters zum ntfy-Server mithilfe dynamischer Integritätsprüfungen.
  • Unterstützung für Basisauthentifizierung und Bearer-Token
  • Benutzerdefinierte Server-URLs (oder die Standardinstanz ntfy.sh)
  • Integrierte sendTo-Blockly-Blöcke für Grafikskripte (Senden und Verwalten)
  • Benachrichtigungen verwerfen (löschen) und löschen anhand der Sequenz-ID
  • Dateianhänge per PUT hochladen

Unterstützte Benachrichtigungsparameter

ParameterBeschreibung
messageBenachrichtigungstext (Standardwert: "ausgelöst", falls leer)
titleBenachrichtigungstitel
priorityPrioritätsstufe: 1 (min), 2 (niedrig), 3 (Standard), 4 (hoch), 5 (max)
tagsTags oder Emoji-Shortcodes (durch Kommas getrennte Zeichenkette oder Array)
clickURL wird beim Klicken auf die Benachrichtigung geöffnet
attachURL der anzuhängenden Datei
attach_fileLokaler Dateipfad zum Hochladen als Anhang (verwendet PUT)
filenameBenutzerdefinierter Dateiname für den Anhang
actionsAktionsschaltflächen (JSON-Zeichenfolge oder -Objekt)
markdownMarkdown-Formatierung aktivieren (true/false)
delayVerzögerte Zustellung (z. B. "30s", "5m", "2h")
emailBenachrichtigung an diese E-Mail-Adresse weiterleiten
callTelefonnummer für TTS (erfordert ntfy Pro)
iconSymbol-URL, die neben der Benachrichtigung angezeigt wird
sequence_idEine bestehende Benachrichtigung mit derselben Sequenz-ID ersetzen/aktualisieren
disable_cacheAuf true/yes setzen, um serverseitiges Caching zu deaktivieren
disable_firebaseAuf true/yes setzen, um die Weiterleitung an Firebase Cloud Messaging (Android) zu deaktivieren
unified_pushAuf 1 setzen, um UnifiedPush-Unterstützung zu aktivieren
templateVerwenden Sie true/yes für Inline-Vorlagen oder einen Namen wie github für vordefinierte Vorlagen
dataJSON-Datenobjekt oder -Zeichenfolge, die für den Vorlagenkontext verwendet werden soll
dataJSON-Datenobjekt oder -Zeichenfolge, die für den Vorlagenkontext verwendet werden soll

Themenabonnement (Nachrichten empfangen)

Konfigurieren Sie die Themen in den Adaptereinstellungen unter der Registerkarte Themen. Der Adapter abonniert diese Themen über SSE und erstellt Zustände für jedes Thema unter ntfy-client.0.topics.<topicName>:

BundeslandBeschreibung
lastMessageText der zuletzt empfangenen Nachricht
lastPriorityZuletzt erhaltene Priorität
lastTagsZuletzt empfangene Tags (kommagetrennt)
lastClickURL des zuletzt empfangenen Klicks
lastIconURL des zuletzt empfangenen Symbols
lastActionsZuletzt empfangene Aktionen (JSON)
lastAttachmentUrlURL des zuletzt empfangenen Anhangs
lastAttachmentNameName des zuletzt empfangenen Anhangs
lastAttachmentTypeMIME-Typ des zuletzt empfangenen Anhangs
lastAttachmentSizeGröße des zuletzt empfangenen Anhangs (Bytes)
lastAttachmentExpiresZeitstempel des Ablaufs des zuletzt empfangenen Anhangs
lastTimestampZeitstempel der letzten Nachricht
lastExpiresZeitstempel des Ablaufs der letzten Nachricht
lastMessageIdLetzte Nachrichten-ID
lastSequenceIdLetzte Sequenz-ID (zur Nachrichtenverwaltung)
lastTopicName des zuletzt empfangenen Themas
lastEventLetzter empfangener Ereignistyp
lastJsonVollständiges JSON der zuletzt empfangenen Nachricht
subscribedGibt an, ob das Abonnement aktiv ist
subscribedGibt an, ob das Abonnement aktiv ist

Kontostatistiken

Wenn die Authentifizierung konfiguriert ist, ruft der Adapter alle 15 Minuten Kontostatistiken ab und speichert sie unter ntfy-client.0.stats:

  • Nachrichten: veröffentlicht, verbleibend, Limit, Ablaufdauer
  • E-Mails: gesendet, verbleibend, Limit
  • Telefonate: getätigte Anrufe, verbleibende Anrufe, Limit
  • Reservierte Themen: Anzahl, verbleibend, Limit
  • Anhänge: Speicherplatz belegt/verbleibend/limitiert, Ablaufdatum, Dateigrößenbeschränkung, Bandbreitenlimit
  • Konto: Abonnementstufe

Verbindungsstatus und Integritätsprüfungen

Der Adapter überwacht die Verbindung zum ntfy-Server über den Zustand info.connection:

BundeslandBeschreibung
info.connectionVerbindungsstatus zum ntfy-Server
info.latestVersionNeueste verfügbare Version (nur selbst gehostet)
info.updateAvailableOb ein Server-Update verfügbar ist
info.updateAvailableGibt an, ob ein Server-Update verfügbar ist

Der Health Check wird mit dynamischen Intervallen gegen den Endpunkt /v1/health ausgeführt:

  • Alle 6 Stunden, wenn der Server betriebsbereit ist
  • Alle 5 Minuten, wenn die letzte Überprüfung fehlgeschlagen ist (zur schnelleren Wiederherstellung)

Außerdem wird der Verbindungsstatus automatisch auf verbunden gesetzt, wenn:

Eine Benachrichtigung wurde erfolgreich gesendet

  • Eine SSE-Abonnementverbindung wurde erfolgreich hergestellt
  • Es wurde eine Nachricht zu einem abonnierten Thema empfangen.

Blockly-Beispiele

Verwenden Sie unter der Kategorie Senden an die folgenden Blöcke:

1. ntfy-Client-Benachrichtigung (senden)

Sende eine Nachricht mit allen unterstützten Parametern:

  1. Die Instanz festlegen.
  2. Legen Sie die Nachricht fest.
  3. Legen Sie das Thema fest (oder lassen Sie das Feld leer, um das Standardthema zu verwenden).
  4. Optional können über den Mutator (Zahnradsymbol) weitere Parameter hinzugefügt werden: Titel, Priorität, Tags, Symbol, Klick-URL, Aktionen, Anhänge, Verzögerung, E-Mail, Anruf usw.
  5. Verwenden Sie die Sequenz-ID, wenn Sie eine bestehende Benachrichtigung später aktualisieren/überschreiben möchten.

2. ntfy-Clientverwaltung (verwalten)

Eine bestehende Benachrichtigung löschen oder entfernen:

  1. Legen Sie die Instanz fest.
  2. Die Aktion festlegen (als gelesen markieren und verwerfen oder löschen).
  3. Legen Sie das Thema fest.
  4. Legen Sie die Sequenz-ID der Nachricht fest, die Sie verwalten möchten.

Hinweis zu IDs: Jeder Benachrichtigung wird vom Server eine eindeutige id (Nachrichten-ID) zugewiesen.

  • Wenn Sie beim Senden eine sequence_id angeben, müssen Sie diese sequence_id für alle Verwaltungsaktionen (Verwerfen, Löschen) verwenden.

  • Wenn Sie keine sequence_id angeben, dient die vom Server generierte id (Nachrichten-ID) als sequence_id für die Verwaltung.

Mehrere Nachrichten mit derselben sequence_id bilden eine Sequenz - es wird nur die letzte Nachricht einer Sequenz angezeigt.

JavaScript-Beispiele

Benachrichtigung senden

sendTo("ntfy-client.0", "send", {
  message: "Motion detected in the backyard!",
  title: "Security Alert",
  topic: "home_alerts_xyz",
  priority: "high",
  tags: "warning,motion",
  click: "https://example.com",
  markdown: true,
});

Mit E-Mail-Weiterleitung und Symbol senden

sendTo("ntfy-client.0", "send", {
  message: "Temperature above threshold!",
  topic: "home_alerts_xyz",
  email: "admin@example.com",
  icon: "https://example.com/icon.png",
  priority: "4",
});

Mit Dateianhang senden

sendTo("ntfy-client.0", "send", {
  message: "Security camera snapshot",
  topic: "home_alerts_xyz",
  attach_file: "/tmp/snapshot.jpg",
  filename: "camera_snapshot.jpg",
});

Mit Aktionsschaltflächen senden

sendTo("ntfy-client.0", "send", {
  message: "Doorbell rang!",
  topic: "home_alerts_xyz",
  actions: [
    { action: "view", label: "Open Camera", url: "https://camera.example.com" },
    {
      action: "http",
      label: "Turn on Light",
      url: "https://ha.example.com/api/light/on",
      method: "POST",
    },
  ],
});

Mit Vorlage senden (Inline / Manuell)

Verwenden Sie das Feld message als Vorlagenzeichenfolge und geben Sie den JSON-Kontext im Feld data an:

sendTo("ntfy-client.0", "send", {
  topic: "home_alerts_xyz",
  template: true,
  message: "Current temperature is {{.temp}}°C from {{.sensor}}",
  data: { temp: 42, sensor: "living_room" },
});

Mit Vorlage senden (Vordefiniert / z. B. GitHub)

Für vordefinierte Vorlagen wie github geben Sie die ursprünglichen Webhook-JSON-Daten im Feld data an. Die Datenstruktur muss mit derjenigen übereinstimmen, die der ursprüngliche Dienst sendet (siehe Quelltext):

sendTo("ntfy-client.0", "send", {
  topic: "github_webhooks",
  template: "github",
  data: {
    action: "opened",
    issue: {
      number: 42,
      title: "Found a bug",
      html_url: "https://github.com/my/repo/issues/42",
      user: { html_url: "https://github.com/octocat" },
    },
    repository: {
      full_name: "my/repo",
      html_url: "https://github.com/my/repo",
    },
  },
});

Hinweis: Vordefinierte Vorlagen erwarten die exakte Datenstruktur des Originaldienstes. Fehlende oder falsch benannte Felder werden als <no value> angezeigt. Für volle Kontrolle über die Formatierung verwenden Sie stattdessen eine Inline-Vorlage (template: true).

Benachrichtigung ausblenden

sendTo("ntfy-client.0", "dismiss", {
  topic: "home_alerts_xyz",
  sequence_id: "abc123",
});

Benachrichtigung löschen

sendTo("ntfy-client.0", "delete", {
  topic: "home_alerts_xyz",
  sequence_id: "abc123",
});

Authentifizierung

Ntfy unterstützt einige Varianten:

  • Keine: Geeignet für Standard-ntfy.sh-Server (Themen sind öffentlich!).
  • Basisauthentifizierung: Lokalen Server mit Benutzername und Passwort einrichten.
  • Zugriffstoken: Erstellen Sie Tokens und verwenden Sie die Bearer-Token-Validierung für Ihr Thema.

Befehle

BefehlBeschreibung
send / publishBenachrichtigung senden
deleteBenachrichtigung anhand der sequence_id löschen
deleteBenachrichtigung anhand der sequence_id löschen

Rechtliche Hinweise

Dieser Adapter ist KEIN offizielles Produkt der ntfy LLC. Der Name ntfy, das Logo und die Markenrechte sind eingetragene Warenzeichen der ntfy LLC. Dieser Adapter ist ein Community-Projekt zur Integration in ioBroker.

Changelog

WORK IN PROGRESS

  • (ioBroker-Bot) Adapter requires admin >= 7.8.23 now.

0.1.4 (2026-06-07)

  • (lubepi) FIXED: Adapter now creates missing parent folder objects (stats, topics) so they appear correctly in the object tree
  • (lubepi) FIXED: Corrected state roles for attachment-related states (storage, file size, bandwidth)
  • (lubepi) ENHANCED: Hardened error handling throughout the adapter and extracted reusable helper methods
  • (lubepi) ENHANCED: Cleaned up orphaned translation keys from all language files

0.1.3 (2026-04-12)

  • (lubepi) Refactor: Move internal config signature to local file storage (remove useless object from tree)

0.1.2 (2026-04-12)

  • (lubepi) Update axios due to critical security fixes (SSRF, Header Injection)

0.1.1 (2026-04-12)

  • (lubepi) Reset runtime states on server or account configuration changes
  • (lubepi) Mask credentials in logs and only log the configured authentication type

0.1.0 (2026-04-12)

  • (lubepi) Initial release with full ntfy.sh support
  • Subscribe to topics via SSE (receive messages in real-time)
  • Publish notifications with all ntfy parameters (title, priority, tags, click, attach, actions, markdown, delay, email, call, icon, sequence_id, disable_cache, disable_firebase, unified_push, template)
  • File upload attachments via PUT
  • Dismiss and delete notifications by sequence_id
  • Account statistics (messages, emails, calls, attachments, reservations)
  • Server version check for self-hosted instances
  • Dynamic connection status monitoring with health checks
  • Blockly blocks for sending and managing notifications
  • Full i18n support (en, de, ru, pt, nl, fr, it, es, pl, uk, zh-cn)

License

MIT License

Copyright (c) 2026 lubepi

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.