Skip to content

Cameras ​

Cameras from Yandex, Xiaomi (Mi Home), any IP camera over RTSP, and the screen of an Android TV. The Homer server adds them to Home Assistant, and video goes through the go2rtc video server. A camera is placed in a room like a regular device: on the plan it's an icon and a screen with the latest frame, and a tap opens live video.

With a computer running Homer Node with the “Camera recording” role, cameras record 24/7, and the recording is watched in the same camera window.

Where it is ​

Where
AppSettings → Devices → Cameras
WebThe “Home” page → “Cameras” block

Only the owner adds cameras. Everyone except guests can watch and pan them. Outside the home network — only access levels that are allowed to.

TIP

Yandex sign-in and the go2rtc address are set up only on the web. Everything else is in the app too.

Yandex ​

Experimental

Yandex and Xiaomi cloud cameras are an experiment: sign-in to the vendor cloud goes through an unofficial path, and the vendor can close it any day. Cameras from Home Assistant are not affected.

Account sign-in ​

Under the “Yandex” heading you can see where the sign-in comes from:

LabelMeaning
“own sign-in from this card”You signed in here, by QR or cookie
“via the yandex_station integration in HA”No own sign-in, the Yandex Station integration's sign-in is used
“none”Neither one

Your own sign-in wins over the integration: if you signed in here, cameras go under this account.

By QR:

  1. “Sign in via QR” (or “Sign in with another account via QR”).
  2. Scan the QR in the Yandex app (camera → QR) and confirm the sign-in.
  3. The card notices the confirmation by itself: “Signed in to Yandex”.

With the Session_id cookie — if Yandex asks for a captcha or the QR doesn't go through:

  1. Open yandex.ru in a browser where you're already signed in.
  2. F12 → Application → Cookies → copy the whole Session_id value.
  3. “With Session_id cookie” → paste → “Sign in”.

“sign out” forgets your own sign-in. If HA has the yandex_station integration, cameras will go through it.

Add a camera ​

The list shows the account's cameras: the room in Yandex, “offline”, “pan-tilt”.

  • Web: “Add”, then pick a room and “Place in room”.
  • App: “Place in room” → room. Adding and placing are one action. Wait up to a minute: Home Assistant reloads the integration.

The Homer server adds the camera to the yandex_station integration through its options — without YAML or an HA restart — and adds the stream to go2rtc.

WARNING

To add a Yandex camera, Home Assistant needs the yandex_station integration: the snapshot and pan buttons come through it. Without it you get the error “Home Assistant has no yandex_station integration”, even if you signed in to Yandex in the card.

Xiaomi (Mi Home) ​

Account sign-in ​

Sign-in goes step by step, in the Mi Home account the cameras are linked to:

  1. Email, phone or Mi ID and password → “Sign in”.
  2. The confirmation code from the email or SMS → “Confirm”.
  3. Sometimes a captcha: the characters from the picture → “Next”.

The password goes to go2rtc next to the home, is exchanged for a token there and isn't stored anywhere.

Add a camera ​

Same as Yandex: on the web “Add” and “Place in room”, in the app — “Place in room”. The camera's IP and model are shown in the list.

Video goes from the camera straight to the home; the cloud is needed only for the encryption keys. There's no HA integration for these cameras — the Homer server creates the camera.* entity itself.

Xiaomi cameras can't pan through go2rtc — there are no arrows in the window.

IP cameras (RTSP, ONVIF) ​

Any camera on the local network that serves RTSP: Hikvision, Dahua, Reolink, TP-Link Tapo and others. No cloud: video goes from the camera straight to the home. Such a camera has no events of its own: with a recording node it records 24/7, and person, motion and noise alerts are found by Frigate in the recording — see Record 24/7.

By ONVIF search:

  1. The “Subnet” field: the first three numbers of the home network address, e.g. 192.168.1. The app fills in the subnet of its Wi-Fi itself; the web takes it from the address it's opened at.
  2. “Find ONVIF cameras”: within a few seconds a list appears with the name, model and address.
  3. At the camera you want, “Add” → the camera's own login and password → “Connect”.

The Homer server asks the camera for its stream addresses itself: the largest stream becomes the main one, the smallest is used for viewing and object detection.

