Java 开发如何通过 IoT 边缘 ModuleSDK 进行协议转换

本文介绍了如何使用Java的ModuleSDK开发插件,实现从HTTP协议到MQTT JSON数据的转换,接入IoTDA。内容涵盖操作场景、代码解析、设备建模、项目打包以及添加边缘设备的详细步骤,包括设备模型创建、服务和属性定义,以及应用的打包和部署。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

操作场景

使用 ModuleSDK 开发插件应用,接入其他协议设备(如 HTTP 请求数据),将其他协议的数据转化为 MQTT 协议 JSON 数据上报到 IoTDA。

代码解析

项目结构如下

ModbusDriver 代码解析

片段一

通过 DriverClient.createFromEnv 初始化客户端,调用 driverClient 来完成数据的发送。

public ModbusDriver() throws GeneraException {
  
    driverClient = DriverClient.createFromEnv();
}
public void start() throws Exception {
  
    //设置回调,打开客户端
    driverClient.setGatewayCallback(this);
    driverClient.open();
    loadConfig();
    startCollection();
}

复制代码

片段二

此为模拟 http 请求的代码,随机数模拟设备数采。

    private void startCollection() {
  
        scheduler.scheduleAtFixedRate(() -> {
  
            String s = null;
            //todo 采集点位数据,保存到points
            try {
  
                //1、主动发HTTP请求采集子设备数据
//                s = HttpUtils.doGet("http://127.0.0.1:8080/module/sdk", null);
//                System.out.println(s);
//                Module module = JSON.parseObject(s, Module.class);
                //2、模拟设备数采数据
                 //构造上报参数 设备id.服务id.属性
                Module module = new Module();
                module.setStatus(String.valueOf(Math.random()));
                module.setTemp(String.valueOf(Math.random()));
                points.put("bf40f0c4-4022-41c6-a201-c5133122054a.BasicData.status", module.getStatus());
                points.put("bf40f0c4-4022-41c6-a201-c5133122054a.BasicData.temp", module.getTemp());
            } catch (Exception exception) {
  
                System.out.println("http请求异常");
            }
            //上报数据
            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": "10.69.33.154:502",
  "devices": [{
  
    "id": "bf40f0c4-4022-41c6-a201-c5133122054a",
    "product_id": "6247f7e36fe7862a3aa0d803",
    "name": "TEST1",
    "slave_id": 1,
    "services": [{
  
      "service_id": "BasicData",
      "properties": [{
  
        "property_name": &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值