I've run PID temperature controllers. These can be setup for modulation. ie if you have a solenoid with a duty cycle, you can say turn it on only for xx seconds, then off. Also the PID allows a lot of control. Proportional = How far are you away from your programmed temp, more heat when its far away, less when it's close. Integral = What is the slope of the temperature over time curve. If it's heading up too fast and will overshoot, then slow down. If its going too slow, speed up. Derivative = What is the area under the temperature/time curve. If it's having more time too cold, the speed it up. If you have been hot too long slow it down.No, I never considered it. I would be interested to see how that is done though.
This should work for any heat cycle. You can auto tune them so it comes up and heats the battery just right, not overshooting it. You can also adjust the P, I, D parameters to shut them down, just using it as a temperature controller and using the duty cycle for modulating the heat. A perfect PID tune will ramp up quickly, slowing down as it approaches the programmed temp, not overshoot the temperature, and not vary by any reasonable temp afterwards. It will perfectly maintain the temperature steady state.
These are the current control systems for many industrial controls.
I use AuberIns. Maybe not this one, but close. Power inputs are almost anything you have. Either SSD control or internal relay. Note: This is the manufacturer that uses industrial temp IC's. At 32F, they stop working and just go to an error state (EEEEEE). I'm currently using this as a feature, knowing the PID will not turn on my propane heat when it's below 32F. It will start working again when the temp is 33F.
https://www.auberins.com/index.php?main_page=index&cPath=1
https://www.auberins.com/index.php?main_page=product_info&cPath=1&products_id=237
Carl