How to automate darts board lights with ESP32
My dartboard has its own light and a score display, both on Tapo smart plugs. I wanted them to turn on when I start throwing and off when I stop, without touching a switch or a phone. The solution is a vibration sensor on the board, an ESP32 running ESPHome, and two Home Assistant automations. Full source: github.com/artosalminen/esp32-vibration-sensor Hardware diymore ESP32-C3 board with a 0.42" OLED. Native USB-C and a built-in 72x40 SSD1306 display. SW-420 vibration sensor module. A spring vibration switch with an LM393 comparator, a sensitivity potentiometer and a digital DO output. Three Dupont jumper wires. A smart power strip for the light and display. I use a TP-Link Tapo P300, which has three individually switchable outlets. Through Home Assistant’s TP-Link Smart Home integration each outlet shows up in Home Assistant as its own switch, for example switch.office_p300_darts_board_light and switch.office_p300_darts_display, the entities used in the automations below. Wiring is three wires: ...
How I Built a Vehicle Cost Comparison Tool That Doesn't Ignore Depreciation
I was replacing a 2014 petrol MPV with a used EV. Along the way I collected insurance quotes, checked the vehicle tax bracket, asked for a battery health certificate, got a trade-in offer, and compared a cash price against a dealer’s financing plan. Somewhere in the middle of all that I wanted one simple thing: a single number telling me what switching would actually cost per year, compared to just keeping the car I already had. ...
How to Resolve Vitest `EMFILE: too many open files` Errors on a High Thread Count Machine
If you’re running your Vitest suite on a high thread count machine—like an 8-core or 16-core development machine—you may encounter a frustrating error that looks like this: EMFILE: too many open files This issue can be cryptic at first, especially when your system doesn’t seem anywhere near running out of resources. But the root cause might not be in your system limits—it could be in your import statements. The Unexpected Culprit: Named Imports from MUI In my case, after hours of digging, I discovered that the error was caused by using named imports from Material UI (MUI) components and icons. These named imports, when used across many test files, were triggering Vitest to open an excessive number of files behind the scenes. ...
How to stream audio in local network with FFMpeg?
Streaming audio locally can be useful for broadcasting live audio to multiple devices or applications within the same network. With FFmpeg, this setup becomes simple, allowing you to stream audio directly from your microphone to any player that supports UDP streaming, like VLC. This guide explains how to set up FFmpeg on Windows, configure a low-latency stream, and tune it for optimal performance. Step 1: Install FFmpeg on Windows To use FFmpeg on Windows, you’ll need to download and install it. Follow these steps: ...
How to Update Nested Array Subdocuments Using Main Document Field with Mongoose
Updating nested array subdocuments based on a field in the main document is a common task when working with MongoDB and Mongoose. Here’s a simple guide and example to help you accomplish this. Plan Use Model.updateMany() or Model.findOneAndUpdate() to update multiple or a single document. Use an aggregation pipeline ([{}]) as the second argument to reference document fields. Use the $set stage within the pipeline to update the nested array. Use the $$ROOT variable to reference fields from the main document. Example Assume you have a User model where each user has an array of posts, and you want to set each post’s authorName field based on the user’s name field. ...