Topaz
It seemed like my thermostat didn't know when to shut itself off. For example, I would set it to 69°F and it would correctly cool until that temperature. However, it would just... continue to cool forever until it reached thermodynamic equilibrium with the rest of the apartment complex (around 62°F) which was way to cold for me and my cat 🐱.
After talking to customer support and getting no help (both from the company that builds the thermostats AND my apartment complex) I decided to just do some research on the thermostat to see if I could update the firmware or fix it or something. I did stumble upon some great information that showed they had a public API that I could request access to and then use that to control thermostats connected to my account 😈 so naturally I used this as an excuse to build something.

Initially I was going to just hardcode some settings on a cron but then I figured my roommate would be bothering me a lot whenever she needed to update the temperature. Because of that, I made a pretty simple frontend that would let you create automations for temperature ranges at specific dates and times.
Then, you could easily see a list of all your automations across different thermostats (if you're rich and own a bunch of different ones I guess? Idk the API had a concept of "locations" and every device would belong to a "location") and you could also edit/delete or enable/disable them.
Overall this entire system was overkill because my roommate still asks me to change the thermostat even though I created an IAM role for her to access the app and everything :(


As usual, I'm a sucker for data collection so I've also been recording the thermostat state every 3 minutes since I launched the app. This includes information like the set temperature range, the actual temperature, marks at which the thermostat setting was changed, etc.
The pattern that it creates is very interesting. It's pretty clear that the thermostat is not doing any sort of internal PID calculation to decide when to stop, which is why my system has to take over every 10 minutes or so and manually change the settings.
The overall downside to this approach is it's probably not the best for the health of the thermostat. However, I rent and I did ask the apartment complex if I could do this and they basically said "whatever." If the thermostat breaks I will need to replace it with my own money but realistically this kind of use for a year shouldn't be too bad.
I think one optimization I may do is implementing an actual PID rather than just a buffer range. Right now, the API for this specific thermostat (not naming names just incase) only allows me to fetch the status at a rate of 1 request every 3 minutes. Because of this, it's very often the case that it becomes too cold too quickly because of the lag time for updating the settings.
Instead of this, I can generalize the speed at which the temperature increases/decreases into a series of transfer functions that would allow me to better predict the temperature without waiting for the next ping. I started trying to model this out on MATLAB but after a couple hours I figured it was a bit overkill for now. Next time I'm bored I'll probably spend way more time on it 😀.

Overall a fun project fixing frankly a very very minor inconvenience. If you have a [redacted 😶] thermostat and are having this same issue, reach out to me so I can fix it for you too.