Better temperature control for Aeotec/SPIRIT TRV?

Hello, I have Aeotec zwave TRVs (Eurotronic Spirit) and they keep the target temperature relatively stable within +/- 0.5 C of the target. Unfortunately the valves have a problem that they get stuck open every 8 to 10 hours. There is also the possibility to control the valve positions directly. I was wondering if I can do better to maintain the target temperature?
So far I have tried with simple PID controller, but unfortunately it overshoots the target temperature by a lot. I have tried to tune the PID values with no success so far.

I am currently trying to write a control algorithm myself but I am wondering if somebody has done something similar already? Any good suggestions

As I see the main issues with the algorithm:

  • the thermal inertia of the system – the heating should start before the temperature has dropped to the target, and should stop before it has reached it. The issue is that this value will depend on the thermal losses in the system (indirectly outside temperature)

  • At least in my case I am using municipal heating service and the water temperature is not constant which will influence the heating/cooling time

  • the valve changes should be minimal in order to minimize the battery usage

So can we do better than the integrated controller?