By RTSP address, if the camera has ONVIF turned off or doesn't support it:

  1. “RTSP address”, e.g. rtsp://admin:password@192.168.1.64:554/Streaming/Channels/101.
  2. “Second stream”, optional: a smaller stream of the same camera (on Hikvision …/Channels/102). It makes viewing lighter; full screen uses the main one.
  3. “Add”.

If you leave the second stream empty, the Homer server asks the camera for its ONVIF profiles itself, with the same login and password, and takes the small stream for viewing and object detection; the main one stays for recording and full screen. A camera without ONVIF uses the main stream for everything.

Before adding, the Homer server grabs a frame from the camera. If that fails, the camera isn't added and the answer gives the reason: “wrong login or password”, “the camera does not answer at this address”.

MJPEG over HTTP cameras — a 3D printer (MJPG-Streamer, OctoPrint, Klipper), ESP32-CAM, an old webcam: put its stream address into “RTSP address” as is, e.g. http://192.168.1.171:8080/?action=stream. It is viewed like any other camera, and recording is transcoded to H.264.

The camera password stays on the Homer server. Neither the app nor the web ever gets it: the list shows the address as rtsp://admin:***@…. “Remove” deletes the camera from Home Assistant and go2rtc.

Why the search asks for a subnet

The Homer server runs in Docker and can't hear broadcast requests on the home network, so it queries every address of the subnet one by one.

TV over ADB ​

A TV or any other Android device with network debugging on can be added as a camera: the frame is a screenshot of its screen every half minute, and the camera window shows the live screen.

  1. The “TV over ADB” block → the “Address, ip:port” field, e.g. 192.168.1.50:5555, a name if you like → “Connect”.
  2. On the TV, confirm “Allow debugging” and press “Retry”. The Homer server connects to the TV and waits for Home Assistant — up to a minute.
  3. “Place in room” → room.

Bind the camera to the TV on the plan, and in the walk the picture shows on its screen. This camera doesn't live in go2rtc: both the frame and the stream come from the Homer server itself. “Remove” deletes it.

go2rtc video server ​

Without go2rtc, Xiaomi cameras and video from all cameras except the TV over ADB don't work. The “Video server (go2rtc)” block on the web:

  • “responding” / “not responding” and the address where the Homer server looks for it. “(set here)” — the address was entered in the card.
  • An address field like http://host:1984 → “Save”.
  • “Revert (…)” — go back to the address from the installation settings.

If go2rtc doesn't respond, the Xiaomi block says so: “The go2rtc video server is not responding at …”.

WARNING

Xiaomi cameras send the stream over UDP in a way that Docker NAT drops. go2rtc must run in the host network for them (network_mode: host).

Camera on the plan ​

After placing, the camera stands in the room. Drag it into place in plan editing.

The screen with the latest frame — next to the camera on the flat plan, in the room card and above the camera in the walk. The frame is taken every 10 minutes and on every view. In the walk you only see cameras of the room you're standing in; a camera is shown as one card, and tapping its screen opens the camera window — in the Homer World walk too.

The same frames are shown on the Homer Node home tab — only from the home network and only on a node of your own home.

Camera offline — red frame, dimmed picture, “Offline · last online …” in the window, “offline” in the room card. The Homer server retries such a camera every minute.

Camera window ​

Tapping a camera — on the plan, in 3D, in the walk or in the room list — opens the viewer.

WhatHow
Live video with soundSound — with the speaker button. If the stream with sound drops twice, the viewer switches to the regular one
Full screenThe button in the corner. Full screen uses the camera's main stream in full resolution (on Xiaomi 2304×1296); no decoder for its codec — the regular stream
ZoomPinch, mouse wheel, double tap; drag with a finger
Rotate the pictureA quarter turn; works even when screen rotation is locked
Pan the cameraArrows — pan-tilt cameras only
“Snapshot”In full resolution. The app saves it to the gallery (Pictures/Homer), the web downloads a file
The “Recording” tabOnly for a camera the recording node records, and only for the owner. See below

Viewing, panning and snapshots are written to the home log.

Event notifications and recording are set up only by the home owner. Admins and editors don't see these buttons; the app says so: “Event notifications and camera recording are set up by the home owner”.

Record 24/7 ​

A camera is recorded by a home computer with Homer Node and the “Camera recording” role: recordings go to a folder on that computer, and Frigate finds events in them. One camera is about 3–4 GB a day. Windows with WSL is required.

