jetlinks是一个开源的物联网云平台,功能比较强大。支持MQTT、TCP、COAP、HTTP等设备的接入,若要在平台中接入设备,可根据此文档进行相关操作。

关于该平台的基本信息,这里不做过多介绍,详细功能附上链接 JetLinks 物联网基础平台(2.x)

后续将出一系列在该平台做接入设备涉及的MQTT、TCP协议开发、数据qingqi的博客,欢迎大家评论交流。

要做该平台的接入,首先了解官网,下载源码,安装依赖环境,相关环境后端包括Java、jdk 1.8及以上、IDEA、redis、elasticsearch、当然数据库也是必须的,前端安装node,更新yarn即可,这里不做过多介绍,上述环境推荐docker安装,简单方便。

这里附上源码链接:https://gitee.com/jetlinks/jetlinks-communityJetLinks物联网基础平台 - JetLinks物联网基础平台https://gitee.com/jetlinks/jetlinks-community

注: 图中左图后端代码(模块较多,目前仍在学习中,后续介绍),右图前端代码。

### 1. 环境安装和平台本地部署

安装完软件,下载完代码后,下一步便是部署前后端项目,当然官网也有说明,这里以本人在做时的截图给大家呈现,没问题可以跳过。

先运行后端代码,打开后端模块 jetlinks-standalone

->配置redis,根据自己安装的redis真实信息进行配置

->配置数据源

 ->配置elasticsearch

运行模块jetlinks-standalone下启动类JetLinksApplication

至此,后端启动成功!

接下来是前端,打开node命令行工具

进入前端代码所在目录,这里我是E盘下的目录

修改配置文件config/proxy.ts,本人局域网内主机IP为以下地址,上面运行后端端口8848,以下配置让 前端访问的地址指向到我们刚运行的后端项目。

根据官网启动说明文档,运行yarn dev 

可能出现如下。

网上搜索说是版本不一致,本人前端小菜鸡,按大神指示照做,果然正确

> set NODE_OPTIONS=--openssl-legacy-$ npm run start:dev

运行测试

至此,本地部署实现。

### 2. TCP协议的设备接入

步骤一  jetlinks平台中配置

​ 设备管理下,配置 产品->设备

​ 运维管理下,配置设备接入网关-> 网格组件 -> * 协议管理 *(这里需要做协议开发)

这些配置根据官方文档都能完成,这里介绍下易掉坑的几个地方。

FQ1: 第一个,配置协议时的公网地址为TCP客户端发起访问时,需要连接的地址,公网地址为当前服务器的IP。

FQ2:第二个,协议管理时,协议怎么选?

从官网JetLinks物联网基础平台/jetlinks-official-protocol下载代码,package中已经为我们提供了可用的协议jar包,但这个协议包的通信过程,报文数据需按平台的格式来发送。

协议管理下,选择协议,上传jar包时,可直接选我们刚下载package目录下的协议jar包。 

特别注意,官网协议包里,这里是客户端向服务器发送数据时,每一次都会被调用的地方,包括发送建立连接的报文,这里如果有执行readInt,那么报文数据前就需要带上4个字节的数据长度。

步骤二 支持自定义TCP的协议开发

idea下,打开jetlinks-official-protocol工程,默认包路径 org.jetlinks.protocol.official.tcp 下,这里有几个关键类,若要做开发,可看了这些类的代码后,进行编写修改。

