I’m the author of the esphome bedjet component linked above, which is still pending code review so has not merged yet. I’ve been using it for the last few months and it has been working great so far. I use automations linked with my sleep-tracking app’s MQTT support, to start warming the bed when my sleep tracking app sends its “get ready for bed soon” event, and when the app enters the “smart wakeup” period, it switches the BedJet from heat to cool, as an incentive to get up.
The bad news is, it seams the bedjet can only talk to one device at a time, so I cannot use home assistant and the mobile app.
This is true as a side effect of the way BLE GATT servers work, unfortunately. To allow an easy way to work around that, I added documentation specifically to call this out and to add a recommended workaround by adding a ble_client switch device, which allows you to enable/disable the BLE client in the esphome integration. That lets you turn off a switch that effectively disconnects the ESP32 from the BedJet, thus allowing the app to function normally. When you’re done with the app, you can close it and then toggle the switch back on, which will reconnect the ESP device.
For what it’s worth though, I tried to make sure that the esphome component can do most of what I need it to do, and therefore I no longer miss having the ability to use the app, because I haven’t had a need to open the app since I fixed a BLE notification bug that was causing major issues with connection stability. After fixing that, and setting up my automations the way I want, I do not miss having the app
Would be great to use a low-cost ESP32 that could easily do other tasks too (bed occupancy sensor, etc.).
Something simple like an occupancy sensor might work ok. It’s worth pointing out though that the ESP32 is somewhat limited by flash size and memory. In my house, I have a single ESP32 that talks to 2 separate BedJets, and that works okay because it only has to include the bedjet component once and then sets up 2 connections with the single component.
But it starts to run into problems when you try to upload new firmware to the ESP, because of the fact that the BLE client is pretty resource intensive, especially while receiving rapid BLE notifications – the firmware times out mid-upload if 2 clients are connected at the same time.
I have a workaround for that which is also documented in the bedjet component docs at the link above, that suggests adding an esphome ota.on_begin
automation that will disable the BedJet clients when a firmware upload begins. That has solved the ESP overloading issues for me when uploading the new firmware. I bring that up, because it highlights the limitations of the ESP devices, and while it may work with something that uses simple GPIO inputs like the occupancy sensor idea, anything heavier than that may not work properly and may cause intermittent crashes (for example, I don’t think that it would be possible to add MQTT support alongside the bedjet component on a single device, because MQTT is also “heavy”, and both MQTT and BLE client together may not fit on the flash device, let alone runtime resources necessary to accomplish both).