Skip to main content

Async Python client for the Arlo camera API

Project description

Eisenberg — Arlo for Home Assistant

hacs_badge GitHub Release License: MIT

A Home Assistant custom integration for Arlo cameras, named after skating legend Arlo Eisenberg. Built around event-driven MQTT (no polling) with a typed Pydantic API client.

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

What you get

  • Live RTSPS streaming with sub-second lag (forced TCP, ffmpeg low-delay flags).
  • Camera entity with snapshots, motion thumbnails and stream keyframes cached on disk so the tile survives restarts and stays populated while disarmed.
  • Binary sensors — generic motion (from MQTT motionDetected) plus AI-classified person / vehicle / animal detections.
  • Security mode select — armAway / armHome / standby via Arlo's v3 location automation API (with revision tracking).
  • Siren switch.
  • Battery / signal sensors.
  • Base-station connectivity binary sensor.
  • Snapshot serviceeisenberg.snapshot for dashboard buttons or automations.
  • Media archival — opt-in storage of motion clips, thumbnails and stream keyframes to a configured media_dirs location, with rolling retention (default 14 days).

Installation

HACS (recommended)

The fastest path: click the Open in HACS badge above. It opens your HA instance's HACS UI prepared to add this repo as a custom integration — review and confirm.

Manual HACS path:

  1. HACS → Integrations → ⋮ → Custom repositories → add https://github.com/vjt/ha-eisenberg with category Integration.
  2. Install Eisenberg (Arlo).
  3. Restart Home Assistant.
  4. Settings → Devices & Services → Add Integration → search "Eisenberg".

Manual

Copy custom_components/eisenberg/ into your HA custom_components/ directory, install the pyeisenberg Python package into the HA Python environment, and restart.

Configuration

The config flow asks for your Arlo email and password.

  • If your browser is already trusted at Arlo, login is silent — no push needed.
  • Otherwise, a push notification is sent to your phone. Approve it in the Arlo app, then click Submit. Each click is a single API call — no polling — so rate-limit risk stays low.

After login you pick a media storage location (or Disabled to skip archival).

Options

  • Storage Location — change the archive directory.
  • Detection sensor reset timeout — how long person/vehicle/animal binary sensors stay on after a detection (default 30 s).
  • Archived media retention — days to keep on disk (default 14).

Services

eisenberg.snapshot

Request a fresh full-frame snapshot from a camera. The image arrives asynchronously via MQTT and refreshes the camera tile. Fails with a clear error if the camera is in standby (Arlo refuses cloud snapshots while disarmed).

service: eisenberg.snapshot
target:
  entity_id: camera.front_door

Events

The integration fires eisenberg_media events on motion detection with device_id, category, categories, content_url, thumbnail_url, duration, timestamp. Use these in automations to log clips elsewhere or trigger downstream actions.

Architecture

  • eisenberg/ — pure async Arlo client. REST + raw MQTT 3.1.1 over WebSocket. Pydantic models for every payload.
  • custom_components/eisenberg/ — the HA integration. A single coordinator owns the client + MQTT stream and pushes state to entities via _handle_coordinator_update.

Camera support

Tested against the Arlo Essential XL HD (VMC2052A) (battery + solar, WiFi, cloud-only). Other Arlo models that share the same v3 automation

  • MQTT shapes should work — file an issue if yours doesn't.

Limitations

  • All control flows through Arlo's cloud — there's no local API on these cameras.
  • The trust cookie Arlo issues lasts about 14 days. When it expires, HA fires a reauth; one click re-fires a push.

Development

./scripts/check.sh    # pyright + pytest + ruff

The deploy skill (/eisenberg-deploy) pushes to a HAOS box over SSH. The release skill (/eisenberg-release) cuts PyPI + GitHub releases.

License

MIT.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyeisenberg-0.1.1.tar.gz (24.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyeisenberg-0.1.1-py3-none-any.whl (17.2 kB view details)

Uploaded Python 3

File details

Details for the file pyeisenberg-0.1.1.tar.gz.

File metadata

  • Download URL: pyeisenberg-0.1.1.tar.gz
  • Upload date:
  • Size: 24.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for pyeisenberg-0.1.1.tar.gz
Algorithm Hash digest
SHA256 2e22141454022f95d0a558ba53611355b114cecca890af9634193d549595a80c
MD5 2584326a624a7a0cd6eef2be3d98240e
BLAKE2b-256 4f69ed75fb9b53b23d27b8d5df8cf3244f699b7bd9735a0ebfbd1a6373d43a0d

See more details on using hashes here.

File details

Details for the file pyeisenberg-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: pyeisenberg-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 17.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for pyeisenberg-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a72efcd93a9ceecae7967394dc0219c1fff3f456b0c964f5007cd7bfcf857a73
MD5 c3b3f7617f0df4588a89d5d970959617
BLAKE2b-256 41e7cb2339d6aee5c93ebd6c39b1fa05695dd5823d6ba0675939a8a95d9316e6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page