Example #1
0
	def read_current_data(self, message: str) -> Measure:
		time = datetime.datetime.now()
		if(message == 'speed'):
			return Measure(self.MOCK_SPEED, 'km/h', time)
		elif(message == 'rpm'):
			return Measure(self.MOCK_RPM, 'rpm', time)
		else:
			print("MockOBDDevice read_current_data not implemented for message: {}".format(message))
Example #2
0
def test_mean():
    """Test the mean() method and test that the correct capacity is used"""
    time = datetime.datetime.now()
    units = "metres"
    distance0 = Measure(5, units, time)
    distance1 = Measure(6, units, time)
    distance2 = Measure(12, units, time)
    distance3 = Measure(20, units, time)
    average_value = (5 + 6 + 12 + 20) / 4
    name = "distance"
    capacity = 5
    accumulator = Accumulator(name, capacity)
    assert accumulator.mean() == None
    accumulator.push(distance0)
    accumulator.push(distance1)
    accumulator.push(distance2)
    accumulator.push(distance3)
    assert accumulator.mean().value == average_value
    # push more entries to check that the previous entries are dropped
    # once we go over the accumulator's capacity
    distance4 = Measure(1, units, time)
    distance5 = Measure(1, units, time)
    distance6 = Measure(1, units, time)
    distance7 = Measure(1, units, time)
    distance8 = Measure(1, units, time)
    accumulator.push(distance4)
    accumulator.push(distance5)
    accumulator.push(distance6)
    accumulator.push(distance7)
    accumulator.push(distance8)
    assert accumulator.mean().value == 1
Example #3
0
def test_newest():
    time0 = datetime.datetime.now()
    units = "metres"
    distance0 = Measure(5, units, time0)
    distance1 = Measure(6, units, time0)
    name = "distance"
    capacity = 5
    accumulator = Accumulator(name, capacity)
    assert accumulator.newest() == None
    accumulator.push(distance0)
    accumulator.push(distance1)
    assert accumulator.newest().value == distance1.value
Example #4
0
	def read_temperature(self) -> Measure:
		"""This mock thermometer returns an increasing temperature"""
		assert self._ready
		time = datetime.datetime.now()
		temperature = Measure(self._value, self.MOCK_UNITS, time)
		self._value = self._value + self.INCREMENT_VALUE
		return temperature
Example #5
0
 def read_voltage(self) -> Measure:
     """This mock voltmeter returns an increasing voltage"""
     assert self._ready
     time = datetime.datetime.now()
     voltage = Measure(self._value, self.MOCK_UNITS, time)
     self._value = self._value + self.INCREMENT_VALUE
     return voltage
Example #6
0
 def read_pressure(self) -> Measure:
     """This mock barometer returns an increasing pressure"""
     assert self._ready
     time = datetime.datetime.now()
     pressure = Measure(self._value, self.MOCK_UNITS, time)
     self._value = self._value + self.INCREMENT_VALUE
     return pressure
Example #7
0
def test_distance():
    value = 5
    units = "metres"
    time = datetime.datetime.now()
    distance = Measure(value, units, time)
    assert distance.value == value
    assert distance.units == units
    assert distance.time == time
Example #8
0
    def mean_measure(measures) -> Measure:
        """Given a non-empty list of Measures and given that the caller holds the lock,
		Return a Measure with the mean value and the units & time from the 0th entry"""
        sum_value = 0
        for measure in measures:
            sum_value += measure.value
        average_value = sum_value / len(measures)
        return Measure(average_value, measures[0].units, measures[0].time)
Example #9
0
def test_minimum_maximum():
    """Test the minimum and maximum methods"""
    time0 = datetime.datetime.now()
    units = "metres"
    distance0 = Measure(5, units, time0)
    distance1 = Measure(6, units, time0)
    distance2 = Measure(4, units, time0)
    name = "distance"
    capacity = 5
    accumulator = Accumulator(name, capacity)
    assert accumulator.minimum() == None
    assert accumulator.maximum() == None
    accumulator.push(distance0)
    accumulator.push(distance1)
    accumulator.push(distance2)
    assert accumulator.minimum().value == distance2.value
    assert accumulator.maximum().value == distance1.value
Example #10
0
def test_median():
    time = datetime.datetime.now()
    units = "metres"
    distance0 = Measure(5, units, time)
    distance1 = Measure(6, units, time)
    distance2 = Measure(12, units, time)
    distance3 = Measure(20, units, time)
    name = "distance"
    capacity = 5
    accumulator = Accumulator(name, capacity)
    assert accumulator.median() == None
    accumulator.push(distance0)
    accumulator.push(distance1)
    accumulator.push(distance2)
    accumulator.push(distance3)
    # use the upper middle measure if there are an even number
    assert accumulator.median().value == 12
