Неофициальный клиентский адаптер ntfy.sh для ioBroker
Отправляйте и получайте уведомления через ntfy.sh напрямую из ioBroker. Этот адаптер является проектом сообщества и не связан с ntfy LLC.
Функции
- Публикация уведомлений с полной поддержкой параметров ntfy.
- Подписывайтесь на темы и получайте сообщения в режиме реального времени через SSE (Server-Sent Events).
- Статистика учетной записи – просмотр статистики использования (сообщения, электронные письма, звонки, вложения, бронирования)
- Проверка версии сервера – обнаружение доступных обновлений для самостоятельно размещенных экземпляров ntfy.
- Состояние подключения – отслеживание подключения адаптера к серверу NTFI с помощью динамических проверок работоспособности.
- Поддержка базовой аутентификации и токенов носителя.
- Пользовательские URL-адреса сервера (или стандартный экземпляр ntfy.sh)
- Интегрированный
sendToБлоки Blockly для графических скриптов (отправка и управление) - Отклонить (очистить) и удалить уведомления по идентификатору последовательности.
- Загрузка файлов и вложений осуществляется методом PUT.
Поддерживаемые параметры уведомлений
| Параметр | Описание |
|---|---|
message | Текст уведомления (по умолчанию — "сработало", если поле пустое) |
topic | Целевая тема (в случае отказа используется настроенная тема по умолчанию) |
title | Заголовок уведомления |
priority | Уровень приоритета: 1 (мин.), 2 (низкий), 3 (по умолчанию), 4 (высокий), 5 (макс.) |
tags | Теги или короткие коды эмодзи (строка или массив, разделенные запятыми) |
click | URL-адрес открывается при нажатии на уведомление. |
attach | URL файла для прикрепления |
attach_file | Локальный путь к файлу для загрузки в качестве вложения (используется метод PUT) |
filename | Пользовательское имя файла для вложения |
actions | Кнопки действий (строка или объект JSON) |
markdown | Включить форматирование Markdown (true /false ) |
delay | Задержка доставки (например, "30 с", "5 м", "2 ч") |
email | Перешлите уведомление на этот адрес электронной почты |
call | Номер телефона для звонка с использованием TTS (требуется ntfy Pro) |
icon | URL-адрес значка отображается рядом с уведомлением. |
sequence_id | Заменить/обновить существующее уведомление с тем же идентификатором последовательности (Sequence-ID). |
disable_cache | Установить наtrue /yes отключить кэширование на стороне сервера |
disable_firebase | Установить наtrue /yes чтобы отключить пересылку сообщений в Firebase Cloud Messaging (Android) |
unified_push | Установить на1 включить поддержку UnifiedPush |
template | Использоватьtrue /yes для встроенных шаблонов или с именем, например:github для предопределенных |
data | Объект данных JSON или строка, используемая в контексте шаблона. |
Подписка на темы (получение сообщений)
Настройте темы в параметрах адаптера на вкладке «Темы» . Адаптер подписывается на эти темы через SSE и создает состояния для каждой темы.ntfy-client.0.topics.<topicName> :
| Состояние | Описание |
|---|---|
lastMessage | Текст последнего полученного сообщения |
lastTitle | Последнее полученное название |
lastPriority | Последний полученный приоритет |
lastTags | Последние полученные теги (разделенные запятыми) |
lastClick | URL последнего полученного клика |
lastIcon | URL последнего полученного значка |
lastActions | Последние полученные действия (JSON) |
lastAttachmentUrl | URL последнего полученного вложения |
lastAttachmentName | Название последнего полученного вложения |
lastAttachmentType | Тип MIME последнего полученного вложения |
lastAttachmentSize | Размер последнего полученного вложения (байты) |
lastAttachmentExpires | Отметка времени истечения срока действия последнего полученного вложения |
lastTimestamp | Отметка времени последнего сообщения |
lastExpires | Отметка времени истечения срока действия последнего сообщения |
lastMessageId | Последний идентификатор сообщения |
lastSequenceId | Последний идентификатор последовательности (для управления сообщениями) |
lastTopic | Название последней полученной темы |
lastEvent | Последний полученный тип события |
lastJson | Полный JSON-код последнего полученного сообщения |
subscribed | Активна ли подписка |
Статистика аккаунта
При настройке аутентификации адаптер получает статистику учетной записи каждые 15 минут и сохраняет ее в соответствующем разделе.ntfy-client.0.stats :
- Сообщения : опубликовано, осталось, лимит, срок действия
- Количество отправленных писем , оставшееся количество, лимит
- Количество совершенных телефонных звонков , оставшийся лимит, лимит
- Зарезервированные темы : количество, остаток, лимит
- Вложения : использованное/оставшееся/лимит хранилища, срок действия, лимит размера файла, лимит пропускной способности.
- Учетная запись : уровень подписки
Проверка состояния соединения и работоспособности
Адаптер отслеживает соединение с сервером NTFI черезinfo.connection состояние:
| Состояние | Описание |
|---|---|
info.connection | Статус подключения к серверу ntfy |
info.serverVersion | Текущая версия сервера ntfy |
info.latestVersion | Последняя доступная версия (только для самостоятельного размещения) |
info.updateAvailable | Доступно ли обновление сервера? |
Проверка состояния здоровья проводится в соответствии с/v1/health конечная точка с динамическими интервалами :
- Каждые 6 часов, когда сервер исправен.
- Каждые 5 минут, если последняя проверка не удалась (для более быстрого восстановления).
Кроме того, статус подключения автоматически устанавливается в состояние «подключено» , когда:
- Уведомление успешно отправлено.
- Подписка SSE успешно подключена.
- Получено сообщение по теме, на которую оформлена подписка.
Примеры блочных структур
В категории «Отправить» используйте следующие блоки:
1. Уведомление ntfy-client (отправка)
Отправьте сообщение со всеми поддерживаемыми параметрами:
- Установить экземпляр .
- Установить сообщение .
- Укажите тему (или оставьте поле пустым, чтобы использовать тему по умолчанию).
- При желании можно добавить дополнительные параметры с помощью мутатора (значок шестеренки): заголовок, приоритет, теги, значок, URL-адрес клика, действия, вложения, задержка, электронная почта, звонок и т. д.
- Используйте идентификатор последовательности, если вы хотите позже обновить/перезаписать существующее уведомление.
2. Управление ntfy-клиентом (manage)
Очистить или удалить существующее уведомление:
- Установить экземпляр .
- Установите действие (пометить как прочитанное и закрыть, или удалить).
- Задайте тему .
- Укажите идентификатор последовательности сообщения, которым вы хотите управлять.
Примечание об идентификаторах: каждому уведомлению присваивается уникальный идентификатор.
id(Идентификатор сообщения) предоставлен сервером.
- Если вы предоставите
sequence_idПри отправке необходимо использовать это.sequence_idдля всех управленческих действий (отклонить, удалить).- Если вы не предоставите
sequence_idсгенерированный серверомid(Идентификатор сообщения) служит в качествеsequence_idдля руководства.Несколько сообщений, содержащих одно и то же
sequence_idсформировать последовательность — отображается только последнее сообщение в последовательности.
Примеры на JavaScript
Отправить уведомление
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,
});
Отправить с пересылкой электронной почты и иконкой
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",
});
Отправить с прикрепленным файлом
sendTo("ntfy-client.0", "send", {
message: "Security camera snapshot",
topic: "home_alerts_xyz",
attach_file: "/tmp/snapshot.jpg",
filename: "camera_snapshot.jpg",
});
Отправить с кнопками действий
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",
},
],
});
Отправить с использованием шаблона (встроенный / ручной)
Используйтеmessage Используйте поле в качестве шаблонной строки и укажите контекст JSON в...data поле:
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" },
});
Отправка с использованием шаблона (заранее определенного / например, GitHub)
Для предопределенных шаблонов, таких какgithub укажите исходные JSON-данные веб-перехватчика вdata Поле. Структура данных должна соответствовать той, которую отправляет исходный сервис ( см. исходный код шаблона ):
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",
},
},
});
Примечание: Предварительно определенные шаблоны ожидают точную структуру данных из исходного сервиса. Отсутствующие или неправильно названные поля будут отображаться как
<no value>Для полного контроля над форматированием используйте встроенный шаблон.template: true) вместо.
Отклонить уведомление
sendTo("ntfy-client.0", "dismiss", {
topic: "home_alerts_xyz",
sequence_id: "abc123",
});
Удалить уведомление
sendTo("ntfy-client.0", "delete", {
topic: "home_alerts_xyz",
sequence_id: "abc123",
});
Аутентификация
Ntfy поддерживает несколько вариантов:
- None : Подходит для стандартных серверов ntfy.sh (темы публичные!).
- Базовая аутентификация : настройте локальный сервер с именем пользователя и паролем.
- Токен доступа : Создайте токены и используйте проверку токенов Bearer для вашей темы.
Команды
| Командование | Описание |
|---|---|
send /publish | Отправить уведомление |
dismiss /clear | Отклонить (пометить как прочитанное) уведомление по sequence_id |
delete | Удалить уведомление по sequence_id |
Юридическое уведомление
Этот адаптер НЕ является официальным продуктом ntfy LLC. Название ntfy , логотип и фирменная символика являются товарными знаками ntfy LLC. Этот адаптер — проект сообщества, предназначенный для интеграции с 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.