UNPKG

homebridge-z2m

Version:

Expose your Zigbee devices to HomeKit with ease, by integrating Zigbee2MQTT with Homebridge.

79 lines 3.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isAvailabilityEnabledGlobally = isAvailabilityEnabledGlobally; exports.getAvailabilityConfigurationForDevices = getAvailabilityConfigurationForDevices; /** * Check if availability is configured. Based on utils.isAvailabilityEnabledForEntity from Zigbee2MQTT code base. * @param config config part of the object published to bridge/info * @returns True if availability is configured */ // biome-ignore lint/suspicious/noExplicitAny: config parsing function needs to accept any input function isAvailabilityEnabledGlobally(config) { const availabilityEnabled = config.availability || config.advanced?.availability_timeout; if (!availabilityEnabled) { return false; } let passList = config.advanced?.availability_passlist ?? []; passList = passList.concat(config.advanced?.availability_whitelist ?? []); // If a pass list is defined, availability cannot be considered globally enabled. return passList.length === 0; } /** * Check if availability is explicitly enabled or disabled for any devices. * Based on utils.isAvailabilityEnabledForEntity from Zigbee2MQTT code base. * @param config config part of the object published to bridge/info * @param logger BasicLogger */ // biome-ignore lint/suspicious/noExplicitAny: config parsing function needs to accept any input function getAvailabilityConfigurationForDevices(config, logger) { const result = getAvailabilityFromDeviceConfigurations(config, logger); // Also check availability_passlist, availability_blocklist, availability_whitelist and availability_blacklist. if ('advanced' in config) { let passList = config.advanced.availability_passlist ?? []; passList = passList.concat(config.advanced.availability_whitelist ?? []); if (passList.length > 0) { // Add all entries from pass list to result.enabled for (const device of passList) { _logAvailabilityConfigForDevice(logger, device, true, 'pass list'); result.enabled.push(device); } } else { // Block list only used if pass list is not defined. let blockList = config.advanced.availability_blocklist ?? []; blockList = blockList.concat(config.advanced.availability_blacklist ?? []); for (const device of blockList) { _logAvailabilityConfigForDevice(logger, device, false, 'block list'); result.disabled.push(device); } } } return result; } // biome-ignore lint/suspicious/noExplicitAny: config parsing function needs to accept any input function getAvailabilityFromDeviceConfigurations(config, logger) { const result = { enabled: [], disabled: [], }; if ('devices' in config && typeof config.devices === 'object') { for (const device of Object.keys(config.devices)) { if (config.devices[device].availability !== undefined) { const name = config.devices[device].friendly_name ?? device; if (config.devices[device].availability === false) { _logAvailabilityConfigForDevice(logger, name, false, 'device config'); result.disabled.push(device); } else { _logAvailabilityConfigForDevice(logger, name, true, 'device config'); result.enabled.push(device); } } } } return result; } function _logAvailabilityConfigForDevice(logger, device, enabled, source) { logger?.debug(`Availability feature is ${enabled ? 'enabled' : 'disabled'} for device '${device}' (via ${source})`); } //# sourceMappingURL=configHelpers.js.map