0.0.13 • Published 8 months ago

kaihong-hyper-device v0.0.13

Weekly downloads
-
License
MIT
Repository
-
Last release
8 months ago

超级设备

kaihong-hyper-device

  • 支持两种协议:http、websocket
  • 通过 http 获取当前用户下产品、设备信息
  • 通过 websocket 协议获取用户订阅的设备实时上报信息
  • 后续考虑支持用户写设备数据

SDK 接入

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>xxx 应⽤系统</title>
    <script src="https://cdn.jsdelivr.net/npm/kaihong-hyper-device@1.0.0"></script>
    <script type="text/javascript">
      window.onload = function () {
        // set localStorage.setItem('X-Access-Token', token);
        // 初始化开鸿HyperDevice对象,实例化时主要去做鉴权操作
        const hyperDevice = new HyperDevice({
          // secure: false,
          // host: location.host,
          // basename: "",
        });
      };
    </script>
  </head>
  <body>
    <div>获取设备消息</div>
  </body>
</html>

参数说明

参数名是否必填参数说明
secure开鸿服务器网站是否启用 SSL 证书,http(s)或 ws(s)访问对应的接口;默认随当前前端部署环境,读取 location.protocol,如果配置了 true 或 false 则强制配置 https 或 http 前缀
host接口域名,默认使用 location.host,私有化部署时需要
basename一般接口都是根域名部署的,比如 http://www.baidu.com/api, 如果是根域名加路径访问,需要配置此参数(比如配置/children),则访问 http://www.baidu.com/children/api
targetHost用于配置 https 环境能正常访问 http 接口的入口:比如 targetHost: http://dev.kaihong.com

API - 实例方法

HTTP 相关方法

getDeviceList(params, callback)

获取设备列表信息;

参数名说明类型是否必填版本
paramsparams 中传入 productId,可查询该产品下的设备列表 { productId: xxx }, 传入 null 查询普通设备object1.0.0
callback({ code, message, data }) => void; code 为 200 时,处理正常业务逻辑其他情况提示错误信息 messagefunction1.0.0

getDeviceDetail(deviceId, callback)

获取设备详情信息;

参数名说明类型是否必填版本
deviceId设备 IDstring1.0.0
callback({ code, message, data }) => void; code 为 200 时,处理正常业务逻辑其他情况提示错误信息 messagefunction1.0.0

getProductList(params, callback)

获取设备列表信息;

参数名说明类型是否必填版本
params预设的后续支持传入分页或查询参数,前期可传入 nullobject1.0.0
callback({ code, message, data }) => void; code 为 200 时,处理正常业务逻辑其他情况提示错误信息 messagefunction1.0.0

getProductDetail(productId, callback)

获取设备详情信息;

参数名说明类型是否必填版本
productId产品 IDstring1.0.0
callback({ code, message, data }) => void; code 为 200 时,处理正常业务逻辑其他情况提示错误信息 messagefunction1.0.0

执行设备功能

invokedFunction({ deviceId, functionId, data }, callback)

// 调用接口
// http://dev.iot.kaihong.com/api/device/invoked/${deviceId}/function/${functions.id} 传参: { functions[x].inputs.id: 65 }
// 比如风机设备设置转速

// method: POST
// url: http://dev.iot.kaihong.com/api/device/invoked/3d-preview-child/function/setSpeed
// data: { rotationRate: 65 }

// 实例调用
invokedFunction(
  {
    deviceId: "3d-preview-child",
    functionId: "setSpeed",
    data: { rotationRate: 65 },
  },
  ({ code = 200, message = "", data = null }) => {
    console.log("code: ", code, ", message: ", message, ", data: ", data);
  }
);

修改设备属性

modifyDeviceProperty({ deviceId, data }, callback)

// 调用接口
// http://dev.iot.kaihong.com/api/device-instance/${deviceId}/property 传参: { [property]: [propertyValue], ... }
// 比如风机设备设置转速

// method: PUT
// url: http://dev.iot.kaihong.com/api/device-instance/3d-preview-child/property
// data: { rotationRate: 65 }

// 实例调用
modifyDeviceProperty(
  {
    deviceId: "3d-preview-child",
    data: { rotationRate: 65 },
  },
  ({ code = 200, message = "", data = null }) => {
    console.log("code: ", code, ", message: ", message, ", data: ", data);
  }
);

设备事件监听(待开发)

  1. 突发事件
  2. 上报自定义事件

对设备物模型中的自定义事件进行监听动作;

WebSocket 相关方法

connect(callback)

建立 websocket 连接,在 callback 回调中进行设备上下线监听,属性变化监听等动作;

subscribeTopic(params, callback)

自定义订阅 topic,Topic 列表,返回一个包含 cancel 的对象,用于取消 callback 函数的监听

const { cancel } = subscribeTopic(params, callback);

// cancel();
参数名说明类型是否必填版本
params{ id, topic, parameter }, id 确保唯一,用于注册回调函数;topic 参考 Topic 列表链接;parameter 为 topic 相关的传参string/object1.0.0
callback(payload) => void; // 响应主体数据- payloadfunction1.0.0

onDeviceOnline(params, callback)

设备上线监听,返回一个包含 cancel 的对象,用于取消 callback 函数的监听

