当前位置: 首页 > 后端技术 > Node.js

第一次尝试!第一次尝试在Spirit1中实现DDC协议的嗅探器

时间:2023-04-03 17:23:20 Node.js

!在Spirit1实现DDC协议嗅探器之前,我们先从一台搭载智能边缘计算系统EdgerOS的设备Spirit1入手。通过这个设备,我们可以将应用程序连接到设备上,并通过javascript应用程序控制连接的设备。我准备给这台Spirit1连接一个基于SDDC协议的红外线温度传感设备来检测我房间的温度。红外测温器件的开发可以参考这篇文章:第一个基于ESP32S的应用——红外测温枪。经过扫描,发现,最后通过SDDC协议在爱智的设备应用中给Spirit1添加设备,问题来了。没想到Spirit1没收了也收到消息,然后去官网摸索了一个多小时,最后得出的结论是他们没有提供可测试的入口(ノ=Д=)ノ┻━┻。不过幸运的是,我在他们的官网上找到了几个小demo。按照官网的说法,我应该可以自己写一个应用,部署到Spirit1上,这样就可以通过手机控制设备了。设备发送消息后,我也应该可以通过应用获取相应的消息内容。随即去官网扫了应用开发说明,找到了一个实现这个功能的模块设备。唯一不足的是,该模块是精灵1中的内置模块,无法在其他系统环境中使用。只支持ZDDC和SDDC协议,不过我的红外温度传感器就是基于这个SDDC协议的,所以问题不大。最后只好自己实现一个可以自己调试的工具应用。为此,我花了整整一个晚上的时间看他们的应用开发,终于搞出了一个非常非常非常low的测试应用,终于部署了。看一下我的最终结果(哇哈哈哈……省略10000字):我这里简单实现了一下,页面有点简陋,只能凑合了。新增设备选择框、发送数据编辑框、设备响应显示框。使用起来也比较简单,选择一个设备,然后构造要发送的命令报文,然后点击发送,应用后台会通过设备模块对Spirit1中的数据进行处理,最后发送给红外测温device我写的,设备收到消息后会把当前环境温度和目标温度回传给Spirit1,我的应用后台也会通过device模块监听设备发送过来的消息,打印出来前端,这样我在开发的时候,可以测试一下设备和Spirit1的通信,只能对自己说一句:太牛?(??????ω?????)?。AFEWMOMENTLATER......说一下实现的技术难点(我说的是废话,(?ω?)hiahiahia),其实实现上面的功能非常容易,我只是是使用官网提供的一个内置模块设备完成,但是当我按照官网文档开发的时候,发现jsre和node.js很像。很多功能好像都是直接移植过来的,习惯用node.js开发的我应该更容易上手。前端好像没什么要求。我直接用官网推荐的vue开发的。很方便。直接复制代码就可以了(?ω?)hiahiahia。但是,这样一个单页的应用还是花了我一整天的时间。可能是第一次开发,整个过程出现了各种各样的问题。好在最后达到了预期的效果。开发全栈吧(~ ̄▽ ̄)~。放几行代码给大家看下!?つ:?????:?-︻╦???????══╤─constDevice=require('device');constdeviceMap=newMap();//设备列表集合//获取设备列表Device.list(true,(error,list)=>{if(error){console.error('Device.listerror!'+error);}else{list.forEach((item)=>{Device.info(item.devid,(error,info)=>{if(error){console.error('Device.infoerror!'+error);}else{deviceMap.set(item.devid,{devid:item.devid,...info,});}});});}});//监控设备加入Device.on('join',function(devid,info){deviceMap.set(devid,{devid,...info});io.emit('list',[...deviceMap.values()]);//通过socket.io向前端推送数据});//监控设备丢失Device.on('lost',function(devid){deviceMap.delete(devid);io.emit('list',[...deviceMap.values()]);//通过socket.io向前端推送数据});发送消息和监听设备消息比较简单:...constdev=newDevice();...//发送消息dev.send({unit:'Centigrade'},(err)=>{...},3)//监听接收设备发送的信息Messagedevice.on('message',function(msg){...console.log('message:',msg)//可以通过telnet192.168.128.1port81io.emit('message',味精);...});主要的关键代码就是上面这些了,一开始我有点惊讶[光━━( ̄ー ̄*|||━━定],这段代码竟然实现了应用程序与设备的通信?不过我也测试过稍后再给你,应用和设备之间确实已经建立了数据连接,有兴趣的可以去我的Gitee仓库看看通信工具的完整测试代码。好了,我就不写了完了,我要玩猫了,本文仅供个人学习使用,如有错误请指正,(?˙?˙)?谢谢老板!