Erst mal möchte ich empfehlen, den Broker und das Thing neu anzulegen,
d72ce1a115 ist einfach keine sinnvolle ID. Eine sprechende ID wäre z.B. mosquitto, das ergäbe dann für den Broker
mqtt:broker:mosquitto. Und für den Thermostaten ergäbe sich z.B.
mqtt:topic:mosquitto:heater_1, was dann auch den Bezug einfacher macht.
Die ID der Channel sollte nach Möglichkeit keine Redundanz im Namen haben, z.B.
mqttschlafzimmerheatercurrent_heating_setpoint ist ja nur der letzte Teil der UID, vollständig (mit der Thing UID zusammen) ergibt sich
mqtt:topic:mosquitto:heater_1:mqttschlafzimmerheatercurrent_heating_setpoint, womit mqtt, heater und heating komplett unnötig sind. Ob schlafzimmer an dieser Stelle sinnvoll ist, ist auch nicht so ganz sicher (stell Dir vor, Du tauschst mal Module untereinander aus, z.B. weil Du ein moderneres Modul als Ersatz für ein defektes nachkaufst, dieses dann aber gerne in einem bestimmten Raum einsetzen willst). Du könntest aber den Raum zur Not auch in der Thing UID mit einbauen, also statt heater_1 z.B. heaterSchlaf. Das ergäbe dann z.B.
mqtt:topic:mosquitto:heaterSchlaf:setpoint. Solange es sich nicht um ein Klimagerät handelt (dann wäre heater verkehrt...) erscheint es mir nicht sinnvoll, setpoint noch explizit mit current_heating aufzublähen. Was willst Du denn sonst an einem Thermostaten setzen?
qos solltest Du erst zum Schluss setzen, wenn überhaupt. Es kann gute Gründe geben, qos zu setzen, aber während der Entwicklung ist sowas irrelevant.
postCommand darf nicht auf true gesetzt werden! Es geht dabei darum, dass eine
ankommende Nachricht von openHAB als Befehl gewertet wird. Stattdessen möchtest Du unbedingt

dass auch die Solltemperatur in °C angezeigt wird, und noch viel wichtiger, openHAB sollte auch Änderungen außerhalb openHAB mitbekommen, Du brauchst also das stateTopic.
Sollte dann etwa so aussehen:
Code: Alles auswählen
UID: mqtt:topic:mosquitto:heaterSchlaf
label: Schlafzimmer Heizung
thingTypeUID: mqtt:topic
configuration:
payloadNotAvailable: offline
payloadAvailable: online
transformationPattern: JSONPATH:$.state
availabilityTopic: zigbee2mqtt/schlafzimmer.heater/availability
bridgeUID: mqtt:broker:mosquitto
channels:
- id: local_temperature
channelTypeUID: mqtt:number
label: "Temperatur ist"
description: ""
configuration:
unit: °C
stateTopic: zigbee2mqtt/schlafzimmer.heater
transformationPattern: JSONPATH:$.local_temperature
- id: setpoint
channelTypeUID: mqtt:number
label: "Temperatur soll"
description: ""
configuration:
commandTopic: zigbee2mqtt/schlafzimmer.heater/set
stateTopic: zigbee2mqtt/schlafzimmer.heater
transformationPattern: JSONPATH:$.current_heating_setpoint
unit: °C
min: 5
formatBeforePublish: "{\"current_heating_setpoint\": %s}"
max: 30
Ungetestet, ich habe keine solchen ZigBee Komponenten.
Was die LAbel betrifft: Die sind dafür da, dass Du in der Oberfläche siehst, was der Channel/das Thing macht.
Und formatBeforePublish: Vermutlich musst Du die Anführungszeichen mittels \ escapen...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet