matterbridge-hass
Version:
Matterbridge hass plugin
45 lines (44 loc) • 2.89 kB
JavaScript
import { airQualitySensor, electricalSensor, powerSource } from 'matterbridge';
import { CYAN, db, debugStringify } from 'matterbridge/logger';
import { AirQuality } from 'matterbridge/matter/clusters';
import { getClusterNameById } from 'matterbridge/matter/types';
import { isValidString } from 'matterbridge/utils';
import { hassDomainSensorsConverter } from './converters.js';
import { getDomain } from './helpers.js';
export function addSensorEntity(platform, mutableDevice, entity, state, airQualityRegex, battery) {
let endpointName = undefined;
const domain = getDomain(entity.entity_id);
if (domain !== 'sensor')
return undefined;
if (airQualityRegex && airQualityRegex.test(entity.entity_id)) {
platform.log.debug(`+ air_quality entity ${CYAN}${entity.entity_id}${db} found for device ${CYAN}${mutableDevice.name()}${db}`);
endpointName = 'AirQuality';
mutableDevice.addDeviceTypes('AirQuality', airQualitySensor);
mutableDevice.addClusterServerIds('AirQuality', AirQuality.Cluster.id);
if (isValidString(state.attributes['friendly_name']))
mutableDevice.setFriendlyName('AirQuality', state.attributes['friendly_name']);
return endpointName;
}
hassDomainSensorsConverter
.filter((d) => d.domain === domain && d.withStateClass === state.attributes['state_class'] && d.withDeviceClass === state.attributes['device_class'])
.forEach((hassDomainSensor) => {
if (hassDomainSensor.deviceType === powerSource && state.attributes['state_class'] === 'measurement' && state.attributes['device_class'] === 'voltage' && !battery)
return;
if (hassDomainSensor.deviceType === electricalSensor && state.attributes['state_class'] === 'measurement' && state.attributes['device_class'] === 'voltage' && battery)
return;
if (hassDomainSensor.endpoint !== undefined) {
endpointName = hassDomainSensor.endpoint;
platform.log.debug(`- sensor domain ${hassDomainSensor.domain} stateClass ${hassDomainSensor.withStateClass} deviceClass ${hassDomainSensor.withDeviceClass} endpoint '${CYAN}${endpointName}${db}' for entity ${CYAN}${entity.entity_id}${db}`);
}
else {
endpointName = entity.entity_id;
}
platform.log.debug(`+ sensor device ${CYAN}${hassDomainSensor.deviceType.name}${db} cluster ${CYAN}${getClusterNameById(hassDomainSensor.clusterId)}${db}`);
mutableDevice.addDeviceTypes(endpointName, hassDomainSensor.deviceType);
mutableDevice.addClusterServerIds(endpointName, hassDomainSensor.clusterId);
if (isValidString(state.attributes['friendly_name']))
mutableDevice.setFriendlyName(endpointName, state.attributes['friendly_name']);
platform.log.debug(`- state ${debugStringify(state)}`);
});
return endpointName;
}