import type { API, DynamicPlatformPlugin, HAP, Logging, PlatformAccessory } from 'homebridge';
import type { devicesConfig, RainbirdPlatformConfig } from './settings.js';
import { RainBirdService } from 'rainbird';
/**
 * HomebridgePlatform
 * This class is the main constructor for your plugin, this is where you should
 * parse the user config and discover/register accessories with Homebridge.
 */
export declare class RainbirdPlatform implements DynamicPlatformPlugin {
    accessories: PlatformAccessory[];
    readonly api: API;
    readonly log: Logging;
    protected readonly hap: HAP;
    config: RainbirdPlatformConfig;
    platformConfig: RainbirdPlatformConfig;
    platformLogging: RainbirdPlatformConfig['logging'];
    platformRefreshRate: RainbirdPlatformConfig['refreshRate'];
    platformPushRate: RainbirdPlatformConfig['pushRate'];
    platformUpdateRate: RainbirdPlatformConfig['updateRate'];
    debugMode: boolean;
    version: string;
    constructor(log: Logging, config: RainbirdPlatformConfig, api: API);
    /**
     * This function is invoked when homebridge restores cached accessories from disk at startup.
     * It should be used to setup event handlers for characteristics and update respective values.
     */
    configureAccessory(accessory: PlatformAccessory): void;
    /**
     * Verify the config passed to the plugin is valid
     */
    verifyConfig(): void;
    private initialiseConfig;
    /**
     * This method is used to discover the your location and devices.
     */
    private discoverDevices;
    private createIrrigationSystem;
    private createLeakSensor;
    FirmwareRevision(rainbird: RainBirdService, device: devicesConfig): Promise<string>;
    createZoneValve(device: devicesConfig, rainbird: RainBirdService, zoneId: number): Promise<void>;
    removeZoneValve(device: devicesConfig, rainbird: RainBirdService, zoneId: number): void;
    createContactSensor(device: devicesConfig, rainbird: RainBirdService, zoneId: number): Promise<void>;
    removeContactSensor(device: devicesConfig, rainbird: RainBirdService, zoneId: number): void;
    createProgramSwitch(device: devicesConfig, rainbird: RainBirdService, programId: string): Promise<void>;
    createStopIrrigationSwitch(device: devicesConfig, rainbird: RainBirdService): Promise<void>;
    createDelayIrrigationSwitch(device: devicesConfig, rainbird: RainBirdService): Promise<void>;
    externalOrPlatform(device: devicesConfig, accessory: PlatformAccessory): Promise<void>;
    externalAccessory(accessory: PlatformAccessory): Promise<void>;
    unregisterPlatformAccessories(existingAccessory: PlatformAccessory): void;
    getPlatformLogSettings(): Promise<void>;
    getPlatformRateSettings(): Promise<void>;
    getPlatformConfigSettings(): Promise<void>;
    /**
     * Asynchronously retrieves the version of the plugin from the package.json file.
     *
     * This method reads the package.json file located in the parent directory,
     * parses its content to extract the version, and logs the version using the debug logger.
     * The extracted version is then assigned to the `version` property of the class.
     *
     * @returns {Promise<void>} A promise that resolves when the version has been retrieved and logged.
     */
    getVersion(): Promise<void>;
    /**
     * Validate and clean a string value for a Name Characteristic.
     * @param displayName - The display name of the accessory.
     * @param name - The name of the characteristic.
     * @param value - The value to be validated and cleaned.
     * @returns The cleaned string value.
     */
    validateAndCleanDisplayName(displayName: string, name: string, value: string): Promise<string>;
    /**
     * If device level logging is turned on, log to log.warn
     * Otherwise send debug logs to log.debug
     */
    infoLog(...log: any[]): Promise<void>;
    successLog(...log: any[]): Promise<void>;
    debugSuccessLog(...log: any[]): Promise<void>;
    warnLog(...log: any[]): Promise<void>;
    debugWarnLog(...log: any[]): Promise<void>;
    errorLog(...log: any[]): Promise<void>;
    debugErrorLog(...log: any[]): Promise<void>;
    debugLog(...log: any[]): Promise<void>;
    loggingIsDebug(): Promise<boolean>;
    enablingPlatformLogging(): Promise<boolean>;
}
//# sourceMappingURL=platform.d.ts.map