Example #1
0
    def __init__(self, gpsiface, **opts):
        super(OdoIface, self).__init__(**opts)
        self.gps = gpsiface

        self.odofile = open(opts['--odo-file'], 'r+')
        self.overall = float(self.odofile.readline())
        # Seek to the end of file
        self.odofile.seek(0, 2)

        self.current = 0
        self.step = 0

        self.avg_start = None
        self.avg_speed = AvgValue()
        self.gps.add_hook('gotclock', self.set_avg_start)
        self.gps.add_hook('onupdate', self.on_gpsupdate)
Example #2
0
    def __init__(self, gpsiface, **opts):
        super(OdoIface, self).__init__(**opts)
        self.gps = gpsiface

        self.odofile = open(opts['--odo-file'], 'r+')
        self.overall = float(self.odofile.readline())
        # Seek to the end of file
        self.odofile.seek(0, 2)

        self.current = 0
        self.step = 0

        self.avg_start = None
        self.avg_speed = AvgValue()
        self.gps.add_hook('gotclock', self.set_avg_start)
        self.gps.add_hook('onupdate', self.on_gpsupdate)
Example #3
0
class OdoIface(HilgaObject):
    """Odometer
Save odometer data to file.
First line in odo file is:

         OVERALL_METERS

so first line is 20 chars length not including \n.
Following lines are entries in form:
TIMESTAMP METERS\n
"""
    def __init__(self, gpsiface, **opts):
        super(OdoIface, self).__init__(**opts)
        self.gps = gpsiface

        self.odofile = open(opts['--odo-file'], 'r+')
        self.overall = float(self.odofile.readline())
        # Seek to the end of file
        self.odofile.seek(0, 2)

        self.current = 0
        self.step = 0

        self.avg_start = None
        self.avg_speed = AvgValue()
        self.gps.add_hook('gotclock', self.set_avg_start)
        self.gps.add_hook('onupdate', self.on_gpsupdate)

    def set_avg_start(self, seconds):
        self.avg_start = seconds

    def odo_increase(self, meters):
        """Increase odometer values."""
        self.overall += meters
        self.current += meters
        self.step += meters

        if meters > 0:
            self.run_hook('onincrease', meters)

    def update_odofile(self):
        self.odofile.write('{} {}\n'.format(int(time.time()), self.step))

        # Prepare to move again
        self.step = 0
        self.avg_speed.reset()
        self.avg_start = time.time()

        # Update overall
        self.odofile.seek(0, 0)
        self.odofile.write('%20s\n' % self.overall)
        self.odofile.seek(0, 2)
        self.run_hook('odoflush')

    def avg_time_delta(self):
        if self.avg_start is None:
            return 0
        return time.time() - self.avg_start

    def on_gpsupdate(self, gps):
        # in meters per sec
        gspeed = 10.0 / 36 * self.gps.speed_kmh()
        avgspeed = self.avg_speed.avg_with(gspeed)
        delta = avgspeed * self.avg_time_delta() - self.step

        self.odo_increase(delta)

        # Write updates only when car stops, but less then every 100 meters
        # Also write when step > 10k
        if (int(gspeed) == 0 and self.step > 100) or (self.step > 10000):
            self.update_odofile()
Example #4
0
class OdoIface(HilgaObject):
    """Odometer
Save odometer data to file.
First line in odo file is:

         OVERALL_METERS

so first line is 20 chars length not including \n.
Following lines are entries in form:
TIMESTAMP METERS\n
"""
    def __init__(self, gpsiface, **opts):
        super(OdoIface, self).__init__(**opts)
        self.gps = gpsiface

        self.odofile = open(opts['--odo-file'], 'r+')
        self.overall = float(self.odofile.readline())
        # Seek to the end of file
        self.odofile.seek(0, 2)

        self.current = 0
        self.step = 0

        self.avg_start = None
        self.avg_speed = AvgValue()
        self.gps.add_hook('gotclock', self.set_avg_start)
        self.gps.add_hook('onupdate', self.on_gpsupdate)

    def set_avg_start(self, seconds):
        self.avg_start = seconds

    def odo_increase(self, meters):
        """Increase odometer values."""
        self.overall += meters
        self.current += meters
        self.step += meters

        if meters > 0:
            self.run_hook('onincrease', meters)

    def update_odofile(self):
        self.odofile.write('{} {}\n'.format(int(time.time()), self.step))

        # Prepare to move again
        self.step = 0
        self.avg_speed.reset()
        self.avg_start = time.time()

        # Update overall
        self.odofile.seek(0, 0)
        self.odofile.write('%20s\n'%self.overall)
        self.odofile.seek(0, 2)
        self.run_hook('odoflush')

    def avg_time_delta(self):
        if self.avg_start is None:
            return 0
        return time.time() - self.avg_start

    def on_gpsupdate(self, gps):
        # in meters per sec
        gspeed = 10.0/36 * self.gps.speed_kmh()
        avgspeed = self.avg_speed.avg_with(gspeed)
        delta = avgspeed * self.avg_time_delta() - self.step

        self.odo_increase(delta)

        # Write updates only when car stops, but less then every 100 meters
        # Also write when step > 10k
        if (int(gspeed) == 0 and self.step > 100) or (self.step > 10000):
            self.update_odofile()