адаптер blink для ioBroker
Адаптер ioBroker для камер Blink.
Поддерживаемые устройства
Этот адаптер предназначен для домашних камер видеонаблюдения Blink и соответствующих устройств, подключенных к учетной записи Blink.
Веб-сайт производителя: Blink
Обзор устройств: продукция Blink
Поддержка / документация по устройству: Поддержка Blink
Данный адаптер не связан с компанией Blink или Amazon, не поддерживается ими и не получает от них одобрения.
Начиная
Установка производится через административный интерфейс ioBroker.
Введите свои учетные данные:
Функции
- Подключается к облаку Blink
- Опрашивает состояние камеры и модуля синхронизации.
- Поддерживает создание снимков вручную.
- Магазины: снимки состояния в реальном времени
- Загружает последнюю доступную облачную видеозапись.
- Позволяет включать или отключать обнаружение движения.
- Поддерживает предупреждения о состоянии батареи и уведомления.
- Поддерживает интеллектуальное обнаружение состояний для классифицированных событий движения (работает только в платных облачных сервисах).
- Поддерживает видео, хранящиеся в облаке, и видео, хранящиеся локально на SD-карте (SyncModule 2 и XR), через локальный сервер на порту 8085 — требуется JavaScript, см. ниже!
- Для работы скрипта требуется установленный ffmpeg и много ресурсов, если у вас много камер, и в этом случае он лишь частично подходит для Raspberry Pi (минимум 4 ГБ — чем больше, тем лучше).
- Первая версия для просмотра в реальном времени с поддержкой JavaScript для каждой камеры — необходимый JavaScript устанавливается автоматически, за исключением старой модели XT2, поскольку она использует другой видеопоток.
- Экспериментальная нативная сессия LiveView (без необходимости использования JavaScript-помощников/ffmpeg) через
commands.start_live/commands.stop_liveСм. раздел "Реальная сессия LiveView" ниже.
Адаптер Blink: точки данных
Обзор всех данных, предоставляемых специализированным адаптером ioBroker.blink.0 Статус: после рефакторинга с учетом истории в облаке + резервного использования локального хранилища, а также добавления экспериментальной нативной сессии LiveView в версиях v0.0.37/0.0.38.
Конвенции
<CamID>— числовой идентификатор камеры (например)1754227Также используется в имени файла MP4.<NetID>— Идентификатор сети модуля синхронизации / домашней сети (например)174553).<N>— Индекс слота в истории видео, 0 = самый новый клип, 9 = самый старый .
Все файлы MP4 и снимки экрана хранятся в указанном каталоге для снимков (по умолчанию:/opt/iobroker/iobroker-data/blink/ ).
Глобальные переменные адаптера
| Точка данных | Тип | Описание |
|---|---|---|
blink.0.info.connection | логический | true если у адаптера есть действительная сессия с облаком Blink. |
blink.0.info.account_id | нить | Идентификатор учетной записи Blink, используемый внутри системы, чтобы дополнительный вспомогательный скрипт LiveView мог найти нужную учетную запись. |
Данные с камеры
Каждая камера получает свой собственный канал.blink.0.cameras.<CamID> со следующими подструктурами.
info – Основные данные
| Точка данных | Тип | Описание |
|---|---|---|
info.name | нить | Название, отображаемое в приложении Blink (например, "Подъездная дорога", "Патио"). |
info.network_id | число | Идентификатор сети, к которой принадлежит камера. |
info.serial | нить | Серийный номер камеры. |
info.type | нить | Модель камеры / Тип API Blink (camera ,owl ,mini ,doorbell ). |
info.account_id | нить | Идентификатор учетной записи Blink, дублируемый для каждой камеры в вспомогательном скрипте LiveView. |
status – Текущее состояние датчика
| Точка данных | Тип | Описание |
|---|---|---|
status.armed | логический | Камера активирована (в сетевом режиме). |
status.battery | число | Напряжение батареи в вольтах (единица измерения)V ).null на моделях без батареи. |
status.battery_raw | число | Исходное значение датчика до преобразования. |
status.battery_text | нить | Заметка, удобочитаемая для человека, напримерnot available на моделях без батареи. |
status.battery_volt | число | Напряжение батареи в вольтах (единица измерения)V ). |
status.temperature | число | Температура на датчике камеры в °C (единица измерения)°C ). |
status.temperature_f | число | Температура в °F (единица измерения)°F ). |
status.temperature_text | нить | Температура в виде отформатированного текста, например.not available на моделях без датчика. |
status.wifi_strength | число | Уровень сигнала Wi-Fi в дБм (единица измерения)dBm ). |
status.motion_detect_enabled | логический | Функция обнаружения движения на камере включена/выключена (отражение только для чтения; использоватьcommands.motion_detect изменить это). |
status.last_update | нить | Отметка времени последнего обновления статуса (формат ISO). |
Интеллектуальное обнаружение (только при активной подписке на Blink)
Извлечено из новейшего видеоролика, снятого на камеру в облаке :
| Точка данных | Тип | Описание |
|---|---|---|
status.smart_detection | логический | По меньшей мере один сигнал интеллектуального обнаружения присутствует в последнем видеоролике. |
status.smart_detection_raw | нить | Исходные данные для интеллектуального обнаружения (JSON, усеченный формат). |
status.detection_type | нить | Список обнаруженных типов, разделенных запятыми. |
status.motion_source | нить | Триггер для видеоролика:pir ,cv_motion , и т. д. |
status.person_detected | логический | Человек обнаружен. |
status.vehicle_detected | логический | Обнаружен автомобиль. |
status.animal_detected | логический | Обнаружено животное. |
status.package_detected | логический | Пакет обнаружен. |
battery – Расширенный режим работы батареи
Используется для предотвращения повторных уведомлений.
| Точка данных | Тип | Описание |
|---|---|---|
battery.low | логический | Заряд батареи критически низкий. |
battery.warningSent | логический | Предупреждение о низком заряде батареи уже было выпущено на текущий период низкого заряда батареи (дедупликация). |
battery.lastMessage | нить | Текст последнего отправленного предупреждения о низком заряде батареи (например, через Pushover/Telegram). |
battery.lastWarning | нить | Отметка времени последнего предупреждения о низком заряде батареи (ISO). |
live – Снимок экрана и прямая трансляция
| Точка данных | Тип | Описание |
|---|---|---|
live.file | нить | Абсолютный путь к последнему снимку на диске. |
live.image_base64 | нить | Снимок в виде строки Base64 (для прямого встраивания в VIS без доступа к файлу). |
live.mime_type | нить | MIME-тип снимка (например)image/jpeg ). |
live.timestamp | нить | Временная метка снимка (ISO). |
live.stream_active | логический | В данный момент выполняется опрос потока MJPEG в реальном времени (вспомогательная функция веб-сетки). |
live.stream_url | нить | URL активного потока MJPEG в реальном времени (вспомогательная функция веб-сетки, ограничение по времени жизни). |
live.mode | нить | Режим экспериментальной нативной сессии LiveView (например)idle (название активного режима). |
live.active | логический | true при использовании нативной сессии LiveView (commands.start_live ) запущен. |
live.url | нить | URL-адрес воспроизведения текущей сессии LiveView. |
live.expires_at | нить | Отметка времени истечения срока действия текущей сессии LiveView (ISO). |
live.last_error | нить | Последняя ошибка из собственной сессии LiveView, если таковая имелась. |
live.session_id | нить | Идентификатор текущей сессии LiveView. |
live.backend | нить | Для обслуживания нативной сессии LiveView использовался бэкэнд. |
live.unsupported | логический | true если данная модель камеры не поддерживает встроенный режим LiveView (например, старые модели XT/XT2). В этом случае,commands.start_live не оказывает никакого эффекта. |
video – Текущее видео
Новейшее видео с камеры. Автоматически выбирается облачное хранилище; при необходимости используется локальное хранилище (USB-накопитель Sync Module 2).
| Точка данных | Тип | Описание |
|---|---|---|
video.file | нить | Абсолютный путь MP4 (<CamID>_latest.mp4 ). |
video.timestamp | нить | Временная метка видеоконтента (ISO). |
video.id | нить | Уникальный идентификатор клипа из API Blink. |
video.size | число | Размер файла в байтах. |
video.ready | логический | Файл успешно загружен и воспроизводится. |
video.lastError | нить | Последняя ошибка загрузки."" = хорошо, в противном случае сообщение будет выглядеть так:no video available . |
video.history.0 …video.history.9 – Галерея колец
Каждая камера имеет 10 слотов, содержащих 10 самых последних видеороликов. Слот 0 = самый новый ролик , слот 9 = самый старый. При каждом новом ролике слоты автоматически меняются (самый старый отсеивается).
| Точка данных | Тип | Описание |
|---|---|---|
video.history.<N>.file | нить | Абсолютный путь MP4 (<CamID>_history_<N>.mp4 ). Постоянное имя файла для каждого слота ⇒ стабильные URL-адреса в VIS. |
video.history.<N>.id | нить | Уникальный идентификатор клипа из API Blink. |
video.history.<N>.timestamp | нить | Временная метка содержимого клипа (ISO). |
video.history.<N>.source | нить | Источник видеоролика:cloud илиlocal_storage . Пусто, если слот не используется. |
commands – Запуск точек данных
Установить наtrue → после выполнения действия адаптер автоматически перезагружается.false . (commands.motion_detect Единственное исключение — это постоянно включенный/выключенный переключатель, а не самовосстанавливающийся триггер.
| Точка данных | Тип | Действие |
|---|---|---|
commands.snapshot | логический | Запросить новый снимок (сохраненный в виде состояния Base64). |
commands.snapshot_file | нить | Только для чтения: абсолютный путь к последнему сохраненному файлу снимка, устанавливаемый автоматически после каждого снимка. |
commands.fetch_video | логический | Скачайте последнее видео. Умная логика: сначала облако, затем резервное локальное хранилище. |
commands.live_request | логический | Откройте потоковое видео в формате MJPEG (с помощью web-grid helper, TTL ~60 с). |
commands.start_live | логический | Запустите экспериментальную сессию LiveView (вспомогательные JavaScript-функции / ffmpeg не требуются). Результат отобразится в следующем виде:live.url /live.mode /live.session_id . |
commands.stop_live | логический | Остановить сеанс LiveView, запущенный черезcommands.start_live . |
commands.motion_detect | логический | Переключите функцию обнаружения движения на камере (постоянное переключение, без автоматической перезагрузки). |
commands.clear_session | логический | Очистите сессию аутентификации (в случае проблем со входом в систему). |
Модуль синхронизации / сеть
Каждый модуль синхронизации получает свой собственный канал.blink.0.sync.<NetID> Примечание: Путь состояния используетnetwork_id а не фактический идентификатор устройства синхронизирующего модуля.
info – Основные данные
| Точка данных | Тип | Описание |
|---|---|---|
info.name | нить | Название сети (например, "Home"). |
info.serial | нить | Серийный номер модуля синхронизации. |
status - Состояние
| Точка данных | Тип | Описание |
|---|---|---|
status.armed | логический | Включение сетевой охраны (включает обнаружение движения на всех камерах). |
status.last_update | нить | Отметка времени последнего обновления (ISO). |
commands- Курок
| Точка данных | Тип | Действие |
|---|---|---|
commands.armed | логический | Приводит всю сеть в состояние боевой готовности (true ) или разоружены (false ). Это затрагивает все камеры в этой сети. |
Структура файлов в каталоге снимков
Путь по умолчанию:/opt/iobroker/iobroker-data/blink/
| Файл | Описание |
|---|---|
<CamID>_latest.mp4 | Самое свежее видео с камеры (см.video.file ). |
<CamID>_history_<N>.mp4 | Исторический слотN камеры (video.history.<N>.file ). |
<CamID>_snapshot.jpg | Последний снимок, если он был сохранен черезcommands.snapshot_file . |
Имена файлов остаются неизменными для каждого слота , содержимое меняется при ротации. Для встраивания в веб-среду используйте механизм защиты от кэширования в строке запроса.?t={timestamp} Таким образом, браузер фактически перезагружает новый файл.
Дополнительный видеоархив
Адаптер может копировать загруженные MP4-файлы в отдельную директорию архива, например, в путь к смонтированному сетевому хранилищу (NAS). Создание архива является необязательным и отключено по умолчанию.
Настройки архива задаются в административном интерфейсе адаптера:
Enable video archiveЭта опция позволяет копировать загруженные MP4-файлы в архивную директорию.Archive directory: абсолютный путь к архивированным файлам MP4, например/opt/iobroker/iobroker-data/blink-archive.Create camera subfoldersСоздает одну подпапку архива для каждой камеры.Maximum archive clips per camera in grid: ограничивает количество архивных видеороликов, отображаемых с каждой камеры в веб-таблице.
При включении архивации адаптер также заполняет существующие локальные файлы MP4 из текущего состояния видео и истории видео в архив. В сетке камер отображаются заархивированные клипы.Archive Кнопка навигации, отсортированная по временной метке клипа и очищенная от дубликатов по идентификатору клипа.
В рамках следующих статусов архива создаются следующие состояния архива.blink.0.archive :
| Состояние | Тип | Описание |
|---|---|---|
archive.enabled | логический | Показывает, включен ли архив в конфигурации адаптера. |
archive.available | логический | Показывает, доступен ли в данный момент каталог архива для записи. |
archive.directory | нить | Отображает настроенный каталог архива. |
archive.lastFile | нить | Исходный MP4-файл, последний раз обработанный для архивирования. |
archive.lastTarget | нить | Путь к целевому файлу архива, содержащему последний успешно скопированный MP4-файл. |
archive.lastSuccess | нить | Отметка времени последнего успешного копирования архива. |
archive.lastError | нить | Последнее сообщение об ошибке архивации, если таковое имелось. |
Состояния архива являются индикаторами состояния только для чтения. Изменяйте параметры архива в конфигурации адаптера, а не записывайте данные в эти состояния.
Советы по интеграции VIS
Для предварительного просмотра в VIS:
{cameras.1754227.video.file} → absolute path
{cameras.1754227.video.timestamp} → use for cache-busting
{cameras.1754227.video.ready} → if false, show a "no video" hint
{cameras.1754227.video.lastError} → if non-empty, show as error status
Для запросов в исторической галерее используйте ячейки 0–9 по отдельности:
{cameras.1754227.video.history.0.file}
{cameras.1754227.video.history.0.timestamp}
{cameras.1754227.video.history.0.source}
... through slot 9
source = "cloud" Это означает, что видеоролик был загружен непосредственно из облака Blink (быстро, без загрузки через USB-накопитель).source = "local_storage" Это означает, что видеоролик был загружен с USB-накопителя модуля синхронизации 2 через облако.
Примечания
- Предупреждения, работающие от батареи, обрабатываются через
battery.*штатов. - Устройства без встроенного аккумулятора, такие как Mini/Owl/PanTilt, не подпадают под действие предупреждений о низком заряде батареи.
- В таком случае,
battery.lastMessageустановлено наno built in battery. - Состояния изображения в реальном времени обновляются при получении снимка или при включении функции создания снимков в реальном времени.
- Состояния потока MJPEG имеют значение только в том случае, если потоковая передача включена в конфигурации адаптера.
- Встроенные состояния сессии LiveView (
live.mode,live.active,live.url…) не зависят от вспомогательной функции веб-сетки MJPEG; проверьтеlive.unsupportedпрежде чем звонитьcommands.start_liveна более старых моделях камер. - Состояния функции Smart Detection обновляются при наличии классифицированных метаданных о движении из облака Blink Cloud.
Дополнительная веб-сетка LiveView
Адаптер может дополнительно устанавливать и обновлять вспомогательный скрипт для веб-сетки LiveView.
Этот вспомогательный скрипт создаётся в пространстве имён JavaScript-адаптера ioBroker следующим образом:
script.js.common.blink-video-url-server
Это сделано намеренно и используется только для дополнительной функциональности веб-сетки / вспомогательного средства LiveView. Существующие пользовательские скрипты с тем же идентификатором объекта могут быть перезаписаны. Если вы используете пользовательскую версию этого скрипта, пожалуйста, создайте резервную копию перед включением или обновлением этой функции.
Примечание: Этот вспомогательный инструмент для веб-сетки является отдельной функцией от описанной выше встроенной сессии LiveView.
commands.start_live/live.urlДля работы в нативной сессии не требуется адаптер JavaScript.ffmpegЭто рекомендуемая отправная точка, если вам нужен только URL-адрес прямой трансляции с одной камеры в VIS или другой интеграции.
Требования
Для работы веб-сетки LiveView требуется:
- JavaScript-адаптер ioBroker
ffmpegустановлен в хост-системе и доступен вPATH- Поддерживаются камеры Blink, использующие текущий протокол IMMI/MCLV LiveView.
- Сетевой доступ с хоста ioBroker к облачным сервисам Blink.
В системах Debian/Ubuntu,ffmpeg Обычно его можно установить с помощью:
sudo apt update
sudo apt install ffmpeg
Совместимость с камерами
Не все поколения камер Blink предоставляют одинаковый поток LiveView.
Камеры, использующие текущий протокол IMMI/MCLV LiveView, могут быть преобразованы в поток HLS для веб-сети. Более старые камеры на базе XT/XT2/LFR могут не предоставлять пригодный для использования поток этим методом. В этом случае адаптер обнаруживает неподдерживаемое состояние LiveView и отключает кнопку LiveView для этой камеры вместо запуска прерванного потока.live.unsupported Этот флаг также применяется к собственной сессии LiveView (commands.start_live ).
Примечания
Веб-сетка LiveView — это удобная функция. Основные функции адаптера, такие как вход в систему, обнаружение устройств, состояния движения, состояния батареи, миниатюры и загрузка видео, не требуют вспомогательного скрипта JavaScript.ffmpeg Вспомогательная функция веб-сетки LiveView поддерживается только в установках ioBroker на базе Linux. Она использует пути Linux и обрабатывает команды, такие как.../opt/iobroker ,/tmp ,/usr/bin/node ,nohup , иpkill Основная функциональность адаптера остается платформенно-независимой, но для работы функций веб-сетки LiveView требуется хост под управлением Linux.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ
Все названия продуктов и компаний, а также логотипы являются товарными знаками™ или зарегистрированными® товарными знаками соответствующих владельцев. Их использование не подразумевает какой-либо связи с ними или их дочерними компаниями, а также одобрения с их стороны! Этот личный проект ведется в свободное время и не преследует коммерческих целей. Blink является товарным знаком Amazon Technologies, Inc.
Changelog
Older entries are available in CHANGELOG_OLD.md.
0.0.39 (2026-08-08)
- Automatically clears the cached Blink session once after HTTP 401/code 101 and retries the connection.
- Allows the clear session command even when the adapter is not connected.
0.0.38 (2026-07-13)
- Added units for temperature and battery voltage states.
- Removed duplicate detail roles for Fahrenheit temperature and secondary live URL states.
0.0.37 (2026-07-13)
- Fixed button command states to use
read: falseas required forrole: button. - Fixed object hierarchy by creating
cameras,sync,video.historyand video history slots as folders where they contain child objects. - Fixed remaining English object names for smart detection and live URL states.
- Fixed device information roles for name, serial number and camera model states.
- Added dBm unit metadata for Wi-Fi signal strength states.
0.0.36 (2026-07-12)
- Fixed remaining admin checker warnings for archive translations.
- Normalized admin UI translation keys for streaming settings.
- Normalized English runtime labels and debug messages.
- Documented that the LiveView web grid helper requires Linux.
0.0.35 (2026-07-12)
- Fixed remaining admin checker warnings for archive translations.
License
MIT License
Copyright (c) 2026 Pischleuder1 pischleuder@gmx.de
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.