annotate epro.py @ 7:3baca74482b6

Fix a few more incorrect sign bits
author Daniel O'Connor <darius@dons.net.au>
date Wed, 09 Jun 2021 14:56:56 +0930
parents 2f7ee650e6fb
children 0a571da65068
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
1 #!/usr/bin/env python
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
2
4
787d9c8fdec6 Add working example when run as an exe
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
3 import serial
787d9c8fdec6 Add working example when run as an exe
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
4 import sys
787d9c8fdec6 Add working example when run as an exe
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
5
0
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
6 # View facing ePro from the back
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
7 # +---+
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
8 # +-| |-|
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
9 # | |
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
10 # | |
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
11 # +-------+
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
12 # 1 ... 6
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
13 #
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
14 # RJ12 plug (Jaycar cable colours)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
15 # 1 white temp out
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
16 # 2 black temp in
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
17 # 3 red GND
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
18 # 4 green TX TTL (5V)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
19 # 5 yellow RX TTL (5V)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
20 # 6 blue VCC (12V)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
21 #
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
22 # 2400bps 8E1
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
23 # s = serial.Serial('/dev/cu.usbserial-AM01Z7TZ', 2400, parity='E')
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
24
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
25 class Packet(object):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
26 MSGTYPE = -1
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
27
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
28 def __init__(self, dstadr, srcadr, devid, msgtype, data):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
29 self.dstadr = dstadr
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
30 self.srcadr = srcadr
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
31 self.devid = devid
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
32 self.msgtype = msgtype
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
33 self.data = data
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
34
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
35 def __repr__(self):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
36 hdr = "Src: 0x%02x Dst: 0x%02x DevID: 0x%02x MsgType: 0x%02x" % (
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
37 self.dstadr, self.srcadr, self.devid, self.msgtype)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
38 # MSGTYPE is overridden for subclasses which also have their own repr so don't dumb data here
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
39 if self.MSGTYPE == -1:
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
40 hdr += " Data:"
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
41 for d in self.data:
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
42 hdr += " 0x%02x" % (d)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
43 else:
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
44 hdr += " Name: " + self.MSGNAME
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
45
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
46 return hdr
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
47
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
48 class MainVoltage(Packet):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
49 """Main Battery Voltage"""
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
50 MSGTYPE = 0x60
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
51 MSGNAME = "Main Voltage"
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
52 LEN = 3
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
53
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
54 def __init__(self, dstadr, srcadr, devid, msgtype, data):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
55 super(MainVoltage, self).__init__(dstadr, srcadr, devid, msgtype, data)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
56 self.volts = (data[2] & 0x7f | (data[1] & 0x7f) << 7 | (data[0] & 0x03) << 14) / 100.0
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
57
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
58 def __repr__(self):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
59 s = super(MainVoltage, self).__repr__()
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
60 s += ": %.2f V" % (self.volts)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
61 return s
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
62
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
63 class BatteryCurrent(Packet):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
64 """Main Battery Current"""
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
65 MSGTYPE = 0x61
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
66 MSGNAME = "Battery Current"
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
67 LEN = 3
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
68
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
69 def __init__(self, dstadr, srcadr, devid, msgtype, data):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
70 super(BatteryCurrent, self).__init__(dstadr, srcadr, devid, msgtype, data)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
71 self.amps = (data[2] & 0x7f | (data[1] & 0x7f) << 7 | (data[0] & 0x3f) << 14) / 100.0
6
2f7ee650e6fb Use correct byte for sign bit.
Daniel O'Connor <darius@dons.net.au>
parents: 5
diff changeset
72 if data[0] & 0x40:
0
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
73 self.amps *= -1
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
74
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
75 def __repr__(self):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
76 s = super(BatteryCurrent, self).__repr__()
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
77 s += ": %.2f A" % (self.amps)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
78 return s
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
79
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
80 class AmpHours(Packet):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
81 """Number of amp hours removed from the battery"""
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
82 MSGTYPE = 0x62
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
83 MSGNAME = "Amp Hours"
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
84 LEN = 3
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
85
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
86 def __init__(self, dstadr, srcadr, devid, msgtype, data):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
87 super(AmpHours, self).__init__(dstadr, srcadr, devid, msgtype, data)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
88 self.amphrs = (data[2] & 0x7f | (data[1] & 0x7f) << 7 | (data[0] & 0x3f) << 14) / 100.0
7
3baca74482b6 Fix a few more incorrect sign bits
Daniel O'Connor <darius@dons.net.au>
parents: 6
diff changeset
89 if data[0] & 0x40:
0
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
90 self.amphrs *= -1
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
91
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
92 def __repr__(self):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
93 s = super(AmpHours, self).__repr__()
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
94 s += ": %.2f Ah" % (self.amphrs)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
95 return s
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
96
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
97 class StateOfCharge(Packet):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
98 """State of battery charge"""
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
99 MSGTYPE = 0x64
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
100 MSGNAME = "State Of Charge"
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
101 LEN = 3
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
102
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
103 def __init__(self, dstadr, srcadr, devid, msgtype, data):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
104 super(StateOfCharge, self).__init__(dstadr, srcadr, devid, msgtype, data)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
105 self.soc = (data[2] & 0x7f | (data[1] & 0x7f) << 7 | (data[0] & 0x03) << 14) / 10.0
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
106
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
107 def __repr__(self):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
108 s = super(StateOfCharge, self).__repr__()
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
109 s += ": %.2f%%" % (self.soc)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
110 return s
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
111
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
112 class TimeRemaining(Packet):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
113 """Time remaining until battery needs charging"""
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
114 MSGTYPE = 0x65
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
115 MSGNAME = "Time remaining"
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
116 LEN = 3
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
117
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
118 def __init__(self, dstadr, srcadr, devid, msgtype, data):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
119 super(TimeRemaining, self).__init__(dstadr, srcadr, devid, msgtype, data)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
120 self.time = (data[2] & 0x7f | (data[1] & 0x7f) << 7 | (data[0] & 0x3f) << 14)
7
3baca74482b6 Fix a few more incorrect sign bits
Daniel O'Connor <darius@dons.net.au>
parents: 6
diff changeset
121 if data[0] & 0x40:
0
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
122 self.time *= -1
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
123
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
124 def __repr__(self):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
125 s = super(TimeRemaining, self).__repr__()
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
126 s += ": %.2f min" % (self.time)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
127 return s
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
128
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
129 class BatteryTemperature(Packet):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
130 """Battery temperature (degrees Celcius)"""
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
131 MSGTYPE = 0x66
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
132 MSGNAME = "Battery Temperature"
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
133 LEN = 3
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
134
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
135 def __init__(self, dstadr, srcadr, devid, msgtype, data):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
136 super(BatteryTemperature, self).__init__(dstadr, srcadr, devid, msgtype, data)
3
6d0fe22566ab Fix cut & paste error for variable name, report disconnected sensor specially.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
137 self.temp = (data[2] & 0x7f | (data[1] & 0x7f) << 7 | (data[0] & 0x3f) << 14) / 10.0
0
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
138 if data[2] & 0x40:
3
6d0fe22566ab Fix cut & paste error for variable name, report disconnected sensor specially.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
139 self.temp *= -1
6d0fe22566ab Fix cut & paste error for variable name, report disconnected sensor specially.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
140 if self.temp == -20:
6d0fe22566ab Fix cut & paste error for variable name, report disconnected sensor specially.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
141 self.temp = None
0
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
142
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
143 def __repr__(self):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
144 s = super(BatteryTemperature, self).__repr__()
3
6d0fe22566ab Fix cut & paste error for variable name, report disconnected sensor specially.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
145 if self.temp == None:
6d0fe22566ab Fix cut & paste error for variable name, report disconnected sensor specially.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
146 s += ": n/a"
6d0fe22566ab Fix cut & paste error for variable name, report disconnected sensor specially.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
147 else:
6d0fe22566ab Fix cut & paste error for variable name, report disconnected sensor specially.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
148 s += ": %.2f degC" % (self.temp)
0
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
149 return s
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
150
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
151 class MonitorStatus(Packet):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
152 """Monitor status"""
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
153 MSGTYPE = 0x67
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
154 MSGNAME = "Monitor Status"
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
155 LEN = 3
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
156
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
157 def __init__(self, dstadr, srcadr, devid, msgtype, data):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
158 super(MonitorStatus, self).__init__(dstadr, srcadr, devid, msgtype, data)
5
982eeffe9d95 Convert booleans to boolean. Sqlite doesn't do it and stores them as ints instead
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
159 self.autosyncvolt = bool(data[0] & 0x10)
982eeffe9d95 Convert booleans to boolean. Sqlite doesn't do it and stores them as ints instead
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
160 self.autosyncamp = bool(data[0] & 0x08)
982eeffe9d95 Convert booleans to boolean. Sqlite doesn't do it and stores them as ints instead
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
161 self.autosyncchrg = bool(data[0] & 0x04)
982eeffe9d95 Convert booleans to boolean. Sqlite doesn't do it and stores them as ints instead
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
162 self.e501compat = bool(data[0] & 0x02)
982eeffe9d95 Convert booleans to boolean. Sqlite doesn't do it and stores them as ints instead
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
163 self.alarmtst = bool(data[0] & 0x01)
982eeffe9d95 Convert booleans to boolean. Sqlite doesn't do it and stores them as ints instead
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
164 self.backlight = bool(data[1] & 0x40)
982eeffe9d95 Convert booleans to boolean. Sqlite doesn't do it and stores them as ints instead
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
165 self.disptst = bool(data[1] & 0x20)
982eeffe9d95 Convert booleans to boolean. Sqlite doesn't do it and stores them as ints instead
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
166 self.tempsense = bool(data[1] & 0x10) # Seems to be inverted from data sheet
982eeffe9d95 Convert booleans to boolean. Sqlite doesn't do it and stores them as ints instead
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
167 self.auxhv = bool(data[1] & 0x08)
982eeffe9d95 Convert booleans to boolean. Sqlite doesn't do it and stores them as ints instead
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
168 self.auxlv = bool(data[1] & 0x04)
982eeffe9d95 Convert booleans to boolean. Sqlite doesn't do it and stores them as ints instead
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
169 self.lock = bool(data[1] & 0x02)
982eeffe9d95 Convert booleans to boolean. Sqlite doesn't do it and stores them as ints instead
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
170 self.mainhv = bool(data[1] & 0x01)
982eeffe9d95 Convert booleans to boolean. Sqlite doesn't do it and stores them as ints instead
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
171 self.mainlv = bool(data[2] & 0x40)
982eeffe9d95 Convert booleans to boolean. Sqlite doesn't do it and stores them as ints instead
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
172 self.lowbatalarm = bool(data[2] & 0x20)
982eeffe9d95 Convert booleans to boolean. Sqlite doesn't do it and stores them as ints instead
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
173 self.batflat = bool(data[2] & 0x10)
982eeffe9d95 Convert booleans to boolean. Sqlite doesn't do it and stores them as ints instead
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
174 self.batfull = bool(data[2] & 0x08)
982eeffe9d95 Convert booleans to boolean. Sqlite doesn't do it and stores them as ints instead
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
175 self.charged = bool(data[2] & 0x04)
982eeffe9d95 Convert booleans to boolean. Sqlite doesn't do it and stores them as ints instead
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
176 self.nosync = bool(data[2] & 0x02)
982eeffe9d95 Convert booleans to boolean. Sqlite doesn't do it and stores them as ints instead
Daniel O'Connor <darius@dons.net.au>
parents: 4
diff changeset
177 self.monreset = bool(data[2] & 0x01)
0
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
178
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
179 def __repr__(self):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
180 s = super(MonitorStatus, self).__repr__()
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
181 stats = ( ( "ASV", self.autosyncvolt ), ( "ASA", self.autosyncamp ), ( "ASC" , self.autosyncchrg ),
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
182 ( "E501", self.e501compat ), ( "Alarm test", self.alarmtst ), ( "Light", self.backlight ),
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
183 ( "Temperature Sensor", self.tempsense ), ( "Aux HV", self.auxhv ), ( "Aux LV", self.auxlv ),
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
184 ( "Lock", self.lock ), ( "Main HV", self.mainhv ), ( "Main LV", self.mainlv ),
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
185 ( "Low Battery", self.lowbatalarm ), ( "Battery Flat", self.batfull ),
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
186 ( "Battery Full", self.batfull ), ( "Battery Charged", self.charged ),
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
187 ( "No Sync", self.nosync ), ( "Monitor Reset", self.monreset ) )
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
188 for (short, var) in stats:
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
189 if var:
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
190 s += " %s : True" % (short)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
191 else:
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
192 s += " %s : False" % (short)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
193
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
194 return s
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
195
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
196 class AuxVoltage(Packet):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
197 """Aux Battery Voltage"""
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
198 MSGTYPE = 0x68
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
199 MSGNAME = "Aux Voltage"
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
200 LEN = 3
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
201
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
202 def __init__(self, dstadr, srcadr, devid, msgtype, data):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
203 super(AuxVoltage, self).__init__(dstadr, srcadr, devid, msgtype, data)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
204 self.volts = (data[2] & 0x7f | (data[1] & 0x7f) << 7 | (data[0] & 0x03) << 14) / 100.0
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
205
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
206 def __repr__(self):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
207 s = super(AuxVoltage, self).__repr__()
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
208 s += ": %.2f V" % (self.volts)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
209 return s
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
210
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
211 class Processor(object):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
212 PKT_TYPES = { MainVoltage.MSGTYPE : MainVoltage, BatteryCurrent.MSGTYPE : BatteryCurrent,
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
213 AmpHours.MSGTYPE : AmpHours, StateOfCharge.MSGTYPE : StateOfCharge,
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
214 TimeRemaining.MSGTYPE : TimeRemaining, BatteryTemperature.MSGTYPE : BatteryTemperature,
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
215 MonitorStatus.MSGTYPE : MonitorStatus, AuxVoltage.MSGTYPE : AuxVoltage }
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
216
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
217 def __init__(self):
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
218 self.state = 0
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
219 self.packets = []
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
220
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
221 def process(self, dat):
4
787d9c8fdec6 Add working example when run as an exe
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
222 added = False
0
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
223 for d in dat:
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
224 d = ord(d)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
225 if d == 0xff and self.state != 4:
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
226 print "Packet corruption"
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
227 continue
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
228
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
229 if self.state == 0:
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
230 # Waiting for destination address (MSB set but not 0xff as that is EOM)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
231 if d == 0xff or d & 0x80 == 0:
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
232 print "Skipping byte"
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
233 continue
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
234 self.dstadr = d & 0x7f
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
235 self.data = []
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
236 self.state += 1
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
237 elif self.state == 1:
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
238 # Source address
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
239 self.srcadr = d
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
240 self.state += 1
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
241 elif self.state == 2:
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
242 # Device ID
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
243 self.devid = d
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
244 self.state += 1
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
245 elif self.state == 3:
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
246 # Message type
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
247 self.msgtype = d
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
248 self.state += 1
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
249 elif self.state == 4:
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
250 # Data
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
251 if d != 0xff:
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
252 self.data.append(d)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
253 continue
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
254 self.state = 0
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
255 if self.msgtype in Processor.PKT_TYPES:
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
256 t = self.PKT_TYPES[self.msgtype]
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
257 if len(self.data) != t.LEN:
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
258 print "Packet length incorrect, expected %d got %d" % (t.LEN, len(self.data))
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
259 continue
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
260
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
261 p = self.PKT_TYPES[self.msgtype](self.dstadr, self.srcadr, self.devid, self.msgtype, self.data)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
262 else:
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
263 p = Packet(self.dstadr, self.srcadr, self.devid, self.msgtype, self.data)
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
264
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
265 self.packets.append(p)
4
787d9c8fdec6 Add working example when run as an exe
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
266 added = True
787d9c8fdec6 Add working example when run as an exe
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
267 return added
787d9c8fdec6 Add working example when run as an exe
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
268
787d9c8fdec6 Add working example when run as an exe
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
269 def main():
787d9c8fdec6 Add working example when run as an exe
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
270 if len(sys.argv) != 2:
787d9c8fdec6 Add working example when run as an exe
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
271 print 'Bad usage'
787d9c8fdec6 Add working example when run as an exe
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
272 exit(1)
787d9c8fdec6 Add working example when run as an exe
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
273
787d9c8fdec6 Add working example when run as an exe
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
274 s = serial.Serial(sys.argv[1], 2400, parity='E')
787d9c8fdec6 Add working example when run as an exe
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
275 s.timeout = 0.2
787d9c8fdec6 Add working example when run as an exe
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
276
787d9c8fdec6 Add working example when run as an exe
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
277 p = Processor()
787d9c8fdec6 Add working example when run as an exe
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
278 while True:
787d9c8fdec6 Add working example when run as an exe
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
279 res = p.process(s.read(1024))
787d9c8fdec6 Add working example when run as an exe
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
280 while len(p.packets) > 0:
787d9c8fdec6 Add working example when run as an exe
Daniel O'Connor <darius@dons.net.au>
parents: 3
diff changeset
281 print(p.packets.pop(0))
0
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
282
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
283 if __name__ == '__main__':
1de08e57774f Initial comit of code to talk to EnerDrive ePro battery monitor
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
284 main()