@tslfe/tacos-space v0.0.7
@tslfe/tacos-iot
基于@tslfe/tacos-sdk、 @tslfe/tacos-iot,提供数字空间的功能封装,可进行空间层面的指令下发、模式切换等操作
已封装的具体空间类型
| 序号 | 名称 | 描述 | 
|---|---|---|
| 1 | Space | 数字空间基类,其余所有空间均继承于此 | 
| 2 | Office | 办公区 | 
开始
安装
npm install @tslfe/tacos-sdk --savenpm install @tslfe/tacos-iot --save oryarn add @tslfe/tacos-sdk -S yarn add @tslfe/tacos-iot -S
示例
使用@tslfe/tacos-space创建数字空间实例需要三个步骤:
- 通过@tslfe/tacos-sdk与 tacos 平台建立连接,具体建立连接方式请参考@tslfe/tacos-sdk 文档
- 建立连接后可从@tslfe/tacos-space导入需要创建的数字空间实例类型,创建实例对象。如需创建无类型的基础数字空间实例,则可导入 Space
- 调用实例对象的 API 方法进行相关操作
import Tacos from "@tslfe/tacos-sdk";
import { Office } from "@tslfe/tacos-space";
// 第一步:通过connect与tacos建立连接
Tacos.connect({ tacosId: "<tacos实例ID>", signature: "<签名>" }).then((tacos) => {
  // 第二步:建立连接后创建具体IOT设备sdk实例对象
  let office = tacos.createInstance(Office, { id: "<空间id>" });
  // 第三步:调用实例对象的API方法,可直接下发指令或下发模式
  office.turnOnAC(); // 下发打开空调指令
  office.onWork(); // 切换上班模式
  // 也可通过space属性获取其空间基类实例,进行一些数字空间的基本操作
  office.space.getProperties(); // 获取空间属性
  office.space.getDevices("[type=Switch]"); // 获取当前空间下所有类型为switch的设备
});API
基类 Space
基类 Space 是所有数字空间共同继承的模块,所有具体类型都可通过 space 属性访问 Space 类的所有方法
getSpaces
获取与当前数字空间相关联的某一类空间
- 方法:getSpaces(pattern: string)
- 参数: - pattern: 资源定位符目前仅支持以下几种资源定位方式 - "./**/" 获取当前空间下所有子空间,递归获取
- "/**/"" 获取当前空间的根空间下所有子空间,递归获取
- "./" 或 "" 获取当前空间下的子空间,不会去获取子空间的子空间
 - 在资源定位符之后增加需要匹配的空间类型,目前仅支持以下的匹配格式: 
 
- 返回值: - Promise<Subspace>
- 示例:
// 查询当前空间下所有办公区空间
space.getSpaces("./**/[type=Office]").then((res) => {
  // 其他操作
});getDevices
获取当前空间下的设备集合
- 方法:getDevices(pattern: string)
- 参数:- pattern: 资源定位符的规则与getSpaces方法相同
 
- pattern: 资源定位符的规则与
- 返回值:Promise<Group>
- 示例:
// 查询当前空间下所有调光灯
space.getDevices("./**/[type=Light]").then((res) => {
  // 打开所有灯
  res.turnOn();
});getSpaceModel
获取空间模型信息
- 方法:getSpaceModel(cache?: boolean)
- 参数:- cache: 是否使用缓存
 
- 返回值:Promise<SpaceModel>
getProperties
获取空间属性集合
- 方法:getProperties(cache?: boolean)
- 参数:- cache: 是否使用缓存
 
- 返回值:Promise<Record<string, any>>
getEvents
获取空间事件列表
- 方法:getEvents(cache?: boolean)
- 参数:- cache: 是否使用缓存
 
- 返回值:Promise<Event[]>
getCommands
获取空间指令列表
- 方法:getCommands(cache?: boolean)
- 参数:- cache: 是否使用缓存
 
- 返回值:Promise<Command[]>
getRules
获取空间规则列表
- 方法:getRules(cache?: boolean)
- 参数:- cache: 是否使用缓存
 
- 返回值:Promise<Rule[]>
getSchedules
获取空间计划列表
- 方法:getSchedules(cache?: boolean)
- 参数:- cache: 是否使用缓存
 
- 返回值:Promise<Schedule[]>
getPatterns
获取空间计划列表
- 方法:getPatterns(cache?: boolean)
- 参数:- cache: 是否使用缓存
 
- 返回值:Promise<Pattern[]>
emitEvent
手动触发空间事件
- 方法:emitEvent(eventCode: string)
- 参数:- eventCode: 事件 code
 
- 返回值:Promise<boolean>
execCommand
下发空间指令
- 方法:execCommand(cmdCode: string, params: Record<string, any>)
- 参数:- cmdCode: 指令 code
- params: 指令参数
 
- 返回值:Promise<boolean>
execPattern
手动执行模式
- 方法:execPattern(patternCode: string)
- 参数:- eventpatternCodeCode: 模式 code
 
