Skip to content

Commit

Permalink
Support ppb and ppm for VOC reporting in Home Assistant
Browse files Browse the repository at this point in the history
  • Loading branch information
agoode committed Jun 3, 2024
1 parent 6c123c2 commit dd677fb
Showing 1 changed file with 10 additions and 7 deletions.
17 changes: 10 additions & 7 deletions lib/extension/homeassistant.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down Expand Up @@ -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}`,
Expand All @@ -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,
},
};
Expand All @@ -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') {
Expand Down

0 comments on commit dd677fb

Please sign in to comment.