I picked up a couple of the current budget 24GHz mmWave modules (the LD2410D — Hi-Link’s 2025 refresh, cheap and still what most HA/ESPHome guides default to) about a month ago for presence-based lighting. They’re ceiling-mounted in the living room at about 2.7 m.
I’ve spent the last few weeks tweaking parameters — detection distance, dwell time, ignore regions — but I still can’t fully stop the false triggers from my dog: a medium Corgi (~13 kg, short legs, endlessly curious) who pads through that zone a dozen times a day. Every time he passes under the sensor it reads as “occupied” just like a person: lights stay on, climate automations kick in, and the whole “is anyone home” logic gets noisy.
I thought tuning the params would sort it out, but it’s clearly not that simple. So before I keep going in circles, what do you all actually do about pets?
Ignore zones / fixed regions? (I tried shrinking the radius, but at 2.7 m the dog’s still in the cone, and a smaller radius then misses the kids.)
This would involve looking at the sensor history and working out how often it’s triggered by the dog and how often by a person. The Bayesian sensor will give you the % probability that it’s a person and your lighting automations can act accordingly.
The advantage of this is that you can incorporate other observations as well. Time of day, for example - if you go to work, then during work hours it’s more likely to be the dog. Is the TV on (or whatever devices you have in the room)? If yes, then it’s more likely to be a person.
I do this to refine the output of the Bermuda room tracking integration. With enough observations it’s extremely reliable and ignores the dog entirely (although admittedly he doesn’t carry a phone).
Thanks for the detailed suggestion — the Bayesian approach looks like a solid way to reduce false positives without adding more hardware. I read the threshold Bayesian sensor docs and I’m curious about two things: First, does the Bayesian sensor still treat the mmWave as its main input, or are you feeding it multiple sources at once? Second, you mentioned the Bermuda room tracking integration uses BLE triangulation — does that mean everyone in the house needs to carry a phone or BLE tag? My dog obviously doesn’t carry one, but I’m also wondering what happens when a family member walks into the room without their phone.
I already have the sensor ceiling-mounted at about 2.7 m, but because the dog is a medium Corgi (short legs, ~40 cm tall), he still walks through the detection cone. The “aim it high” advice is definitely the first thing I tried.
When you say “get a sensor that supports ignoring pet,” do you mean something like the Aqara FP2 with its AI-based pet filtering, or a different sensor? I haven’t pulled the trigger on one because the reviews seem mixed for small-to-medium dogs. Would love to know which specific sensor you’ve had luck with.
My case is a very simple one as I live alone (with a dog), but you give it as many “observations” as you can - the more the better. This is an example of a “is anyone home” Baysean intended to account for the fact that I may sometimes leave my phone behind - the sensor turns on if all the observations together indicate a >90% chance that someone is in. (An attribute contains the actual percentage chance if you want to use that.)
# ------------------------------------------------------------------------------
# Probably occupied
# ------------------------------------------------------------------------------
# Calculates the probability that the house is occupied, based on guide at
# https://community.home-assistant.io/t/how-bayes-sensors-work-from-a-statistics-professor-with-working-google-sheets/143177
- platform: "bayesian"
name: "Probably occupied"
# Allows name, icon and area to be customized via the UI
# ID generated on https://www.uuidgenerator.net/
unique_id: "75b1232e-5269-4451-88cb-4bbf1d8b1442"
# Estimate of probability before learning about any event
# Normally occupied for 20 hours a day (averaged over week)
prior: 0.83
# 90% threshold to account for forgetting phone etc.
probability_threshold: 0.90
# Observations =================================================================
# The probability of the observation (the sensor state in question)
# given the event (the assumed state of the Bayesian binary_sensor).
observations:
# TV on ------------------------------------------------------------------------
# Binary sensor from template
- platform: "state"
entity_id: "binary_sensor.tv_on"
to_state: "on"
# TV only on when house is occupied - 5 hours a day
prob_given_true: 0.2
prob_given_false: 0.5
# PS5 on ------------------------------------------------------------------------
- platform: "state"
entity_id: "binary_sensor.ps5_on"
to_state: "on"
# PS5 has to be in game for sensor to be on
prob_given_true: 0.05
prob_given_false: 0.075
# Speakers on ------------------------------------------------------------------
- platform: "state"
entity_id: "binary_sensor.speakers_on"
to_state: "on"
# Speakers only on when house is occupied - 2 hours a day
prob_given_true: 0.1
prob_given_false: 0.001
# Movement in house (sensor stays on for 5 min) -------------------------------
# Binary sensor from template
- platform: "state"
entity_id: "binary_sensor.movement"
to_state: "on"
# No movement when house is occupied 6 hours a day (asleep)
prob_given_true: 0.7
prob_given_false: 0.125
# Probably in bed --------------------------------------------------------------
# Binary sensor from template
- platform: "state"
entity_id: "binary_sensor.in_bed"
to_state: "on"
# Sleep elsewhere 2% of time
prob_given_true: 0.4
prob_given_false: 0.01
# Phone is charging ------------------------------------------------------------
- platform: "state"
entity_id: binary_sensor.fp3_is_charging
to_state: "on"
# Phone usually charged overnight when home - for 8 hours a day
prob_given_true: 0.4
prob_given_false: 0.0625
# Phone is on wi-fi ------------------------------------------------------------
- platform: "state"
entity_id: sensor.fp3_wi_fi_connection
to_state: "Malachi_5"
# Phone on wi-fi most of day
prob_given_true: 0.95
prob_given_false: 0.01
# Alarm is armed ---------------------------------------------------------------
- platform: "state"
entity_id: input_boolean.alarm_armed
to_state: "on"
# Alarm usually set when out (4 hours a day) or overnight (8 hours)
prob_given_true: 0.01
prob_given_false: 0.99
# Keys home (Bluetooth LE) -----------------------------------------------------
- platform: "state"
entity_id: device_tracker.keys_bermuda_tracker
to_state: "home"
# 100% of time when home, never when out
prob_given_true: 0.99
prob_given_false: 0.01
# Phone home (Bluetooth LE) ----------------------------------------------------
- platform: "state"
entity_id: device_tracker.fairphone_3_bermuda_tracker
to_state: "home"
# 100% of time when home, never when out, but sometimes forget phone
prob_given_true: 0.95
prob_given_false: 0.01
# Watch home (Bluetooth LE) ----------------------------------------------------
- platform: "state"
entity_id: device_tracker.watch_bermuda_tracker
to_state: "home"
# Watch home/away less accurate than keys/phone
prob_given_true: 0.87
prob_given_false: 0.01
# Watch on wi-fi ---------------------------------------------------------------
- platform: "state"
entity_id: sensor.ticwatch_e3_wifi_connection
to_state: "Malachi_5"
# Watch rarely on wi-fi
prob_given_true: 0.19
prob_given_false: 0.01
# Watch charging ---------------------------------------------------------------
- platform: "state"
entity_id: binary_sensor.ticwatch_e3_is_charging
to_state: "on"
# Watch charges two hours a day
prob_given_true: 0.10
prob_given_false: 0.01
Yes if you use the Bermuda integration on it’s own. I have tags on keys and wallet and a Bayesian sensor for each room which includes other observations. A template picks the room with the highest probability of occupancy. So with phone and watch in the kitchen on charge I still get