@jackietreeh0rn/homebridge-blink-security
v1.8.0
Published
Homebridge plugin for Amazon Blink security cameras
Maintainers
Readme
Supported Devices
| Device | Model Type | Capabilities |
| ------------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 📷 Blink Outdoor / Indoor | default, catalina | Live view (IMMI) + audioMotion sensorSnapshotsTemperatureBattery levelNight visionClip recordingPrivacy modeMotion enable/disable |
| 📷 Blink XT / XT2 | white, xt | Live view (RTSP, video only)Motion sensorSnapshotsTemperatureBattery levelNight visionClip recordingPrivacy modeMotion enable/disable |
| 📸 Blink Mini | owl | Live view (IMMI) + audioMotion sensorSnapshotsClip recordingPrivacy modeMotion enable/disable |
| 📸 Blink Mini 2 | hawk | Live view (IMMI) + audioMotion sensorSnapshotsClip recordingPrivacy modeMotion enable/disable |
| 🔦 Blink Wired Floodlight | superior_owl | Live view (IMMI) + audioMotion sensorSnapshotsClip recordingPrivacy modeMotion enable/disable |
| 🚪 Blink Video Doorbell | lotus | Live view (IMMI) + audioMotion sensorSnapshotsDoorbell press notificationClip recordingPrivacy modeMotion 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"| HomeFeatures
- 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_savetoggle 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
Open the Homebridge UI.
Open the Plugins tab, search for
homebridge-blink-security, and install the plugin.Configure your Blink credentials through the settings panel.
Manual
Install the plugin using NPM:
npm i -g @jackietreeh0rn/homebridge-blink-securityConfigure the BlinkSecurity platform in
~/.homebridge/config.jsonas shown inconfig.example.json.Start Homebridge:
homebridge -D
2FA Setup
Blink requires two-factor authentication on first login:
- Configure your
usernameandpasswordand restart Homebridge - Blink will send a verification code to your email/phone
- Add the code to the
pinfield in config and restart Homebridge - After successful verification, remove the
pinfield — 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 linkWatch Mode
Automatically recompiles and restarts Homebridge on source changes:
npm run watchThis 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 formattingCommits 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:
- Set
enable-audio: truein plugin config - Open the Blink app → Device Settings → Privacy → enable Audio Streaming for each camera
- 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:
- Disconnect your VPN
- Restart the Homebridge child bridge
- Complete 2FA verification
- 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).
- MattTW/BlinkMonitorProtocol — Blink API documentation
- fronzbot/blinkpy — Python Blink library (Home Assistant)
- Homebridge Developer Documentation
- Apple HomeKit Documentation
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.
