Project Awesome project awesome

Frameworks > homebridge-blink-security

A Homebridge plugin for integrating Blink cameras, doorbells, and sirens with Apple HomeKit, featuring live streaming, arm/disarm, and motion detection.

Package 5 stars GitHub


Homebridge Blink Security

verified-by-homebridge

npm version npm downloads GitHub Stars GitHub Last Commit GitHub pull requests GitHub issues FOSSA Status


The most comprehensive Homebridge plugin for Amazon Blink cameras, doorbells, and sirens — bringing your Blink devices into Apple Home with live view, motion detection, snapshots, and arm/disarm.


Apple Home — camera feeds and security status      Apple Home — security system arm/disarm


Supported Devices

Device Model Type Capabilities
📷 Blink Outdoor / Indoor default, catalina
  • Live view (IMMI) + audio
  • Motion sensor
  • Snapshots
  • Temperature
  • Battery level
  • Night vision
  • Clip recording
  • Privacy mode
  • Motion enable/disable
📷 Blink XT / XT2 white, xt
  • Live view (RTSP, video only)
  • Motion sensor
  • Snapshots
  • Temperature
  • Battery level
  • Night vision
  • Clip recording
  • Privacy mode
  • Motion enable/disable
📸 Blink Mini owl
  • Live view (IMMI) + audio
  • Motion sensor
  • Snapshots
  • Clip recording
  • Privacy mode
  • Motion enable/disable
📸 Blink Mini 2 hawk
  • Live view (IMMI) + audio
  • Motion sensor
  • Snapshots
  • Clip recording
  • Privacy mode
  • Motion enable/disable
🔦 Blink Wired Floodlight superior_owl
  • Live view (IMMI) + audio
  • Motion sensor
  • Snapshots
  • Clip recording
  • Privacy mode
  • Motion enable/disable
🚪 Blink Video Doorbell lotus
  • Live view (IMMI) + audio
  • Motion sensor
  • Snapshots
  • Doorbell press notification
  • Clip recording
  • Privacy mode
  • Motion enable/disable
🚨 Blink Siren siren
  • On/off switch

Architecture

graph TD
    Home["🏠 Apple Home"]

    subgraph Homebridge
        platform["<b>BlinkSecurityPlatform</b><br>DynamicPlatformPlugin"]
        acc_sec["<b>SecuritySystem</b><br>arm / disarm per network"]
        acc_cam["<b>Camera</b><br>live view · snapshots<br>motion · battery · temp"]
        acc_door["<b>Doorbell</b><br>press notification<br>+ camera features"]
        acc_siren["<b>Siren</b><br>on / off"]

        subgraph Streaming Pipeline
            delegate["<b>CameraDelegate</b><br>stream lifecycle"]
            immi_proxy["<b>ImmiTunnel</b><br>MPEG-TS over TLS"]
            rtsp_proxy["<b>RtspToH264Proxy</b><br>RTSP de-frame → MPEG-TS"]
            ffmpeg["<b>FFmpeg</b><br>H.264 + AAC-ELD → SRTP"]
        end
    end

    subgraph Blink Cloud
        auth["<b>OAuth 2.0 + PKCE</b><br>+ 2FA PIN · session persist"]
        api["<b>Blink REST API</b><br>immedia-semi.com"]
        immi_srv["<b>IMMI Server</b><br>TLS :443"]
        rtsp_srv["<b>RTSP Server</b><br>TLS :443"]
    end

    Home <-->|"HomeKit"| acc_sec
    Home <-->|"HomeKit"| acc_cam
    Home <-->|"HomeKit"| acc_door
    Home <-->|"HomeKit"| acc_siren

    platform --> acc_sec & acc_cam & acc_door & acc_siren
    platform -->|"polling<br>status · motion · thumbs"| api
    platform -->|"token refresh"| auth
    auth --> api

    acc_cam & acc_door --> delegate
    delegate -->|"Mini / Doorbell /<br>Outdoor / Indoor"| immi_proxy
    delegate -->|"XT / XT2"| rtsp_proxy
    immi_proxy -->|"TLS"| immi_srv
    rtsp_proxy -->|"TLS"| rtsp_srv
    immi_proxy & rtsp_proxy -->|"MPEG-TS"| ffmpeg
    ffmpeg -->|"SRTP"| Home

Features

  • Live view — IMMI and RTSP streaming via ffmpeg with automatic keepalive (H.264 video, AAC-ELD audio on IMMI cameras)
  • Security system — Arm/disarm per network, with optional manual arm switch
  • Multi-network — Supports multiple sync modules, each with independent arm/disarm
  • Motion detection — Configurable polling interval with debounce
  • Motion enable/disable — Per-camera switch to turn motion detection on or off
  • Snapshots — Periodic thumbnail refresh with caching and retry
  • Battery — Battery level and low-battery alerts (Outdoor/Indoor models)
  • Temperature — Ambient temperature sensor (Outdoor/Indoor models)
  • Doorbell press — Push notifications on doorbell button press
  • Privacy mode — Per-camera switch to suppress snapshots when disarmed
  • Night vision — IR illuminator toggle (Outdoor/Indoor models)
  • Clip recording — Trigger a clip recording via momentary switch
  • Live View clip saving — Configurable per-network lv_save toggle to save or suppress Live View clips
  • One-way audio — Listen-in on IMMI cameras (Mini, Mini 2, Outdoor/Indoor, Doorbell, Floodlight) transcoded to AAC-ELD for HomeKit
  • OAuth 2.0 + PKCE — Token refresh and persistent sessions across restarts
  • 2FA — One-time PIN verification for Blink's two-factor auth
  • Snapshot fallback — Streams the last thumbnail when live view is unavailable
  • Stale accessory cleanup — Removes devices no longer on your Blink account
  • Retry with backoff — Automatic retry on network errors and rate limiting

