npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

iobroker.blink

v0.0.20

Published

adapter for amazon blink system and ioBroker

Readme

Logo

ioBroker.blink

NPM version Downloads Number of Installations Current version in stable repository

blink adapter for ioBroker

ioBroker adapter for Blink cameras.

Supported devices

This adapter is intended for Blink home security cameras and related Blink account devices.

Manufacturer website: Blink
Device overview: Blink products
Support / device documentation: Blink Support

This adapter is not affiliated with, maintained by, or endorsed by Blink or Amazon.

Getting started

Install via the ioBroker Admin interface

Fill out your credentials:

Features

  • Connects to the Blink Cloud
  • Polls camera and sync module status
  • Supports manual snapshots
  • Stores live snapshots
  • Downloads the latest available cloud video
  • Allows enabling or disabling motion detection
  • Supports battery warning states and notifications
  • Supports Smart Detection states for classified motion events (works only on paid cloud services)
  • Supports cloud stored videos and local stored videos on sd-card (SyncModule 2 and XR) via local server on port 8085 - JavaScript needed, see below !
  • The script requires ffmpeg installed and a lot resources if you have a lot cameras and is then only partially suitable for Raspberry Pis (min. 4GB — more is better)
  • initial release for live view with javascript for each camera - required javascript is installed automatically - except for the old XT2, because it uses a different video stream

Blink Adapter: Datapoints

Overview of all datapoints provided by the customized ioBroker adapter blink.0. Status: after refactoring for cloud history + local-storage fallback.

Conventions

  • <CamID> — numeric camera ID (e.g. 1754227). Also used in the MP4 filename.
  • <NetID> — Network ID of the sync module / home network (e.g. 174553).
  • <N> — slot index of the video history, 0 = newest clip, 9 = oldest.

All MP4 and snapshot files are stored in the configured snapshot directory (default: /opt/iobroker/iobroker-data/blink/).


Adapter globals

| Datapoint | Type | Description | |---|---|---| | blink.0.info.connection | boolean | true if the adapter has a valid session to the Blink cloud. |


Camera datapoints

Each camera gets its own channel blink.0.cameras.<CamID> with the following sub-structures.

info – Master data

| Datapoint | Type | Description | |---|---|---| | info.name | string | Display name from the Blink app (e.g. "Driveway", "Patio"). | | info.network_id | number | Network ID the camera belongs to. | | info.serial | string | Camera serial number. |

status – Current sensor state

| Datapoint | Type | Description | |---|---|---| | status.armed | boolean | Camera armed (follows the network mode). | | status.battery | string | Battery status as text from the Blink app (e.g. ok, low). | | status.battery_raw | number | Raw sensor value before conversion. | | status.battery_text | string | Human-readable status text. | | status.battery_volt | number | Battery voltage in volts. | | status.temperature | number | Temperature at the camera sensor in °C. | | status.temperature_f | number | Temperature in °F. | | status.temperature_text | string | Temperature as formatted text. | | status.wifi_strength | number | Wi-Fi signal strength (scale depends on model, higher = better). | | status.motion_detect_enabled | boolean | Motion detection on the camera enabled/disabled. | | status.last_update | string | Timestamp of the last status refresh (ISO format). |

Smart detection (only with active Blink subscription)

Extracted from the newest cloud clip of the camera:

| Datapoint | Type | Description | |---|---|---| | status.smart_detection | boolean | At least one smart-detect hit present in the last clip. | | status.smart_detection_raw | string | Raw smart-detection payload (JSON, truncated). | | status.detection_type | string | Comma-separated list of detected types. | | status.motion_source | string | Trigger for the clip: pir, cv_motion, etc. | | status.person_detected | boolean | Person detected. | | status.vehicle_detected | boolean | Vehicle detected. | | status.animal_detected | boolean | Animal detected. | | status.package_detected | boolean | Package detected. |

battery – Extended battery status

Used to avoid repeated notifications.

