Skip to content

Commit 546a5da

Browse files
burmistrzakKoenkk
authored andcommitted
fix: Home Assistant: discover temperature sensor for thermostats (#30804)
1 parent 0ca051a commit 546a5da

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

lib/extension/homeassistant.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -759,6 +759,28 @@ export class HomeAssistant extends Extension {
759759
discoveryEntries.push(discoveryEntry);
760760
}
761761

762+
const localTemperature = (firstExpose as zhc.Climate).features.filter(isNumericExpose).find((f) => f.name === "local_temperature");
763+
const temperatureSensor = allExposes?.filter(isNumericExpose).find((e) => e.name === "temperature" && e.access & ACCESS_STATE);
764+
const localTemperatureSensor = allExposes
765+
?.filter(isNumericExpose)
766+
.find((e) => e.name === "local_temperature" && e.access & ACCESS_STATE);
767+
if (localTemperature && !temperatureSensor && !localTemperatureSensor) {
768+
const discoveryEntry: DiscoveryEntry = {
769+
type: "sensor",
770+
object_id: endpoint ? `${localTemperature.name}_${endpoint}` : `${localTemperature.name}`,
771+
mockProperties: [{property: localTemperature.property, value: null}],
772+
discovery_payload: {
773+
name: endpoint ? `${localTemperature.label} ${endpoint}` : localTemperature.label,
774+
value_template: `{{ value_json.${localTemperature.property} }}`,
775+
...(localTemperature.unit && {unit_of_measurement: localTemperature.unit}),
776+
device_class: "temperature",
777+
state_class: "measurement",
778+
},
779+
};
780+
781+
discoveryEntries.push(discoveryEntry);
782+
}
783+
762784
const currentHumidity = allExposes?.filter(isNumericExpose).find((e) => e.name === "humidity" && e.access & ACCESS_STATE);
763785
if (currentHumidity) {
764786
discoveryEntry.discovery_payload.current_humidity_template = `{{ value_json.${currentHumidity.property} }}`;

test/extensions/homeassistant.test.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1248,6 +1248,34 @@ describe("Extension: HomeAssistant", () => {
12481248
});
12491249
});
12501250

1251+
it("Should discover seperate temperature sensor for thermostat", () => {
1252+
const payload = {
1253+
availability: [{topic: "zigbee2mqtt/bridge/state", value_template: "{{ value_json.state }}"}],
1254+
default_entity_id: "sensor.bosch_rm230z_local_temperature",
1255+
device: {
1256+
identifiers: ["zigbee2mqtt_0x18fc2600000d7ae3"],
1257+
manufacturer: "Bosch",
1258+
model: "Room thermostat II 230V",
1259+
model_id: "BTH-RM230Z",
1260+
name: "bosch_rm230z",
1261+
via_device: "zigbee2mqtt_bridge_0x00124b00120144ae",
1262+
},
1263+
device_class: "temperature",
1264+
object_id: "bosch_rm230z_local_temperature",
1265+
origin,
1266+
state_class: "measurement",
1267+
state_topic: "zigbee2mqtt/bosch_rm230z",
1268+
unique_id: "0x18fc2600000d7ae3_local_temperature_zigbee2mqtt",
1269+
unit_of_measurement: "°C",
1270+
value_template: "{{ value_json.local_temperature }}",
1271+
};
1272+
1273+
expect(mockMQTTPublishAsync).toHaveBeenCalledWith("homeassistant/sensor/0x18fc2600000d7ae3/local_temperature/config", stringify(payload), {
1274+
qos: 1,
1275+
retain: true,
1276+
});
1277+
});
1278+
12511279
it("Should discover devices with cover_position", () => {
12521280
let payload;
12531281

0 commit comments

Comments
 (0)