UNPKG

@ilo-home/react-native-tuya

Version:

React Native bindings for the Tuya SDK

91 lines (75 loc) 2.22 kB
import { NativeModules, EmitterSubscription } from 'react-native'; import { addEvent, bridge, DEVLISTENER } from './bridgeUtils'; const tuya = NativeModules.TuyaDeviceModule; export type DeviceBean = { productId: string; devId: string; verSw: string; name: string; dps: DeviceDps; }; export type DevListenerParams = { devId: string; }; export type DevListenerType = | 'onDpUpdate' | 'onRemoved' | 'onStatusChanged' | 'onNetworkStatusChanged' | 'onDevInfoUpdate' | 'onFirmwareUpgradeSuccess' | 'onFirmwareUpgradeFailure' | 'onFirmwareUpgradeProgress'; let devListenerSubs: { [devId: string]: EmitterSubscription } = {}; export function registerDevListener( params: DevListenerParams, type: DevListenerType, callback: (data: any) => void ) { tuya.registerDevListener(params); const sub = addEvent(bridge(DEVLISTENER, params.devId), data => { if (data.type === type) { callback(data); } }); devListenerSubs[params.devId] = sub; } export function unRegisterAllDevListeners() { for (const devId in devListenerSubs) { const sub = devListenerSubs[devId]; sub.remove(); tuya.unRegisterDevListener({ devId }); } devListenerSubs = {}; } export type DeviceDpValue = boolean | number | string | Record<string, string | number | boolean>; export type DeviceDps = { [dpId: string]: DeviceDpValue; }; export type SendParams = { devId: string; command: DeviceDps; } export function send(params: SendParams) { return tuya.send(params); } export type RemoveDeviceParams = { devId: string }; export function removeDevice(params: RemoveDeviceParams): Promise<string> { return tuya.removeDevice(params); } export type RenameDeviceParams = { devId: string; name: string }; export function renameDevice(params: RenameDeviceParams): Promise<string> { return tuya.renameDevice(params); } export type GetDataPointStatsParams = { devId: string; DataPointTypeEnum: 'DAY' | 'WEEK' | 'MONTH'; number: number; // number of historical data result values, up to 50 dpId: string; startTime: number; // in ms }; export function getDataPointStat( params: GetDataPointStatsParams ): Promise<any> { return tuya.getDataPointStat(params); }