| Datapoint | Type | Description | |---|---|---| | battery.low | boolean | Battery is critically low. | | battery.warningSent | boolean | A warning has already been issued (deduplication). | | battery.lastMessage | string | Timestamp of the last status message. | | battery.lastWarning | string | Timestamp of the last warning. |

live – Snapshot and live stream

| Datapoint | Type | Description | |---|---|---| | live.file | string | Absolute path of the latest snapshot on disk. | | live.image_base64 | string | Snapshot as Base64 string (for direct embedding in VIS without file access). | | live.mime_type | string | MIME type of the snapshot (e.g. image/jpeg). | | live.timestamp | string | Snapshot timestamp (ISO). | | live.stream_active | boolean | Live stream currently active. | | live.stream_url | string | URL of the active live stream (TTL limited). |

video – Current video

The newest video for the camera. Cloud is preferred automatically; falls back to local storage (Sync Module 2 USB stick) if needed.

| Datapoint | Type | Description | |---|---|---| | video.file | string | Absolute path of the MP4 (<CamID>_latest.mp4). | | video.timestamp | string | Timestamp of the video content (ISO). | | video.id | string | Unique clip ID from the Blink API. | | video.size | number | File size in bytes. | | video.ready | boolean | File was downloaded successfully and is playable. | | video.lastError | string | Last download error. "" = ok, otherwise message such as no video available. |

video.history.0video.history.9 – Ring gallery

Each camera has 10 slots containing the 10 most recent clips. Slot 0 = newest clip, slot 9 = oldest. On each new clip the slots rotate automatically (oldest drops out).

| Datapoint | Type | Description | |---|---|---| | video.history.<N>.file | string | Absolute path of the MP4 (<CamID>_history_<N>.mp4). Constant filename per slot ⇒ stable URLs in VIS. | | video.history.<N>.id | string | Unique clip ID from the Blink API. | | video.history.<N>.timestamp | string | Timestamp of the clip content (ISO). | | video.history.<N>.source | string | Source of the clip: cloud or local_storage. Empty if slot unused. |

commands – Trigger datapoints

Set to true → action is executed, adapter automatically resets to false.

| Datapoint | Type | Action | |---|---|---| | commands.snapshot | boolean | Request a new snapshot (stored as Base64 state). | | commands.snapshot_file | boolean | Additionally save the snapshot to a file. | | commands.fetch_video | boolean | Download the latest video. Smart logic: cloud first, then local-storage fallback. | | commands.live_request | boolean | Open live stream (TTL ~30 s). | | commands.motion_detect | boolean | Toggle motion detection on the camera. | | commands.clear_session | boolean | Clear the auth session (in case of login problems). |


Sync module / network

Each sync module gets its own channel blink.0.sync.<NetID>. Note: The state path uses the network_id, not the actual sync-module device ID.

info – Master data

| Datapoint | Type | Description | |---|---|---| | info.name | string | Network name (e.g. "Home"). | | info.serial | string | Sync module serial number. |

status – State

| Datapoint | Type | Description | |---|---|---| | status.armed | boolean | Network armed (enables motion detection on all cameras). | | status.last_update | string | Timestamp of the last refresh (ISO). |

commands – Trigger

| Datapoint | Type | Action | |---|---|---| | commands.armed | boolean | Sets the entire network armed (true) or disarmed (false). Affects all cameras in this network. |


File layout in the snapshot directory

Default path: /opt/iobroker/iobroker-data/blink/

| File | Description | |---|---| | <CamID>_latest.mp4 | Most recent video of the camera (see video.file). | | <CamID>_history_<N>.mp4 | History slot N of the camera (video.history.<N>.file). | | <CamID>_snapshot.jpg | Last snapshot, if saved via commands.snapshot_file. |

Filenames are constant per slot, contents change on rotation. For web embedding use a cache-buster in the query string (?t={timestamp}) so the browser actually reloads the new file.


Tips for VIS integration

For a live preview in 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

For the history gallery query slots 0–9 individually:

