从 MySQL 到 TDengine Cloud:焦耳科技楼宇用能平台的数据库演进之路
小T导读:在全球推进碳中和的大背景下,如何通过智能用能平台提升建筑节能成为关键课题。本篇文章展示了焦耳科技利用 TDengine Cloud 在楼宇能源管理中的应用实践。通过对电能表等设备数据的实时采集与分析,平台实现了分时电价、用能优化等功能,帮助用户有效控制用电成本。这篇荣获“2024,我想和 TDengine 谈谈”征文活动二等奖的案例,不仅分享了技术选型与应用心得,也为智慧能源领域提供了宝贵的实战经验。
项目背景
据统计,中国的建筑运行耗能占社会总用能 20% 左右[1]。因此,建筑节能是实现碳中和与碳达峰目标的关键手段,同时也是推动建筑行业及社会向更可持续、环保和健康发展的重要举措。为此,我司焦耳科技研发了楼宇智慧用能平台,该平台能够进行建筑能源的分类、分项、分区计量及实时采集,提供能耗统计、动态监测、设备管理和高负荷预警等功能,并具备在线统计和分析能耗及碳排放的能力。
业务架构
楼宇智慧用能平台主要由以下模块组成:能耗监测、环境感知、冷热源系统参数采集、末端空调、楼宇照明优化、用能优化和需求响应模块。
平台采用典型的物联网架构,现场设备涵盖电能表、水表、天然气表、热量表、环境监测仪、冷热源控制器、照明控制器、变压器监测装置等。现场数据通过 MODBUS 和 OPC 协议传输至本地网关,经过初步处理后,利用 MQTT 协议上传至云端。云端服务器负责数据采集和处理,并将数据存储在 TDengine Cloud 数据库(https://cloud.taosdata.com/)。应用服务器从数据库中读取数据进行分析、计算和可视化展示,同时下发现场控制指令,实现闭环管理。
系统架构如下图所示:
技术选型
平台数据库的使用经历了三个阶段:初期采用 MySQL,随后过渡到 MongoDB,中途测试了 TDengine 开源版,最终选择了 TDengine 云服务版(TDengine Cloud)。具体使用情况如下图所示:
我们之所以选择 TDengine Cloud,原因很简单:一是为了解放数据库学习和运维上的人力和时间成本,二是追求业务的高稳定性。TDengine Cloud 基于企业版软件,由官方统一维护,并提供明确的 SLA 保证。这意味着,我们几乎只需专注于 SQL 查询,无需再为数据库的安装、部署、备份、升级、配置、调优等琐碎事务耗费精力。这样一来,开发团队得以专注核心业务,项目也得以在短时间内顺利上线。
TDengine Cloud 登录页面
使用实践
- 数据建模
目前,我们的项目已正式接入了 3 座楼宇,并在数据库中创建了一个库
smartb
,包括 12 个超级表和 420 个子表。下一步计划逐步接入或迁移 82 座楼宇的数据。由于建筑节能的核心是节电,本篇文章将重点分析电能表数据。电能表的采集参数包括 9 个:A、B、C 相电压,A、B、C 相电流,功率、功率因数,以及电能。我们为电能表数据建立了超级表
DNB
和相应的子表,TAGS 字段包含设备编号(deviceid
)、功能类别(groupid
)和位置(location
)。此外,为了满足用电分析需求,我们新增了分时用电时段标记字段 jfpg
。超级表的结构如下图所示:电能表超级表
新建超级表
DNB
的 SQL 语句如下:CREATE STABLE DNB (ts timestamp, ts_real timestamps, ia float, ib float, ic float, ua float, ub float, uc float, p float, pt float, w float, jfpg int) TAGS (deviceid varchar(64), location varchar(64), group_id int);
插入电能表数据的 SQL 语句如下:
"insert into " + dbName + "." + deviceId + " (ts, ts_real, ia, ib, ic, ua, ub, uc, p, pt, w, jfpg) values(" + now +"," + ts_real +"," +values_ia + "," + values_ib + "," + values_ic + "," + values_ua+ "," + values_ub + "," + values_uc+ "," + values_p + "," + values_pt+ "," + values_w+ "," + jfpg + ")"
这种数据结构和操作方式,为后续的用电分析提供了坚实的数据基础。
- 电力场景典型应用:时段用电分析模块
分时电价制度是指将一年按春夏秋冬分为四季,每季的一天 24 小时再划分为多个时段,根据系统运行的平均边际成本对每个时段进行电费定价。以山东省 2024 年的分时电价为例,具体时段划分如图所示。各时段电价系数如下:平时段为 1.0,尖峰时段为 2.0,峰时段为 1.7,谷时段为 0.3,深谷时段为 0.1。
2024 年山东省分时电价执行时段
分时电价通过价格杠杆,引导用户合理调整用电行为,可以有效缓解电力供需矛盾,提升电网负荷率和设备利用率。这不仅优化了电力资源配置,降低高峰时段的供电压力,还激励用户在低谷时段多用电,从而降低整体用电成本,提高社会经济效益。这一制度对促进电力市场健康发展和节能减排具有重要意义[2]。
以查询 8 月平时段的电量为例,我们使用了 TDengine 的会话窗口函数
SESSION
。对应的 SQL 查询语句如下:select sum(quan) from (select tbname, SPREAD(w) as quan from (Select * from (select ts, tbname,to_char(ts,'hh24') as ts2, w from smartb_tz.dnb where ts>'2024-08-01 00:00:00' and ts<'2024-09-01 00:00:00') WHERE ts2 LIKE '%00%' OR ts2 LIKE '%01%' OR ts2 LIKE '%02%' OR ts2 LIKE '%03%' OR ts2 LIKE '%04%' OR ts2 LIKE '%05%' OR ts2 LIKE '%06%' OR ts2 LIKE '%07%' OR ts2 LIKE '%08%' OR ts2 LIKE '%09%' OR ts2 LIKE '%15%' OR ts2 LIKE '%16%' OR ts2 LIKE '%22%' OR ts2 LIKE '%23%') PARTITION by TBNAME SESSION(ts,1h));
应用效果如下图所示:
分时电价程序界面
- 电力场景典型应用:实时用电分析
实时用电分析功能可以对每个用电设备的日、月、年瞬时功率进行分析,帮助我们全面了解设备运行状况。
以查询当日设备编号为
deviceid
的电能表为例。由于程序折线图以 15 分钟为时间间隔显示,而数据采集间隔为 10 秒,因此我们使用 INTERVAL
窗口函数计算每 15 分钟的平均值。对应的 SQL 查询语句如下:select avg(p) as avg_p from smartb_tz.#{deviceid} where ts>Today and ts<now interval(15m);
在查询当日功率数据最大值及其对应时间时,TDengine 的
PARTITION BY
函数发挥了关键作用。它通过对 ts
进行分组,实现了多个电能表功率的汇总分析。查询 SQL 如下: select max(sum_p) as quan_ly, ts_max as ws from (select ts as ts_max, sum(p) as sum_p from smartb_tz.dnb where ts>Today and ts<now partition by ts);
对应的程序界面如下图所示:
实时用电分析程序界面
结语
“工欲善其事,必先利其器。”作为一款时序大数据处理平台,TDengine 不仅为我们提供了强大的读写性能,还配备了高性价比的支持服务。未来,我们将继续深挖其潜力,探索 TDengine 在智慧能源领域的更多应用场景。
最后分享一个有趣的经历:今年上半年,我们在试用 TDengine 开源版时,最初通过社区与官方和用户群体互动,但线上沟通的效率还是不足以满足我们的测试进度。正巧那时,我看到 TDengine 举办的“TDengine Open Day”线下活动,便特意从济南飞往北京参加。
在活动现场,我见到了长期在开源社区为我们答疑解惑的工程师。我们当场交流了整整 5 个小时,他耐心细致地帮我解决了所有使用中的疑惑,大大加快了测试进展。当天,我们还约定共同撰写一篇电力场景的应用案例分享给 TDengine 开源社区,这篇文章便由此而来。
参考文献
[1] 中国建筑科学院.建言“十四五”――中国既有公共建筑节能工作的困境与突围[R].北京:自然资源保护协会,2020.
[2] 迟海,陈菊红. 分时电价对光伏和储能系统的影响研究[J]. 电力技术与经济,2024(05): 249-251.