1.tcp/TcpDeviceMessageCodec:tcp设备连接后,发送数据时,平台会调用的解析类,设备发送的数据将该 类中的decode方法进行解析,因此处理自定义数据时,接收客户端发送数据的入口在这里。

    @NonNull@Overridepublic Publisher<? extends Message> decode(@NonNull MessageDecodeContext context) {
​ByteBuf payload = context.getMessage().getPayload();//read index
//        payload.readInt();
​
//        处理tcp连接后的首次消息if (context.getDevice() == null) {return handleLogin(payload, context);}System.out.println("zhouxiong-test:"+context);System.out.println("zhouxiong-test:"+context.getDevice());return Mono.justOrEmpty(BinaryMessageType.read(payload, context.getDevice().getDeviceId()));}

2. binary/BinaryMessageType: 上述decode方法调用后,会通过该枚举中的read方法,这里我简单做了条件分支处理,根据获取的数据报文长度,判断数据长度未超过47为平台的正常报文,超过47的话,认为该报文不是jetlinks平台默认报文格式

public static DeviceMessage read(ByteBuf data, String deviceIdMaybe) {int bytsLen = data.readableBytes();//执行报文数据解析后的回调方法BiFunction<DeviceMessage, Integer,DeviceMessage>  bf = (message, msgId) -> {String messageId = null;if (message.getDeviceId() != null) {//获取实际平台下发的消息IDMsgIdHolder holder = cache.get(message.getDeviceId());if (holder != null) {messageId = holder.getAndRemove(msgId);}}if (messageId == null && msgId > 0) {messageId = String.valueOf(msgId);}message.messageId(messageId);return message;};//接收到的数据长度若超过47,则此次报文长度为厂家报文,否则是标准报文if(bytsLen<47)return read(data, deviceIdMaybe, bf);elsereturn read_silk(data, deviceIdMaybe, bf);
}

3.测试类test.java.official.binary.BinaryMessageTypeTest

该类下有几个测试方法,生成符合JetLinks官方的报文数据,模拟TCP数据通信时,客户端需要传递这种数据向服务端发送报文,主要有以下请求:

  • 设备上线->testOnline,方法中的设备号和授权码需根据实际信息进行修改

  • 数据上报->testReport,同上

  • 数据读/写等,此处未涉及到,不做介绍

设备上线方法testOnline

public void testOnline() {DeviceOnlineMessage message = new DeviceOnlineMessage();message.setDeviceId("1004");message.addHeader(BinaryDeviceOnlineMessage.loginToken, "admin");ByteBuf byteBuf = BinaryMessageType.write(message, Unpooled.buffer());System.out.println(ByteBufUtil.prettyHexDump(byteBuf));System.out.println(ByteBufUtil.prettyHexDump(Unpooled.buffer()                              .writeInt(byteBuf.readableBytes()).writeBytes(byteBuf)));

上述testOnline报文为:01 00 00 01 87 a3 2b fb 16 ff ff 00 04 31 30 30 34 00 05 61 64 6d 69 6e,通过网络调试助手工具,即可模拟TCP设备上线,连接后以十六进制方式发送该数据,即完成设备上线命令!

设备数据上报testReport

@Testpublic void testReport() {ReportPropertyMessage message = new ReportPropertyMessage();message.setDeviceId("1001");message.setMessageId("test123");message.setProperties(Collections.singletonMap("temperature", 37.6));doTest(message);

上述报文为:03 00 00 01 87 a3 30 92 d7 00 01 00 04 31 30 30 31 00 01 00 0b 74 65 6d 70 65 72 61 74 75 72 65 0a 40 42 cc cc cc cc cc cd,通过网络调试助手工具,发送上线命令后,以十六进制方式发送上述命令,即完成1001设备数据上报,上报温度为37.6!

测试,新增一个产品,名称为:测试TCP通信,连接信息本机局域网地址,端口为1887,secureKey为admin.

新增设备,所属产品为刚刚新增的产品,注意需要启动上述产品

在该产品下新增物模型->温度传感器,配置如图

最后,记得启用该设备,这里不截图了

### 3.TCP通信测试

打开网络调试助手,配置访问的远程主机IP和端口,发送区勾选“按十六进制发送” 

网络调试助手打开了,发送连接的报文数据怎么写呢?

网络调试助手先放着,打开协议包代码,代码的测试包下,testOnline方法中,将deviceID和logintoken的值改为我们前面配置的信息,这里我的设备ID为DV001,改好后运行测试方法,输出报文如下。

输出的第二段报文为带上长度信息的报文,这里不用,为什么不用?因为我们前面在解码方法中decode里注释了readInt方法。

闲话少说, 来,看测试结果,调试助手中点击连接,此时助手和服务端建立Socket连接

点击发送,发送设备上线报文给服务端,此时网页中DV001设备正式上线

至此,设备上线接入成功。那么,数据上报可以吗?

打开协议包代码,修改设备ID和温度数据,运行测试代码,得到生成报文(见控制台)

将控制台中报文数据拷贝到调试助手中

点击发送,走你!

我们刚刚上报的温度数据便到达平台!

最后,作者是工作了几年的程序员小白,欢迎大佬批评指正!创作不易,如果有用,恳请点赞评论支持一下!

后续针对JetLinks平台,将继续退出关于该平台的协议开发和源码开发相关文章!

JetLinks平台二次开发 : 一、TCP设备接入JetLinks平台相关推荐

  1. 运用Java对微信公众平台二次开发技术——开发者模式接入

    当初我在这碰到了很多问题,市面上以及网络上的资料特别少,所以当初碰了很多壁,所以现在跟大家分享一下,如何用Java,对微信公众平台进行二次开发. 一.开发预备知识: 最基本的JavaSE与JavaWe ...

  2. JEECG 智能开发平台二次开发帮助文档

    JEECG 智能开发平台二次开发帮助文档  http://code.google.com/p/jeecg/downloads/list

  3. mapgis java二次开发_MapGIS开发平台二次开发.docx

    MapGIS开发平台二次开发解决方案 2012年8月武汉 前言 MapGIS IGSS地理空间信息共享服务平台解决方案产品,在超大规模.虚拟化的硬件架构基础上,提供以微内核群(MicroCore)为支 ...

  4. NBIOT 设备接入ONENET平台

    NBIOT 设备接入ONENET平台 一.ONENET平台的注册与配置 1.1.注册与创建产品 1.2.添加设备: 1.2.1 获取 IMEI 及 IMSI 二.连接NB-IOT 2.1 ONETET ...

  5. 【TB-02模组专题⑦】TB02二次开发玩转各种接入天猫精灵智能家居产品,彩灯、灯具、插座、单火线总有一款适合你。

    本<安信可ble mesh蓝牙模组TB-02模组专题>系列博客学习由官方博客 CSDN安信可博客 潜心所力所写.如有不对之处,请留言,我们及时更改. 1.BLE MESH开发环境linux ...

  6. 如何通过安防网络设备的EHOME协议把设备接入EasyCVR平台,进行互联网直播及分发?

    在对接项目过程中,我们发现实际的安防可视化监控系统搭建中,设备端的协议往往会被分为很多种,设备型号也多种多样.以往,不同协议对应不同的方案部署,在同一项目有多个不同协议设备的场景下,这样的部署显得繁琐 ...

  7. 智启联云GPS定位平台二次开发接口,支持808/1078设备接入

    接口在线文档 新版本开发接口,集成了gps.视频等http接口,接口返回结构化json数据,定义简单,方便系统集成,接口命名采用目录分级形式,方便后期扩展,支持808/1078部标设备接入.

  8. 从YARN迁移到k8s,滴滴机器学习平台二次开发是这样做的

    整理 | 夕颜 出品 | AI科技大本营(ID:rgznai100) [导读]人工智能时代,机器学习已经渗透进每个领域,改变了这些领域的业务模式.技术架构以及方法论.随着深度学习技术近年来快速发展,高 ...

  9. 微信公众平台二次开发 API开发 服务账号开发 订阅号开发

    移动互联网时代已经到来,微信已经有6亿多的用户,是移动端最大的入口.微网站,微商城建设,提供定制化服务,根据客户需求开发.客户很方便就能了解到公司的所有信息和最新动态,随时随地都可以跟公司进行互动,增 ...

最新文章

  1. 使用MS VS的命令来编译C++程序
  2. aws fargate_我如何在AWS Fargate上部署#100DaysOfCloud Twitter Bot
  3. svn修改提交路径_使用SVN钩子强制提交日志和限制提交文件类型
  4. Java常见面试题及答案汇总
  5. Docker安装redis 设置密码
  6. c# datagridview 相关操作。
  7. 2017 ACM-ICPC乌鲁木齐网络赛 G. Query on a string(KMP+树状数组)
  8. 多块盘制作成一个lvm
  9. 2021版:《人人都是产品经理》系列图书的说明
  10. mysql 客户端命令行_Windows的MySQL命令行客户端
  11. 一套键鼠同时控制三台电脑?罗技无线键鼠为办公效率加速
  12. Redis命令之集合(无序)
  13. 2. UFS2.1 —— Descriptor描述符
  14. 【数据结构与算法】专栏系列文章目录
  15. 高手攻关心得:RHCE实战详细经验
  16. R语言 数据集某一列中不重复的数据以及其个数
  17. 公众号改名竟是为了这个?
  18. 分享一篇父母对孩子教育方法的文章
  19. 狭义相对论--洛仑兹变换推导
  20. 假设有两种微生物 X 和 YX出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。

热门文章

  1. RuntimeError: wrapped C/C++ object of type QPushButton has been deleted
  2. 汉字风格迁移篇---SKFont:具有条件深度对抗网络的骨架驱动韩文字体生成器
  3. AFW短信防火墙 v1.0 beta 发布
  4. 【Jmeter控制执行顺序 Critical Section Controller临界部分控制器】
  5. Flex 相关电子书籍下载链接收录
  6. 计算机最炫民族风教案,辽师大版信息技术四下第一单元第6课《最炫民族风》教案1.doc...
  7. css3 fieldset,生僻标签 fieldset 与 legend 的用法详解
  8. 美国研究生2020年计算机专业排名,USNews美国大学2020年计算机理论专业研究生排名...
  9. FM 发射模块QN8027软件android 5.1实现分析
  10. 第四范式联合创始人陈雨强:机器学习在工业应用中的新思考