OH man every time I see a company produce such a small board with all these capabilities I wonder how come we have to pay $60 to $120 a sensor when this little $16 device can do almost anything?
Beginning with engineering, just about everything in the product pipeline from conception to market costs money.
My (wise?) uncle once told me that my time is worth money as well and that I should consider my hourly wage when deciding whether to shade tree a job, or just pay someone else to do it.
Now, if that is a hobby that you would do just for fun, that is a different story. But, I suppose it would take me several hours to engineer my own sensors which would make most sensors I pay for more than worth it.
I like the M5Stack NanoC6 -- faster, cheaper, more flash memory than the XIAO. Used it for a Zigbee LIDAR "is the car in the garage or not" sensor:
How stable is your method? Like your vehicle not present vs you walking by it, does that count as vehicle home? This is cool. I've been using esp32s3 for its esp-sr local voice and its almost replaced alexa.
I have 2 of these units, and they work very well at rejecting false positives.
For my purposes, a motion detector would not work, too many people traipse through the garage (there's a refrigerator near the cars). These units just need to make a coarse measurement (e.g., "closer or farther than the height of the hood", which varies for our 2 vehicles) and the Hubitat driver requires a minimum distance delta (e.g., 50mm ~ 2 inches) to register a change (user settable). The ESP32 code allows adjustments as well. Between the code and driver, you can set the amount of time and/or distance change that the processor "sees" before indicating car present/gone. Having said that, if you stand under the LIDAR cone for a minute or two (with my current settings), a false positive will generate, but walking by is not an issue.
My earlier effort with a SparkFun ESP32-C6 Qwiic Pocket board failed because I tried to have WiFi and Zigbee enabled concurrently, and I could not get that to be stable -- each unit kept falling off the Zigbee mesh. So the current code is a "Zigbee mostly" implementation, you have to positively trigger a mode change to WiFi (via the driver, as one way) to do OTA updates. The current code ran fine on the ESP32-C6 Qwiic Pocket, but the cute little NanoC6 was easier to package.