将 Netatmo 恒温器数据发送到 InfluxDB。
项目描述
Netatmo2InfluxDB
Netatmo2InfluxDB支持跨多个房屋将多个 Netatmo 恒温器导入 InfluxDB。
这个怎么运作
通过使用Netatmo Developer API,我们可以使用它们api/homesdata和api/getroommeasure端点获取数据(参见:) netatmo2influxdb/data.py。端点允许 30 分钟的api/getroommeasure粒度,这对我们的应用程序来说很好。
为了能够实际检索数据,我们首先必须收集访问和刷新令牌。我们使用他们的端点获取给定用户名的那些oauth2/token(见:)netatmo2influxdb/tokens.py。这需要一次性使用用户的密码。随后的令牌然后存储在一个小型 sqlite 数据库 ( netatmo.db) 中。
在一个正常的用例中,我们想要检索所有的数据。为此,我们使用命令行参数--all。这将检索所有家庭 ID 和相关房间 ID(请参阅:netatmo2influxdb/data.py:get_home和netatmo2influxdb/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 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 0a6e5dbed58a78be0a1ca7d88b04035b17badd8cea9879770bafda72c4621ea6 |
|
| MD5 | 91b9be9273f8348bc4616c0b8d247cef |
|
| 布莱克2-256 | 7af8699edcf938cd703b14157923ad2221e6175399a60c30bc678fe39c8864de |
netatmo2influxdb -0.1.2-py2.py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | c3929f1fdafd681b561710cb1f47ecf6a2269240982c24061c716538ad25e6f5 |
|
| MD5 | 5eac6eb95642ea5999d80c9e91190185 |
|
| 布莱克2-256 | 2d71c28b0912b0cfffa935974dfacd8db712d074eae2a92d6c4ddcdc5989f8cb |