fix: Support ppb and ppm for VOC reporting in Home Assistant (#22895)

See https://github.com/home-assistant/core/pull/92973.
This commit is contained in:
Adam Goode
2024-06-03 20:11:40 +02:00
committed by GitHub
parent 6c123c28b3
commit 40ad896114
+10 -7
View File
@@ -850,6 +850,7 @@ export default class HomeAssistant extends Extension {
trigger_count: {icon: 'mdi:counter', enabled_by_default: false},
voc: {device_class: 'volatile_organic_compounds', state_class: 'measurement'},
voc_index: {state_class: 'measurement'},
voc_parts: {device_class: 'volatile_organic_compounds_parts', state_class: 'measurement'},
vibration_timeout: {entity_category: 'config', icon: 'mdi:timer'},
voltage: {
device_class: 'voltage',
@@ -885,8 +886,16 @@ export default class HomeAssistant extends Extension {
Object.assign(extraAttrs, {device_class: 'energy', state_class: 'total_increasing'});
}
const allowsSet = firstExpose.access & ACCESS_SET;
let key = firstExpose.name;
// Home Assistant uses a different voc device_class for µg/m³ versus ppb or ppm.
if (firstExpose.name === 'voc' && firstExpose.unit && ['ppb', 'ppm'].includes(firstExpose.unit)) {
key = 'voc_parts';
}
const discoveryEntry: DiscoveryEntry = {
type: 'sensor',
object_id: endpoint ? `${firstExpose.name}_${endpoint}` : `${firstExpose.name}`,
@@ -896,7 +905,7 @@ export default class HomeAssistant extends Extension {
value_template: `{{ value_json.${firstExpose.property} }}`,
enabled_by_default: !allowsSet,
...(firstExpose.unit && {unit_of_measurement: firstExpose.unit}),
...lookup[firstExpose.name],
...lookup[key],
...extraAttrs,
},
};
@@ -908,12 +917,6 @@ export default class HomeAssistant extends Extension {
delete discoveryEntry.discovery_payload.device_class;
}
// Home Assistant only supports µg/m³, not other units like ppb.
// https://github.com/Koenkk/zigbee2mqtt/issues/16057
if (firstExpose.name === 'voc' && discoveryEntry.discovery_payload.unit_of_measurement !== 'µg/m³') {
delete discoveryEntry.discovery_payload.device_class;
}
// entity_category config is not allowed for sensors
// https://github.com/Koenkk/zigbee2mqtt/issues/20252
if (discoveryEntry.discovery_payload.entity_category === 'config') {