0.0.1 • Published 5 years ago

jinpai-virtual v0.0.1

Weekly downloads
3
License
-
Repository
-
Last release
5 years ago

virtual

使用示例demo

Browser

// 独立设备
const independent = {
  devTid: '01_ea36eba5dcb422848aaeeba20ef11',
  token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiIxNDI1NTE3Mjc4MSIsInBpZCI6IjAwMDAwMDAwMDAwIiwiZW50IjoiMDE0OTA0NTY2MzQiLCJ0eXBlIjoiV0VCIiwiZXhwIjoxNTE3MzYzMTE1LCJqdGkiOiI3N2MxOWRjYS05ZTkzLTRhNTAtYTRkZC1jMjMyYzkxMTBhNGUiLCJyb2xlcyI6WyJlbnRlcnByaXNlIl19.NpL1G5SlVEnekFoKj1fS9T_WQOwuK1yWGoC6WtT79O-ZA-ioMcrQ4EerTvo3m2EeV0KSFHkvUKjUfdTxofrnYg=='
}

// 网关子设备
const gateway = {
  devTid: '270fd8eadad140a59df6272349838c9f',
  subDevTid: '01_76bbe85247ff2c4152167d3486d52',
  token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiIxNDI1NTE3Mjc4MSIsInBpZCI6IjAwMDAwMDAwMDAwIiwiZW50IjoiMDE0OTA0NTY2MzQiLCJ0eXBlIjoiV0VCIiwiZXhwIjoxNTE3MzYzMTE1LCJqdGkiOiI3N2MxOWRjYS05ZTkzLTRhNTAtYTRkZC1jMjMyYzkxMTBhNGUiLCJyb2xlcyI6WyJlbnRlcnByaXNlIl19.NpL1G5SlVEnekFoKj1fS9T_WQOwuK1yWGoC6WtT79O-ZA-ioMcrQ4EerTvo3m2EeV0KSFHkvUKjUfdTxofrnYg=='
}

const virtual1 = new Virtual(independent)
const virtual2 = new Virtual(gateway)

// 虚拟设备登陆成功后执行
virtual1.ready(() => {
  console.log(virtual1)
})

virtual1.on('receive', data => {
  console.log(data)
})

virtual1.on('send', data => {
  console.log(data)
})

Node

const WebSocket = require('ws')

// 加载到全局,否者会报错
global.WebSocket = WebSocket

// 独立设备
const independent = {
  devTid: '01_ea36eba5dcb422848aaeeba20ef11',
  token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiIxNDI1NTE3Mjc4MSIsInBpZCI6IjAwMDAwMDAwMDAwIiwiZW50IjoiMDE0OTA0NTY2MzQiLCJ0eXBlIjoiV0VCIiwiZXhwIjoxNTE3MzYzMTE1LCJqdGkiOiI3N2MxOWRjYS05ZTkzLTRhNTAtYTRkZC1jMjMyYzkxMTBhNGUiLCJyb2xlcyI6WyJlbnRlcnByaXNlIl19.NpL1G5SlVEnekFoKj1fS9T_WQOwuK1yWGoC6WtT79O-ZA-ioMcrQ4EerTvo3m2EeV0KSFHkvUKjUfdTxofrnYg=='
}

const virtual1 = new Virtual(independent)

// 虚拟设备登陆成功后执行
virtual1.ready(() => {
  console.log(virtual1)
})

virtual1.on('update', (nState, oState) => {
  console.log('update:----------------------------')
  console.log(nState, oState)
  console.log('-----------------------------------')
})

virtual1.on('receive', data => {
  console.log(data)
})

virtual1.on('send', data => {
  console.log(data)
})

Options

网关子设备,devTid为网关的devTid,subDevTid为子设备的devTid,token是用户调用云端API时用到的token

// 值为不为undefined的都是默认值
new Virtual({
  token: undefined, // 用户token
  devTid: undefined, // 设备devTid
  subDevTid: undefined, // 子设备devTid
  debug: true, // 是否为网页debug模式,否则为预览模式
  heartbeat: 7000, // 心跳间隔
  reconnect: false, // ws断开自动重连
  delay: 0, // 上报帧延时时间,模拟网络延时
  report: false, // 状态改变后是否上报包含参数的上报帧(非关联上报帧)
  URL: {
    console: 'https://console-openapi.aihomi.com', // console api地址
    user: 'https://user-openapi.aihomi.com', // user api地址
    ws: 'wss://asia-dev.aihomi.com:184' // ws地址
  }
})

Methods

名称说明参数返回值
ready虚拟设备登录成功后的回调回调函数返回Promise
receive传入数据,模拟云端发送数据到设备发送的数据-
send发送数据到云端发送的数据-
setState设置内部状态值状态数据对象-
connect建立ws连接--
close关闭ws连接--
  • ready:设备登录成功回调,返回Promise
virtual.ready(() => {
  // 设备已经登录成功
  // do something
})
  • receive:传入数据,模拟云端发送数据到设备,无返回值
// data为云端通过ws返回的数据经JSON.parse序列化后的数据
virtual.receive(data)
  • send:发送数据到云端,无返回值
// 可以把data看作是websocket通信中的{params: { data }}中的data部分的数据
const data = {
  cmdId: 1,
  sw: 1,
  light: 100
}
virtual.send('devSend', { data })
  • setState:更新设备状态state,无返回值
// 更新state中的数据
// 更新策略和react的setState是一样的
virtual.setState({ data })
  • connect:建立WebSocket连接,如果已经有可用连接就不再创建新的

  • close:关闭WebSocket连接,无返回值

Events

名称说明回调参数
receive接收到云端数据事件接收到的数据
send发送到云端数据事件发送的数据
updatestate改变更新事件nState:最新的状态数据,oState:前一个状态的数据
addSubDevResp子设备添加成功时的事件虚拟设备对象,响应帧内容
reportSubDevInfoResp子设备登录成功时的事件虚拟设备对象,响应帧内容

TODOS

  • 48协议、新48协议的5、6帧类型没有解析
  • 网关子设备登录之后添加事件

网关还是让所有的都去启动一个virtual类,然后把所有的都在发送到网关设备通道中