BEMServer API客户端
项目描述
BEMServer是一个免费的建筑能源管理系统软件平台。
其目的是存储建筑中收集的数据并生成有用的信息,如性能指标或警报。
此软件包是BEMServer API的客户端,基于requests。
API客户端使用
from bemserver_api_client import BEMServerAPIClient
# Get an instance of API client, setting the API host and the authentication method used for API requests.
api_client = BEMServerAPIClient(
"localhost:5000",
authentication_method=BEMServerAPIClient.make_http_basic(
"user@email.com", "password"
),
)
入口点
API资源可以通过API客户端实例中的专用入口点(Python属性)访问。
例如,/sites/资源可以通过sites属性请求,但/energy_consumption_timeseries_by_sites/可以通过energy_cons_ts_by_sites(比原始名称略短)请求。
# Get a list of all the sites available for the authenticated user.
sites_resp = api_client.sites.getall()
大多数API客户端入口点都有通用函数(CF)来请求API端点(资源上的操作)
getall用于GET资源列表
getone用于GET特定资源(通过其ID)
create用于POST新资源
update用于UPDATE特定资源
删除 以 删除 指定资源
请注意,如 API 文档 中所述,某些操作在特定 API 资源上不可用(见 /timeseries_data/)。其他 API 资源有额外的操作,例如在 sites 上,可以调用 get_degree_days 和 download_weather_data 函数。
下表显示了 API 端点 URI 与 API 客户端入口点及其可用功能之间的对应关系。
CF 提到,所描述的入口点实现了所有 常用功能(getall,getone,create,update,delete)。CF - update 表示除了 update 外,所有常用功能都已实现。
身份验证
API 资源 |
API 客户端入口点 |
API 客户端入口点操作 |
---|---|---|
/auth/ |
auth |
get_tokens,refresh_tokens |
通用
API 资源 |
API 客户端入口点 |
API 客户端入口点操作 |
---|---|---|
/about/ |
about |
getall |
/users/ |
users |
CF,set_admin,set_active |
/users_by_user_groups/ |
user_by_user_groups |
CF - update |
/user_groups/ |
user_groups |
CF |
/user_groups_by_campaigns/ |
user_groups_by_campaigns |
CF - update |
/user_groups_by_campaign_scopes/ |
user_groups_by_campaign_scopes |
CF - update |
/campaigns/ |
campaigns |
CF |
/campaign_scopes/ |
campaign_scopes |
CF |
/io/ |
io |
upload_sites_csv,upload_timeseries_csv |
结构元素
API 资源 |
API 客户端入口点 |
API 客户端入口点操作 |
---|---|---|
/sites/ |
sites |
CF,download_weather_data,get_degree_days |
/buildings/ |
buildings |
CF |
/storeys/ |
storeys |
CF |
/spaces/ |
spaces |
CF |
/zones/ |
zones |
CF |
/structural_element_properties/ |
structural_element_properties |
CF |
/site_properties/ |
site_properties |
CF - update |
/site_property_data/ |
site_property_data |
CF |
/building_properties/ |
building_properties |
CF - update |
/building_property_data/ |
building_property_data |
CF |
/storey_properties/ |
storey_properties |
CF - update |
/storey_property_data/ |
storey_property_data |
CF |
/space_properties/ |
space_properties |
CF - update |
/space_property_data/ |
space_property_data |
CF |
/zone_properties/ |
zone_properties |
CF - update |
/zone_property_data/ |
zone_property_data |
CF |
时间序列
API 资源 |
API 客户端入口点 |
API 客户端入口点操作 |
---|---|---|
/timeseries/ |
timeseries |
CF |
/timeseries_properties/ |
timeseries_properties |
CF |
/timeseries_property_data/ |
timeseries_property_data |
CF |
/timeseries_by_sites/ |
timeseries_by_sites |
CF - update |
/timeseries_by_buildings/ |
timeseries_by_buildings |
CF - update |
/timeseries_by_storeys/ |
timeseries_by_storeys |
CF - update |
/timeseries_by_spaces/ |
timeseries_by_spaces |
CF - update |
/timeseries_by_zones/ |
timeseries_by_zones |
CF - update |
/timeseries_by_events/ |
timeseries_by_events |
CF - update |
/weather_timeseries_by_sites/ |
weather_ts_by_sites |
CF |
时间序列数据
API 资源 |
API 客户端入口点 |
API 客户端入口点操作 |
---|---|---|
/timeseries_data_states/ |
timeseries_datastates |
CF |
/timeseries_data/ |
timeseries_data |
delete,delete_by_names,get_stats,upload,upload_by_names,download,download_by_names,download_aggregate,download_aggregate_by_names |
分析
API 资源 |
API 客户端入口点 |
API 客户端入口点操作 |
---|---|---|
/analysis/ |
analysis |
get_completeness,get_energy_consumption_breakdown |
/energies/ |
energies |
getall |
/energy_end_uses/ |
energy_end_uses |
getall |
/energy_consumption_timeseries_by_sites/ |
energy_cons_ts_by_sites |
CF |
/energy_consumption_timeseries_by_buildings/ |
energy_cons_ts_by_buildings |
CF |
/energy_production_technologies/ |
energy_prod_technologies |
getall |
/energy_production_timeseries_by_sites/ |
energy_prod_ts_by_sites |
CF |
/energy_production_timeseries_by_buildings/ |
能源产量_按建筑 |
CF |
事件和通知
API 资源 |
API 客户端入口点 |
API 客户端入口点操作 |
---|---|---|
/events/ |
事件 |
CF |
/events_by_sites/ |
事件_按站点 |
CF - update |
/events_by_buildings/ |
事件_按建筑 |
CF - update |
/events_by_storeys/ |
事件_按楼层 |
CF - update |
/events_by_spaces/ |
事件_按空间 |
CF - update |
/events_by_zones/ |
事件_按区域 |
CF - update |
/event_categories/ |
事件类别 |
CF |
/event_categories_by_users/ |
事件类别_按用户 |
CF |
/notifications/ |
通知 |
CF,count_by_campaign,mark_all_as_read |
服务
API 资源 |
API 客户端入口点 |
API 客户端入口点操作 |
---|---|---|
/st_cleanups_by_campaigns/ |
st_cleanup_by_campaign |
CF,get_full |
/st_cleanups_by_timeseries/ |
st_cleanup_by_timeseries |
create,update,delete,get_full |
/st_check_missings_by_campaigns/ |
st_check_missing_by_campaign |
CF,get_full |
/st_check_outliers_by_campaigns/ |
st_check_outlier_by_campaign |
CF,get_full |
/st_download_weather_data_by_sites/ |
st_download_weather_by_site |
CF,get_full |
/st_download_weather_forecast_data_by_sites/ |
st_download_weather_forecast_by_site |
CF,get_full |
使用示例
请务必参考API 文档,因为它全面描述了所有 API 端点:所需查询参数、有效负载中的数据格式和响应内容(状态码、数据格式等)。
import datetime as dt
from bemserver_api_client import BEMServerAPIClient
from bemserver_api_client.enums import DegreeDaysPeriod
from bemserver_api_client.exceptions import (
BEMServerAPINotFoundError,
BEMServerAPIValidationError,
)
# Get an instance of API client, setting the API host.
api_client = BEMServerAPIClient("localhost:5000")
# Get the authentication bearer access and refresh tokens (JWT).
auth_resp = api_client.auth.get_tokens("user@email.com", "password")
if auth_resp.data["status"] == "failure":
# User could not be authenticated (no access/refresh tokens are returned).
# Raise exception, ...
pass
# At this point (auth_resp.data["status"] == "success"), the user is authenticated.
# auth_resp.data contains access and refresh tokens:
# {
# "status": "success",
# "access_token": "...",
# "refresh_token": "..."
# }
# Set authentication method (bearer token authentication) in API client instance,
# in order to call private API endpoints.
api_client.set_authentication_method(
BEMServerAPIClient.make_bearer_token_auth(
auth_resp.data["access_token"], auth_resp.data["refresh_token"]
)
)
# NOTE: When expired access token is automatically refreshed inside API client
# and requests goes on. Else `BEMServerAPIAuthenticationError` is raised and
# a new authentication is needed to continue calling private API endpoints.
# Get a list of all the sites available (for the authenticated user).
sites_resp = api_client.sites.getall()
# sites_resp is an instance of `BEMServerApiClientResponse` class,
# which has processed yet API response data
# sites_resp.data contains sites list:
# [
# {
# "id": 0,
# "name": "A",
# "latitude": -90,
# "longitude": -180,
# "description": "AAAAAA",
# "ifc_id": "AAAAAA",
# "campaign_id": 0
# }
# ]
# Get the heating degree days data of a specific site.
dd_resp = api_client.sites.get_degree_days(
1,
dt.date(2024, 1, 1).isoformat(),
dt.date(2025, 1, 1).isoformat(),
period=DegreeDaysPeriod.month,
)
# dd_resp.data contains:
# {
# "degree_days": {
# "2024-01-01T00:00:00+01:00": 76.05166666666668,
# "2024-02-01T00:00:00+01:00": 85.16583333333332,
# "2024-03-01T00:00:00+01:00": 65.69916666666667,
# "2024-04-01T00:00:00+02:00": 11.920000000000002,
# "2024-05-01T00:00:00+02:00": 0,
# "2024-06-01T00:00:00+02:00": 0,
# "2024-07-01T00:00:00+02:00": 0,
# "2024-08-01T00:00:00+02:00": 0,
# "2024-09-01T00:00:00+02:00": 0,
# "2024-10-01T00:00:00+02:00": 0,
# "2024-11-01T00:00:00+01:00": 2.098333333333331,
# "2024-12-01T00:00:00+01:00": null
# }
# }
# Get a specific site, that does not exists (status code 404).
# In this case, the API error response is processed and api client raises an exception.
try:
sites_resp = api_client.sites.getone(42)
except BEMServerAPINotFoundError:
# Manage resource not found error.
pass
# Some kind of errors, like BEMServerAPIValidationError, includes details on what occured.
try:
sites_resp = api_client.sites.create({"campaign_id": 1})
except BEMServerAPIValidationError as exc:
# Manage validation error.
print(exc.errors)
# exc.errors actually contains a dict of validation messages:
# {
# "name": [
# "Missing data for required field."
# ]
# }
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。
源分布
构建分布
bemserver_api_client-0.21.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a9c2e5b8711b051701f6bf0c6ac15d1a1afbba3e5f959b7ccb027c2ce34cc074 |
|
MD5 | af22738f5366f10d293e9d09121dc9b4 |
|
BLAKE2b-256 | 300b23353d1d415fb80dfd7a0f79b1f81c7935018b147a4a873a642ecf76060c |
bemserver_api_client-0.21.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c110afddb4c2e99fc938c1afb170f36ba4b1fd81c8536718c20f0e56b61fa0d2 |
|
MD5 | 93cb22a3d56d59f6c030b70120ad2960 |
|
BLAKE2b-256 | 74ba3166559a9ec3bdf89080cab2b7cc5963afa962111d692db3925fa4f94f60 |