发送netatmo恒温器数据到infloxdb。
netatmo2influxdb的Python项目详细描述
NetatMo2influxDB
Netatmo2InfluxDB
支持跨多个房屋将多个netatmo恒温器导入infloxdb。
工作原理
通过使用Netatmo Developer API,我们可以使用它们的api/homesdata
和api/getroommeasure
端点来获取数据(请参见:^{api/getroommeasure
端点允许30分钟的粒度,这对我们的应用程序很好。
为了能够实际检索数据,我们首先必须收集访问和刷新令牌。我们使用给定用户名的oauth2/token
端点(请参见:^{netatmo.db
)中。
在正常的用例中,我们想要检索所有的数据。为此,我们使用命令行参数--all
。这将检索所有家庭ID和相关的房间ID(请参见:^{username
,home_id
,room_id
,start_ts
,end_ts
,count
)都被存储。
要将数据存储在infloxdb中,必须对数据进行一些小的更改。我们将epoch时间戳解析为dt.isoformat并解压温度。通过使用提供的infloxdb serieshelper,我们确保一次只发送512条记录的包。默认情况下包括以下标记:user
,home_name
,home_id
,room_name
,room_id
。
因为我们中的一些人喜欢在infloxdb数据库度量中添加额外的标记,所以这个功能是用--custom-tags
参数添加的。只需添加空格分隔的tag:value
(请参见^{
如果你想玩,添加了--interactive
参数。这可以确保所有cli参数都被解析,但实际上没有运行任何参数。像这样使用:pipenv run python -it app {username} {args} --interactive
。你也可以用--dry
进行一次试运行。这确保不会在本地或infloxdb实例中存储任何内容。
安装
使用pipenv安装,运行pipenv install
确保复制.env.tpl
->;.env
,并添加适当的值。
cli
使用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分钟启动一次容器,并在获取完数据后关闭它。
使用并调整crontab的以下config.json
文件:
[{"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