MyEMS开源能源管理系统适用于建筑、工厂、商场、医院、园区的电、水、气等能源数据采集、分析、报表,还有光伏、储能、充电桩、微电网、设备控制、故障诊断、工单管理、人工智能优化等可选功能。资深专业团队开发维护,保障长期支持。用开源助力企业集团、产业园区、能源运营商低碳发展!

官网 :https://myems.io

MyEMS开源社区版下载:https://gitee.com/myems/myems

本期解读:

空间能耗分项数据汇总计算方法:myems-aggregation/space_energy_input_item.py

源代码链接:https://gitee.com/myems/myems/blob/master/myems-aggregation/space_energy_input_category.py?sessionid=429368173

这段代码是一个用于处理能源数据的Python脚本,主要功能是计算和聚合特定空间(如建筑物中的房间或区域)的能源输入数据。它通过与MySQL数据库交互来获取和存储数据,并使用多进程来提高处理效率。下面是对代码的概括性总结和详细解析:

概括性总结

1.主函数 (main): 循环执行,首先从系统数据库中获取所有空间的列表,然后使用多进程方式调用worker函数处理每个空间。每轮循环结束后休眠一段时间。

2.工作函数 (worker): 对于给定的空间,该函数执行多个步骤来聚合该空间的能源输入数据。这包括从系统数据库中获取与该空间相关的各种能源计量设备(如实际计量表、虚拟计量表、离线计量表等),然后从能源数据库中获取这些设备的能源数据,最后聚合这些数据并保存回能源数据库。

详细解析

1.连接数据库: 使用mysql.connector连接到MySQL数据库,分别操作系统数据库和能源数据库。

2.获取空间列表: 从系统数据库中查询所有空间,并将它们存储在一个列表中。

3.多进程处理: 使用Python的multiprocessing.Pool来并行处理每个空间,以提高效率。

4.空间能源数据处理:

  • 获取与空间相关的各种能源计量设备列表。
  • 确定聚合数据的起始和结束时间。
  • 从能源数据库中获取这些设备的能源数据。
  • 确定所有设备的共同时间段,以便进行数据聚合。
  • 按能源项目和小时聚合能源数据。
  • 将聚合后的数据保存回能源数据库。

    5.错误处理和日志记录: 在每个步骤中,如果遇到异常,则记录错误信息,并在必要时关闭数据库连接。

6.休眠和重试机制: 在无法连接数据库或处理数据时,脚本会休眠一段时间后重试。

MyEMS开源能源管理系统核心代码解读021的更多相关文章

  1. 优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案

    简介 本篇为大家介绍一个优秀的开源小项目:WebViewJavascriptBridge. 它优雅地实现了在使用UIWebView时JS与ios 的ObjC nativecode之间的互调,支持消息发 ...

  2. Hybrid----优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案-备

    本篇为大家介绍一个优秀的开源小项目:WebViewJavascriptBridge. 它优雅地实现了在使用UIWebView时JS与ios 的ObjC nativecode之间的互调,支持消息发送.接 ...

  3. itest 开源测试管理项目中封装的下拉列表小组件:实现下拉列表使用者前后端0行代码

    导读: 主要从4个方面来阐述,1:背景:2:思路:3:代码实现:4:使用 一:封装背景       像easy ui 之类的纯前端组件,也有下拉列表组件,但是使用的时候,每个下拉列表,要配一个URL ...

  4. 腾讯开源的 Paxos库 PhxPaxos 代码解读---Accept阶段(一)

    腾讯开源的 Paxos库 PhxPaxos 代码解读---Accept阶段(一) 在看Accept阶段代码之前, 我们再回想一下 Basic Paxos算法; 1.  Basic Paxos 算法是为 ...

  5. Android MVP模式 谷歌官方代码解读

    Google官方MVP Sample代码解读 关于Android程序的构架, 当前(2016.10)最流行的模式即为MVP模式, Google官方提供了Sample代码来展示这种模式的用法. Repo ...

  6. msysGit管理GitHub代码

    msysGit管理GitHub代码   代码的管理,在日常开发中是很重要的环节,程序员的修炼三部曲——版本控制,单元测试,项目自动化. 本篇就简单的说说通过msysGit来管理GitHub中的代码,实 ...

  7. C/C++ 开源库及示例代码

    C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...

  8. Google免费的SVN服务器管理VS2010代码

    原文:Google免费的SVN服务器管理VS2010代码 前言 Google免费为我们提供了代码管理的SVN服务器.首先我这里用的Win7 64的电脑系统,用VS2010进行的代码开发.这里管理代码需 ...

  9. spring JdbcTemplate 在itest 开源测试管理项目中的浅层(5个使用场景)封装

    导读: 主要从4个方面来阐述,1:背景:2:思路:3:代码实现:4:使用 一:封装背景, 在做项目的时候,用的JPA ,有些复杂查询,比如报表用原生的JdbcTemplate ,很不方便;传参也不方便 ...

  10. weex官方demo weex-hackernews代码解读(上)

    一.介绍 weex 是阿里出品的一个类似RN的框架,可以使用前端技术来开发移动应用,实现一份代码支持H5,IOS和Android.最新版本的weex已默认将vue.js作为前端框架,而weex-hac ...

随机推荐

  1. sql注入过程中字符的过滤

    1.过滤注释符过滤 常用的注释符号: --+ # %23 找到闭合方式,语句后对给一个闭合符,和源语句形成闭合. 2.and 和 or 的绕过: 大小写绕过:anD 复写绕过:anandd 符号代替: ...

  2. Spring注解之@Autowired:按类型自动装配Bean到数组、集合和Map

    在Spring Boot项目中,如何把某些接口的多个实现类的Bean注入到Arrays, java.util.Collection 和 java.util.Map类型的变量中,方便应用的时候直接读取? ...

  3. ActiveMQ消息投递方式+死信队列

    死信队列 死信队列(Dead Letter Queue,DLQ),用来保存处理失败或者过期的信息.出现以下情况的时候,消息会被重发: 在一个事务session中调用了session.rollback( ...

  4. 【深入理解Base64编码】原理、应用与Java实战

    深入理解Base64编码:原理.应用与Java实战 目录 1-什么是base64编码 2-base64编码原理详解 3-base64的java实现 4-高级应用与技巧 5-注意事项与常见误区 6-总结 ...

  5. 【洛谷有题】NOI 笔试题库(非初赛)订正

    传送门 第一次做,那个成绩可是一个惨不忍睹-- 我还是想说--我虽然要用Linux,但是不一定要用到指令啊(吧)--编译啥的我可以用Vim|guide啊-- Linux 中为文件改名使用的命令是: m ...

  6. ArkUI-X平台桥接Bridge说明

    简介 平台桥接用于客户端(ArkUI)和平台(Android或iOS)之间传递消息,即用于ArkUI与平台双向数据传递.ArkUI侧调用平台的方法.平台调用ArkUI侧的方法. 以Android平台为 ...

  7. TableFill:一天搞定1000人的数据填报工作丨2024袋鼠云秋季发布会回顾

    10月30日,袋鼠云成功举办了以"AI驱动,数智未来"为主题的2024年秋季发布会.大会深度探讨了如何凭借 AI 实现新的飞跃,重塑企业的经营管理方式,加速数智化进程. 会上,易知 ...

  8. Vertx 实现webapi实战项目(三)

      实现消息分发和handler分配:上传json根据mId字段不同提供不同的解析器,然后将消息分发到不同的handler中. 一:消息分发 1:建立消息解析.新建接口IMessageRecogniz ...

  9. ui-router 路由重定向

    $urlRouterProvider .when('/c?id', '/contacts/:id') .when('/user/:id', '/contacts/:id') .otherwise('/ ...

  10. Xamarin.Android C#layout_weight错误:必须指定一个单位,例如“ px”

    https://mlog.club/article/5879658 解决办法: 关闭VS 删除解决方案根目录中的.vs文件夹 开始VS