WebSocket API JavaScript 库
WebSocket API 扩展随附 JavaScript 库,该库允许基于 Web 的应用与 deviceWISE 网关的运行时进程进行交互。
安装扩展时,JavaScript API 库文件将置于 Staging Browser(暂存浏览器)文件系统内的 www/devicewise 目录中。
网关 HTTP 服务器
为支持 JavaScript API 对网关的调用,必须启动网关的 HTTP 服务器。
可通过 Workbench(工作台)-> Administration(帐户管理)-> HTTP Server(HTTP 服务器)选项卡查看网关 HTTP 服务器的状态。有关更多信息,请参见 HTTP 服务器。
设置
若要创建使用 JavaScript API 库的网页,则 HTML 主页面的标题必须包含以下链接。
<script
src="devicewise/jquery-3.1.0.min.js"></script>
<script
src="devicewise/cookie.js"></script>
<script
src="devicewise/devicewiseUtil.js"></script>
<script
src="devicewise/devicewiseClient.js"></script>
<script
src="devicewise/devicewiseConstants.js"></script>
<script
src="devicewise/devicewiseDiagnostics.js"></script>
<script
src="devicewise/devicewiseVariable.js"></script>
<script
src="devicewise/devicewiseSQLite.js"></script>
<script
src="devicewise/devicewiseDevice.js"></script>
<script
src="devicewise/devicewiseTrigger.js"></script>
<script
src="devicewise/devicewiseProject.js"></script>
<script
src="devicewise/devicewiseChannel.js"></script>
<script
src="devicewise/devicewiseSystem.js"></script>
deviceWISE 类型
使用以下定义访问数据类型代码:
- devicewise.INT1
- devicewise.INT2
- devicewise.INT4
- devicewise.INT8
- devicewise.UINT1
- devicewise.UINT2
- devicewise.UINT4
- devicewise.UINT8
- devicewise.FLOAT4
- devicewise.FLOAT8
- devicewise.BOOL
- devicewise.STRING
deviceWISE 驱动程序代码列表
API 函数
devicewise.connect(URL, callbackSuccess, callbackDisconnect, callbackError)
创建与 WebSocket API 扩展代理的 WebSocket 连接。
- URL:要连接的 URL。WebSocket 代理在端口 9980 上进行侦听。在大多数情况下,WebSocket URL 为:"ws://_ipaddress_of_devicewise_gateway_:9980"。
- callbackSuccess():身份验证成功后调用的回调函数。
- callbackDisconnect():WebSocket 断开连接时调用的回调函数。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
devicewise.login(username, password, callbackSuccess, callbackError)
登录到 deviceWISE 网关运行时。
登录之前,您需要使用工作台在网关中新建用户。使用 Workbench(工作台)-> Administration(帐户管理)-> Security(安全性)选项卡以显示 Security(安全性)面板,然后选择 Users(用户)选项卡。
使用以下凭据新建用户
- Name(名称):websocketapi
- Password(密码):9cZbK9HFUtcTZY3Z
- Role(角色):选择一个网关上定义的角色。
有关用户、角色和策略的完整信息,请参见:安全性。
新建用户后,即可使用以下凭据登录:
- username(用户名):websocketapi
- password(密码):wV7/btowyFzwgPlwhgPDV5jR1AaBVeoty9uQ3AjESxg=
- callbackSuccess():身份验证成功后调用的回调函数。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
devicewise.login2(username, password, callbackSuccess, callbackError)
登录到 deviceWISE 网关运行时并保留会话。
登录之前,您需要使用工作台在网关中新建用户。使用 Workbench(工作台)-> Administration(帐户管理)-> Security(安全性)选项卡以显示 Security(安全性)面板,然后选择 Users(用户)选项卡。
使用以下凭据新建用户
- Name(名称):websocketapi
- Password(密码):9cZbK9HFUtcTZY3Z
- Role(角色):选择一个网关上定义的角色。
有关用户、角色和策略的完整信息,请参见:安全性。
新建用户后,即可使用以下凭据登录:
- username(用户名):websocketapi
- password(密码):wV7/btowyFzwgPlwhgPDV5jR1AaBVeoty9uQ3AjESxg=
- callbackSuccess(token):身份验证成功后调用的回调函数。函数将返回会话令牌。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
devicewise.loginToken(callbackSuccess, callbackError)
尝试为客户端恢复现有会话。要求以 "devicewise.login2()" 进行原始身份验证。
- callbackSuccess():现有会话成功恢复后调用的回调函数
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
devicewise.logout()
从 deviceWISE 网关运行时注销。注销后关闭 WebSocket 连接。
devicewise.read(device, variable, type, count, length, callbackSuccess, callbackError)
读取变量。
- device(设备):要读取的设备。
- variable(变量):要读取的变量。必须提供完整路径 (ex. folder1.folder2.variableName)。如果是从数组中读取,则包含读取起始位置的索引(例如 arrayVariable[0])。
- type(类型):deviceWISE 数据类型。
- count(计数):要从数组中读取的元素数量。若为标量读取,请使用 -1。
- length(长度):deviceWISE 数据类型的长度。用于字符串数据类型。若为其他类型,请使用 -1 以继承长度。
- callbackSuccess(data):返回读取数据的回调函数。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
devicewise.write(device, variable, type, count, length, data, callbackSuccess, callbackError)
写入变量。
- device(设备):要写入的设备。
- variable(变量):要写入的变量。必须提供完整路径 (ex. folder1.folder2.variableName)。如果是写入数组,则包含写入起始位置的索引(例如 arrayVariable[0])。
- type(类型):deviceWISE 数据类型。
- count(计数):要写入数组的元素数量。若为标量写入,请使用 -1。
- length(长度):deviceWISE 数据类型的长度。用于字符串数据类型。若为其他类型,请使用 -1 以继承长度。
- data(数据):要写入变量的数据。
- callbackSuccess():成功完成后调用的回调函数。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
devicewise.subscribe(device, variable, rate, type, count, length, callbackSuccess, callbackError, callbackPublishReceived)
订阅变量。订阅数组的多个元素将导致为每个元素创建一个订阅。各元素间将共享回调函数。
- device(设备):包含要订阅的变量的设备。
- variable(变量):要订阅的变量。必须提供完整路径 (ex. folder1.folder2.variableName)。如果是订阅数组,则包含订阅起始位置的索引(例如 arrayVariable[0])。
- rate(速率):订阅的轮询率,以秒为单位。
- type(类型):deviceWISE 数据类型。
- count(计数):一个数组要订阅的元素数量。若为标量写入,请使用 -1。
- length(长度):deviceWISE 数据类型的长度。用于字符串数据类型。若为其他类型,请使用 -1 以继承长度。
- callbackSuccess(subscriptionID, variableName):成功完成后调用的回调函数。返回订阅的 ID 和变量名称。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
- callbackPublishReceived(dataStructure):收到给定订阅的数据发布时调用的回调函数。返回具有以下结构的 JSON 对象:
{
device: device containing subscription,
variable: variable name,
count: element count,
length: data length,
type: datatype,
value: published value,
subId: subscription ID,
cbSuccess: success
callback,
cbError: error callback,
cbPublish: publish callback
}
devicewise.unsubscribe(subscriptionID, callbackSuccess, callbackError)
取消订阅变量。
- subscriptionID:要取消订阅的订阅 ID。
- callbackSuccess():成功删除订阅后调用的回调函数。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
devicewise.deviceList(callbackSuccess, callbackError)
获取 deviceWISE 网关上已定义设备的列表。
- callbackSuccess(devices):收到设备列表后调用的回调函数。包含设备列表。列表中包含每个设备的名称、类型及其状态。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
响应
- Name(名称):设备名称
- Type(类型):deviceWISE 驱动程序代码列表中的设备类型。驱动程序代码列表见 deviceWISE 驱动程序代码列表部分。
- State(状态):
- 1 - 设备已启动。
- 2 - 设备已停止。
- 3 - 设备已禁用。
- 4 - 设备正在启动
- 5 - 设备正在停止
- 6 - 未知
设备列表响应示例:
[
{"name":"System
Monitor","type":"311","state":"2"},
{"name":"TestDevice","type":"9","state":"1"}
]
devicewise.triggerList(projectName, callbackSuccess, callbackError)
获取给定项目的触发器列表。
- projectName(项目名称):从中获取触发器列表的项目的名称。
- callbackSuccess(triggerArray):返回触发器列表的回调函数。每个触发器均包含名称、状态、成功执行的次数、正在进行的实例数量以及失败执行的次数。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
响应
- Name(名称):触发器的名称
- State(状态):
- 1 - 触发器已启动。
- 2 - 触发器已停止。
- 3 - 触发器已禁用。
- 4 - 设备正在启动
- 5 - 设备正在停止
- 6 - 未知
- Successes(成功):以成功结束的执行次数。
- InProgress(进行中):正在进行的执行数量。
- Failures(失败):以失败结束的执行次数。
触发器列表响应示例:
[
{"name":"TestTrigger1","state":"2","successes":"0","inProgress":"0","failures":"0"},
{"name":"TestTrigger2","state":"2","successes":"0","inProgress":"0","failures":"0"}
]
devicewise.projectList(callbackSuccess, callbackError)
获取 deviceWISE 网关上已定义项目的列表。
- callbackSuccess(projects):返回项目列表的回调函数。每个项目均包含名称和状态。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
响应
- Name(名称):项目的名称
- State(状态):
- 1 - 项目已启动。
- 2 - 项目已停止。
项目列表响应示例:
[
{"name":"Project1","state":"2"},
{"name":"Project2","state":"2"}
]
devicewise.triggerStart(projectName, triggerName, callbackSuccess, callbackError)
启动触发器。
- projectName(项目名称):包含触发器的项目的名称。
- triggerName(触发器名称):触发器的名称。
- callbackSuccess():成功时调用的回调函数。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
devicewise.triggerFire(projectName, triggerName, callbackSuccess, callbackError)
激发触发器。
- projectName(项目名称):包含触发器的项目的名称。
- triggerName(触发器名称):触发器的名称。
- callbackSuccess():成功时调用的回调函数。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
devicewise.triggerStop(projectName, triggerName, callbackSuccess, callbackError)
停止触发器。
- projectName(项目名称):包含触发器的项目的名称。
- triggerName(触发器名称):触发器的名称。
- callbackSuccess():成功时调用的回调函数。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
devicewise.projectStart(projectName, callbackSuccess, callbackError)
启动项目。
- projectName(项目名称):项目的名称。
- callbackSuccess():成功时调用的回调函数。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
devicewise.projectStop(projectName, callbackSuccess, callbackError)
停止项目。
- projectName(项目名称):项目的名称。
- callbackSuccess():成功时调用的回调函数。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
devicewise.deviceInfo(device, callbackSuccess, callbackError)
获取设备信息。
- device(设备):要查询信息的设备的名称。
- callbackSuccess(xmlString):包含具有设备信息的 xml 字符串的回调函数。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
响应
- Type(类型):deviceWISE 驱动程序代码列表中的设备类型。驱动程序代码列表见 deviceWISE 驱动程序代码列表部分。
- Type_name(类型名称):deviceWISE 驱动程序代码列表中的设备型号名。
- State(状态):
- 1 - 设备已启动。
- 2 - 设备已停止。
- 3 - 设备已禁用。
- 4 - 设备正在启动
- 5 - 设备正在停止
- 6 - 未知
- 变量:
- Name(名称):变量名称
- Type(类型):变量数据类型
- xdin - X 维(数组点)
- ydim - Y 维(2D 数组)
- zdim - Z 维(3D 数组)
设备信息 XML 响应示例:
<?xml version="1.0" encoding="UTF-8"?>
<DeviceDefinition name="TestDevice" type="9"
type_name="Global Variables" state="1"
options="2104"><Variables><VariableInfo
name="boolArray" type="BOOL" xdim="3"
options="7"/><VariableInfo name="bool" type="BOOL"
options="7"/><VariableInfo name="int1" type="INT1"
options="7"/><VariableInfo name="int2" type="INT2"
options="7"/><VariableInfo name="int4" type="INT4"
options="7"/><VariableInfo name="int8" type="INT8"
options="7"/><VariableInfo name="uint1" type="UINT1"
options="7"/><VariableInfo name="uint2" type="UINT2"
options="7"/><VariableInfo name="uint4" type="UINT4"
options="7"/><VariableInfo name="uint8" type="UINT8"
options="7"/><VariableInfo name="float4"
type="FLOAT4" options="7"/><VariableInfo
name="float8" type="FLOAT8"
options="7"/><VariableInfo name="string"
type="STRING" length="32" options="7"/><VariableInfo
name="boolMatrix" type="BOOL" xdim="100"
options="7"/><VariableInfo name="int1Array"
type="INT1" xdim="3" options="7"/><VariableInfo
name="int2Array" type="INT2" xdim="3"
options="7"/><VariableInfo name="int4Array"
type="INT4" xdim="3" options="7"/><VariableInfo
name="int8Array" type="INT8" xdim="3"
options="7"/><VariableInfo name="uint1Array"
type="UINT1" xdim="3" options="7"/><VariableInfo
name="uint2Array" type="UINT2" xdim="3"
options="7"/><VariableInfo name="uint4Array"
type="UINT4" xdim="3" options="7"/><VariableInfo
name="uint8Array" type="UINT8" xdim="3"
options="7"/><VariableInfo name="float4Array"
type="FLOAT4" xdim="3" options="7"/><VariableInfo
name="float8Array" type="FLOAT8" xdim="3"
options="7"/><VariableInfo name="stringArray"
type="STRING" xdim="3" length="32"
options="7"/></Variables><Structures/><MappedDescriptions/></DeviceDefinition>
devicewise.deviceStart(device, callbackSuccess, callbackError)
启动设备。
- device(设备):要启动的设备。
- callbackSuccess(xmlString):包含具有设备信息的 xml 字符串的回调函数。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
devicewise.deviceStop(device, callbackSuccess, callbackError)
停止设备。
- device(设备):要停止的设备的名称。
- callbackSuccess(xmlString):包含具有设备信息的 xml 字符串的回调函数。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
devicewise.channelSubscribe(channel, callbackSuccess, callbackError, callbackPost)
订阅 deviceWISE 信道。
-
channel(信道):要订阅的信道。
- callbackSuccess():成功时调用的回调函数。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
- callbackPost(data):收到信道发布时调用的回调函数。响应是包含发布具体信息的字符串数组。
响应示例:订阅信道 "TRIGGER"(触发器)
-
Format(格式):("TRIGGER", LoadStatus, ProjectName, TriggerName, Status, State, User)
-
Load Status(加载状态):
-
1 - Add(添加)
-
2 - Delete(删除)
-
3 - Edit(编辑)
-
4 - State Change(状态更改)
-
5 - Load Status Changed(加载状态已更改)
-
-
Project Name(项目名称):项目的名称
-
Trigger Name(触发器名称):触发器的名称
-
Status(状态):
-
1 - Loaded(已加载)
-
2 - Unloaded(已卸载)
-
3 - Loading(正在加载)
-
4 - Unloading(正在卸载)
-
-
State(状态):
-
1 - Started(已启动)
-
2 - Stopped(已停止)
-
3 - Disabled(已禁用)
-
-
User(用户):触发器的最后一个用户。仅在用户设置状态时显示。
触发器的启动和停止日志(最新条目显示在底部):
- Stopping (unloading & started... stopped... unloaded & stopped)
- TRIGGER,5,WebAPI,TestTrigger,2,2
Load Status Change, Unloaded, Stopped
- TRIGGER,4,WebAPI,TestTrigger,2
Status Change, Stopped
- TRIGGER,5,WebAPI,TestTrigger,2,2
-
- TRIGGER,5,WebAPI,TestTrigger,4,1
Load Status Change, Unloading, Started
- TRIGGER,5,WebAPI,TestTrigger,4,1
- Starting (loading & stopped, started, loaded & started)
- TRIGGER,5,WebAPI,TestTrigger,1,1
Load Status Change, Loaded, Started
- TRIGGER,5,WebAPI,TestTrigger,1,1
-
- TRIGGER,4,WebAPI,TestTrigger,1,admin
State Change, Started, admin
- TRIGGER,4,WebAPI,TestTrigger,1,admin
-
- TRIGGER,5,WebAPI,TestTrigger,3,2
Load Status Change, Loading, Stopped
- TRIGGER,5,WebAPI,TestTrigger,3,2
devicewise.networkPing(IPAddress, numPings, callbackSuccess, callbackError)
Ping IP 地址。
- IPAddress(IP 地址):要 Ping 的 IP 地址。
- numPings:要发送的 Ping 数量。
- callbackSuccess(data):成功时调用的回调函数。返回带有 Ping 响应时间的数组,以毫秒为单位。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
响应:
响应时间数组,以毫秒为单位
[ping1response, ping2response, ping3response, ping4response]
网络 Ping 响应示例:
[2, 3, 2, 2]
devicewise.referenceList(sourceType, source, options, callbackSuccess, callbackError)
获取引用列表。
-
sourceType(源类型):要获取引用的对象类型。
- source(来源):要获取引用的对象名称。必须与 sourceType(源类型)具有相同的类型。
- 引用方向:
- 0 - 向前:被来源引用
- 1 - 向后:引用来源
- 2 - 两者:引用来源以及被来源引用。
- callbackSuccess(data):成功时调用的回调函数。返回包含引用信息的 xml 字符串。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
返回的 XML
- crossreference name(交叉引用名称):来源名称。
- referencedby name(引用方名称):引用该来源的名称。
- type(类型):引用的类型。
引用列表响应示例:<?xml version="1.0"
encoding="UTF-8"?> <crossreference name="TestDevice"
type="device"><referenceby name="WebAPI/TestTrigger"
type="trigger"><referenceby name="WebAPI"
type="project"/></referenceby></crossreference>
本例中 TestDevice 是触发器 WebAPI/TestTrigger 以及项目 WebAPI 所引用的设备。这是有意义的,因为 TestDevice 将由一个触发器 WebAPI/TestTrigger(作为项目 WebAPI 的一部分)使用。
devicewise.SQLiteExec(query, callbackSuccess, callbackError)
执行 SQLite 查询。
- query(查询):要执行的查询字符串。
- callbackSuccess(data):处理 SQLite 响应的回调函数。响应是数据数组,其结构基于查询类型。
- callbackError(errorCode):发生错误时调用的回调函数。返回错误代码。
SQLiteExec 响应示例 1
- Query(查询):插入到 SampleTable 值中 ("samplevalue")
- Response(响应):受影响的行:1
SQLiteExec 响应示例 2
- Query(查询):SELECT * FROM SampleTable;
- Response(响应):1,1,SampleTable;,SampleColumn,samplevalue
错误代码
可以从 deviceWISE 工作台查找错误代码,其方法是选择右上角的 Help(帮助) 菜单,然后选择Error Lookup(错误查找)。
Web 演示应用
Demo Web App 是一款基于 Web 浏览器的应用,可用于测试所有 WebSocket API 扩展 Javascript 库函数。
WebSocketAPI_Demo_Project_and_Device.dwx 包括用于测试 Web 演示应用的 deviceWISE 项目、触发器和设备的示例。
如果想要测试 SQLite 库函数,则可以导入 Demo Table(演示表)。
要运行 Web 演示应用:
- 安装 WebSocket API 扩展
- 确保 HTTP 服务器处于 Started(已启动)状态
- 从以下导出文件导入演示项目、触发器和设备:WebSocketAPI_Demo_Project_and_Device.dwx
- 导入 SQLite 演示表:演示表
- 将 Demo Web App 提取到网关的 Staging Browser(暂存浏览器)的 /www 目录中
- 将 Chrome 浏览器指向 http://localhost:8080/API_Demo/index.html。
Web 演示应用的用户界面应如下图所示: