更新时间:2022-07-26 GMT+08:00
集成ModuleSDK后,上报数据成功后,设备状态显示为未激活,如何上报子设备状态?
集成ModuleSDK后,目前边缘非直连设备,不能动态获取设备状态,只能根据自身业务是否正常,主动上报设备状态,来更新设备状态。
代码解析:
片段一:初始化构造函数,初始化设备状态数据。
public class ModbusDriver implements GatewayCallback { /** * 驱动客户端,与边缘Hub建立MQTT连接 */ private DriverClient driverClient; ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); //ONLINE:设备在线。 //OFFLINE:设备离线。 //ABNORMAL:设备异常。 //INACTIVE:设备未激活。 //FROZEN:设备冻结。 static HashMap<String, String> dataMap = new HashMap() { private static final long serialVersionUID = 821550418990759366L; { this.put("0", "ONLINE");//在线 this.put("1", "OFFLINE");//离线 this.put("2", "ABNORMAL");//异常 this.put("3", "INACTIVE");//未激活 this.put("4", "FROZEN");//冻结 } }; public ModbusDriver() throws Exception { this.driverClient = DriverClient.createFromEnv(); } }
片段二:调用上报子设备状态API,循环更新子设备状态。(可根据自身业务调整,此代码只用于演示功能)
public static void main(String[] args) throws Exception { ModbusDriver modbusDriver = new ModbusDriver(); modbusDriver.start(); } public void start() throws Exception { // 设置回调,打开客户端 this.driverClient.setGatewayCallback(this); this.driverClient.open(); this.scheduler.scheduleAtFixedRate(new Runnable() { @Override public void run() { UpdateSubDevicesStatusEvent updateSubDevicesStatusEvent = new UpdateSubDevicesStatusEvent(); DeviceStatus deviceStatus = new DeviceStatus(); //设备Id(添加边缘设备时设置) deviceStatus.setDeviceId("scmj19961031b"); int j = new Random().nextInt(4); //随机获取设备状态上报 deviceStatus.setStatus(ModbusDriver.dataMap.get(String.valueOf(j))); updateSubDevicesStatusEvent.setDeviceStatuses(Collections.singletonList(deviceStatus)); try { ModbusDriver.this.driverClient.updateSubDevicesStatus(String.valueOf(new Random().nextInt(100000)), updateSubDevicesStatusEvent); } catch (Exception e) { e.printStackTrace(); } } }, 0, 5, TimeUnit.SECONDS); }
父主题: 子设备管理