跳转到主要内容

用于检查英国能源账单的Web应用程序。

项目描述

Chellow

用于检查具有大量供应和/或高消费的组织在英国电力和天然气账单的Web应用程序。

网站: https://www.chellow.org/

许可证

Chellow在GPL v3下发布。

简介

Chellow是一个检查英国电力和天然气账单的Web应用程序。它专为高电力消耗的组织设计。软件托管在https://github.com/WessexWater/chellow

Build Status

安装

Chellow是一个使用PostgreSQL数据库的Python Web应用程序。要安装Chellow,请按照以下步骤操作

  • 安装PostgreSQL 12
    • 将PostgreSQL时区设置为'UTC'。
  • 创建PostgreSQL数据库: createdb --encoding=UTF8 chellow
  • 设置以下环境变量以配置Chellow
名称 默认 描述
PGUSER postgres Postgres用户名
PGPASSWORD postgres Postgres密码
PGHOST localhost Postgres主机名
PGPORT 5432 Postgres端口号
PGDATABASE chellow Postgres数据库名称

在bash中,可以通过以下方式设置环境变量

export PGUSER=postgres

在Windows中,可以通过以下操作设置环境变量:

set PGUSER=postgres

  • 安装Python 3.9(已测试在CPython 3.9.8解释器上)
  • 创建虚拟环境:python3 -m venv venv
  • 激活虚拟环境:source venv/bin/activate
  • 安装Chellow:pip install chellow
  • 启动Chellow:waitress-serve --host=0.0.0.0 --port=8080 --call chellow:create_app
  • 现在您应该能够在浏览器中访问http://localhost:8080/。您将需要输入用户名和密码。输入管理员用户名admin@example.com和密码admin,然后主页应该会显示。从users页面更改管理员密码。

手动升级Chellow

要将Chellow升级到最新版本,请执行:pip install --upgrade chellow

自动升级Chellow

bash脚本chellow_upgrader.sh将检查Chellow的新版本,如果存在,则停止Chellow,然后进行升级,然后启动Chellow。

与systemd一起使用

将以下文件复制到/etc/systemd/system目录

并根据需要进行修改。chellow_upgrader.service使用上面的chellow_upgrader.sh脚本。然后您可以使用以下命令

  • 启动Chellow:sudo systemctl start chellow
  • 使Chellow在启动时运行:sudo systemctl enable chellow
  • 启动Chellow升级器:sudo systemctl start chellow_upgrader.timer
  • 使Chellow升级器在启动时运行:sudo systemctl enable chellow_upgrader.timer

使用不同的Web服务器

Chellow附带Waitress Web服务器,但也是一个Python WSGI Web应用程序,因此Chellow可以与任何WSGI兼容的应用程序服务器一起使用,例如Gunicorn。应指定的WSGI应用程序是chellow.app

入门指南

这是在安装Chellow后设置事项的简要指南。它假设您对英国电力收费有基本的了解。它将指导您添加半小时(HH)计费供应,并为它生成虚拟账单,然后导入实际账单并运行账单检查。

Chellow可以处理非半小时供应以及半小时供应,它还可以处理天然气供应,但我们将使用半小时电力供应作为此示例。

查看Chellow主页

假设您已正确安装Chellow,您应该能够打开浏览器,输入Chellow应用程序的URL,并看到Chellow主页。

用户

在添加任何用户之前,如果您从localhost访问Chellow,您将具有读写权限。一旦添加了用户,您必须登录为这些用户之一。用户是从“用户”页面添加的。

导入市场域数据

按照/e/mdd_imports中的说明将市场域数据导入Chellow。

添加HHDC合同

每个供应都必须有一个数据收集器。通过转到“HHDC合同”页面然后点击“添加”链接来添加新的HHDC。

添加MOP合同

每个供应都必须有一个计量操作员。通过转到“MOP合同”页面然后点击“添加”链接来添加新的MOP。目前,只需为MOP输入一个简单的虚拟账单,因此在“脚本”字段中输入

    from chellow.utils import reduce_bill_hhs


    def virtual_bill_titles():
        return ['net-gbp']    

    
    def virtual_bill(data_source):
        for hh in data_source.hh_data:
	bill_hh = data_source.mop_bill_hhs[hh['start-date']]
            if hh['utc-is-month-end']:
                bill_hh['net-gbp'] = 10
        data_source.mop_bill = reduce_bills_hh(data_source.mop_bill_hhs)

添加供应商合同

单击“供应商合同”链接,然后填写“添加合同”表单。在“计费脚本”字段中输入

    from chellow.utils import reduce_bill_hhs

    def virtual_bill_titles():
        return ['net-gbp', 'day-kwh', 'day-gbp', 'night-kwh', 'night-gbp']    
    
    def virtual_bill(data_source):
        bill = data_source.supplier_bill 
    
        for hh in data_source.hh_data:
						bill_hh = data_source.supplier_bill_hhs[hh['start-date']]
            if 0 < hh['utc-decimal-hour'] < 8:
                bill_hh['night-kwh'] = hh['msp-kwh']
                bill_hh['night-gbp'] = hh['msp-kwh'] * 0.05
            else:
                bill_hh['day-kwh'] = hh['msp-kwh']
                bill_hh['day-gbp'] = hh['msp-kwh'] * 0.1
    
		bill_hh['net-gbp'] = sum(
		v for k, v in bill_hh.items() if k[-4:] == '-gbp')

		data_source.supplier_bill = reduce_bill_hhs(
			data_source.supplier_bill_hhs)

这将基于日/夜电价生成一个简单的虚拟账单。供应商合同脚本可能比这复杂得多,包括DUoS、TNUoS、BSUoS、RO以及许多其他标准费用。这些将在本指南的后面部分讨论。

现在,不必担心“属性”字段。

添加一个站点

转到主页上的“站点”链接,然后点击“添加”。填写表格并创建站点。

添加一个供应

要向站点添加供应,转到站点页面并点击“编辑”。在页面中间部分有一个“插入电力供应”表单。对于标准电力供应,“来源”是“网络”。确保配置文件类(PC)是“00”,以向Chellow表明这是一个半小时计量的供应。半小时的SSC字段留空,因为它们没有SSC。

供应由一系列时期组成。每个时期都有不同的特性,以捕捉供应的历史。

运行虚拟账单

现在应该可以运行已添加的供应的虚拟账单。转到供应页面并点击“供应商虚拟账单”链接。这将返回显示供应虚拟账单的页面。

当然,消费量为零,因为我们还没有添加任何半小时数据。

添加一些半小时数据

在您创建的供应页面,您会看到一个“通道”链接,旁边有一个“添加”链接。添加一个活动进口通道,将半小时数据附加到。

回到供应页面,您刚刚创建的通道链接将出现。点击此链接并填写添加半小时数据的表格。

如果您重新运行您添加半小时数据的期间虚拟账单,它应该会显示在虚拟账单中。

逐个添加半小时数据很繁琐,因此如果您访问您创建的HHDC合同的页面,您将看到一个“HH数据导入”链接。点击此链接,您将看到一个用于以各种格式批量上传HH数据的表格。Chellow还可以设置从FTP服务器自动导入文件。

合同虚拟账单

要查看供应商合同的虚拟账单,请转到合同页面并遵循虚拟账单链接。

数据结构

  • 站点
  • 供应
    • 供应时期
      • 站点
      • MOP合同
      • DC合同
      • 配置文件类
      • 进口/出口供应商合同
      • 进口/出口Mpan核心
      • 进口/出口LLFC
      • 进口/出口供应容量
      • 进口/出口通道
        • 半小时数据
  • 供应商合同(DC和MOP相同)
    • 费率脚本
    • 批次
      • 账单
        • 供应
        • 登记读取
  • DNOs(配电网运营商)
    • LLFCs(线路损耗系数类别)

一般进口

菜单中有一个名为“一般进口”的链接,它将您带到可以进行批量插入/更新/删除操作(例如站点、供应、LLFC等)的页面,使用CSV文件。

常见任务

合并两个供应

假设有两个供应A和B,您最终只想保留A。步骤如下

  1. 通过数据库快照备份数据。
  2. 检查A和B是否有相同的标题数据(LLFC、MTC等)。
  3. 查看是否有重叠的通道,例如,A和B都有进口kVArh吗?如果有,那么决定保留哪一个。
  4. 从备份文件加载所需通道的hh数据。首先复制文件,然后编辑掉您不想要的数据,然后进一步编辑文件,以便将其加载到新的供应中。
  5. 删除供应B。

本地报告

Chellow 内置核心报告,但用户也可以创建自定义报告。报告是用 Python 编写的,通常使用 Jinja2 模板。您可以通过在非核心合同 configuration 中添加 local_reports_id 来显示用户报告的链接。

默认用户

默认用户可以自动分配给来自某些 IP 地址的请求。要将 IP 地址关联到用户,请转到非核心合同 configuration 并在 'properties' 字段中添加类似于以下内容的行

  {
    'ips': {'127.0.0.1': 'implicit-user@localhost'}
  }

注意,多个 IP 地址可以映射到同一用户。

还可以使用 Microsoft Active Directory 通过反向代理服务器验证用户。编辑非核心合同 configuration 并添加类似的内容

  {
    "ad_authentication": {
      "default_user": "readonly@example.com",
      "on": true
  }

设计决策

为什么不用 +/- 无穷大值作为时间戳?问题是这并不清楚如何将其转换为 Python。所以我们目前使用空值表示无穷大,它在 Python 中自然转换为 None。

项目详情


发布历史 发布通知 | RSS 源

下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

chellow-1727274025.0.0.tar.gz (579.2 kB 查看哈希值)

上传时间: 源代码

构建分发

chellow-1727274025.0.0-py3-none-any.whl (580.4 kB 查看哈希值)

上传时间: Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面