def form_frlin(self, force_imei=True): """ Form the $FRLIN sentence, assuming the SELF values are valid: * self.server_major_version * self.server_minor_version * self.client_name_version The return is wrapped with the NMEA checksum :return: :rtype: str """ if not force_imei and self.client_username is not None: # we prefer the username - when set! if not isinstance(self.client_username, str): raise ValueError("FRLIN Error: user name is not string") if not isinstance(self.client_password, str): raise ValueError("FRLIN Error: password is not string") sentence = "FRLIN,,{0},{1}".format( self.client_username, self._encrypt_password(self.client_password)) else: if not isinstance(self.client_imei, str): raise ValueError("FRLIN Error: IMEI is not string") sentence = "FRLIN,IMEI,{0},".format(self.client_imei) sentence = gps_nmea.wrap_sentence(sentence) return sentence
def form_frcmd_reset(self): """ $FRCMD,IMEI,_DeviceReset The return is wrapped with the NMEA checksum :return: :rtype: str """ return gps_nmea.wrap_sentence(self.get_frcmd_id("_Device_Reset"))
def test_checksum(self): tests = [ ("$GPGGA,222227.0,4500.819061,N,09320.092805,W,1,10,0.8,281." + "3,M,-33.0,M,,*6F\r\n", "GPGGA,222227.0,4500.819061,N,09320.092805,W,1,10,0.8,281." + "3,M,-33.0,M,,", 0x6F), ("$GPRMC,222227.0,A,4500.819061,N,09320.092805,W,0.0,353.2," + "020516,0.0,E,A*1D\r\n", "GPRMC,222227.0,A,4500.819061,N,09320.092805,W,0.0,353.2," + "020516,0.0,E,A", 0x1D), ("$GPVTG,353.2,T,353.2,M,0.0,N,0.0,K,A*23\r\n", "GPVTG,353.2,T,353.2,M,0.0,N,0.0,K,A", 0x23), ("$PCPTI,IBR1100-702,222227,222227*33\r\n", "PCPTI,IBR1100-702,222227,222227", 0x33), ("$GPGGA,222237.0,4500.819061,N,09320.092805,W,1,09,0.8,281.3" + ",M,-33.0,M,,*66\r\n", "GPGGA,222237.0,4500.819061,N,09320.092805,W,1,09,0.8,281.3" + ",M,-33.0,M,,", 0x66), ("$GPRMC,222237.0,A,4500.819061,N,09320.092805,W,0.0,353.2" + ",020516,0.0,E,A*1C\r\n", "GPRMC,222237.0,A,4500.819061,N,09320.092805,W,0.0,353.2" + ",020516,0.0,E,A", 0x1C), # some bad tests (None, TypeError, 0), ("", IndexError, 0), ] for test in tests: full = test[0] base = test[1] csum = test[2] if base == TypeError: with self.assertRaises(TypeError): nmea.calc_checksum(full) elif base == IndexError: with self.assertRaises(IndexError): nmea.calc_checksum(full) else: self.assertEqual(nmea.calc_checksum(full), csum) self.assertTrue(nmea.validate_checksum(full)) self.assertEqual(nmea.calc_checksum(base), csum) self.assertEqual(nmea.wrap_sentence(base), full) return
def form_frret_imei(self): """ Form the $FRRET,IMEI response for server The return is wrapped with the NMEA checksum :return: :rtype: str """ sentence = self.get_frret_id("_GprsSettings") + ",,{0},{1},{2}".format( self.DEF_TRACKER_NAME, self.client_name, self.client_version) if self.OPT_USE_ONLY_TCP: sentence += ",tcp" sentence = gps_nmea.wrap_sentence(sentence) return sentence
def form_frcmd_imei(self, gps: dict): """ <-- TrackerOne to GpsGate Server GPRS or SMS $FRCMD,IMEI,_SendMessage,,latitude,hemi,longitude,hemi,alt, speed,heading,date,time,valid The return is wrapped with the NMEA checksum :return: :rtype: str """ if not isinstance(gps, dict): raise TypeError("Invalid GPS INFO type") sentence = self.get_frcmd_id("_SendMessage") try: lat = float(gps[gps_nmea.NmeaStatus.LATITUDE]) if lat < 0.0: lat_h = 'S' else: lat_h = 'N' long = float(gps[gps_nmea.NmeaStatus.LONGITUDE]) if long < 0.0: long_h = 'W' else: long_h = 'E' sentence += "%f,%s,%f,%s," % (lat, lat_h, long, long_h) except KeyError: raise ValueError() # these are optional alt = gps.get(gps_nmea.NmeaStatus.ALTITUDE, 0.0) speed = gps.get(gps_nmea.NmeaStatus.SPEED_KNOTS, 0.0) heading = gps.get(gps_nmea.NmeaStatus.COURSE_TRUE, "") raw_date = gps.get(gps_nmea.NmeaStatus.RAW_DATE, "") raw_time = gps.get(gps_nmea.NmeaStatus.RAW_TIME, "") sentence += "%f,%f,%s,%s,%s" % (alt, speed, heading, raw_date, raw_time) sentence = gps_nmea.wrap_sentence(sentence) return sentence
def form_frver(self): """ Form the $FRVER sentence, assuming the SELF values are valid: * self.server_major_version * self.server_minor_version * self.client_name_version The return is wrapped with the NMEA checksum :return: :rtype: str """ sentence = "FRVER,{0},{1},{2} {3}".format(self.server_major_version, self.server_minor_version, self.client_name, self.client_version) sentence = gps_nmea.wrap_sentence(sentence) return sentence