const { cancel } = onDeviceOnline(params, callback);

// cancel();
参数名说明类型是否必填版本
params单独传 string 表示设备 id,或者传对象 { deviceId, debounce, debounceTime } , debounce 传 true 表示启用防抖,debounceTime 默认 500,单位 msstring/object1.0.0
callback() => void;function1.0.0

onDeviceOffline(params, callback)

设备下线监听,返回一个包含 cancel 的对象,用于取消 callback 函数的监听

const { cancel } = onDeviceOffline(params, callback);

// cancel();
参数名说明类型是否必填版本
params单独传 string 表示设备 id,或者传对象 { deviceId, debounce, debounceTime } , debounce 传 true 表示启用防抖,debounceTime 默认 500,单位 msstring/object1.0.0
callback() => void;function1.0.0

onDevicePropertyChange({ deviceId, properties }, callback)

监听设备属性变化,返回一个包含 cancel 的对象,用于取消 callback 函数的监听

const { cancel } = onDevicePropertyChange({ deviceId, properties }, callback);

// cancel();
参数名说明类型是否必填版本
deviceId设备 idstring1.0.0
properties不传监听所有属性,传了只监听具体某个或几个属性string[]1.0.0
callback(payload) => void; // 响应主体数据- payloadfunction1.0.0

disconnect()

主动断开 websocket 连接

onError(callback)

监听 websocket 相关的报错信息

参数名说明类型是否必填版本
callbackcallback: (errorEvent: WebSocketEventMap"error") => voidfunction1.0.0

onClose(callback)

监听 websocket 连接关闭之后触发的回调

参数名说明类型是否必填版本
callbackcallback: (errorEvent: WebSocketEventMap"close") => voidfunction1.0.0

快速上⼿

安装

CDN

<script src="https://cdn.jsdelivr.net/npm/kaihong-hyper-device@1.0.0"></script>

NPM / YARN

## npm
npm install kaihong-hyper-device
## 或yarn
yarn add kaihong-hyper-device

使⽤

非 webpack 构建的项⽬
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>xxx 应⽤系统</title>
    <script src="https://cdn.jsdelivr.net/npm/kaihong-hyper-device@1.0.0"></script>
    <script type="text/javascript">
      // 初始化开鸿HyperDevice对象,实例化时主要去做鉴权操作
      const hyperDevice = new HyperDevice({
        // secure: false,
        // host: location.host,
        // basename: "",
      });
    </script>
  </head>
  <body>
    <div>--设备接入--</div>
  </body>
</html>

React 项⽬

// src/pages/device/index.tsx
import { Button } from "antd";
import { HyperDevice } from "kaihong-hyper-device";
function DeviceList() {
  // set localStorage.setItem('X-Access-Token', token);
  // 初始化开鸿HyperDevice对象,实例化时主要去做鉴权操作
  const hyperDevice = new HyperDevice({
    // secure: false,
    // host: location.host,
    // basename: "",
  });

  // http
  hyperDevice.getDeviceList(
    null,
    ({ code = 200, message = "", data = null }) => {
      console.log("code: ", code, ", data:", data);
    }
  );

  hyperDevice.getDeviceDetail(
    "3d-preview-child",
    ({ code = 200, message = "", data = null }) => {
      console.log("code: ", code, ", data:", data);
    }
  );

  hyperDevice.getProductList(
    null,
    ({ code = 200, message = "", data = null }) => {
      console.log("code: ", code, ", data:", data);
    }
  );

  hyperDevice.getProductDetail(
    "wind_mill",
    ({ code = 200, message = "", data = null }) => {
      console.log("code: ", code, ", data:", data);
    }
  );

  // ws
  hyperDevice.connect(() => {
    // 监听设备上线
    hyperDevice.onDeviceOnline("3d-preview-child", () => {
      console.log("设备3d-preview-child: 上线了");
    });
    // 监听设备下线
    hyperDevice.onDeviceOffline("3d-preview-child", () => {
      console.log("设备3d-preview-child: 下线了");
    });
    // 监听属性变化
    const devicePropertyChange1 = hyperDevice.onDevicePropertyChange(
      {
        deviceId: "3d-preview-child",
        productId: "wind_mill",
        properties: ["rotationRate", "fanRunStatus"],
      },
      (value) => {
        console.log("onDevicePropertyChange value: ", value);
      }
    );
    // devicePropertyChange1.cancel();
  });
  // hyperDevice.disconnect(); - 断开连接

  // 监听error事件
  hyperDevice.onError((errorEvent) => {
    console.log("onError: ", errorEvent);
  });
  // 监听close事件
  hyperDevice.onClose((closeEvent) => {
    console.log("closeEvent: ", closeEvent);
  });
  return <Button onClick={handleClick}>获取设备列表</Button>;
}

export default DeviceList;
0.0.12

8 months ago

0.0.13

8 months ago

0.0.11

9 months ago

0.0.10

9 months ago

0.0.9

9 months ago

0.0.8

9 months ago

0.0.6

9 months ago

0.0.5

9 months ago

0.0.4

9 months ago

0.0.3

9 months ago

0.0.2

9 months ago

0.0.1

9 months ago