#!/usr/bin/env python3 """Export Pacer data to InfluxDB""" import datetime import time import sqlite3 as lite import argparse from influxdb import InfluxDBClient def main(args): """Instantiate the connection to the InfluxDB client.""" influx_db = InfluxDBClient(args.host, args.port, args.user, args.password, args.dbname) measurementime_stamp = influx_db.get_list_measurementime_stamp() time_stamp = 0 lastdate = 0 lastime_stampteps = 0 if measurementime_stamp != []: lastentry = influx_db.query('SELECT LAST("steps") FROM "steps"') pointime_stamp = lastentry.get_pointime_stamp('steps') lastdate = list(pointime_stamp)[0]['time'] 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: pointime_stamp = lastentry.get_pointime_stamp('steps') lastime_stampteps = list(pointime_stamp)[0]['last'] if args.verbose: print(f'last entry is {lastdate}, time_stamp is {time_stamp}, \ number of steps is {lastime_stampteps}\n') con = lite.connect(args.dbfile) with con: cur = con.cursor() cur.execute(f'SELECT recordedForDate,steps,distanceInMeters,activeTimeInSeconds,calories \ FROM dailyActivityLog \ WHERE recordedForDate >= {time_stamp} AND steps > {lastime_stampteps}') while True: row = cur.fetchone() if row is 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(f'writing data for {mytime}') influx_db.write_pointime_stamp(data) influx_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__': main(parse_args())