Turn on — in the camera window (owner only), the “⏺ Record 24/7” button. It is always visible, even for a camera without events; while there are none, the text under it says that person, motion and noise alerts appear once the recording node starts recording the camera. Below the button — what's going on with the recording now:

LabelMeaning
“Needs a computer with Homer Node and the “Camera recording” role”The home has no recording node
“The recording node is recording: events come from the recording, with a clip”The camera is being recorded
“The recording node is offline — the camera is not being recorded”The node is off or unreachable; a cloud camera says “events come from the camera cloud” instead

Watch — the “Recording” tab in the camera window: a timeline for 24 h, 6 h, 1 h or 15 min, a day picker, events on the timeline (people, dogs, cats, barking, cars), back and forward 10 seconds, “+1 min”, full screen. Where there's no recording — “No recording after this”; for a day without recording — “No recording for this day. Events remain — their clips are kept longer”. A browser without an H.265 decoder shows the recording in one-minute chunks.

How long to keep — in the “Cameras” card, the “Recording” block: “Keep continuous” for so many days or “do not keep”, “Events” — days, separately. The same block lists the recording nodes with their camera count (and “on GPU” if the node has an NVIDIA card) and “Open in Frigate”. A node with nothing to record doesn't run Frigate — instead of the button there's a hint to turn on recording in the camera window.

Person, motion and noise alerts from the recording come only from your own node: the Homer server doesn't give a friend's node the home's MQTT login, so it can record but can't notify.

Events ​

The camera notifies the owner in the home's Telegram group and with a notification in Home Assistant. You don't need to open the app for this.

In the camera window (owner only) — “Notify me in Telegram”:

EventWhen
Person in viewThe camera recognized a person. Motion from the same event stays quiet then
MotionMotion in view
NoiseA loud sound

Everything is off by default.

The message is a clip of about 10 seconds with sound. For a camera the recording node records — the clip of the event itself from the recording. For Xiaomi — the clip from the Mi Home cloud, for Yandex — from the loop recording, starting 3 seconds before the event. If that fails — a few seconds of the live stream or a frame.

For cloud cameras the message arrives 10–30 seconds after the event: it goes through the cloud.

No group — no messages

If no Telegram group is linked to the home, under the switches you'll see “… no Telegram group — messages will not be sent”. To link one: in the app Settings → Home → Telegram, on the web Settings → Notifications → Telegram.

For Xiaomi the feed gets only what's enabled in the Mi Home alerts themselves. If person detection is off there, there's nothing to report.

Sensitivity ​

Expands under the events when there are too many messages.

SettingOptions
At most once per1, 5, 15, 30 minutes, 1 hour (5 minutes by default) — per camera event
Noise — onlyAny, Noticeable, Loud, Very loud — by the clip's peak loudness
WhenAlways, At night 22–08, Daytime 08–22, Custom — “from” and “to”, can cross midnight. On the web — “Always”, “At night” and time fields
Only ifAlways, Someone is home, Nobody is home — see below
Camera itself: motion, soundLow, Medium, High — Xiaomi only. Written to the camera itself: it triggers less often at all
Alarm at most every1–30 minutes — Xiaomi only, also written to the camera

A Yandex camera exposes no sensitivity of its own — only the Homer server filters.

“Someone is home” condition ​

“Home” means at least one of the chosen devices is on the home network. The Homer server gets the device list from the router.

  1. “Only if” → “Someone is home” or “Nobody is home”.
  2. Pick devices from the list (online ones first) or enter a name, IP or MAC → “Add”.
  3. The window shows what the condition thinks right now: “Now: someone is home” or “Now: nobody is home”.

A sleeping phone drops off the network for a minute, so a device counts as home for 10 more minutes after it disappears.

LabelMeaning
“No router connected to the Homer server — the condition doesn't apply, messages always go”The router isn't set up
“The router does not respond — while it's silent, messages always go”The router is unreachable

A camera that went quiet because of the router is worse than an extra message, so without a router answer messages go as if there were no condition.

For the installer: connect the router

The Homer server asks the GL.iNet router over SSH with the command ubus call gl-clients list. The key is in the server's volume (/data/presence/id), and the router lets this key run only this one command. The router address is PRESENCE_SSH in compose.