import { HomieElement } from "./HomieElement"; import { HomieDevice } from "./HomieDevice"; import { HomieNode } from "./HomieNode"; import { PropertyPointer, PropertyAttributes, HomieValuesTypes, HomiePropertyOptions, HomieDeviceMode, PropertyDescription } from "./model"; import { IClientPublishOptions } from "mqtt"; import { BehaviorSubject, Observable, Subject } from "rxjs"; import { MqttMessage, MqttSubscription } from "./mqtt"; export declare const HP_ATTR_TARGET = "$target"; export declare const DEFAULT_VALUE_READ_TIMEOUT = 1000; export interface OnSetEvent { property: HomieProperty; value: HomieValuesTypes; valueStr: string; } export declare class HomieProperty extends HomieElement { readonly node: HomieNode; protected options: HomiePropertyOptions; readonly device: HomieDevice; readonly topic: string; readonly pointer: PropertyPointer; setsub: MqttSubscription; protected set descriptionUpdateNeeded(value: boolean); protected _onSetMessage$: Subject; onSetMessage$: Observable; protected _value$: BehaviorSubject; protected _valueObs$: Observable; readonly value$: Observable; get value(): string | undefined; set value(val: string | undefined); protected _target$: BehaviorSubject; readonly target$: Observable; get target(): string | undefined; get targetAsType(): HomieValuesTypes; targetAsType$: Observable; valueAsType$: Observable; get valueAsType(): HomieValuesTypes; get mode(): HomieDeviceMode; constructor(node: HomieNode, attributes: PropertyAttributes, options?: HomiePropertyOptions); getDescription(): PropertyDescription; onInit(): Promise; protected readValueFromMqtt$(): Observable; protected subscribeTopics(): void; /** * Called when a set command is received via mqtt. Will emit a message on onSetMessage$. */ onSetMessage(value: string): void; /** Publishes the current propery value to mqtt * @param {string} value Value to publish - if undefined, current value will be published */ publishValue$(value?: string, validate?: boolean): Observable; /** * Publishes a /set mqtt message. * @param {string} value Set value of property */ setCommand$(value: string): Observable; /** * Publishes the $target value for this property. * Used in device mode to indicate the desired/intermediate state while transitioning. * @param value Target value string to publish, or undefined to clear */ publishTarget$(value: string | undefined): Observable; private validateValue; setValue(value: string | undefined | null, onlyIfChanged?: boolean, validate?: boolean): Promise; updateAttributes(update: PropertyAttributes): void; protected mqttPublish$(path: string, value: string | null | undefined, options: IClientPublishOptions, publishEmpty: boolean): Observable; protected mqttSubscribe(path: string, retained?: boolean): Observable; wipe$(): Observable; }