代码解析
代码解释使用ModuleSDK开发应用集成ModuleSDK进行数据处理。
AppClient类有以下几个关键方法(具体参考JavaDoc)。
- createFromEnv(): AppClient创建时由此方法自动获取环境变量。
- setBusMessageCallback(): 设置总线消息回调,用于对设备上报的数据进行处理
- sendBusMessage(): 向总线发送消息,用于将处理后的设备数据发送到总线
- callDeviceCommand(): 调用设备命令
- getDevicesInfo(): 查询设备状态
MonitorApp代码解析
片段一
privatestaticfinalString INPUT = "input"; public static final String OUTPUT = "output";
定义输入和输出的端点,关于取值需要需在创建应用版本的inputs参数中定义,创建应用时输入端点与输出端点以及数据流转规则的配置与此是对应的。例如此处定义了输入端点为“input”,输出端点为“output”,则创建应用时的端点和软件配置输入端点需要配置为input,输出端点需要配置为output。
应用部署后还需要设置数据流转规则后,决定数据的流向。
/** * 电机设备的产品ID */ public static final String MOTOR_PRODUCT_ID = "60988d94aa3bcc02c0200667";
单击设备的产品ID,需要在IoTDA设备接入创建产品时获取。
片段二
private AppClient appClient; publicMonitorApp() throws GeneraException { appClient = AppClient.createFromEnv(); }
定义并创建AppClient, AppClient.createFromEnv()创建其配置参数将会自动从边缘节点环境中获取,数据的传输将会依赖AppClient。
片段三
publicvoidstart() throws GeneraException { //设置回调,打开客户端 appClient.setBusMessageCallback(INPUT, this);//设置收到设备数据的回调 appClient.open(); }
appClient在接收到数据后的处理动作需要用户定义,具体操作是设置回调。 这里设置回调方法并传入输入端点后,appClient将会开启并启动一个监听器监听输入端点的数据传输,接收到设备经过hub发来的数据后会调用回调进行数据处理。
片段四
public void onMessageReceived(BusMessage busMessage) { try { if (busMessage.getProductId().equals(MOTOR_PRODUCT_ID)) { //马达设备状态错误时对马达进行重启 MotorData motorData = JsonUtil.fromJson( JsonUtil.toJson(busMessage.getServices().get(0).getProperties()), MotorData.class); if (motorData.getStatus().equals("error")) { Command command = new Command(busMessage.getDeviceId(),"power", "power_control", "restart" ); appClient.callDeviceCommand(command, FIVE_SECOND); } } else { //其他设备数据发布到总线 appClient.sendBusMessage(OUTPUT, busMessage); } } catch (Exception e) { System.out.println(e.getMessage()); } }
onMessageReceived(BusMessage busMessage)是前面设置回调具体的回调函数,它是BusMessageCallback接口的方法,MonitorApp要实现BusMessageCallback接口并实现此方法,AppClient通过设置的输入端口input监听到设备发送数据时调用此方法进行数据处理,用户关于设备发送的数据的处理逻辑在此方法内实现,处理后的数据通过设置的输出端口output发送经过hub发送到云端。
appClient.callDeviceCommand(command, FIVE_SECOND)是示例演示应用在接收到设备传来的error信号后,向设备发送秒后重启命令。