Created own data capture process
authorMartin O'Hanlon <martin@ohanlonweb.com>
Tue, 9 Jul 2013 21:02:04 +0000 (22:02 +0100)
committerMartin O'Hanlon <martin@ohanlonweb.com>
Tue, 9 Jul 2013 21:02:04 +0000 (22:02 +0100)
obd_capture.py [new file with mode: 0755]

diff --git a/obd_capture.py b/obd_capture.py
new file mode 100755 (executable)
index 0000000..c76fe95
--- /dev/null
@@ -0,0 +1,86 @@
+#!/usr/bin/env python
+
+import obd_io
+import serial
+import platform
+import obd_sensors
+from datetime import datetime
+import time
+
+from obd_utils import scanSerial
+
+class OBD_Capture():
+    def __init__(self):
+        self.port = None
+        localtime = time.localtime(time.time())
+
+    def connect(self):
+        portnames = scanSerial()
+        print portnames
+        for port in portnames:
+            self.port = obd_io.OBDPort(port, None, 2, 2)
+            if(self.port.State == 0):
+                self.port.close()
+                self.port = None
+            else:
+                break
+
+        if(self.port):
+            print "Connected to "+self.port.port.name
+            
+    def is_connected(self):
+        return self.port
+        
+    def capture_data(self):
+
+        #Find supported sensors - by getting PIDs from OBD
+        # its a string of binary 01010101010101 
+        # 1 means the sensor is supported
+        self.supp = self.port.sensor(0)[1]
+        self.supportedSensorList = []
+        self.unsupportedSensorList = []
+
+        # loop through PIDs binary
+        for i in range(0, len(self.supp)):
+            if self.supp[i] == "1":
+                # store index of sensor and sensor object
+                self.supportedSensorList.append([i+1, obd_sensors.SENSORS[i+1]])
+            else:
+                self.unsupportedSensorList.append([i+1, obd_sensors.SENSORS[i+1]])
+        
+        for supportedSensor in self.supportedSensorList:
+            print "supported sensor index = " + str(supportedSensor[0]) + " " + str(supportedSensor[1].shortname)        
+        
+        time.sleep(3)
+        
+        if(self.port is None):
+            return None
+
+        #Loop until Ctrl C is pressed        
+        try:
+            while True:
+                localtime = datetime.now()
+                current_time = str(localtime.hour)+":"+str(localtime.minute)+":"+str(localtime.second)+"."+str(localtime.microsecond)
+                log_string = current_time + "\n"
+                results = {}
+                for supportedSensor in self.supportedSensorList:
+                    sensorIndex = supportedSensor[0]
+                    (name, value, unit) = self.port.sensor(sensorIndex)
+                    log_string += name + " = " + str(value) + " " + str(unit) + "\n"
+
+                print log_string,
+                time.sleep(0.5)
+
+        except KeyboardInterrupt:
+            self.port.close()
+            print("stopped")
+
+if __name__ == "__main__":
+
+    o = OBD_Capture()
+    o.connect()
+    time.sleep(3)
+    if not o.is_connected():
+        print "Not connected"
+    else:
+        o.capture_data()