合作伙伴工作台
注册

边缘网关驱动开发说明

准备工作

1.在准备开发驱动的机器环境上,安装java 1.7以上版本。

2.下载驱动接口包aep-edge-driveninterface-1.0.0.jar

*demo工程中已经包含了驱动接口包,如果自己新建工程开发,需要引用此jar包。

3.下载驱动demo工程driven-demo-0.0.1.zip

*demo工程中有3个驱动实现类,实际一个驱动包中只能放一个 驱动 实现类,如果有多个 驱动 实现类,本地启动时可以都加载,但是部署下发启动时,只有一个 驱动 实现类会被加载。

 

私有TCP/UDP协议开发说明

私有TCP/UDP协议的接入部分由软网关管理,驱动只需要实现上下行的编解码即可。

 

1.基本接口。需要实现的基本接口如下:

 

序号

接口名称

备注

1

public String   getProductId()

获取驱动对应用来解析的产品id,部署时优先使用配置的产品id

2

public Integer   getPort()

获取驱动的监听端口 ,部署时优先使用配置的端口

3

public   abstract String decode(byte[] in)

解码设备上报的消息,格式参考自有网关对接/网关接入规范中的子设备上报数据报文,其中productId可以不用加,deviceId也可以不写,只添加deviceSn(即设备编号)即可,软网关会自动添加productIddeviceId

4

public   abstract byte[] encode(String in)

编码给设备的指令,指令格式参考自有网关对接/网关接入规范中的平台下行命令给子设备报文

5

public Integer   getHeartbeatTimeout()

设备心跳超时时间

6

public boolean   getIsNoAuthLogin()

设备是否不认证登陆,如果为true,软网关后台自动根据部署下发的设备信息到翼物联网平台(AIoT)认证

 

2.私有TCP协议驱动开发说明

由于TCP有粘包问题,所以需要区分报文帧。现有2种方式,一种是用特殊字符做分隔符区分报文数据,还有一种是用长度字段来分割报文。

 

i.       TCP分隔符区分报文模式开发说明

继承TcpDelimiterBasedAdaptorHandler抽象类,实现上面的4个基本接口(基本接口1-4),同时再实现下面的抽象接口。

 

序号

接口名称

备注

1

public   abstract byte[] getDelimiters()

获取报文分隔符

*参考demo工程中的MyTcpDelimiterBasedHandler类。

 

ii.      TCP长度字段区分报文模式开发说明

继承TcpLengthFieldBasedAdaptorHandler抽象类,实现上面的4个基本接口(基本接口1-4),同时再实现下面的抽象接口。

序号

接口名称

备注

1

public int   getMaxFrameLength()

帧的最大长度。 如果帧的长度大于此值,则会抛出{@link   TooLongFrameException}

2

public   abstract int getLengthFieldOffset()

长度字段的偏移量

3

public   abstract int getLengthFieldLength()

长度字段的长度

4

public   abstract int getLengthAdjustment()

要添加到长度字段值的补偿值

5

public   abstract int getInitialBytesToStrip()

从解码帧中剥离的第一个字节数

*参考demo工程中的MyTcpLengthFieldBasedHandler类。

 

3.私有UDP协议驱动开发说明

继承UdpAdaptorHandler抽象类 ,实现基本接口即可。

*参考demo工程中的MyUdpHandler类。

 

4.完全自定义驱动开发说明

自定义驱动开发实现实例可以参考蓝牙驱动示例,驱动打包时需要把所有依赖类都打包到jar包中,否则驱动将无法加载。

继承ICustomDriven接口,实现里面的所有接口即可,接口说明如下:

序号

接口名称

备注

1

public void setAepInterface(AepInterface* aepInterface)

设置aep接口,驱动初始化时,网关会调用此接口设置aep接口

参数说明:

 aepInterface:平台接口实例

2

public void   setProductId(String productId)

设置产品id,部署下发时,网关会调用此接口设置产品id

参数说明:

productId:产品id

3

public String   getProductId()

获取产品id

@return 产品id

4

public void   setPort(int port)

设置监听端口,部署下发时,网关会调用此接口设置监听端口

@param port

5

public void   start() throws Exception

启动监听服务,注意:这里不能阻塞线程

@throws   Exception

6

public void   stop() throws Exception;

停止监听服务

@throws   Exception

7

public void receiveData(String   topic, String data)

收到平台消息

参数说明:

topic:主题

data:数据,格式为json

 

其中AepInterface中有如下接口可以调用:

序号

接口名称

备注

1

public void   publishDataToAep(String topic, String data)

推送数据给平台

参数说明:

topic:推送的主题

data:推送的数据,格式参考自有网关对接/网关接入规范中的子设备数据上报

2

public Map<String,   ProductDto> getDeviceCache()

@return 返回的是平台部署下发的设备信息,key是产品id

3

public Result   deviceAuth(String productId, String deviceId, String password, ICustomDriven   driven)

设备到平台认证(此步骤必须要做,否则设备无法收到平台下发的指令

参数说明:

productId:产品id

deviceId:设备id

password:密码,也就是特征串

driven:对应的驱动接口,填调用者自己

@return

注: deviceAuth接口必须在设备上线时调用,否则设备无法收到平台下发的指令


这篇文档是否帮助您解决了问题?
如果您愿意进一步帮助我们改进文档 ,请留下您的联系方式。