### What happened?
When setting the temperature from Home Assistant, Zigbee2MQT…T tries to write to the manufacturer-specific attribute 0x4003 (attribute 16387) with manufacturer code 4151, which fails with Status 'INVALID_VALUE' on newer Eurotronic Spirit firmware versions (at least that's what claude.ai claims.)
### What did you expect to happen?
Temperature changes from Home Assistant should work correctly, as they do when setting occupied_heating_setpoint directly via MQTT.
### How to reproduce it (minimal and precise)
1. Pair Eurotronic Spirit Zigbee (SPZB0001) with Z2M
2. In Home Assistant, change the temperature via the climate entity
3. Observe error in Z2M logs
### Zigbee2MQTT version
2.7.0
### Adapter firmware version
20240710
### Adapter
SONOFF Zigbee 3.0 USB-Dongle Plus | ZBDongle-P
### Setup
Docker on OpenMediaVault
### Device `database.db` entry
{"id":29,"type":"EndDevice","ieeeAddr":"0x00158d00032f7de6","nwkAddr":56685,"manufId":4151,"manufName":"Eurotronic","powerSource":"Battery","modelId":"SPZB0001","epList":[1],"endpoints":{"1":{"profId":260,"epId":1,"devId":769,"inClusterList":[0,1,3,513,25,10],"outClusterList":[0,1,3,4,513,25,10],"clusters":{"hvacThermostat":{"attributes":{"16386":1,"16387":2100,"16392":1,"localTemp":1650,"pIHeatingDemand":203,"occupiedHeatingSetpoint":2100,"unoccupiedHeatingSetpoint":1600}},"genPowerCfg":{"attributes":{"batteryPercentageRemaining":1,"batteryAlarmState":1}}},"binds":[{"cluster":1,"type":"endpoint","deviceIeeeAddress":"0x00124b001949b2b5","endpointID":1},{"cluster":513,"type":"endpoint","deviceIeeeAddress":"0x00124b001949b2b5","endpointID":1}],"configuredReportings":[{"cluster":513,"attrId":0,"minRepIntval":0,"maxRepIntval":3600,"repChange":10},{"cluster":513,"attrId":8,"minRepIntval":0,"maxRepIntval":3600,"repChange":10},{"cluster":513,"attrId":18,"minRepIntval":0,"maxRepIntval":3600,"repChange":10},{"cluster":513,"attrId":20,"minRepIntval":0,"maxRepIntval":3600,"repChange":10},{"cluster":513,"attrId":16387,"minRepIntval":0,"maxRepIntval":3600,"repChange":25,"manufacturerCode":4151},{"cluster":513,"attrId":16392,"minRepIntval":0,"maxRepIntval":3600,"repChange":1,"manufacturerCode":4151},{"cluster":1,"attrId":33,"minRepIntval":3600,"maxRepIntval":65000,"repChange":1}],"meta":{}}},"appVersion":22,"stackVersion":5,"hwVersion":35,"dateCode":"20191014","swBuildId":"22190930","zclVersion":2,"interviewCompleted":true,"interviewState":"SUCCESSFUL","meta":{"configured":1372617476},"lastSeen":1764864292754}
### Debug log
**Debug log**
`[2025-12-04 16:55:38] error: z2m: Publish 'set' 'current_heating_setpoint' to '0x00158d00032f7de6' failed: 'Error: ZCL command 0x00158d00032f7de6/1 hvacThermostat.write({"16387":{"value":1000,"type":41}}, {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":0,"reservedBits":0,"manufacturerCode":4151,"writeUndiv":false}) failed (Status 'INVALID_VALUE')'`
### Notes
This happens to all three of my devices. Another one from a different brand works normal.
Sending occupied_heating_setpoint directly via MQTT works perfectly:
```
{
"topic": "zigbee2mqtt/0x00158d00032f7de6/set",
"payload": "{\"occupied_heating_setpoint\": 21.0}"
}
```
This successfully updates the thermostat without errors.
`[2025-12-04 16:57:36] info: z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/0x00158d00032f7de6', payload '{"battery":0,"battery_low":true,"child_lock":"UNLOCK","current_heating_setpoint":21,"error_status":1,"last_seen":"2025-12-04T16:57:36+01:00","linkquality":61,"local_temperature":16.5,"local_temperature_calibration":null,"mirror_display":"OFF","occupied_heating_setpoint":21,"pi_heating_demand":3,"running_state":"idle","system_mode":"auto","trv_mode":null,"unoccupied_heating_setpoint":16,"update":{"installed_version":-1,"latest_version":-1,"state":null},"valve_position":null}'`