Had the exact same experience myself with the temperature always bouncing back to 1°C when I switched the heating either on/auto.
The trick here is if the system_mode is off then temperature_setpoint_hold should be off. When system_mode is on then temperature_setpoint_hold should be on. With the key thing being that the temperature_setpoint_hold setting should be toggled on at the same time as the heating switched on or off (see below in automation how one payload is sent with multiple parameters to all being triggered together).
To accomplish this I set up a ‘heating toggle’ automation triggered by three different state changes.
Triggers
State change to ‘heat’
State change to ‘auto’
State change to ‘off’
Label them with trigger id’s so you can use them as part of a choose option.
I then have a choose with three call service (MQTT: Publish) options for each of the triggers.
Choose Options
State change to ‘heat’
Topic - zigbee2mqtt/FRIENDLY NAME/set
Payload - {“system_mode”:“heat”,temperature_setpoint_hold:“1”,occupied_heating_setpoint:“21”}
State change to ‘auto’
Topic - zigbee2mqtt/FRIENDLY NAME/set
Payload - {“system_mode”:“auto”,temperature_setpoint_hold:“1”,occupied_heating_setpoint:“21”}
State change to ‘off’
Topic - zigbee2mqtt/FRIENDLY NAME/set
Payload - {“system_mode”:“off”,temperature_setpoint_hold:“0”}
Change ‘FRIENDLY NAME’ to whatever you have your heating named as.
You can choose whatever occupied_heating_setpoint value you would like as a default which it will automatically go to whenever the heating is switched to On/Auto. When you switch the heating off it will default back to a 1°C as the temperature_setpoint_hold is now false.
If any of that was confusing or you find yourself lost give me a shout and I will happily share my automation code when I am back at home later today.
I am sure there are more elegant/efficient ways of doing this however I have found it working very robustly for my needs and makes the unit act completely as normal operation as if it was directly connected/controlled by the hive hub/system only with now the hub in storage and the Hive app permanently deleted.