UNPKG

matterbridge-hass

Version:
45 lines (44 loc) 2.89 kB
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; }