- 返回值:Promise<boolean>
air-condition
open()
启动空调
参数:无
close()
关闭空调
参数:无
frequent(value: number)
设置空调送风机频率
参数:
- value:频率值
valveDegree(type: string, value: number)
设置不同情形下阀门开度
参数:
- type:阀门类型- valve 冷热水阀开度
- valve_in 回风阀开度
- valve_out 送风阀开度
 
- value:开度值
blowing-fan
open()
开启送风机
参数:无
close()
关闭送风机
参数:无
butterfly-valve
open()
开启电动蝶阀
参数:无
close()
关闭电动蝶阀
参数:无
degree(value: number)
设置电动蝶阀开度
参数:
- value:开度值
chiller-master
open()
开启冷水主机
参数:无
close()
关闭冷水主机
参数:无
cool()
设置模式为制冷
参数:无
heat()
设置模式为制热
参数:无
pump()
设置模式为水泵
参数:无
temperature(type: string, value: number)
设置不同情形下的回水温度
参数:
- type:回水类型- cool_in 制冷回水
- cool_out 制冷出水
- hot_in 制热回水
- hot_out 制热出水
 
- value:温度值
chiller-slave
openBlowingFan()
开启冷水从机的送风机
参数:无
closeBlowingFan()
关闭冷水从机的送风机
参数:无
openExhaustFan()
开启冷水从机的排风机
参数:无
closeExhaustFan()
关闭冷水从机的排风机
参数:无
curtain
open()
开启遮阳帘
参数:无
close()
关闭遮阳帘
参数:无
pause()
暂停遮阳帘
参数:无
degree(value: number)
设置遮阳帘开度
参数:
- value:开度值
door
open()
开启电动门
参数:无
close()
关闭电动门
参数:无
exhaust-fan
open()
开启排风机
参数:无
close()
关闭排风机
参数:无
open()
开启电动门
参数:无
close()
关闭电动门
参数:无
创建 sdk 模块实例
- 方法:createInstance<M extends (...args: any) => any, P>(sdk: M, props?: P): ReturnType<M>
- 参数:- sdk: 定义的 sdk 模块
- props: sdk 所需的参数
 
- 返回值:sdk 模型实例
- 示例:
import Tacos, { Device } from "@tslfe/tacos-sdk";
import { AxiosRequestConfig } from "axios";
Tacos.connectWithToken("").then((tacos) => {
  let device = tacos.createInstance(Device, { deviceId: "" });
  // 其它逻辑
});destroy
销毁当前 tacos 实例
- 方法:destroy(): void
- 参数:- 无
 
- 返回值:无
- 示例:
import Tacos, { Device } from "@tslfe/tacos-sdk";
import { AxiosRequestConfig } from "axios";
Tacos.connectWithToken("").then((tacos) => {
  // 其它逻辑
  tacos.destroy();
});扩展
defineSDK
定义 SDK 模块, defineSDK 是一个高阶函数
- 方法:defineSDK<P, S>(sdkOptions: TacosOptions<P, S>): (context: Context, props?: P) => TacosSDK & S
- 参数:- sdkOptions: SDK 模块逻辑代码
 
- 返回值:SDK 的构造器
- 示例:
import { defineSDK } from "@tslfe/tacos-sdk";
export default defineSDK({
  setup() {
    let getVersion = function () {
      return "0.0.1";
    };
    return {
      name: "自定义的SDK模块",
      getVersion
    };
  }
});定义 SDK 模块更多详情,点击查看
defineApi
定义 ajax 网络请求模块
- 方法:defindAPI<T extends Record<string, Function>>(api: Api<T>): (request: Request)=>T & ThisType<Request>
- 参数:- api: 网络请求逻辑代码
 
- 返回值:API 的构造器
- 实例:
import { defineApi } from "@tslfe/tacos-sdk";
export default defineApi({
  getDeviceModel(deviceId: string) {
    return this.get(`/device/model/${deviceId}`);
  }
});SDK 模块
space
空间模块
getSubSpaces
获取子空间
- 方法:getSubSpaces()
- 参数- 无
 
- 返回值:当前空间的子空间实例
- 示例
let subSpaces = space.getSubSpaces();getDevices
获取空间下的所有设备列表
- 方法:getDevices(type?: DeviceType, status?: DeviceStatus): Device[]
- 参数- type?: 设备类型
- status?: 设备状态
 
- 返回值:空间下的设备列表实例
- 示例
let devices = space.getDevices();getDevice
获取空间下的所有设备
- 参数- deviceId: string (设备 ID)
 
- 返回值:Device
- 示例
let devices = space.getDevice("<deviceId>");getScenes
获取空间下的场景
- 参数- 无
 
- 返回值:Device
- 示例
let scenes = space.getScenes();文档未完,待补充。。。
Device
设备模块
getModel
获取设备的产品物模型
- 参数- 无
 
- 返回值:Model
- 示例
let model = device.getModel();getStates
主动查询获取设备状态
- 参数- refresh: boolean = false
 
- 返回值:Model
- 示例
let states = device.getStates(true);execFunction
直接执行设备的功能
- 参数- func: string
- params: Record<string, any>
 
- 返回值:boolean
- 示例
let bool = device.execFunction("<funcName>", "<params>");execFunctions
批量执行设备的功能
- 参数- funcs: Array<{func: string, params: Record<string, any>}>
 
- 返回值:boolean
- 示例
let bool = device.execFunctions([{ func: `<funcName>`, params: "<params>" }]);addStateListener
监听设备变化,监听设备事件
- 参数- callback: (ds?: DeviceState) => void
 
- 返回值:boolean
- 示例
device.addStateListener((deviceState) => {
  // 其它业务逻辑...
});buildDeviceExecutor
创建设备快捷的控制器
- 参数- 无
 
- 返回值: Promise<{command: {}, functions: {}}>
- 示例
import { TacosResponse } from "./request";
device.buildDeviceExecutor().then((exe) => {
  exe.command["fresh_valve_in_degree_value"](50).then((res: TacosResponse) => {
    // 其它逻辑...
  });
});文档未完,待补充。。。
Model
物模型模块
exportModel
导出物模型结构
- 参数- 无
 
- 返回值:
- 示例
// 待完善...getFunctions
获取功能集
- 参数- 无
 
- 返回值:
- 示例
// 待完善...addFunction
增加功能
- 参数- 无
 
- 返回值:
- 示例
// 待完善...getFunction
获取单个功能
- 参数- 无
 
- 返回值:
- 示例
// 待完善...updateFunction
更新功能
- 参数- 无
 
- 返回值:
- 示例
// 待完善...deleteFunction
删除功能
- 参数- 无
 
- 返回值:
- 示例
// 待完善...getCommands
获取指令集
- 参数- 无
 
- 返回值:
- 示例
// 待完善...getCommand
查询指令
- 参数- 无
 
- 返回值:
- 示例
// 待完善...addCommand
新增指令
- 参数- 无
 
- 返回值:
- 示例
// 待完善...updateCommand
修改指令
- 参数- 无
 
- 返回值:
- 示例
// 待完善...deleteCommand
删除指令
- 参数- 无
 
- 返回值:
- 示例
// 待完善...getProperties
获取属性集
- 参数- 无
 
- 返回值:
- 示例
// 待完善...getProperty
获取属性
- 参数- 无
 
- 返回值:
- 示例
// 待完善...addProperty
新增属性
- 参数- 无
 
- 返回值:
- 示例
// 待完善...updateProperty
修改属性
- 参数- 无
 
- 返回值:
- 示例
// 待完善...deleteProperty
删除属性
- 参数- 无
 
- 返回值:
- 示例
// 待完善...getEvents
获取事件集
- 参数- 无
 
- 返回值:
- 示例
// 待完善...getEvent
获取单个事件
- 参数- 无
 
- 返回值:
- 示例
// 待完善...addEvent
新增事件
- 参数- 无
 
- 返回值:
- 示例
// 待完善...updateEvent
修改事件
- 参数- 无
 
- 返回值:
- 示例
// 待完善...deleteEvent
删除事件
- 参数- 无
 
- 返回值:
- 示例
// 待完善...扩展 SDK 模块
通过@tslfe/tacos-sdk提供的方法可封装更上层的 SDK 模块,或者封装自己的 IOT 库。
defineSDK
- 参数- sdkOptions: TacosOptions
 
- 返回值:(context: Context, props?: P) => TacosSDK
- 示例:
- 自定义 SDK 模块 light.ts
import { defineSDK, Device, Context } from "@tslfe/tacos-sdk";
export default defineSDK({
  /**
   * 参数说明
   * @param props 当前模块需要的入参,需实例化时传入(数据类型根据需要自定定义)
   * @param context 上下文,实例化时自动注入
   * @param onDestroy 销毁的生命周期,实例化时自动注入
   */
  setup({ props, context }: { props: any; context: Context }, { onDestroy }) {
    // 实例化device的deviceId,可定义在props中通过外部传入
    let device = this.createInstace(Device, { deviceId: props.id });
    let open = function () {
      return device.buildDeviceExecutor().then((exe) => {
        exe.command["light_open"]();
      });
    };
    let close = function () {
      return device.buildDeviceExecutor().then((exe) => {
        exe.command["light_close"]();
      });
    };
    return { open, close };
  }
});- 使用自定义的 SDK 模块
import Tacos from "@tslfe/tacos-sdk";
import Light from "./light";
// 第一步:通过connect与tacos建立连接
Tacos.connect({ tacosId: "<tacos实例ID>", signature: "<签名>" }).then((tacos) => {
  // 第二步:建立连接后创建灯的实例对象
  let device = tacos.createInstance(Light, { id: "<设备ID>" });
  // 第三步:设备控制
  // 开灯
  device.open();
  // 关灯
  device.close();
});