/// <reference types="node" />
import { IGattPeripheral } from "./bluetooth";
import { RadiatorValvesOptions } from "./scanner";
import { StateFieldInfo } from "./valve-state";
export default class RadiatorValve {
    readonly peripheral: IGattPeripheral;
    private readonly options;
    /** Characteristic used to read data from the device. */
    private rx?;
    /** Characteristic used to write data to the device. */
    private tx?;
    private lastSentWakeUpTime;
    private logger;
    constructor(peripheral: IGattPeripheral, options: Readonly<RadiatorValvesOptions>);
    /**
     * Attempts to establish a connection with the device.
     *
     * @param attempt Counts how many attempts have been made so far. For internal use only.
     */
    connect(attempt?: number): Promise<void>;
    /**
     * Closes connection with the peripheral.
     */
    disconnect(): Promise<void>;
    /**
     * Writes data contained in given buffer to the device.
     * Make sure to wait for the message to be fully sent by `await`-ing this
     * method before writing more data.
     *
     * @param data Data to write.
     */
    private write;
    /**
     * Writes a request to the device and waits for the response.
     *
     * @param request Request to send.
     * @returns Response.
     */
    private sendRequest;
    /**
     * Sends Wake Up command to the peripheral and waits for a response.
     */
    requestWakeUp(): Promise<void>;
    /**
     * Requests value of a single field from peripheral's state buffer.
     * @returns Buffer containing the value.
     */
    requestReadField<T>(field: StateFieldInfo<T>): Promise<T>;
    /**
     * Updates the value of a field.
     *
     * @param field Field to update.
     * @param value New value.
     */
    requestWriteField<T>(field: StateFieldInfo<T>, value: T): Promise<void>;
    /**
     * Requests a snapshot of the entire state buffer from the peripheral.
     * @returns Buffer containing the state.
     */
    requestStateSnapshot(): Promise<Buffer>;
    setName(name: string): Promise<void>;
    getName(): Promise<string>;
    getSerialNumber(): Promise<string>;
    setLocked(locked: boolean): Promise<void>;
    getLocked(): Promise<number>;
    getBatteryVoltage(): Promise<number>;
    getTemperatureDeviation(): Promise<number>;
    getCurrentTemperature(): Promise<number>;
    /**
     * Sets the target temperature.
     * It takes up to 9 minutes for the valve to actually apply
     * the update in case of this field.
     *
     * @param value New target temperature.
     */
    setTargetTemperature(value: number): Promise<void>;
    private getTargetTemperatureField;
    getTargetTemperature(): Promise<number>;
    getMode(): Promise<number>;
}
