Cameras
How to add a camera to Mirra by address or through Home Assistant, write an alert that puts it on chosen mirrors when the doorbell rings, and work out why a camera rectangle is blank.
Adding cameras and writing camera alerts works on every plan. The Camera widget, which puts a camera permanently on a scene, needs the Home plan or above and belongs to the Home Assistant integration — so it only appears in the scene editor's palette when Home Assistant is switched on for your household, even for a camera you added by address.
What a camera on a mirror is for
Somebody rings the doorbell and a mirror shows them the door for half a minute, then goes back to what it was doing. That is the feature. Nearly everything else in Mirra's camera support exists to stop that happening when it should not — not twice for one press, not for a cat, not at three in the morning on a bedroom wall, and not because a cloud service came back from the dead.
There is a second, quieter use: the Camera widget, which puts a still from a camera on a scene and refreshes it every ten seconds by default. The widget is for a camera you want to glance at. An alert is for a camera you want to be shown.
Two ways a camera gets here
A camera reaches Mirra by one of two routes, and after that nothing downstream can tell them apart. Both appear in the same picker, both can be pointed at by the same alert rule, and a camera you add by address is given an identifier of the form camera.mirra_front_door so a rule written before it existed can still find it.
- By address. You type the camera's own URL into Mirra. No Home Assistant, no account, no cloud — a screen fetches the picture straight off your network.
- Through Home Assistant. Anything Home Assistant can see, a mirror can show. This is the route for a camera that only talks to its vendor's cloud.
- There are two kinds of address: a snapshot address, which is an HTTP or HTTPS URL returning a JPEG, and an RTSP stream, which needs a converter on the screen because no browser can play RTSP.
Mirra has no camera-vendor integrations. Those cameras reach a mirror through Home Assistant, which is maintained by people who follow each vendor's changes for a living — so when a vendor breaks something, the fix arrives there rather than waiting on us.
Adding a camera by address
Most IP cameras publish a snapshot address in their own settings, usually under a heading like ONVIF or HTTP. It looks like http://192.168.1.20/snapshot.jpg. If the camera needs a login, that login almost always goes inside the address itself — user:password@host is what every camera's own settings page prints.
Open Integrations, then Camera alerts
The page is at /integrations/cameras, listed on the Integrations page just under Light rules. Cameras come first on it and alerts second, because you cannot write a rule about a camera the mirror has never heard of.
Press Add a camera
Fill in the name, kind and address
The name is what you will see in every picker afterwards, so Front door rather than Cam 1. Names are kept to 60 characters.
Press Save camera
Mirra checks the shape of the address and refuses one that cannot work — an RTSP camera whose address does not start with rtsp://, or a snapshot camera pointed at something that is not HTTP. It does not try to fetch a picture, so a saved camera is not yet a proven camera.
Check it on a screen
Put the Camera widget on a scene and pick it, or write an alert and ring the bell. This is the step where a wrong password or a wrong path shows itself.
An RTSP camera needs go2rtc on the screen, which the screen installer puts there. No browser can play RTSP, so the screen converts it locally. If the picture never appears on a screen that was set up some time ago, re-run the installer on that screen. A snapshot address needs nothing at all.
Editing and removing one
- Edit reopens the form with the address blank. The stored address is never sent back to your browser, so leaving it blank is how you rename a camera without wiping its login.
- Renaming a camera does not change its identifier. Turning Front door into Front Door would otherwise detach every rule and widget pointing at it, and you would find out the next time somebody rang the bell.
- Removing a camera asks first, and says that any alert pointing at it will stop working. Those rules are deliberately left alone rather than rewritten — a rule that quietly does nothing until you look at it is better than one that has been edited behind your back.
- The list shows each address with the password replaced by dots, so two cameras on the same box can be told apart. A settings page is not a place to put a credential back on screen.
- A camera marked off in the list is not sent to screens at all.
Using a camera Home Assistant already has
Connect Home Assistant and its cameras appear in the same list as the ones you added by address. Nothing else has to be configured: the alert engine, the widget and the rule editor all work on an entity identifier and do not care where it came from.
Connect Home Assistant
Done once, on the Home Assistant page.
Wait for a screen to report
Mirra's servers cannot reach your home network, so the list you pick from is a snapshot pushed up by a screen roughly once a minute. A camera you added in Home Assistant a moment ago will not be there instantly. The Home Assistant page shows when the list was last taken.
Pick it in a rule or a widget
A camera entity that Home Assistant is not offering an access token for cannot be shown at all. That is Home Assistant's side rather than Mirra's, and it usually means the integration behind the camera has not finished setting it up.
Finding out what your cameras will actually give you
Two things about a camera cannot be worked out from inside Mirra: what shape a doorbell press arrives in, and whether Home Assistant can really serve live video for it. Mirra ships a read-only script that answers both against your own installation.
It is a terminal command rather than a page in the portal. It lives in the Mirra source repository at tools/probe-cameras.mjs and has to be run on a machine that can reach Home Assistant — the mirror's Pi is usually the right one.
Make a long-lived access token in Home Assistant
Your profile, bottom-left, then Security, then Long-lived access tokens, then Create token.
Run the script
HA_URL=http://homeassistant.local:8123 HA_TOKEN=… node tools/probe-cameras.mjs — it only reads.
Read the two answers
Candidate triggers first, then every camera in turn.
Revoke the token
- For each candidate trigger it says which of the two shapes it is: a binary sensor whose edge is off going to on, or an event entity whose state is the timestamp of the last press. If both shapes appear in your house, both are handled.
- For each camera it says whether a still arrives and whether a stream actually delivers frames. Home Assistant answers a stream request correctly and then sends nothing when it cannot reach the camera, so frames counted is the only evidence worth having.
- A camera with no access token is reported as such. That one cannot be shown by the widget either.
- Stream: no everywhere costs nothing. Alerts fall back to fast stills, which is what they were built around.
If it cannot connect because the certificate is for a name you are not dialling — normal in a house where Home Assistant has remote access set up but the router will not hairpin — prefix the command with HA_INSECURE_TLS=1. That is reasonable for a read-only probe on a network you own and nowhere else.
The token has full access to your Home Assistant. Pass it in the environment as shown rather than editing it into the file, and revoke it from the same page when you have finished.
Writing an alert
An alert is one sentence: when this trigger fires, show this camera, on these mirrors, for this long.
Every gate in it defaults to no. A new rule names no screens, so it does nothing until you tick some; it starts quiet from 22:00 to 07:00; and the camera is never pre-selected, because a hall mirror showing a bedroom window is how a helpful default becomes a household privacy failure.
Press Add an alert
The button stays disabled until at least one camera exists.
Choose what fires it
Triggered by lists everything that can carry an edge: the Home Assistant entities that can — binary sensors and event entities — and any doorbells you have added to Mirra. A camera you added by address has no motion sensor of its own, so it can be shown by a rule but cannot start one; a Mirra doorbell is the usual answer to that, and needs no Home Assistant at all. See Doorbells. One option has nothing to point at. Shortly before a booked visitor is fired by reception rather than by anything on your network, so the Triggered by list disappears when you choose it — there is nothing to pick.
Choose the camera
The picker starts empty and stays empty until you choose. If you save without one, Mirra answers: Choose a camera to show.
Tick the mirrors
Only the screens you tick will ever receive this camera. A mirror in a bedroom or bathroom is best left unticked.
Set the quiet hours and the timings
Press Save
The named screens are told at once, and so are any screens you have just removed from the rule, so a screen stops acting on it rather than keeping it until its next poll.
Say nothing at all does not consume the gap either. A household asleep has not just been told, and the morning's first press must not be swallowed by one nobody saw.
What happens when one fires
- The camera fills the screen above whatever was on it. Nothing underneath moves, so there is no question of what it goes back to.
- A hairline along the bottom counts down, so a room can see that this will end by itself rather than wondering whether the mirror is stuck.
- A newer alert replaces the one showing rather than stacking on it. Somebody at the door now matters more than motion in the driveway ten seconds ago.
- Every screen you ticked shows it. There is no single elected screen — two mirrors both showing the front door is the point, not a bug.
- Live video gives up after three seconds with no frame and falls back to fast stills. A camera you added by address always shows stills; the live tier is a Home Assistant one.
- In quiet hours with A line of text, no picture, all that appears is a dim label naming the rule, low on the screen, over whatever was already there.
- Pressing Escape dismisses it, on the few screens that have a keyboard. On the rest the timer is the only thing that takes it away, which is why the duration is not optional.
Cameras and the reception desk
A building with a reception desk gets two things from its bookings, and both are guesses rather than facts.
The first happens on its own: when any alert fires and somebody is due at about that time, the picture is captioned "Expecting Priya, 10:00". It is worded as expecting on purpose. Somebody being booked in for ten is not evidence that the person at the door is them, and a receptionist who greets the wrong person by name has been told something false by the screen.
The second is a trigger you choose: Shortly before a booked visitor puts the door camera up about five minutes ahead of the booking, so you can watch somebody arrive. It shows once per booking and then takes itself away like any other alert.
- Only a first name and a time reach a screen. The surname, the company and the email never leave the portal — a lobby screen is read by whoever is queuing in front of it.
- A visitor who is already late does not trigger the camera. The moment worth watching has passed.
- Two cameras pointed at two doors each show once for the same booking.
- Quiet hours, the minimum gap and the hold all work exactly as they do for a doorbell.
The building needs the guestbook switched on for either of these. Without it, reception has nothing to tell the screens and both behave as though no one is ever due.
Why a camera rectangle is blank
A camera showing nothing is usually telling you something, and the wording is the clue. These are the messages Mirra puts in place of a picture.
- Choose a camera — the widget has no camera set. Open the scene and pick one.
- Not connected — a Home Assistant camera on a screen that has lost Home Assistant. A camera added by address never shows this, because it does not need Home Assistant at all.
- … isn't offering a picture — check it in Home Assistant — the entity exists but is not handing out a way in. A camera added by address can show this message too, and when it does the thing to check is the address, not Home Assistant.
- Home Assistant can't reach … — the picture was asked for and did not arrive: a wrong RTSP path, a camera asleep, a firewall in the way, or an RTSP camera on a screen that has no converter. The message clears on its own when the camera comes back, rather than staying accusatory until somebody reloads the screen.
- Nothing at all when an alert should have fired — a camera reporting unavailable declines to show rather than putting a broken frame on a wall. The camera being down should look like nothing happening, not like the mirror is faulty.
- A camera that works when you paste its address into a browser tab and shows nothing on the wall is almost always a credentials problem. Chrome will not send a login embedded in an image address, so the screen pulls it out and sends it as a header — and only Basic authentication is supported, so a camera that insists on digest never produces a frame.
What never leaves your house
- No frame, thumbnail, clip or snapshot ever reaches Mirra's servers. Pictures go camera to screen, on your own network. There is no upload path.
- Nothing is recorded when an alert fires. No log of every approach to the house, no history to scroll, no notification to a phone. Changes to a rule are audited; the firings are not, deliberately — a deduped, pushed log of every arrival is a movement record of your household in somebody's cloud, for a feature whose whole value is local and momentary.
- Only entity identifiers, friendly names and the rules themselves are stored in the cloud.
- A camera's address and password are stored encrypted and sent only to your own paired screens, which are the only things that can reach the camera at all.
- Rules are filtered per screen before they are sent. A mirror you did not tick never receives the rule, and a rule with a corrupt or unreadable screen list is treated as naming nobody rather than everybody.
The consequence is worth being plain about: Mirra cannot show you a camera while you are away from the house. There is no remote view, and building one would mean putting your pictures somewhere we can reach them.
Related
- DoorbellsA link that rings your screens. Set one up in a couple of minutes, point an alert at it, and have the mirror show your door when somebody presses the bell — with or without Home Assistant.
- Home AssistantHow Mirra reaches Home Assistant through a screen on your own network, what it syncs, what it notices, and what each failure message means.
- Every widget there isThe complete list of widgets Mirra ships with, grouped the way the scene editor groups them, with what each one shows and what it needs before it will show anything.
- Screen settingsEvery setting on a screen's own page that belongs to the screen rather than to a scene — its shape, which way up it is, its camera and gestures, the commands you can send it, and unpairing.
- Your dataSet how long Mirra keeps assistant transcripts, presence and the activity log, take a copy of everything held about your household, and close the account for good.
- A screen is blank or showing old informationHow to tell a screen that has lost its connection from one that is doing exactly what its schedule and scenes tell it to, and what to check in which order.
- Integrations: what they are, and turning them onAn integration is an outside source that several widgets draw on — this explains what turning one on and off does, and why Mirra refuses to turn one off while its widgets are still on a scene.