Skip to main content

将 Netatmo 恒温器数据发送到 InfluxDB。

项目描述

Netatmo2InfluxDB

Netatmo2InfluxDB支持跨多个房屋将多个 Netatmo 恒温器导入 InfluxDB。

这个怎么运作

通过使用Netatmo Developer API,我们可以使用它们api/homesdataapi/getroommeasure端点获取数据(参见:) netatmo2influxdb/data.py。端点允许 30 分钟的api/getroommeasure粒度,这对我们的应用程序来说很好。

为了能够实际检索数据,我们首先必须收集访问和刷新令牌。我们使用他们的端点获取给定用户名的那些oauth2/token(见:)netatmo2influxdb/tokens.py。这需要一次性使用用户的密码。随后的令牌然后存储在一个小型 sqlite 数据库 ( netatmo.db) 中。

在一个正常的用例中,我们想要检索所有的数据。为此,我们使用命令行参数--all。这将检索所有家庭 ID 和相关房间 ID(请参阅:netatmo2influxdb/data.py:get_homenetatmo2influxdb/parser.py),并收集数据。因为我们不想每次都获取新数据,所以存储了所有导入记录(username, home_id, room_id, start_ts, end_ts, count)。

要将数据存储在 InfluxDB 中,必须对数据进行一些小的更改。我们将纪元时间戳解析为 dt.isoformat 并解压缩温度。通过使用提供的 InfluxDB SeriesHelper,我们确保我们一次只发送 512 条记录的包。默认包含以下标签:user, home_name, home_id, room_name, room_id.

因为我们中的一些人喜欢在我们的 InfluxDB 数据库测量中有额外的标签,所以这个功能被添加到--custom-tags参数中。只需添加空格分隔tag:value的 's(请参阅netatmo2influxdb/store.py:**custom_tags)。

如果你想玩,--interactive添加了参数。这可以确保您的所有 CLI 参数都被解析,但实际上没有运行任何内容。像这样使用:pipenv run python -it app {username} {args} --interactive. 您也可以使用--dry. 这确保没有任何内容存储在本地或 InfluxDB 实例中。

安装

使用 pipenv 安装,运行pipenv install

确保复制.env.tpl->.env并添加适当的值。

命令行界面

运行应用程序pipenv run app {netatmo username} {--all or --home ...} {optional arguments}

要了解可用的房屋和恒温器,请运行pipenv run app {netatmo username} --get-home.

usage: app [-h] [--home [home_id [['room_id'] ...]]]
           [--custom-tags [tag:value [tag:value ...]]] [--get-home] [--all]
           [--dry] [--clear-db] [--interactive]
           user

Gather thermostat data from Netatmo

positional arguments:
  user                  User to parse

optional arguments:
  -h, --help            show this help message and exit
  --home [home_id [['room_id'] ...]]
                        Homes and rooms to parse. Use format --home {home_id_1} {room_id_1} {room_id2} ... --home {home_id_2} ...
  --custom-tags [tag:value [tag:value ...]]
                        Provide custom tags for InfluxDB. Format: --custom-tags tag:value tag:value
  --get-home            Get home and room information
  --all                 Parse all homes and rooms
  --dry                 Do a dry-run (don't store in InfluxDB)
  --clear-db            Wipes database from users and import history
  --interactive         Allows interactive use (ignores all other args)

与 Docker 一起使用

因为我在 Docker 中运行我所有的内部工具,所以这里是关于如何启动和运行的简要说明。

构建 Docker 镜像

docker build -t netatmo2influxdb .

与 Docker crontab 一起使用

使用Docker Crontab,我们可以每 30 分钟启动一次容器,并在完成获取数据后将其关闭。

config.json为 Crontab使用和调整以下文件:

[{
    "schedule":"@every 30m",
    "image":"netatmo2influxdb",
    "dockerargs": "-d \
    --env-file /location/of/.env \
    -v /location/of/netatmo.db:/netatmo2influxdb/netatmo.db",
    "command":"python app [USERNAME] --all & shutdown -h now"
}]

如果您还没有运行 Crontab,请使用以下命令运行容器:

docker run -d \
    -v /var/run/docker.sock:/var/run/docker.sock:ro \
    -v ./env:/opt/env:ro \
    -v /path/to/config/dir:/opt/crontab:rw \
    -v /path/to/logs:/var/log/crontab:rw \
    willfarrell/crontab:latest

项目详情


下载文件

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

源分布

netatmo2influxdb-0.1.2.tar.gz (12.9 kB 查看哈希

已上传 source

内置分布

netatmo2influxdb-0.1.2-py2.py3-none-any.whl (12.4 kB 查看哈希

已上传 py2 py3