IoT边缘 IoTEdge
IoT边缘 IoTEdge
- 最新动态
- 产品介绍
- 快速入门
- 用户指南
- 开发指南
- 最佳实践
- API参考
- SDK参考
- 场景代码示例
-
常见问题
- 概念相关
-
节点管理
- 安装专业版节点异常如何处理?
- 安装专业版节点,执行安装命令时失败,一直提示“edgedaemon not found"?
- 安装专业版节点失败,提示“edge_core has existed”,该如何处理?
- 专业版节点所在机器断网/断电一段时间后恢复,节点模块一直处于“部署中”怎么处理?
- 专业版节点欠费充值后,部署、升级模块仍然报错?
- MQTT设备无法接入边缘节点如何处理?专业版节点所在机器断网/断电一段时间后恢复,节点模块一直处于“部署中”怎么处理?
- 误删除IoTDA上的edge_node/modbus_server产品后,在边缘服务创建节点/添加Modbus设备失败,该怎么处理?
- 边缘节点离线排查指南
- 修改专业版(Docker)或基础版节点的云端日志级别,但没有生效?
- ubuntu系统下节点shell命令兼容性导致的安装失败
- 子设备管理
- 应用管理
- 账号与权限
- Module-SDK
- 视频帮助
- 文档下载
- 通用参考
本文导读
展开导读
链接复制成功!
代码解析
项目结构如下
类名称 |
描述 |
---|---|
Device |
设备类,包含设备的id,产品id,slaveId及能力定义。 |
Main |
主启动类。 |
ModbusCfg |
modbus配置。 |
ModbusDriver |
业务主体类,该类含边侧设备添加,设备同步,数据收集及上报等演示。 |
Property |
设备属性。 |
Service |
设备能力。 |
ModbusDriver代码解析
片段一
通过DriverClient.createFromEnv初始化客户端,调用driverClient来完成数据的发送。
1 2 3 4 5 6 7 8 9 10 11 |
public ModbusDriver() throws GeneraException { driverClient = DriverClient.createFromEnv(); } public void start() throws Exception { //设置回调,打开客户端 driverClient.setGatewayCallback(this); driverClient.open(); loadConfig(); startCollection(); } |
片段二
此为从变量points中获取设备数采结果,进行设备数据上报。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
private void startCollection() { scheduler.scheduleAtFixedRate(new Runnable() { @Override public void run() { //todo 采集modbus点位数据,保存到points //上报数据 List<DeviceService> devices = new LinkedList<>(); for (Device device : modbusCfg.getDevices()) { List<ServiceData> services = new LinkedList<>(); for (Service service : device.getServices()) { Map<String, Object> properties = new HashMap<>(); for (Property property : service.getProperties()) { String key = device.getId() + "." + service.getServiceId() + "." + property.getPropertyName(); properties.put(property.getPropertyName(), points.get(key)); } services.add(new ServiceData(service.getServiceId(), properties, ZonedDateTime.now())); } String deviceId = deviceIds.get(device.getId()); if (deviceId != null) { devices.add(new DeviceService(deviceId, services)); } } try { driverClient.reportSubDevicesProperties(new SubDevicesPropsReport(devices)); } catch (Exception e) { System.out.println(e.getMessage()); } } }, 0, modbusCfg.getPeriod(), TimeUnit.SECONDS); } |
片段三
查看“modbus.json”文件,点位上报数据关系对应:设备id.模型id.服务id.属性名;设备id需要与添加边缘设备时设置的“设备标识码”一致。
{ "period": 10, "server": "192.168.1.2:502", "devices": [{ "id": "8616ac9b-1e66-4fbf-8871-1ca4cb7103fc", "product_id": "c6b39067b0325db34663d3ef421a42f6", "name": "light_1", "slave_id": 1, "services": [{ "service_id": "light", "properties": [{ "property_name": "switch", "register_address": 1234, "data_type": "bool" }] }] }, { "id": "c1ae5e25-23c6-4e01-b64f-7b00b4066667", "product_id": "c6b39067b0325db34663d3ef421a42f6", "name": "light_2", "slave_id": 2, "services": [{ "service_id": "light", "properties": [{ "property_name": "switch", "register_address": 5678, "data_type": "bool" }] }] }] }
片段四
查看“device_ids.json”文件,设备id需要与添加边缘设备时设置的“设备标识码”一致。
{ "8616ac9b-1e66-4fbf-8871-1ca4cb7103fc": "bf40f0c4-4022-41c6-a201-c5133122054a" }
父主题: 集成ModuleSDK进行协议转换