I usually end up saying "Screw it" and adjust the value under control to remove half the error at each timestep. Surprising how often that's good enough.
Many processes like temperature controls want to settle, you just have to help them out a bit. Applying a full PID algorithm to every control problem is a bit like using TCP/IP to solve every networking problem. It will work, but you'll often do better with a domain-focused solution.
Temperature control problems are only first-order (heat->temperature), so they're much easier to control than a second order system like force->velocity->position.
Many processes like temperature controls want to settle, you just have to help them out a bit. Applying a full PID algorithm to every control problem is a bit like using TCP/IP to solve every networking problem. It will work, but you'll often do better with a domain-focused solution.