pacer2influxdb/pacer2influxdb.py

87 lines
3.4 KiB
Python
Executable File

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