1ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#!/usr/bin/python
2ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
3ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosimport sys
4ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosimport getopt
5ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
6ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosdef usage():
7ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos    print "powersum.py [OPTIONS] HZ VOLTAGE [FILE]"
8ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos    print "OPTIONS: "
9ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos    print "-o OFFSET: subtract OFFSET from all data points"
10ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos    print "\nHZ: samples per second in FILE or stdin"
11ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos    sys.exit(0)
12ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
13ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosoffset = 0.0
14ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosvoltage = 4.3
15ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
16ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosparsedargv,argvrem = getopt.getopt(sys.argv[1:], "vo:w:l:h", ["help"])
17ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfor o,a in parsedargv:
18ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos    if o == '-o': offset = float(a)
19ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos    if o == '-h' or o == '--help': usage()
20ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
21ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjoshz = float(argvrem[0])
22ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosvoltage = float(argvrem[1])
23ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosif len(argvrem) > 1:
24ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos    f = open(argvrem[2], "r")
25ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjoselse:
26ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos    f = sys.stdin
27ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
28ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjostotalpower = 0.0
29ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjossamplectr = 0
30ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
31ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfor line in f:
32ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos    try:
33ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos        val = float(line.split(" ")[1]) # xxx take 2nd arg in line
34ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos        val -= offset
35ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos    except:
36ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos        print "Can't parse data line, did you remember the timestamp?"
37ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos        print "data was: %s" % line
38ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos        sys.exit(1)
39ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
40ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos    samplectr+=1
41ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos    totalpower += val/hz
42ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
43ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosavecurrent = totalpower * hz *1000 / samplectr
44ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosavepower = avecurrent * voltage
45ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
46ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosprint "%.3f %.3f" % (avecurrent, avepower)
47