declare type ApplianceType = 'AC' | 'TV' | 'LIGHT';
interface User {
    id: string;
    nickname: string;
}
interface DetectedAirconModel {
    model: Model;
    params: AirconSettings;
}
interface SensorValue {
    temperature: number;
    humidity: number | undefined;
    illumination: number | undefined;
}
interface Device {
    id: string;
    name: string;
    temperature_offset: number;
    humidity_offset: number;
    created_at: Date;
    updated_at: Date;
    firmware_version: string;
    mac_address: string;
    serial_number: string;
}
declare type DeviceEventType = 'te' | 'hu' | 'il';
interface DeviceWithEvents extends Device {
    newest_events: {
        [key in DeviceEventType]: EventValue;
    };
}
interface EventValue {
    val: number;
    created_at: Date;
}
interface Model {
    id: string;
    manufacturer: string;
    remote_name: string;
    name: string;
    image: string;
}
declare type TemperatureUnit = 'c' | 'f';
interface AirconSettings {
    temp: string;
    temp_unit: TemperatureUnit;
    mode: AirconModeType;
    vol: string;
    dir: string;
    dirh: string;
    button: string;
}
interface UpdateAirconSettingsOptions {
    temperature: string;
    operation_mode: string;
    air_volume: string;
    air_direction: string;
    button: string;
}
interface AirconSettingsWithTimestamp extends AirconSettings {
    updated_at: Date;
}
declare type AirconModeType = 'cool' | 'warm' | 'dry' | 'blow' | 'auto';
interface AirconModeValue {
    temp: string[];
    dir: string[];
    vol: string[];
}
interface AirconRange {
    modes: {
        [key in AirconModeType]: AirconModeValue;
    };
    fixedButtons: string[];
}
interface Aircon {
    range: AirconRange;
    tempUnit: 'c' | 'f';
}
interface Button {
    name: string;
    image: string;
    label: string;
}
interface LightState {
    brightness: string;
    power: 'on' | 'off';
    last_button: string;
}
interface Light {
    state: LightState;
    buttons: Button[];
}
interface TVState {
    input: 't' | 'bs' | 'cs';
}
interface TV {
    state: TVState;
    buttons: Button[];
}
interface Appliance {
    id: string;
    device: Device;
    nickname: string;
    image: string;
    type: string;
    signals: Signal[];
    aircon?: Aircon;
    settings?: AirconSettingsWithTimestamp;
    model?: Model;
    tv?: TV;
    light?: Light;
    smart_meter?: SmartMeter;
}
interface SmartMeter {
    echonetlite_properties: EchonetliteProperties[];
}
interface EchonetliteProperties {
    name: string;
    epc: number;
    val: string;
    updated_at: Date;
}
interface Signal {
    id: string;
    name: string;
    image: string;
}
interface Signal {
    id: string;
    name: string;
    image: string;
}
interface SignalMessage {
    freq: number;
    data: number[];
    format: 'us';
}

declare class Cloud {
    private readonly token;
    private readonly instance;
    constructor(token: string);
    getUser(): Promise<User>;
    updateUser(nickname: string): Promise<User>;
    getDevices(): Promise<DeviceWithEvents[]>;
    detectAppliance(message: SignalMessage): Promise<DetectedAirconModel>;
    getSensorValue(): Promise<SensorValue>;
    getAppliances(type?: ApplianceType): Promise<Appliance[]>;
    createAppliance(nickname: string, device: string, image: string, model?: string): Promise<Appliance[]>;
    updateAppliancesOrder(appliances: string[]): Promise<unknown>;
    deleteAppliance(applianceId: string): Promise<unknown>;
    updateAppliance(applianceId: string, nickname: string, imageId: string): Promise<Appliance>;
    listAircon(): Promise<Appliance[]>;
    updateAirconSettings(applianceId: string, settings: Partial<UpdateAirconSettingsOptions>): Promise<AirconSettingsWithTimestamp>;
    listTV(): Promise<Appliance[]>;
    updateTV(applianceId: string, button: string): Promise<TVState>;
    listLight(): Promise<Appliance[]>;
    updateLight(applianceId: string, button: string): Promise<LightState>;
    getApplianceSignals(applianceId: string): Promise<Signal[]>;
    createApplianceSignal(applianceId: string, name: string, message: SignalMessage, imageId: string): Promise<Signal>;
    updateSignalOrders(applianceId: string, signalIds: string[]): Promise<unknown>;
    updateSignal(signalId: string, name: string, imageId: string): Promise<unknown>;
    deleteSignal(signalId: string): Promise<unknown>;
    sendSignal(signalId: string): Promise<unknown>;
    updateDevice(deviceId: string, name: string): Promise<unknown>;
    deleteDevice(deviceId: string): Promise<unknown>;
    updateTemperatureOffset(deviceId: string, offset: number): Promise<unknown>;
    updateHumidityOffset(deviceId: string, offset: number): Promise<unknown>;
    private _post;
    private _get;
}

declare class Local {
    private readonly instance;
    constructor(address: string);
    fetchReceivedSignal(): Promise<SignalMessage>;
    sendSignal(signal: SignalMessage): Promise<any>;
}

export { Aircon, AirconModeType, AirconModeValue, AirconRange, AirconSettings, AirconSettingsWithTimestamp, Appliance, ApplianceType, Button, Cloud, DetectedAirconModel, Device, DeviceEventType, DeviceWithEvents, EchonetliteProperties, EventValue, Light, LightState, Local, Model, SensorValue, Signal, SignalMessage, SmartMeter, TV, TVState, TemperatureUnit, UpdateAirconSettingsOptions, User };
