物联网数据库实践_工业能耗系统

项目需求

大屏

实时数据监测模块

——概要

——用电监测

——用水监测

——蒸汽监测

——天然气监测

能源计划管理模块

——设计月计划

能源实绩管理模块

——实际使用跟计划对比图

智能分析模块

——根据历年使用情况,智能推算出今年每月用量

统计报表模块

——正点报

——日报

——月报

——年报

——表计值

 

 

以上我罗列的基本需求

设计

智能设备的测点

//电
正向有功(用电量) kW·h
反向有功  KW
有功功率  KW
无功功率  KW
功率因素  
A相电流   A
B相电流   A
C相电流   A

A相电压   V
B相电压   V
C相电压   V

A相功率  KW
B相功率  KW
C相功率  KW


//水
表计值(累计)  m³
流量(瞬时   m³/h

//蒸汽
累计(体积)  m³
瞬时流量    m³/h
压力        Mpa
温度        ℃


//天然气
累计(体积)  m³

设备跟测点表是一对多关系,表设计就不多说了

在IoTDB中设计时间序列

编码

递增浮点  GORILLA编码  TS_2DIFF RLE
数值比较接近  采用 GORILLA编码

类型

我选用flloat,保留2为小数

举例

01车间01设备用电量测点,递增浮点类型

创建时间序列语句


CREATE TIMESERIES root.test.wf01.wt01.s0 WITH DATATYPE=FLOAT, ENCODING=GORILLA

 

编码

涉及IoTDB整合SpringBoot就不说了,但是需要注意,采集程序插入最好用Session方式,后端管理系统用JDBC方式更快。

下面列出一些在能耗系统中常用的方法。

查询水电蒸汽天然气最新值

            Statement statement = iotConnection.createStatement();
            String sql = "select last s0 from "+ TimeSeriesUtil.getTimeSeriesStringByList(list);
            ResultSet resultSet = statement.executeQuery(sql);
            if (resultSet != null) {
            ResultSetMetaData metaData = resultSet.getMetaData();
            int columnCount = metaData.getColumnCount();
            int columnIndex = -1;
            while (resultSet.next()) {
                columnIndex++;
                for (int i = 1;i <= columnCount ; i++) {
                    if(i % 3 == 0){
                        String resultStr = resultSet.getString(i);
                        if(null != resultStr){
                            list.get(columnIndex).setLastValue(new BigDecimal(resultStr));
                        }
                    }
                }
            }
        }
            statement.close();

 

查询一个设备下每个测点的最新数据

            Statement statement = iotConnection.createStatement();
            String sql = "select last "+TimeSeriesUtil.getPointsStringByList(list)+" from "+list.get(0).getTimeseries();
            ResultSet resultSet = statement.executeQuery(sql);
            if (resultSet != null) {
                ResultSetMetaData metaData = resultSet.getMetaData();
                int columnCount = metaData.getColumnCount();
                int columnIndex = -1;
                while (resultSet.next()) {
                    columnIndex++;
                    for (int i = 1;i <= columnCount ; i++) {
                        if(i % 3 == 0){
                            String resultStr = resultSet.getString(i);
                            if(null != resultStr){
                                list.get(columnIndex).setLastValue(new BigDecimal(resultStr));
                            }
                        }
                    }
                }
            }
            statement.close();
 

拿到 start -end 时间区间内 每个间隔点  的第一条记录

@param section h 小时  d 天  mo月  y年   注意:0.12版本修复mo,y不是自然月和自然年的问题

            Statement statement = iotConnection.createStatement();
            String sql = "select first_value(s0) from "+TimeSeriesUtil.getTimeSeriesStringByReportList(list)+" group by (["+start.getTime()+","+end.getTime()+"),10m,1"+section+")";
            System.out.println(sql);
            ResultSet resultSet = statement.executeQuery(sql);
            if (resultSet != null) {
                ResultSetMetaData metaData = resultSet.getMetaData();
                int columnCount = metaData.getColumnCount();
                while (resultSet.next()) {
                    for (int i = 2;i <= columnCount ; i++) {
                        String resultStr = resultSet.getString(i);
                        if(null != resultStr){
                            list.get(i-2).getList().add(new BigDecimal(resultStr));
                        }else {
                            list.get(i-2).getList().add(new BigDecimal("0"));
                        }

                    }
                }
            }
            statement.close();

 

效果图

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值