import { AnsiLogger } from 'node-ansi-logger';
export interface OptionalHistoryParams {
    enableDebug?: boolean;
    enableAutopilot?: boolean;
    enableConfigData?: boolean;
    historySize?: number;
    fileName?: string;
    filePath?: string;
    timerMinutes?: number;
    edge?: boolean;
}
export interface HistoryParams {
    enableDebug: boolean;
    enableAutopilot: boolean;
    enableConfigData: boolean;
    historySize: number;
    fileName: string;
    filePath: string;
    timerMinutes: number;
}
export interface Entry extends ImmediateEntry, AveragedEntry {
    time: number;
    setRefTime?: number;
    immediate?: number;
}
export interface ImmediateEntry {
    time: number;
    status?: number;
    motion?: number;
    contact?: number;
    leak?: number;
    smoke?: number;
    action?: number;
    currentposition?: number;
    targetposition?: number;
    positionstate?: number;
    obstructiondetected?: number;
}
export interface AveragedEntry {
    time: number;
    consumption?: number;
    power?: number;
    voltage?: number;
    current?: number;
    temperature?: number;
    lux?: number;
    humidity?: number;
    pressure?: number;
    airquality?: number;
    voc?: number;
    co?: number;
    co2?: number;
    formaldehyd?: number;
    pm10?: number;
    pm25?: number;
    lqi?: number;
}
export interface HistoryLog {
    firstEntry: number;
    lastEntry: number;
    memorySize: number;
    initialTime: number;
    timeOffset: number;
    resetTotal: number;
    lastEvent: number;
    timesOpened: number;
    fileVersion: string;
    historyVersion: string;
    lastValues: Entry;
    history: Entry[];
    extra: any;
}
export interface Signature {
    tag: number;
    length: number;
    factor: number;
    precision: number;
    bitmask: number;
    entryName: keyof Entry;
}
export interface Tag {
    tag: number;
    length: number;
    factor: number;
    precision: number;
    entryName: keyof Entry;
}
export declare const enum WeatherTrend {
    BLANK = 0,
    SUN = 1,
    CLOUDS_SUN = 3,
    RAIN = 5,
    RAIN_WIND = 12
}
export declare const enum Sensitivity {
    HIGH = 0,
    MEDIUM = 4,
    LOW = 7
}
export declare const enum TemperatureDisplayUnits {
    CELSIUS = 0,
    FAHRENHEIT = 1
}
export interface TlvConfigData {
    field: number;
    length: number;
    name: string;
    data: Buffer;
    updated: boolean;
    value: boolean | number | string;
}
export interface TlvConfigDataField {
    field: number;
    type: number;
    name: string;
}
export declare class History {
    protected log: AnsiLogger;
    protected name: string;
    protected optionalParams?: OptionalHistoryParams | undefined;
    protected params: HistoryParams;
    protected eveEpoch: number;
    protected initialTime: number;
    protected timeOffset: number;
    protected memorySize: number;
    protected firstEntry: number;
    protected currentEntry: number;
    protected lastEntry: number;
    protected fileVersion: string;
    protected historyVersion: string;
    protected resetTotal: number;
    protected lastEvent: number;
    protected timesOpened: number;
    protected configData: Buffer;
    protected tlvConfigDataGet: TlvConfigData[];
    protected tlvConfigDataSet: TlvConfigData[];
    protected firmwareData: Buffer<ArrayBuffer>;
    protected historyLoaded: boolean;
    protected historyDebug: boolean;
    protected historyError: boolean;
    protected historyClosed: boolean;
    protected setRefTime: boolean;
    protected historyWriting: boolean;
    protected forceReloadHistoryStatus: boolean;
    protected forceReloadHistoryRequest: boolean;
    protected deviceOnline: boolean;
    protected addResetTotal: boolean;
    protected addLastEvent: boolean;
    protected addTimesOpened: boolean;
    protected addStatusFault: boolean;
    protected statusFault: number;
    protected addStatusActive: boolean;
    protected statusActive: boolean;
    protected addFakeSwitch: boolean;
    protected signature: Buffer;
    protected sigTable: Signature[];
    protected tags: Tag[];
    protected tagsMap: Map<number, Tag>;
    protected entryNameMap: Map<keyof Entry, Tag>;
    protected historyLog: HistoryLog;
    protected writingTimeout: NodeJS.Timeout | undefined;
    protected historyFile: string;
    protected queueTimeout: NodeJS.Timeout | undefined;
    protected queuedEntries: Entry[];
    protected toAverageEntries: AveragedEntry[];
    protected lastValuesEntry: Entry;
    protected immediateKeys: Array<keyof Entry>;
    protected averagedKeys: Array<keyof Entry>;
    protected lastValueKeys: Array<keyof Entry>;
    protected averageTimer: NodeJS.Timeout | null;
    constructor(log: AnsiLogger, name: string, optionalParams?: OptionalHistoryParams | undefined);
    close(): Promise<void>;
    getInitialTime(): number;
    getTimeOffset(): number;
    getFirstEntry(): number;
    getLastEntry(): number;
    setDeviceOnline(online: boolean): void;
    getLastEvent(): number;
    setLastEvent(): void;
    getTimesOpened(): number;
    addToTimesOpened(): number;
    protected getEntryAddress(entryNumber: number): number;
    protected getEntry(entryNumber: number): Entry;
    protected setEntry(entryNumber: number, entry: Entry): void;
    private tlvConfigDataFields;
    private tlvDataToValue;
    encodeConfigData(tlvConfigData: TlvConfigData[]): Buffer;
    decodeConfigData(buffer: Buffer, tlvConfigData?: TlvConfigData[]): string;
    configDataToString(tlvConfigData: TlvConfigData[]): string;
    setMaxMinTemperature(maxTemperature: number, minTemperature: number): void;
    decodeHistoryStatus(buffer: Buffer): string;
    encodeHistoryStatus(): Buffer;
    historyStatusToString(buffer: Buffer): string;
    decodeHistoryEntry(buffer: Buffer): string;
    encodeHistoryEntry(entryNumber: number): Buffer;
    historyEntryToString(buffer: Buffer): string;
    historyEntriesToString(buffer: Buffer): string;
    decodeHistorySetTime(buffer: Buffer): string;
    encodeHistorySetTime(seconds?: number): Buffer;
    historySetTimeToString(buffer: Buffer): string;
    decodeHistoryRequest(buffer: Buffer): string;
    encodeHistoryRequest(entryNumber: number): Buffer;
    historyRequestToString(buffer: Buffer): string;
    signatureToString(): string;
    addEntry(entry: Entry): void;
    protected addAveragedEntry(entry: Entry): void;
    protected addImmediateEntry(entry: Entry): void;
    private averageTimerStart;
    private averageTimerCallback;
    logHistory(logEntries?: boolean): void;
    readHistoryFile(callback?: (success: boolean) => void): void;
    writeHistoryFile(): void;
    protected entryStringify(entry: object): string;
    diffToString(seconds: number): string;
    secsToDateString(seconds: number): string;
    secsToDateStringSinceEveEpoch(secondsSinceEpoch: number): string;
    now(): number;
    clamp(number: number, min: number, max: number): number;
    round(number: number, precision: number): number;
    getFakeLevel(minLevel: number, maxLevel: number, round?: number): number;
    private secondsSinceMidnight;
    private secondsSinceNoon;
}
