问题来源: 文档
先看一下结论 ,不调用可以成功吗?
前提条件一存在topo关系
我的代码
配置文件
这里注释了添加设备方法,直接调用上线接口
结论
子设备一个也没有上线成功
分析原因
1.先看日志
2.这个是什么情况报出来的呢分析上线代码
一层一层的看,其实日志也能定位到,我是代码点进去的
关键代码这两行
ISubDeviceChannel subDeviceChannel = this.getSubDevChannel(subDevInfo);
if (subDeviceChannel == null) {
subDeviceChannel 不能为空 ,子设备通道不能为空
this.getSubDevChannel(subDevInfo);是去map里面拿的 ,是存在内存里面的
那这个subDeviceChannel什么时候才可以放进去呢
这里能看出GatewayChannel是一个单例模式 ,GatewayChannelImpl是GatewayChannel修饰的
所以搜索一下GatewayChannelImpl这个类有那个方法有把这个子设备通道放进去呢,唯一就只有topoAdd
然后看一下topoAdd调用链 就是addSubDevice调用了
3.所以结论
重启必须调用addSubDevice ,讲子设备通道放在单例模式的map中 ,不然无法走到上线的步骤 ,这个并不是平台必须要求的 ,sdk逻辑这么设计的 ,因为sdk本地要维护网关和子设备的关系是通过addSubDevice的