swimtracker-firmware/python-mock/plot.py

57 lines
1.4 KiB
Python

import matplotlib.pyplot as plt
import numpy as np
from msgpack.fallback import unpackb
import requests
import array
import sys
def ext_hook(code, data):
#if code == -47:
print("code", code)
if code == -51:
print("before")
res = np.frombuffer(data, dtype=np.int16)
print(res)
print("after")
return res
else:
print(code)
return 'unknown ext'
def decode(stream):
return unpackb(stream, ext_hook=ext_hook, raw=False)
def from_file(file_name):
with open(file_name, 'rb') as f:
file_contents = f.read()
print("File size", len(file_contents))
res = decode(file_contents)
print(res)
plt.plot(res['values'], 'x-')
plt.show()
return res
def from_network(url="http://swimtrainer/api/session", start_index=0):
r = requests.get("{}?startIndex={}".format(url, start_index))
res = decode(r.content)
print(res)
plt.plot(res['timestamps'], res['values'], 'x-')
plt.show()
def analyze(data, max_size=8*1024):
time_stamps = data['timestamps'][:max_size]
values = data['values'][:max_size]
time_range_seconds = (time_stamps[-1] - time_stamps[0]) / 10
dense_time_range_seconds = max_size / 10
print("Time range {}, dense {} [minutes]".format(time_range_seconds / 60, dense_time_range_seconds / 60))
#from_network()
res = from_file(sys.argv[1])
print(res)
#analyze(res)