1.4.2.2.9 设备在线模拟

优质
小牛编辑
134浏览
2023-12-01

Web Device 虚拟设备介绍

更新时间:2018-07-02 15:10:04

Web Device 是用来在浏览器中进行设备快速模拟的工具,有了此工具就不需要依赖其他硬件和工具,只要使用浏览器打开一个 URL,就能实现设备连接、数据上下行通信。

创建测试设备

创建测试设备,在设备列表中点击“在线模拟”:

image.png | left | 747x402

image.png | left | 747x416

注意只有使用 Alink 数据格式的设备才能进行模拟

功能介绍

模拟设备上线/下线

点击“设备模拟”新窗口右上角的“上线”按钮,将完成虚拟设备上线:

image.png | left | 747x415

可以看到,设备模拟工具界面分为三个区域,分别是工具栏、设备模拟面板和设备日志区。其中设备日志区可以看到设备已上线的消息:

image.png | left | 747x417

点击工具栏右侧的“下线”,可以将虚拟设备下线。

模拟设备属性上报

点击右上角的“在线调试”按钮,可以在浏览器的新 Tab 打开云端的在线调试界面,界面上显示了设备的在线状态和上下行通信日志,可以看到云端检测到设备已上线:

image.png | left | 747x415

在设备模拟工具的“属性上报”面板上,将“主灯开关”属性置为“开启”,然后点击“上报”按钮,可以看到设备日志区显示了上报属性成功的消息:

image.png | left | 747x417

同时云端也确实收到了设备上报的数据:

image.png | left | 747x435

也可以使用 JSON 格式进行属性值上报:

image.png | left | 747x416

模拟设备事件上报

切换到设备模拟工具“事件上报”面板上,然后点击“上报”按钮,可以看到设备日志区显示了上报事件成功的消息:

image.png | left | 747x416

可以看到云端同样也收到了设备事件上报的消息:

image.png | left | 747x416

和设备属性一样,设备事件同样也支持使用 JSON 属性值作为事件数据上报:

image.png | left | 747x417

模拟设备脚本

简单上报脚本

在“设备行为模拟”面板中切换到“模拟脚本” Tab,将脚本内容改成:

// 灯的开关属性
const properites = {
    LigthSwitch: 1
};
console.log('上报属性:', properites);
device.postProps(properites, (err, res) => {
  console.log(err, res);
});

点击下方的“运行”按钮,可以看到设备日志区显示了脚本执行的日志:

image.png | left | 747x417

监听云端消息 & 上报属性脚本

在“选择常用模板”中选择“监听 & 上报”,然后点击“运行”按钮,可以看到右侧日志区输出了脚本输出的“正在监听云端消息...”的日志:

image.png | left | 747x416

在云端调试页面下方的调试功能里选择“主灯开关(LightSwitch)”,方法选为“设置”:

image.png | left | 747x70

将下方 JSON 编辑器的内容替换成:

{"LightSwitch":1}

image.png | left | 747x434

然后点击“发送指令”按钮:

image.png | left | 174x80

切换到 Web Device 虚拟设备页面,发现设备日志中也输出了收到云端消息、上报属性成功的日志,说明数据成功接收又成功被上报:

image.png | left | 747x416

同时在线的实时日志查看工具中,我们发现了设备也成功将云端下发的 LightSwitch 属性值上报到云端,说明云端同样收到了设备上报的数据:

image.png | left | 747x154

定时上报脚本

在“选择常用模板”中选择“定时上报”,将脚本内容改成:

// 每 2 秒上报一次
const interval = 2000;
console.log('开始定时上报...');
setInterval(() => {
  // 请在 { } 中填写属性值
  const properites = {
     LightSwitch: 1
  };
  console.log('上报属性:', properites);
  device.postProps(properites);
}, interval);

点击“运行”按钮,随后可以看到,设备日志区域会输出每 2 秒会上报一条数据到云端的日志:

image.png | left | 747x416

网关设备模拟

新建一个网关类型的产品:

image.png | left | 747x444

创建一个网关类型测试设备:

image.png | left | 747x132

并且创建一个普通设备作为网关的测试子设备:

image.png | left | 747x425
打开网关测试设备的在线模拟链接:

image.png | left | 654x258

点击“上线”,切换到“模拟脚本”Tab,在脚本中填入申请到的子设备(普通设备)三元组:

// 请在 { } 中填写子设备激活凭证
const deviceConfig = {
  productKey: '<子设备productKey>',
  deviceName: '<子设备deviceName>',
  deviceSecret: '<子设备deviceSecret>'
};

console.log('开始执行脚本,请稍等...');
// 添加拓扑
gateway.addTopo(deviceConfig, (err, result) => {
  console.log(err, result);

  // 子设备上线
  gateway.login(deviceConfig, (err, result) => {
    console.log(err, result);

    // 子设备属性数据上报
    gateway.postSubDeivceProps(
      deviceConfig,
      {
        // 在这里填写子设备属性
      },
      (err, result) => {
        console.log(err, result);
        console.log('子设备属性上报完成!');
      }
    );
  });
});

点击“运行”按钮,可以看到设备日志区打印了子设备添加拓扑成功、上线成功、属性上报成功等消息:

image.png | left | 747x415

Q & A

  • 设备在线模拟原理是什么?

  • 脚本是如何运行的?

    • 脚本是运行在 Web Worker 上的,Web Worker 起到了沙箱隔离作用,脚本的运行不影响页面功能。