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

官网 :https://myems.io

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

本期解读:

空间能耗分项成本汇总计算方法:myems-aggregation/space_billing_input_item.py

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

这段代码是一个用于计算和保存能源消耗计费信息的Python脚本。它主要用于连接到MyEMS系统的数据库,获取空间(如建筑物或房间)的能源使用数据,根据能源使用量和相应的电价计算费用,并将计费数据保存回数据库。以下是对代码的详细解析:

概括性总结

1.连接数据库: 脚本首先连接到MyEMS系统的三个数据库:系统数据库、能源数据库和计费数据库。

2.获取空间列表: 从系统数据库中获取所有空间的列表。

3.遍历每个空间: 对于列表中的每个空间,执行以下步骤:

  • 获取该空间最新的计费开始时间。
  • 从能源数据库中获取自上次计费以来的所有能源输入数据。
  • 获取电价信息。
  • 根据能源使用量和电价计算计费。
  • 将计费数据保存到计费数据库。

    4.循环执行: 脚本在一个无限循环中运行,每300秒执行一次上述过程。

详细解析

1.连接数据库: 使用mysql.connector连接到MyEMS的三个数据库。如果连接失败,则记录错误并等待60秒后重试。

2.获取空间列表:

  • 从系统数据库中查询所有空间的ID、名称和成本中心ID。

  • 如果没有空间数据,则记录信息并等待60秒后重试。

    3.遍历每个空间:

  • 对于每个空间,获取其在计费数据库中的最新计费开始时间。

  • 从能源数据库中获取自上次计费以来的所有能源输入数据。

  • 获取每个能源项的电价信息。

  • 根据能源使用量和电价计算计费。

  • 将计费数据保存到计费数据库。

    4.循环执行: 脚本在一个无限循环中运行,每300秒执行一次上述过程。

代码特点

  • 异常处理:在数据库操作和数据处理过程中,脚本包含了异常处理逻辑,以确保在出现错误时能够记录错误信息并安全地关闭数据库连接。
  • 日志记录:脚本使用logger对象记录错误信息,有助于问题的调试和追踪。
  • 配置管理:脚本使用config模块来管理数据库连接和其他配置信息,这有助于代码的模块化和维护。
  • 时间处理:脚本使用datetime模块处理时间数据,确保时间计算的准确性。

优化建议

  • 代码重构:可以将代码分解为更小的函数,以提高代码的可读性和可维护性。
  • 错误处理:可以改进错误处理逻辑,例如,在连续多次失败后停止重试,或者发送警报通知管理员。
  • 性能优化:如果数据量大,可以考虑优化数据库查询和数据处理的性能。

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

  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. AD 横向移动-SMB 中继攻击

    本文通过 Google 翻译 Lateral Movement – NTLM Relay Attacks 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充. 注:因 LD ...

  2. cpp零碎知识点小记

    字符串读取方法记录 记录 个人小结: 按整行读到string ,推荐用 方法2 getline(cin, string) 按整行读到char[] ,推荐用 方法4 cin.getline(cin, c ...

  3. 【中文】【吴恩达课后编程作业】Course 1 - 神经网络和深度学习 - 第二周作业

    [吴恩达课后编程作业]Course 1 - 神经网络和深度学习 - 第二周作业 - 具有神经网络思维的Logistic回归 上一篇:[课程1 - 第二周测验]※※※※※ [回到目录]※※※※※下一篇: ...

  4. qt激光加工软件开发——日志模块

    本篇主要介绍该加工软件的日志模块 实现的功能: 主界面日志栏显示 分级显示 本地保存 简单的调用机制 目前选择的是qInstallMessageHandler,毕竟是qt亲儿子(Qt 5.0以上版本) ...

  5. 微服务架构学习与思考(16):SOA架构与微服务架构对比分析?它们之间区别是什么?

    什么是 SOA 架构 SOA(Service-Oriented Architecture) 架构是面向服务的架构,是一种将单体应用粗粒度的划分为服务的架构,其核心是将业务功能抽象为独立.可重用.松耦合 ...

  6. 阿里云javascript分片上传失败的解决办法

    前端项目:React + Antd mobile + 阿里云OSS Node.js SDK实现文件上传. 在电脑上运行良好,放到手机上大文件就上传失败. 打开Chrome,地址栏输入`chrome:/ ...

  7. 鸿蒙运动项目开发:封装超级好用的 RCP 网络库(下)—— 实战应用

    鸿蒙核心技术##运动开发## Remote Communication Kit(远场通信服务) 在之前的文章中,我们详细介绍了如何封装一个功能完备的 RCP 网络库,并探讨了其核心功能和高级特性.在本 ...

  8. FastAPI权限校验漏洞防护,你真的做对了吗?

    title: FastAPI权限校验漏洞防护,你真的做对了吗? date: 2025/06/25 09:01:42 updated: 2025/06/25 09:01:42 author: cmdra ...

  9. ET框架对MongoDB的使用

    一:本地测试: 1:加载DB组件 2:调整用户ID :  C2G_LoginGateHandler中创建玩家时id调整.(每次重启服务端创建小人ID是一样的,插入数据库会覆盖掉上传插入的数据) 3:在 ...

  10. RL Swarm:去中心化强化学习协作训练平台

    项目概述 RL Swarm 是由Gensyn团队维护的去中心化强化学习协作训练平台.该系统允许用户加入"蜂群"与其他参与者共同训练模型,利用集体智能提升训练效率.核心特点包括: 真 ...