边缘网关驱动开发说明

1)准备工作

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

2)下载驱动接口包

aep-edge-driveninterface-1.0.0.jar

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

3)下载驱动demo工程

driven-demo-0.0.1.zip

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

4)私有TCP/UDP协议开发说明

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

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

public String getProductId(); // 获取驱动对应用来解析的产品id,部署时优先使用配置的产品id

public Integer getPort(); // 获取驱动的监听端口 ,部署时优先使用配置的端口

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

public abstract byte[] encode(String in); // 编码给设备的指令,指令格式参考自有网关对接/网关接入规范中的平台下行命令给子设备报文

public Integer getHeartbeatTimeout(); // 设备心跳超时时间

public boolean getIsNoAuthLogin(); // 设备是否不认证登陆,如果为true,软网关后台自动根据部署下发的设备信息到aep平台认证

4.1)私有TCP协议驱动开发说明

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

4.1.1) TCP分隔符区分报文模式开发说明

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

public abstract byte[] getDelimiters();//获取报文分隔符

参考demo工程中的MyTcpDelimiterBasedHandler类。

4.1.2) TCP长度字段区分报文模式开发说明

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

public int getMaxFrameLength(); //帧的最大长度。 如果帧的长度大于此值,则会抛出{@link TooLongFrameException}。

public abstract int getLengthFieldOffset(); // 长度字段的偏移量

public abstract int getLengthFieldLength(); // 长度字段的长度

public abstract int getLengthAdjustment(); // 要添加到长度字段值的补偿值

public abstract int getInitialBytesToStrip(); // 从解码帧中剥离的第一个字节数

参考demo工程中的MyTcpLengthFieldBasedHandler类。

4.2)私有UDP协议驱动开发说明

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

参考demo工程中的MyUdpHandler类。

5)完全自定义驱动开发说明

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

/**

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

* @param aepInterface aep接口实例

*/

public void setAepInterface(AepInterface aepInterface);

/**

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

* @param productId 产品id

*/

public void setProductId(String productId);

/**

* 获取产品id

* @return 产品id

*/

public String getProductId();

/**

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

* @param port

*/

public void setPort(int port);

/**

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

* @throws Exception

*/

public void start() throws Exception;

/**

* 停止监听服务

* @throws Exception

*/

public void stop() throws Exception;

/**

* 收到平台消息

* @param topic 主题

* @param data 数据,格式为json

*/

public void receiveData(String topic, String data);

其中AepInterface中有如下接口可以调用, deviceAuth接口必须在设备上线时调用,否则设备无法收到平台下发的指令:

/**

* 推送数据给aep平台

* @param topic 推送的主题

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

*/

public void publishDataToAep(String topic, String data);

/**

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

*/

public Map<String, ProductDto> getDeviceCache();

/**

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

* @param productId 产品id

* @param deviceId 设备id

* @param password 密码,也就是特征串

* @param driven 对应的驱动接口,填调用者自己

* @return

*/

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

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

搜索结果 ""

    没有搜索结果 ""