Installation

Install Homebridge, add it to Apple Home, then install and configure Homebridge Blink Security.

Recommended

  1. Open the Homebridge UI.

  2. Open the Plugins tab, search for homebridge-blink-security, and install the plugin.

  3. Configure your Blink credentials through the settings panel.

Plugin settings screenshot

Homebridge logs

Manual

  1. Install the plugin using NPM:

    npm i -g @jackietreeh0rn/homebridge-blink-security
    
  2. Configure the BlinkSecurity platform in ~/.homebridge/config.json as shown in config.example.json.

  3. Start Homebridge:

    homebridge -D
    

2FA Setup

Blink requires two-factor authentication on first login:

  1. Configure your username and password and restart Homebridge
  2. Blink will send a verification code to your email/phone
  3. Add the code to the pin field in config and restart Homebridge
  4. After successful verification, remove the pin field — the session is persisted

Configuration

Property Type Default Description
username string required Blink account email
password string required Blink account password
pin string 2FA verification code (only needed once)
hide-alarm boolean false Hide the SecuritySystem accessory
hide-manual-arm-switch boolean false Hide the manual arm/disarm switch
hide-temperature-sensor boolean false Hide temperature sensors on cameras
hide-enabled-switch boolean false Hide motion enabled/disabled switch
hide-privacy-switch boolean false Hide privacy mode switch
enable-liveview boolean true Enable IMMI live view streaming
enable-audio boolean false Enable one-way audio in Live View. Also requires Audio Streaming in the Blink app under Device Settings → Privacy
lv-save boolean false Save Live View clips to Blink cloud
disable-thumbnail-refresh boolean false Disable automatic thumbnail refresh
camera-thumbnail-refresh-seconds integer 3600 Minimum seconds between Blink cloud thumbnail refreshes per camera (HomeKit polls and is served cached thumbnails between refreshes)
camera-status-polling-seconds integer 30 Status polling interval in seconds
camera-motion-polling-seconds integer 15 Motion detection polling interval in seconds
logging string "quiet" suppresses routine chatter (thumbnail refresh, reconfigure, clip recording, sleep). "verbose" or "debug" for extended logging
enable-startup-diagnostic boolean false Log diagnostic info on startup

Development

Prerequisites

  • Node.js 18.20.4+, 20.18.0+, 22.10.0+, or 24.0.0+
  • Homebridge 1.8.0+ or 2.0.0-beta+

FFmpeg is bundled via the ffmpeg-for-homebridge dependency — no separate install is needed, and it ships with libfdk_aac enabled for AAC-ELD audio.

Setup

npm install
npm run build
npm link

Watch Mode

Automatically recompiles and restarts Homebridge on source changes:

npm run watch

This runs a local Homebridge instance in debug mode using the config at ./test/hbConfig/. Stop any other Homebridge instances first to avoid port conflicts. The watch behavior can be adjusted in nodemon.json.

Linting & Formatting

npm run lint        # check for lint errors
npm run lint:fix    # auto-fix lint errors
npm run prettier    # check formatting
npm run format      # auto-fix formatting

Commits must follow Conventional Commits — enforced by pre-commit hooks via commitlint and husky.


Troubleshooting

No Audio in Live View

One-way audio is supported on IMMI cameras (Mini, Mini 2, Outdoor/Indoor, Doorbell, Wired Floodlight). XT / XT2 cameras use RTSP and are video-only.

Audio is opt-in. To enable it:

  1. Set enable-audio: true in plugin config
  2. Open the Blink app → Device Settings → Privacy → enable Audio Streaming for each camera
  3. Restart the child bridge

If Audio Streaming is disabled in the Blink app, the camera sends malformed audio metadata that stalls the stream. That is why audio defaults to off.

Live View shows "Not responding"

If Live View spins and eventually shows "Not responding" in the Home app, the most common cause is audio being enabled in plugin config while Audio Streaming is disabled in the Blink app for that camera. Either enable Audio Streaming in the Blink app, or set enable-audio: false in plugin config.

VPN Interference

Blink's authentication servers may reject login requests made through a VPN, returning HTTP 406 with no 2FA code sent. If you're unable to complete initial setup:

  1. Disconnect your VPN
  2. Restart the Homebridge child bridge
  3. Complete 2FA verification
  4. You can re-enable your VPN after authentication succeeds — sessions are persisted

General

If you run into issues, check the Homebridge troubleshooting wiki first. If the problem persists, open an issue with as much detail as possible.


Contributing

See CONTRIBUTING.md for guidelines on bug reports, feature requests, and code contributions.


Useful Resources

Read the full write-up: Homebridge SmartRent & Blink — an architectural deep-dive into how both plugins map their respective APIs into HomeKit (HAP service composition, IMMI streaming, OAuth/2FA, motion polling).


License

GNU GENERAL PUBLIC LICENSE, Version 3


Disclaimer

This project is not endorsed by, directly affiliated with, maintained, authorized, or sponsored by Amazon.com, Inc., Immedia Semiconductor, or Apple Inc. All product and company names are the registered trademarks of their original owners. The use of any trade name or trademark is for identification and reference purposes only and does not imply any association with the trademark holder of their product brand.

Back to Internet of Things