Exemplo n.º 1
0
    def _parseBody(self):
        """
         Parses body of the packet
         @protected
        """
        super(ImePacketData, self)._parseBody()
        self._params = {}
        sensors = {}
        parts = self._data.decode().split("|")
        gprmc = parts[0].split(',')
        if len(gprmc) > 8:
            # lets get packet time
            self._params['time'] = datetime.strptime(
                gprmc[8] + ',' + gprmc[0], '%d%m%y,%H%M%S.%f')
            # and coordinates
            sensors['latitude'] = Geo.getLatitude(gprmc[2] + gprmc[3])
            sensors['longitude'] = Geo.getLongitude(gprmc[4] + gprmc[5])
            # and other params
            sensors['speed'] = float(gprmc[6] or 0) * 1.85200
            sensors['azimuth'] = int(float(gprmc[7] or 0))
            sensors['hdop'] = float(parts[1] or 0)
            sensors['altitude'] = int(float(parts[2] or 0))
        else:
            self._params['time'] = datetime.now()
            sensors['hdop'] = 1 # fake hdop

        sensors['sat_count'] = 10 # fake sat_count
        self._params['sensors'] = sensors.copy()
        # old fashioned params
        for key in ['latitude', 'longitude', 'speed',
                    'altitude', 'azimuth', 'hdop']:
            if key in sensors:
                self._params[key] = sensors[key]
        if 'sat_count' in sensors:
            self._params['satellitescount'] = sensors['sat_count']
Exemplo n.º 2
0
 def translate(self, data):
     """
      Translate gps-tracker data to observer pipe format
      @param data: dict() data from gps-tracker
     """
     packet = {}
     sensor = {}
     for char in data:
         value = data[char]
         # IMEI / UID
         if char == "S":
             packet['uid'] = value
         # TIME
         elif char == "B":
             try:
                 dt = datetime.strptime(value, '%d%m%y,%H%M%S')
             except:
                 dt = datetime.strptime('00', '%y')
             packet['time'] = dt.strftime('%Y-%m-%dT%H:%M:%S.%f')
         # COORD
         elif char in ("d1", "d2", "d3"):
             packet['longitude'] = Geo.getLongitude(value)
         elif char in ("d6", "d7", "d8"):
             packet['latitude'] = Geo.getLatitude(value)
         # ALTITUDE
         elif char == "G":
             packet['altitude'] = int(round(float(value)))
         # SPEED (knots)
         elif char == "H":
             packet['speed'] = 1.852 * float(value)
         # SPEED (km/hr)
         elif char == "I":
             packet['speed'] = value
         # SPEED (mile/hr)
         elif char == "J":
             packet['speed'] = 1.609344 * float(value)
         # Satellites count
         elif char == "L":
             packet['satellitescount'] = int(value)
             sensor['sat_count'] = int(value)
         # Azimuth - driving direction
         elif char == "K":
             packet['azimuth'] = int(round(float(value)))
         # HDOP (Horizontal Dilution of Precision)
         elif char == "M":
             packet['hdop'] = float(value)
         # Report Mode
         elif char == "A":
             if int(value) == 5:
                 sensor['sos'] = 1
     self.setPacketSensors(packet, sensor)
     return packet