@jelennn below is my node-red flow. It could proberly have been done smarter but it is more or less a what I had in my automation.yaml put directly into node-red.
[{"id":"addb4d7c.36da8","type":"server-state-changed","z":"4d2ad910.e13508","name":"TRV temp change","server":"154dc902.7c20a7","version":1,"entityidfilter":"sensor.eurotronic_eur_spiritz_wall_radiator_thermostat_temperature","entityidfiltertype":"exact","outputinitially":true,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"x":110,"y":340,"wires":[["302d2b0e.b043f4","de11714d.4817f"]]},{"id":"302d2b0e.b043f4","type":"function","z":"4d2ad910.e13508","name":"Real office temp","func":"const globalHomeAssistant = global.get('homeassistant');\n\nmsg.payload = (globalHomeAssistant.homeAssistant.states[\"sensor.eurotronic_eur_spiritz_wall_radiator_thermostat_temperature\"].state - globalHomeAssistant.homeAssistant.states[\"input_number.office_temp_offset_in_degrees\"].state + 1).toFixed(2);\n\nreturn msg;","outputs":1,"noerr":0,"x":380,"y":400,"wires":[["ae0d7e4e.0b49f"]]},{"id":"de11714d.4817f","type":"function","z":"4d2ad910.e13508","name":"Avg office temp","func":"const globalHomeAssistant = global.get('homeassistant');\n\nmsg.payload = ((Number(globalHomeAssistant.homeAssistant.states[\"input_number.office_trv_real_temp\"].state) + Number(globalHomeAssistant.homeAssistant.states[\"sensor.0x00158d00025d8dfd_temperature\"].state)) / 2).toFixed(2);\n\nreturn msg;","outputs":1,"noerr":0,"x":380,"y":460,"wires":[["1e203e93.77f1b1"]]},{"id":"59b9a73b.3e7308","type":"function","z":"4d2ad910.e13508","name":"Set temp offset in degrees","func":"const globalHomeAssistant = global.get('homeassistant');\n\nmsg.payload = (Number(globalHomeAssistant.homeAssistant.states[\"input_number.office_temp_avg\"].state) - Number(globalHomeAssistant.homeAssistant.states[\"input_number.office_trv_real_temp\"].state)).toFixed(2);\n\nreturn msg;","outputs":1,"noerr":0,"x":410,"y":520,"wires":[["d504b39d.062c9"]]},{"id":"30f2088b.9ff0b8","type":"function","z":"4d2ad910.e13508","name":"Set temp offset to match config param","func":"const globalHomeAssistant = global.get('homeassistant');\n\nif ( Number(globalHomeAssistant.homeAssistant.states[\"input_number.office_temp_offset_in_degrees\"].state) > 5)\n{\n msg.payload = 50;\n}\nelse if( Number(globalHomeAssistant.homeAssistant.states[\"input_number.office_temp_offset_in_degrees\"].state) >= 0)\n{\n msg.payload = (Number(globalHomeAssistant.homeAssistant.states[\"input_number.office_temp_offset_in_degrees\"].state) * 10).toFixed(0);\n}\nelse if( Number(globalHomeAssistant.homeAssistant.states[\"input_number.office_temp_offset_in_degrees\"].state) < -5)\n{\n msg.payload = 206;\n}\nelse\n{\n msg.payload = 256 + (Number(globalHomeAssistant.homeAssistant.states[\"input_number.office_temp_offset_in_degrees\"].state) * 10).toFixed(0);\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":450,"y":580,"wires":[["b365558f.414cd8"]]},{"id":"ae0d7e4e.0b49f","type":"api-call-service","z":"4d2ad910.e13508","name":"Set payload","server":"154dc902.7c20a7","version":1,"debugenabled":false,"service_domain":"input_number","service":"set_value","entityId":"input_number.office_trv_real_temp","data":"{\"value\":{{payload}}}","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"msg","mustacheAltTags":false,"x":670,"y":400,"wires":[[]]},{"id":"1e203e93.77f1b1","type":"api-call-service","z":"4d2ad910.e13508","name":"Set payload","server":"154dc902.7c20a7","version":1,"debugenabled":false,"service_domain":"input_number","service":"set_value","entityId":"input_number.office_temp_avg","data":"{\"value\":{{payload}}}","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"msg","mustacheAltTags":false,"x":670,"y":460,"wires":[[]]},{"id":"a71abbaa.9f41c8","type":"server-state-changed","z":"4d2ad910.e13508","name":"Office temp change","server":"154dc902.7c20a7","version":1,"entityidfilter":"sensor.0x00158d00025d8dfd_temperature","entityidfiltertype":"exact","outputinitially":true,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"x":110,"y":420,"wires":[["de11714d.4817f"]]},{"id":"d504b39d.062c9","type":"api-call-service","z":"4d2ad910.e13508","name":"Set payload","server":"154dc902.7c20a7","version":1,"debugenabled":false,"service_domain":"input_number","service":"set_value","entityId":"input_number.office_temp_offset_in_degrees","data":"{\"value\":{{payload}}}","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"msg","mustacheAltTags":false,"x":670,"y":520,"wires":[[]]},{"id":"e6a71036.5de0b","type":"server-state-changed","z":"4d2ad910.e13508","name":"TRV real temp change","server":"154dc902.7c20a7","version":1,"entityidfilter":"input_number.office_trv_real_temp","entityidfiltertype":"exact","outputinitially":true,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"x":120,"y":500,"wires":[["59b9a73b.3e7308"]]},{"id":"14aa7c5d.b0bdb4","type":"server-state-changed","z":"4d2ad910.e13508","name":"Office temp offset change","server":"154dc902.7c20a7","version":1,"entityidfilter":"input_number.office_temp_offset_in_degrees","entityidfiltertype":"exact","outputinitially":true,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"x":130,"y":580,"wires":[["30f2088b.9ff0b8"]]},{"id":"b365558f.414cd8","type":"api-call-service","z":"4d2ad910.e13508","name":"Set payload","server":"154dc902.7c20a7","version":1,"debugenabled":false,"service_domain":"input_number","service":"set_value","entityId":"input_number.office_temp_offset_in_byte","data":"{\"value\":{{payload}}}","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"msg","mustacheAltTags":false,"x":710,"y":580,"wires":[[]]},{"id":"738aadb.35eda54","type":"server-state-changed","z":"4d2ad910.e13508","name":"Send temp offset to TRV","server":"154dc902.7c20a7","version":1,"entityidfilter":"input_number.office_temp_offset_in_byte","entityidfiltertype":"exact","outputinitially":true,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"x":130,"y":660,"wires":[["2f7432d3.506e9e"]]},{"id":"21c71b76.4f65a4","type":"api-call-service","z":"4d2ad910.e13508","name":"Set payload","server":"154dc902.7c20a7","version":1,"debugenabled":false,"service_domain":"zwave","service":"set_config_parameter","entityId":"","data":"{\"node_id\": 9, \"parameter\": 8, \"value\":{{payload}}}","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"msg","mustacheAltTags":false,"x":730,"y":660,"wires":[[]]},{"id":"2f7432d3.506e9e","type":"function","z":"4d2ad910.e13508","name":"Set temp offset to match config param","func":"const globalHomeAssistant = global.get('homeassistant');\n\nmsg.payload = Number(globalHomeAssistant.homeAssistant.states[\"input_number.office_temp_offset_in_byte\"].state).toFixed(0);\n\nreturn msg;","outputs":1,"noerr":0,"x":450,"y":660,"wires":[["21c71b76.4f65a4"]]},{"id":"154dc902.7c20a7","type":"server","z":"","name":"Home Assistant"}]
@ExTrEmE yup. Get the offset and convert it and then send it.