How to connect Imou cameras to Home Assistant

This guide connects an Imou camera to Home Assistant with Imou Life Official. That is the integration published by the Imou Open Platform team. Install it from HACS. The name to search for, and the name to add under Settings → Devices & services, is Imou Life Official. It needs Home Assistant 2025.4 or newer.

Imou Life Official signs in as an application on the Imou Open Platform, then builds entities from whatever that account’s cloud API returns. It does not use the Imou Life app password. A control appears only when that model reports it. A fixed camera has no pan-and-tilt buttons. A camera that does not report a battery has no battery sensor. Each lens, and each NVR channel, has its own live view. The live view is a cloud stream, so it still works away from the house.

The examples below use a camera named Porch. On another system the entity IDs follow that system’s device name. Copy them from Developer Tools → States.

Before you install Imou Life Official

Add the camera in the Imou Life app, on the account that will own the application, and confirm that the app shows it online. Imou Life Official reads that account.

Create the application on the international portal, open.imoulife.com. App ID and App secret are under Control Board → My App → App Information. Treat the secret as a password, and leave no space at the end. Rotating it makes Home Assistant ask you to re-authenticate Imou Life Official. The integration entry stays.

The server region is the data center of that account, listed under Control Board → Basic Information → My Information.

Data center on the account Region in Imou Life Official
East Asia Singapore
Central Europe Europe
Western America North America

A region that does not match still accepts the App ID. The device list comes back empty. A bad secret opens the re-authenticate flow instead. Enter the secret again under Settings → Devices & services → Imou Life Official.

Each App ID includes 30,000 free API requests a month. Usage above that is billed at the price published on the platform. Status refresh counts against this allowance, and live playback draws on the same application’s resources. When the allowance is gone, Settings → System → Repairs explains it. My Resources in the same console shows what is left.

Install Imou Life Official

  1. In HACS, search for Imou Life Official and download it. Restart Home Assistant when HACS asks.
  2. Go to Settings → Devices & services → Add integration and choose Imou Life Official.
  3. Paste the App ID and the App secret. Choose Europe, North America, or Singapore from the table above.
  4. Select the cameras to poll. You can finish with none selected. An unselected camera stays listed and stays out of the regular refresh.
  5. Submit.

An account with no devices can still finish setup. Bind the camera afterwards under Configure → Bind a new device, with the serial number and the binding code from the camera label or the Imou Life app.

What shows up after it connects

The live view is one camera entity for that lens. The resolution it requests defaults to HD under Configure → Polling and cameras. A picture card starts the stream:

type: picture-entity
entity: camera.porch
camera_view: auto
name: Porch

camera_view: auto starts the cloud stream while the card is on screen. Leave that card off an always-open dashboard when the camera runs on battery. An open stream wakes the camera and spends the same resources as watching it in the Imou Life app.

A porch camera that reports the usual controls looks like this in Developer Tools → States:

# Developer Tools → States. Entity IDs follow the device name.
camera.porch: idle
switch.porch_privacy_mode: "off"
switch.porch_human_detection: "on"
light.porch_white_light: "off"
select.porch_collection_point: "Select a collection point..."
binary_sensor.porch_motion: "off"

idle on the camera means nothing has asked for the stream yet. switch.porch_human_detection enables human detection. Its state is on or off. It does not flip when a person walks through the frame. binary_sensor.porch_motion is the sensor that turns on after an alarm push. It stays unavailable until event push is on and the alarm message type is included. Pet and vehicle alarms do not drive it.

The white light, on a floodlight camera, is a light. The collection-point select lists presets saved in the Imou Life app. It does not read the current aim back, so it sits on “Select a collection point…” after a successful move. The value to send is the preset name, such as Gate.

A missing row means the model did not report the feature. Do not create the entity by hand.

Service calls

Run these from Developer Tools → Actions.

A pan-and-tilt camera has direction buttons. One press moves the lens for a short interval. The duration is under Configure → Polling and cameras → Camera defaults. A fixed camera has no button.porch_ptz_left.

action: button.press
target:
  entity_id: button.porch_ptz_left

Privacy mode is the switch that closes the lens, the same control as in the Imou Life app:

action: switch.turn_on
target:
  entity_id: switch.porch_privacy_mode

A saved preset takes the name from the Imou Life app:

action: select.select_option
target:
  entity_id: select.porch_collection_point
data:
  option: Gate

The floodlight is a light:

action: light.turn_on
target:
  entity_id: light.porch_white_light

The siren does not require event push. The state drops back off after about 15 seconds, which matches how long the firmware usually sounds.

action: siren.turn_on
target:
  entity_id: siren.porch

An entity that was never created means the camera does not report that capability.

Alarm events

Alarms arrive as events only after Configure → Alarm push and notifications is on, and only if the callback URL is reachable from the internet. A LAN address such as http://192.168.1.5:8123 cannot receive that call. With push enabled and the alarm message type included, a person detection looks like this in Developer Tools → Events. The event type from Imou Life Official is imou_life_alarm. msg_type is human for a person and videoMotion for a picture change. Copy the value from a real event before filtering on it.

event_type: imou_life_alarm
data:
  msg_type: human

This automation listens for that event and turns the light on. binary_sensor.porch_motion also turns on for about 15 seconds after this push.

alias: Porch — human, light on
mode: single
triggers:
  - trigger: event
    event_type: imou_life_alarm
    event_data:
      msg_type: human
actions:
  - action: light.turn_on
    target:
      entity_id: light.porch_white_light

Until that push is enabled, the motion entity can exist and sit in unavailable. The camera entity, the light, the siren, and the collection-point select already work without it.

Install notes and every Configure page: github.com/Imou-OpenPlatform/Imou-Home-Assistant. Create the App ID at open.imoulife.com.