Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

jinpai-virtual

jinpainpm20.0.1TypeScript support: included

a hekr virtual device

virtual, device

readme

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 发送到云端数据事件 发送的数据
update state改变更新事件 nState:最新的状态数据,oState:前一个状态的数据
addSubDevResp 子设备添加成功时的事件 虚拟设备对象,响应帧内容
reportSubDevInfoResp 子设备登录成功时的事件 虚拟设备对象,响应帧内容

TODOS

  • <input disabled="" type="checkbox"> 48协议、新48协议的5、6帧类型没有解析
  • <input disabled="" type="checkbox"> 网关子设备登录之后添加事件

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