pacer2influxdb/pacer2influxdb.py

84 lines
3.4 KiB
Python
Raw Normal View History

2019-05-19 18:31:25 +02:00
#!/usr/bin/env python3
2024-02-13 21:36:27 +01:00
"""Export Pacer data to InfluxDB"""
2019-05-19 18:31:25 +02:00
import datetime
import time
import sqlite3 as lite
import argparse
2024-02-13 21:36:27 +01:00
from influxdb import InfluxDBClient
2019-05-19 18:31:25 +02:00
2024-02-13 21:36:27 +01:00
def main(args):
2019-05-19 18:31:25 +02:00
"""Instantiate the connection to the InfluxDB client."""
2024-02-13 21:36:27 +01:00
influx_db = InfluxDBClient(args.host, args.port, args.user, args.password, args.dbname)
measurements = influx_db.get_list_measurements()
time_stamp = 0
lastdate = 0
laststeps = 0
2019-05-19 18:43:00 +02:00
if measurements != []:
2024-02-13 21:36:27 +01:00
lastentry = influx_db.query('SELECT LAST("steps") FROM "steps"')
2019-05-19 18:31:25 +02:00
points = lastentry.get_points('steps')
lastdate = list(points)[0]['time']
2024-02-13 21:36:27 +01:00
time_stamp = time.mktime(datetime.datetime.strptime(lastdate, '%Y-%m-%dT%H:%M:%SZ')
.timetuple())
if time_stamp == datetime.datetime.now().timestamp() // 86400 * 86400 + time.timezone:
points = lastentry.get_points('steps')
laststeps = list(points)[0]['last']
2019-05-19 18:31:25 +02:00
2022-02-27 10:20:35 +01:00
if args.verbose:
2024-02-13 21:36:27 +01:00
print(f'last entry is {lastdate}, timestamp is {time_stamp}, \
number of steps is {laststeps}\n')
2019-05-19 18:31:25 +02:00
2024-02-13 21:36:27 +01:00
con = lite.connect(args.dbfile)
2019-05-19 18:31:25 +02:00
with con:
cur = con.cursor()
2024-02-13 21:36:27 +01:00
cur.execute(f'SELECT recordedForDate,steps,distanceInMeters,activeTimeInSeconds,calories \
FROM dailyActivityLog \
WHERE recordedForDate >= {time_stamp} AND steps > {laststeps}')
2019-05-19 18:31:25 +02:00
while True:
row = cur.fetchone()
2024-02-13 21:36:27 +01:00
if row is None:
2019-05-19 18:31:25 +02:00
break
mytime = datetime.datetime.fromtimestamp(row[0]).strftime('%Y-%m-%dT%H:%M:%SZ')
2024-02-13 21:36:27 +01:00
data = [{"measurement":"steps",
2019-05-19 18:31:25 +02:00
"time":mytime,
"fields": {
"steps":row[1],
"distanceInMeters":row[2],
"activeTimeInSeconds":row[3],
"calories":row[4]
2024-02-13 21:36:27 +01:00
}
}]
2022-02-27 10:20:35 +01:00
if args.verbose:
2024-02-13 21:36:27 +01:00
print(f'writing data for {mytime}')
influx_db.write_points(data)
influx_db.close()
2019-05-19 18:31:25 +02:00
def parse_args():
"""Parse the args from main."""
parser = argparse.ArgumentParser(
description='Export Pacer data to InfluxDB')
2022-02-27 10:26:09 +01:00
parser.add_argument('-v', '--verbose', required=False,
2022-02-27 10:20:35 +01:00
action="store_true",
help='verbose output')
2022-02-27 10:26:09 +01:00
parser.add_argument('-H', '--host', type=str, required=False,
2019-05-19 18:31:25 +02:00
default='localhost',
help='hostname of InfluxDB http API')
2022-02-27 10:26:09 +01:00
parser.add_argument('-u', '--user', type=str, required=False,
2019-05-19 18:31:25 +02:00
default='root',
help='username for InfluxDB http API')
2022-02-27 10:26:09 +01:00
parser.add_argument('-p', '--password', type=str, required=False,
2019-05-19 18:31:25 +02:00
default='root',
help='passworid for InfluxDB http API')
2022-02-27 10:26:09 +01:00
parser.add_argument('-P', '--port', type=int, required=False, default=8086,
2019-05-19 18:31:25 +02:00
help='port of InfluxDB http API')
2022-02-27 10:26:09 +01:00
parser.add_argument('-n', '--dbname', type=str, required=True, default='demo',
2019-05-19 18:31:25 +02:00
help='InfluxDB database name')
2022-02-27 10:26:09 +01:00
parser.add_argument('-f', '--dbfile', type=str, required=True, default='demo.db',
2019-05-19 18:31:25 +02:00
help='sqlite (pacer) database name')
return parser.parse_args()
if __name__ == '__main__':
2024-02-13 21:36:27 +01:00
main(parse_args())