Example #11
0
 def get_measures(self):
     from measure.measure import Measure
     result = []
     for xml_measure in self.measure[:]:
         attributes = xml_measure.attributes[:]
         measure = Measure(attributes=attributes, elements=[])
         for elt in xml_measure.content():
             measure.elements.append(elt)
         result.append(measure)
     return result
Example #12
0
 def read_acceleration(self) -> Measure:
     assert self._ready
     time = datetime.datetime.now()
     accel = mpu6050.get_accel_data(self.init)
     x = accel['x'] - self.accel['x']
     y = accel['y'] - self.accel['y']
     z = accel['z'] - self.accel['z']
     self.accel_mag = self.calculate_magnitude(x, y, z)
     magnitude_measure = Measure(self.accel_mag, self.units, time)
     return magnitude_measure
Example #13
0
def test_empty_clear():
    """Test the empty property and clear method"""
    name = "test"
    capacity = 2
    accumulator = Accumulator(name, capacity)
    assert accumulator.empty
    value = 1
    units = "metres"
    time = datetime.datetime.now()
    measure = Measure(value, units, time)
    accumulator.push(measure)
    assert not accumulator.empty
    accumulator.clear()
    assert accumulator.empty
Example #14
0
    def parse_obd_info(self, message, response):
        """Parses byte array from bus stream into readable info according to lookup table"""
        if(message == 'pidsupport'):
         """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""

        elif(message == 'monitor_status'):
         """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""

        elif (message == 'freeze_dtc'):
            print("Froze DTC")
            return

        elif (message == 'fuel_system_status'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""

        elif (message == 'engine_load'):
            """returns %, A*100/255"""
            time = datetime.datetime.now()
            result = Measure((int(response[3]) * 100) / 255, "%", time)
            return result

        elif (message == 'coolant_temp'):
            """returns Celcius, A-40"""
            time = datetime.datetime.now()
            result = Measure(int(response[3]) - 40, "Celcius", time)
            return result

        elif (message == 'sterm_fuel1'):
            """returns %, (A-128) * 100/128"""
            time = datetime.datetime.now()
            result = Measure((int(response[3]) - 128) * (100 / 128), "%", time)
            return result

        elif (message == 'lterm_fuel1'):
            """returns %, (A-128) * 100/128"""
            time = datetime.datetime.now()
            result = Measure((int(response[3]) - 128) * (100 / 128), "%", time)
            return result

        elif (message == 'sterm_fuel2'):
            """returns %, (A-128) * 100/128"""
            time = datetime.datetime.now()
            result = Measure((int(response[3]) - 128) * (100 / 128), "%", time)
            return result

        elif (message == 'lterm_fuel2'):
            """returns %, (A-128) * 100/128"""
            time = datetime.datetime.now()
            result = Measure((int(response[3]) - 128) * (100 / 128), "%", time)
            return result

        elif (message == 'fuel_pressure'):
            """returns kPa, A"""
            time = datetime.datetime.now()
            result = Measure(int(response[3]), "kPa", time)
            return result

        elif (message == 'intake_manifold_pressure'):
            """returns kPa, A*3"""
            time = datetime.datetime.now()
            result = Measure(int(response[3]) * 3, "kPa", time)
            return result

        elif (message == 'rpm'):
            """returns rpm, ((A*256)+B)/4"""
            time = datetime.datetime.now()
            result = Measure((int(response[3]) * 256 + int(response[4])) / 4,
                             "rpm", time)
            return result

        elif (message == 'speed'):
            """returns km/h, A"""
            time = datetime.datetime.now()
            result = Measure(int(response[3]), "km/h", time)
            return result

        elif (message == 'timing_advance'):
            """returns degress relative to cylinder 1, A/2 - 64"""
            time = datetime.datetime.now()
            result = Measure(int(response[3]) / 2 - 64, "degree", time)
            return result

        elif (message == 'intake_air_temp'):
            """returns Celcius, A-40"""
            time = datetime.datetime.now()
            result = Measure(int(response[3]) - 40, "Celcius", time)
            return result

        elif (message == 'MAF_flow'):
            """returns g/s, ((256*A)+B) / 100"""
            time = datetime.datetime.now()
            result = Measure(
                ((256 * int(response[3])) + int(response[4])) / 100, "g/s",
                time)
            return result

        elif (message == 'throttle_position'):
            """returns %, A*100/255"""
            time = datetime.datetime.now()
            result = Measure(int(response[3]) * 100 / 255, "%", time)
            return result

        elif (message == 'secondary_air_status'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'oxygen_present'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'oxy_b1_s1'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'oxy_b1_s2'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'oxy_b1_s3'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'oxy_b1_s4'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'oxy_b2_s1'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'oxy_b2_s3'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'oxy_b2_s3'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'oxy_b2_s4'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'obd_standard_id'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'oxygen_sensor_present'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'aux_input_status'):
            """returns T/F, A&4"""
            time = datetime.datetime.now()
            result = Measure(int(response[3]) & 4, "T/F", time)
            return result

        elif (message == 'engine_run_time'):
            """returns seconds, (A*256)+B"""
            time = datetime.datetime.now()
            result = Measure((int(response[3]) * 256) + int(response[4]),
                             "seconds", time)
            return result

        elif (message == 'pids_support_21_40'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'distance_traveled_MIL'):
            """returns seconds, (A*256)+B"""
            time = datetime.datetime.now()
            result = Measure((int(response[3]) * 256) + int(response[4]),
                             "seconds", time)
            return result

        elif (message == 'fuel_rail_pressure'):
            """returns kPA, ((A*256)+B)*0.079"""
            time = datetime.datetime.now()
            result = Measure(
                ((int(response[3]) * 256) + int(response[4])) * 0.079, "kPa",
                time)
            return result

        elif (message == 'fuel_rail_pressure_diesel'):
            """returns kPa, ((A*256)+B)*10"""
            time = datetime.datetime.now()
            result = Measure(
                ((int(response[3]) * 256) + int(response[4])) * 10, "kPa",
                time)
            return result

        elif (message == 'VO2S1_WR_lambda'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'VO2S2_WR_lambda'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'VO2S3_WR_lambda'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'VO2S4_WR_lambda'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'VO2S5_WR_lambda'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])
        elif (message == 'VO2S6_WR_lambda'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'VO2S7_WR_lambda'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'VO2S8_WR_lambda'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'ERG'):
            """returns %, 100*A/255"""
            time = datetime.datetime.now()
            result = Measure(100 * int(response[3]) / 255, "%", time)
            return result

        elif (message == 'ERG_error'):
            """returns %, A*0.78125 - 100"""
            time = datetime.datetime.now()
            result = Measure(int(response[3]) * 0.78125 - 100, "%", time)
            return result

        elif (message == 'evaporative_purge'):
            """returns %, 100*A/255"""
            time = datetime.datetime.now()
            result = Measure(100 * int(response[3]) / 255, "%", time)
            return result

        elif (message == 'fuel_level'):
            """returns %, 100*A/255"""
            time = datetime.datetime.now()
            result = Measure(100 * int(response[3]) / 255, "%", time)
            return result

        elif (message == 'warm_up_attemps_since_clear'):
            """returns N/A, A"""
            time = datetime.datetime.now()
            result = Measure(int(response[3]), "N/A", time)
            return result

        elif (message == 'distance_traveled_since_clear'):
            """returns km, (A*256)+B"""
            time = datetime.datetime.now()
            result = Measure((int(response[3]) * 256) + int(response[4]), "km",
                             time)
            return result

        elif (message == 'evap_vapour_pressure'):
            """returns kPa, (A*256)+B)/4 - 8,192"""
            time = datetime.datetime.now()
            result = Measure(
                ((int(response[3]) * 256) + int(response[3], 16)) / 4 - 8192,
                "kPa", time)
            return result

        elif (message == 'baromatic_pressure'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])
        elif (message == 'CO2S1_WR_lambda'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'CO2S2_WR_lambda'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])
        elif (message == 'CO2S3_WR_lambda'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'CO2S4_WR_lambda'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])
        elif (message == 'CO2S5_WR_lambda'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'CO2S6_WR_lambda'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])
        elif (message == 'CO2S7_WR_lambda'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])

        elif (message == 'CO2S8_WR_lambda'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])
        elif (message == 'catalyst_temp_B1S1'):
            """returns Celcius, ((A*256)+B)/10 - 40"""
            time = datetime.datetime.now()
            result = Measure(
                ((int(response[3]) * 256) + int(response[4])) / 10 - 40,
                "Celcius", time)
            return result

        elif (message == 'catalyst_temp_B2S1'):
            """returns Celsius, ((A*256)+B)/10 - 40"""
            time = datetime.datetime.now()
            result = Measure(
                ((int(response[3]) * 256) + int(response[4])) / 10 - 40,
                "Celcius", time)
            return result

        elif (message == 'catalyst_temp_B1S2'):
            """returns Celsius, ((A*256)+B)/10 - 40"""
            time = datetime.datetime.now()
            result = Measure(
                ((int(response[3]) * 256) + int(response[4])) / 10 - 40,
                "Celcius", time)
            return result

        elif (message == 'catalyst_temp_B2S2'):
            """returns Celsius, ((A*256)+B)/10 - 40"""
            time = datetime.datetime.now()
            result = Measure(
                ((int(response[3]) * 256) + int(response[4])) / 10 - 40,
                "Celcius", time)
            return result

        elif (message == 'pids_support_41_60'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])
        elif (message == 'monitor_status_drive_cycle'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])
        elif (message == 'control_module_voltage'):
            """returns Voltage, ((A*256)+B)/1000"""
            time = datetime.datetime.now()
            result = Measure(
                ((int(response[3]) * 256) + int(response[4])) / 1000,
                "Voltage", time)
            return result

        elif (message == 'absolute_load'):
            """returns %, ((A*256)+B)*100/255"""
            time = datetime.datetime.now()
            result = Measure(
                ((int(response[3]) * 256) + int(response[4])) * 100 / 255, "%",
                time)
            return result

        elif (message == 'command_equivalence_ratio'):
            """returns N/A, ((A*256)+B)*0.0000305"""
            time = datetime.datetime.now()
            result = Measure(
                (((int(response[3]) * 256) + int(response[4])) * 0.0000305) *
                100 / 255, "N/A", time)
            return result

        elif (message == 'relative_throttle_position'):
            """returns %, A*100/255"""
            time = datetime.datetime.now()
            result = Measure(int(response[3]) * 100 / 255, "%", time)
            return result

        elif (message == 'ambient_air_temp'):
            """returns Celcius, A-40"""
            time = datetime.datetime.now()
            result = Measure(int(response[3]) - 40, "Celcius", time)
            return result

        elif (message == 'absolute_throttle_position_B'):
            """returns %, A*100/255"""
            time = datetime.datetime.now()
            result = Measure(int(response[3]) * 100 / 255, "%", time)
            return result

        elif (message == 'absolute_throttle_position_C'):
            """returns %, A*100/255"""
            time = datetime.datetime.now()
            result = Measure(int(response[3]) * 100 / 255, "%", time)
            return result

        elif (message == 'absolute_throttle_position_D'):
            """returns %, A*100/255"""
            time = datetime.datetime.now()
            result = Measure(int(response[3]) * 100 / 255, "%", time)
            return result

        elif (message == 'absolute_throttle_position_E'):
            """returns %, A*100/255"""
            time = datetime.datetime.now()
            result = Measure(int(response[3]) * 100 / 255, "%", time)
            return result

        elif (message == 'absolute_throttle_position_F'):
            """returns %, A*100/255"""
            time = datetime.datetime.now()
            result = Measure(int(response[3]) * 100 / 255, "%", time)
            return result

        elif (message == 'command_throttle_actuator'):
            """returns %, A*100/255"""
            time = datetime.datetime.now()
            result = Measure(int(response[3]) * 100 / 255, "%", time)
            return result

        elif (message == 'time_run_with_MIL'):
            """returns minutes, (A*256)+B"""
            time = datetime.datetime.now()
            result = Measure(((int(response[3]) * 256) + int(response[4])),
                             "Minutes", time)
            return result

        elif (message == 'time_since_MIL_clear'):
            """returns minutes, (A*256)+B"""
            time = datetime.datetime.now()
            result = Measure(((int(response[3]) * 256) + int(response[4])),
                             "Minutes", time)
            return result

        elif (message == 'fuel_type'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            return int(response[3])
        elif (message == 'ethanol_fuel_percent'):
            """returns %, A*100/255"""
            time = datetime.datetime.now()
            result = Measure(int(response[3]) * 100 / 255, "%", time)
            return result

        elif (message == 'VIN'):
            """TODO: http://www.geekmyride.org/wiki/index.php/OBD-II_PIDs#Bitwise_encoded_PIDs"""
            A = response[3]
            B = response[4]
            C = response[5]
            D = response[6]
            E = response[7]
            return int(response[3])

        return result
Example #15
0
 def __init__(self, latitude: numbers.Number, longitude: numbers.Number,
              altitude: numbers.Number, time: numbers.Number):
     self._latitude = Measure(latitude, 'degrees', time)
     self._longitude = Measure(longitude, 'degrees', time)
     self._altitude = Measure(altitude, 'metres', time)
Example #16
0
 def read_temperature(self) -> Measure:
     """This mock thermometer always returns 22 celsius"""
     assert self._ready
     time = datetime.datetime.now()
     temperature = Measure(self.MOCK_VALUE, self.MOCK_UNITS, time)
     return temperature
Example #17
0
 def read_acceleration(self) -> Measure:
     """This mock accelerometer """
     assert self._ready
     time = datetime.datetime.now()
     magnitude_measure = Measure(self.MOCK_VALUE, self.MOCK_UNITS, time)
     return magnitude_measure
Example #18
0
 def read_temperature(self) -> Measure:
     assert self._ready
     time = datetime.datetime.now()
     self.temperature = mpu6050.get_temp(self.init)
     temp = Measure(self.temperature, self.units, time)
     return temp