Quick answers
Which sensor type should I buy? A contact (reed) switch checks one position, usually fully closed; a tilt sensor watches the panel angle, which suits sectional doors. Two sensors give you open, closed, and moving instead of one on/off.
Which protocol keeps it cloud-free? Whatever your coordinator already speaks. Zigbee and Z-Wave battery sensors report to your own hub, and wired or MQTT devices stay local by design.
Monitoring or control? They are separate jobs. A sensor only reports state; opening and closing needs its own relay or controller, and the door's built-in safety hardware still has to do its job.
Can one sensor say "moving"? Not on its own. A single sensor has two states, so "moving" comes from two sensors placed at opposite ends of the travel or from the opener's own status.
Will it work without internet? Yes, if the sensor pairs to your local coordinator and the automations run inside Home Assistant. You only need remote access if you want alerts while you are away.
What usually goes wrong? A magnet that is misaligned or too far from the reed switch, a tilt sensor that never settles, or a state that is reported upside down. All three are positioning or configuration issues, not dead hardware.
Which sensor fits a garage door?
Two sensor families cover almost every garage door, and the choice matters more than the brand: a contact switch tells you the door is in one position, while a tilt sensor tells you the panel has moved.
A contact (reed) switch is the traditional option. A magnet rides on the moving door and a reed switch sits on the frame, so the pair makes contact when the door reaches the position you want to watch and breaks it as soon as the door leaves. Mounted at the bottom of the travel, it answers the question most people actually ask: is the garage closed? Mounted at the top, it answers the opposite one. Because it is mechanical and passive, a reed switch is cheap, predictable, and easy to fault-find with a multimeter, but the magnet has to line up with the switch every single time, and a gap that grows with the seasons will turn into phantom states.
A tilt sensor is a small accelerometer board that mounts flat on the top panel. It notices the change in angle when the door rolls up, so it does not care about the frame, the gap, or a perfectly square magnet. That makes it the friendlier option for sectional doors, where the top panel travels a long way before the door is fully open and a cheap frame mount can be awkward to reach. The trade-off is that a tilt sensor is an active device with a battery, and it reports when it wakes up rather than the instant a magnet separates, so its state can lag by a moment.
One sensor can only tell you two things, which is why "moving" is a logic problem, not a hardware one. If you want dashboards that show transitions, plan for two sensors: one that makes at the closed position and one that makes at the fully open position, with a small template that reads "neither sensor is active" as moving and "both are active" as a fault. Two cheap sensors plus logic usually beat one expensive one for this job, and each sensor stays independently useful for troubleshooting.
It is worth deciding early whether the garage needs sensing or watching. A camera pointed at the driveway answers different questions than a door sensor does, and camera-based detection adds a video pipeline, storage, and privacy questions to a problem that a battery sensor can solve on its own. If you are unsure, start with the sensor; you can always add a camera later for a purpose the sensor cannot serve.
Sensor | What it reports | Best for | Main trade-off |
|---|---|---|---|
Contact (reed) switch | One position: at the magnet or away from it | Fully closed or fully open checks | Alignment and gap have to stay consistent |
Tilt sensor | Panel angle change | Sectional doors with awkward frame access | Wakes on change, so the update can lag briefly |
Two sensors plus logic | Open, closed, and moving | Dashboards that show transitions | Twice the mounting and battery upkeep |
Keep it cloud-free by choosing a local path
The cloud-free rule is about the path, not the badge on the box: pair the sensor to a coordinator you own and let Home Assistant keep the state, so nothing has to call a vendor server before your automations can run.
Zigbee and Z-Wave battery sensors are built for exactly this. They join your coordinator, report state over a local radio, and are read by Home Assistant through the integration you already run for the rest of your devices. Because these sensors sleep most of the time and wake on change, they are the easiest way to put a small battery-powered device on the door and forget about it for months at a time.
Wired and Wi-Fi devices can stay local too, as long as they speak MQTT or expose a local API. An ESP32-class board with a reed switch on a GPIO pin is a common maker build that publishes straight into Home Assistant, and it never touches a cloud account. That path trades a battery for a cable, which is either a non-starter or a relief depending on where your garage sits relative to your server.
The honest trade-off is that local-only means no vendor phone app from the driveway. Remote access becomes your problem, and the usual answer is a VPN back into your own network rather than opening anything to the internet. In exchange you get two things worth having: automations and state that keep working during an internet outage, and no subscription standing between you and a sensor you already paid for.
Mount the sensor so the state is trustworthy
The mounting decides whether the sensor is useful, so the rule is simple: place it where the door's own movement makes and breaks the contact, then prove the state by hand before you commit to any holes.
Before you start, have the sensor and its battery, a small screwdriver or mounting brackets, and a way to see the entity state live — the Home Assistant dashboard on your phone is enough. If you are mounting on metal, keep a little painter's tape on hand for a temporary trial position.
- Decide what you are watching. "Is it closed?" is the default choice. "Is it fully open?" is the alternative.
- Find the position. For a contact switch, mount the reed switch on the frame and the magnet on the door so the two meet at the chosen endpoint. For a tilt sensor, pick a flat spot on the top panel that is level when the door is down and clearly tilted as soon as it starts to move.
- Set the gap and alignment. Keep the magnet within the switch's rated range and square to the switch. A reed switch that closes only at the edge of its range will chatter with every vibration.
- Fix it down. Screws hold best; adhesive pads work on smooth, clean metal, but let the pad set before you test the door.
- Test with the door, not with your hands. Move the door slowly through its full travel and watch the state flip at the point you intended. Then park the door and confirm the state is stable instead of flickering.
- Note the entity ID. You will need the exact entity name when you build the automation, and reading it off the dashboard now saves a trip up a ladder later.
The completion standard is a state that changes within a second or two of the door moving and then holds steady while the door sits still. If it flickers at rest, fix the position or the gap before you write any automation around it.
One limitation is worth repeating here: a single-contact setup knows about one position only. A door that is open ten centimetres and a door that is fully open can look identical to a closed-position sensor, so do not promise yourself "partially open" detection from one reed switch.
Pair the sensor into Home Assistant
Pairing is the easy half: once the sensor joins your coordinator, Home Assistant exposes it as a binary sensor you can name, classify, and automate.
Use the integration that matches your coordinator — ZHA or Zigbee2MQTT for Zigbee, Z-Wave JS for Z-Wave, and your MQTT broker or ESPHome connection for wired builds. Give the entity a name you can read at a glance from the dashboard, and set a suitable device class so the state renders with the right wording instead of a bare on/off. For a contact or tilt sensor, the garage-door device class is the closest fit and makes the entity self-explanatory in cards and automations.
If you only want monitoring, stop there. If you want a cover-style card, you can wrap the same sensor state in a template cover so the dashboard shows the door as open or closed, but leave the open and close commands out until you also have a working control path. A cover entity that appears to offer a button it cannot press is worse than an honest binary sensor.
The first automation worth writing is a stale-open alert: trigger when the sensor reports open, hold that state for a few minutes, then send a notification. A short YAML starting point looks like this:
alias: Garage door open too long
trigger:
- platform: state
entity_id: binary_sensor.garage_door
to: "on"
for: "00:10:00"
action:
- service: persistent_notification.create
data:
title: Garage door
message: The garage door has been open for 10 minutes.Treat the entity ID as a placeholder for your own, and check the run in the automation trace rather than trusting that it fired. If your Home Assistant version uses slightly different automation keys, the automation editor's YAML view will tell you immediately.
Automations worth having, and one to be careful with
The automations that earn their place are the ones that answer a question you actually have, and the most useful one by far is "did I leave it open?"
An open-too-long notification is the workhorse: it covers the school run, the evening, and the trip you forgot about. A nightly check that tells you the state of the door before bed is the second most useful, and it costs nothing to add. A history graph or a simple state badge rounds things out when you want to see how often the door runs, which is also a quiet health check on the sensor itself.
The one to think hard about is automatic closing. A sensor tells you where the door is; it cannot see a child, a bicycle, or a cat in the doorway, and it cannot feel an obstruction. Home Assistant can only close what your hardware lets it close, and the door's own safety reversal has to be intact and tested for that job. If you have not verified that hardware behaviour, keep the closing action manual and use the sensor for alerts instead.
When the state looks wrong
Most sensor problems are one of four things: alignment, timing, radio, or inverted logic — and you can tell them apart from how the state misbehaves.
- Stuck on open while the door is closed: the magnet is out of range or off-centre, or a tilt sensor has not settled back to level. Move the pair closer, square it up, and retest by hand.
- Flickering or phantom openings: the reed switch is sitting at the edge of its working range and vibration tips it over. Tighten the gap and re-aim, then add a short hold time before the automation reacts.
- Late updates: battery sensors sleep and report on a change, so a state that trails the door by a moment is normal. A very long delay points at a low battery or a weak route back to the coordinator.
- Backwards states: the sensor is reading inverted for your placement. Swap the meaning in your dashboard or template, or physically flip the mount, whichever is less work.
- Missing entirely: nothing paired, or the sensor dropped off the mesh. Re-pair close to the coordinator and confirm the entity appears before remounting.
Frequently asked questions
Does a garage door sensor work with any opener? Yes. The sensor is mounted on the door and the frame, so it does not care which opener moves the door, and it works even on a manual door.
Should I choose Zigbee or Z-Wave? Take what your coordinator already runs best. Both are local, both have battery sensors, and a sub-GHz protocol can be a calmer choice in a garage where 2.4 GHz is crowded by Wi-Fi and cameras.
Can I use a Wi-Fi sensor instead? Only if it exposes local MQTT or a local API. A Wi-Fi device that can only be read through a vendor account is not cloud-free, no matter how it connects.
Will the battery die at the worst time? Battery life depends on how often the sensor wakes and reports, so check the device's own figures. A low-battery alert and a spare battery in the drawer solve it more reliably than guessing.
Can Home Assistant close the door for me? Only with a control relay and a tested safety reversal. Until that is verified, use the sensor for alerts and leave closing to a human.
Can it tell me the door is partly open? Not with one contact or tilt sensor. Continuous position needs a different measuring device or several sensors placed at the positions you care about.
How ConnectedCasa approached the same job
ConnectedCasa documents a sectional garage-door monitor built from contact and vibration sensors rather than camera AI, and the monitor reports open, closed, and moving states from those physical sensors. That is the pattern this guide follows: pick sensing that matches the question, keep the state local, and skip the video pipeline when all you need is a state. For a self-hoster, the useful part is that a monitoring build can start with one sensor and grow into a two-sensor setup without changing the rest of the house.

Felo product screenshot.
Where to start
Start with one sensor on the closed position, confirm the state is stable for a week, and then add the alert automation. Once that is boring, add the second sensor for open and moving states, because the first one will already have taught you where the mounting is awkward and how the radio behaves in your garage. The final test is the one that matters: pull the internet cable and watch the door — if an open door still reaches you by notification, the build is genuinely local.