{cameras.1754227.video.history.0.file}
{cameras.1754227.video.history.0.timestamp}
{cameras.1754227.video.history.0.source}
... through slot 9

source = "cloud" means the clip came directly from the Blink cloud (fast, no stick upload). source = "local_storage" means the clip was uploaded from the Sync Module 2 USB stick through the cloud.

Notes

  • Battery-powered warnings are handled via the battery.* states.
  • Devices without a built-in battery, such as Mini/Owl/PanTilt-like devices, are excluded from battery warnings.
  • In that case, battery.lastMessage is set to no built in battery.
  • Live image states are updated when a snapshot is fetched or when live snapshots are enabled.
  • MJPEG stream states are only relevant if streaming is enabled in the adapter configuration.
  • Smart Detection states are updated when classified motion metadata is available from Blink Cloud.

Optional LiveView Web Grid

The adapter can optionally install and update a helper script for the LiveView web grid.

This helper script is created in the ioBroker JavaScript adapter namespace as:

script.js.common.blink-video-url-server

This is intentional and only used for the optional web grid / LiveView helper functionality. Existing user scripts with the same object ID may be overwritten. If you maintain a customized version of this script, please create a backup before enabling or updating this feature.

Requirements

The LiveView web grid requires:

  • the ioBroker JavaScript adapter
  • ffmpeg installed on the host system and available in PATH
  • supported Blink cameras using the current IMMI/MCLV LiveView flow
  • network access from the ioBroker host to the Blink cloud services

On Debian/Ubuntu systems, ffmpeg can usually be installed with:

sudo apt update
sudo apt install ffmpeg

Camera compatibility

Not all Blink camera generations expose the same LiveView flow.

Cameras using the current IMMI/MCLV LiveView flow can be converted to an HLS stream for the web grid. Older XT/XT2/LFR based cameras may not provide a usable stream through this method. In that case the adapter detects the unsupported LiveView state and disables the LiveView button for that camera instead of starting a broken stream.

Notes

The LiveView web grid is a convenience feature. The core adapter functions such as login, device discovery, motion states, battery states, thumbnails and video downloads do not require the JavaScript helper script or ffmpeg.

DISCLAIMER

All product and company names or logos are trademarks™ or registered® trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them or any associated subsidiaries! This personal project is maintained in spare time and has no business goal. Blink is a trademark of Amazon Technologies, Inc..

Changelog

Older entries are available in CHANGELOG_OLD.md.

0.0.20 (2026-06-27)

  • Fixed sensitive debug logging: PIN/2FA codes, passwords, tokens and authorization/cookie headers are now masked or omitted from debug logs.
  • Added request timeouts for Blink cloud API requests to avoid hanging poll or login operations.
  • Changed adapter logs, notifications, object names and Admin UI texts to English to comply with ioBroker repository requirements.
  • Normalized Admin UI translations and added missing i18n keys.
  • Fixed LiveView helper packaging so the required LiveView helper scripts are included in the adapter package.
  • Fixed LiveView start handling for unsupported XT2/LFR cameras. Unsupported cameras are detected before starting the HLS bridge.
  • Fixed LiveView status handling so the web grid only shows a running stream after the HLS playlist is actually available.
  • Added documentation for supported Blink devices and manufacturer links.
  • Added documentation for the optional LiveView web grid, including JavaScript adapter and ffmpeg requirements.
  • Removed unused helper code and cleaned up repository checker findings.

0.0.19 (2026-06-24)

  • (Pischleuder1) fix: handle unsupported XT2 live view and avoid early HLS state

0.0.18 (2026-06-15)

  • (Pischleuder1) fix: expose Blink account id for LiveView helper (blink.0.info.account_id)

0.0.17 (2026-06-14)

  • (Pischleuder) fix: avoid interactive Blink 2FA prompt in LiveView helper (LiveView not comming up)

0.0.16 (2026-06-13)

  • (Pischleuder) fix: chaged roles and hierachy

License

MIT License

Copyright (c) 2026 Pischleuder1 [email protected]

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.