跳转到主要内容

一个查询apd.sensor端点并聚合其结果的程序。

项目描述

APD传感器聚合器

一个查询apd.sensor端点并聚合其结果的程序。

通用的单数据库配置。

数据库设置

要生成所需的数据库表,您必须创建一个alembic.ini文件,如下所示

[alembic]
script_location = apd.aggregation:alembic
sqlalchemy.url = postgresql+psycopg2://apd@localhost/apd

然后运行alembic upgrade head。这应该在软件的每次升级后也完成。

定义端点

要收集的端点由sensor_deployments CLI工具管理。安装后,将没有定义部署

sensor_deployments add --db postgresql+psycopg2://apd@localhost/apd 
                       --api-key 97f6b3e5ceb64a6ba88968d7c3786b38
                       --colour xkcd:red
                       http://rpi4:8081
                       Loft

可选的颜色参数是使用内置图表工具绘制图表时使用的颜色。这使用matplotlib的颜色规范系统,文档见https://matplotlib.net.cn/tutorials/colors/colors.html

然后可以使用sensor_deployments list列出传感器

Loft
ID 53998a5160de48aeb71a5c37cd1455f2
URI http://rpi4:8081
API key 97f6b3e5ceb64a6ba88968d7c3786b38
Colour xkcd:red

ID是部署ID,由端点设置。只有在可以连接到它们时才能添加端点。

整理数据

可以使用collect_sensor_data命令行工具从所有定义的端点收集数据。虽然您可以指定URL和API密钥以显式从单个端点加载数据,但未指定这些参数将使用数据库中配置的端点。

collect_sensor_data --db postgresql+psycopg2://apd@localhost/apd

查看数据

您可以编写脚本从数据库中可视化数据。我推荐使用Jupyter,因为它在绘制图表和交互方面有很好的支持。

所有配置的图表都可以使用以下方式显示

from apd.aggregation.analysis import plot_multiple_charts
display(await plot_multiple_charts())

通过传递configs=到该函数,可以使用定义在apd.aggregation.analysis中的配置对象实现更复杂的图表。可以使用Jupyter/IPyWidgets的现有交互支持使用interactable_plot_multiple_charts函数实现交互性。

可以使用该模块中的其他函数实现更多控制,例如,使用以下方法从给定传感器获取所有数据点

from apd.aggregation.query import with_database, get_data

with with_database("postgresql+psycopg2://apd@localhost/apd") as session:
    points = [(dp.collected_at, dp.data) async for dp in get_data() if dp.sensor_name=="RelativeHumidity"]

这些可以从任何Python代码中调用,而不仅仅是Jupyter笔记本

分析和触发器

聚合器允许一个长时间运行的过程,该过程处理插入到数据库中的记录并应用规则。

这是使用基于Python的配置文件配置的,例如以下配置来记录温度波动超过或低于18°C的情况

import operator

from apd.aggregation.actions.action import OnlyOnChangeActionWrapper, LoggingAction
from apd.aggregation.actions.runner import DataProcessor
from apd.aggregation.actions.trigger import ValueThresholdTrigger


handlers = [
    DataProcessor(
        name="TemperatureBelow18",
        action=OnlyOnChangeActionWrapper(LoggingAction()),
        trigger=ValueThresholdTrigger(
            name="TemperatureBelow18",
            threshold=18,
            comparator=operator.lt,
            sensor_name="Temperature",
        ),
    )
]

这是运行方式

run_apd_actions --db postgresql+psycopg2://apd@localhost/apd sample_actions.py

可选的--historical选项会导致对数据库中的所有事件触发操作。如果省略,则默认行为适用,即只分析在操作过程开始后添加到数据库中的数据。

可能的行为包括

  • apd.aggregation.actions.action.LoggingAction() - 记录数据点
  • apd.aggregation.actions.action.SaveToDatabaseAction() - 将数据点保存到数据库

这些可以通过OnlyOnChangeActionWrapper(subaction)包装来仅在底层值更改时触发操作,或者通过OnlyAfterDateActionWrapper(subaction, min_date)来仅在发现的对象的日期严格在min_date之后时触发。

可能的触发器包括

  • apd.aggregation.actions.trigger.ValueThresholdTrigger(...) - 这会将传感器的值与阈值进行比较,使用指定的比较器。任何不匹配sensor_namedeployment_id参数的记录将被排除。

提示

所有命令行工具的--db参数可以省略,并设置APD_DB_URI环境变量。

更改

2.0.2 (2020-08-14)

  • 修复collect CLI脚本的错误处理

2.0.1 (2020-08-14)

  • 提高与Python 3.7的兼容性,便于在RPis上使用

2.0.0 (2020-05-21)

  • 删除容忍失败选项,改为始终容忍失败

1.1.0 (2020-05-21)

  • 解决APD书籍的技术审查评论。使用此版本而不是1.0.0版本。
  • 提高与Pint新版本的兼容性

1.0.0 (2020-01-27)

  • 添加已知传感器端点的管理
  • 添加CLI脚本来收集数据
  • 添加Jupyter的分析工具
  • 添加长时间运行的数据合成和操作系统

版权(c)2019,Matthew Wilkes

保留所有权利。

在满足以下条件的情况下,允许重新分配和使用源代码和二进制形式,无论是否修改

  • 源代码重新分配必须保留上述版权声明、本条件列表和以下免责声明。

  • 二进制形式的重新分配必须在文档和/或其他随重新分配提供的材料中重新生产上述版权声明、本条件列表和以下免责声明。

  • 未经版权所有者或其贡献者事先书面许可,不得使用其名称或其贡献者的名称来认可或推广源自本软件的产品。

本软件由版权所有者和贡献者提供“按原样”以及任何明示或暗示的保证,包括但不限于适销性和针对特定目的的适用性保证。在任何情况下,版权所有者或贡献者均不对任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于替代货物或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论此类损害是由于何种原因以及何种责任理论(合同、严格责任或侵权(包括疏忽或不计后果))产生,即使已告知此类损害的可能性。

项目详情


下载文件

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

源代码发行版

此版本没有可用的源代码发行版文件。请参阅生成发行版存档的教程。

构建发行版

apd.aggregation-2.0.2-py3-none-any.whl (31.4 kB 查看哈希值)

上传时间 Python 3

支持者

AWSAWS 云计算和安全赞助商 DatadogDatadog 监控 FastlyFastly CDN GoogleGoogle 下载分析 MicrosoftMicrosoft PSF赞助商 PingdomPingdom 监控 SentrySentry 错误日志 StatusPageStatusPage 状态页面