def _parse_GPGGA(self, string): elements = string.split(",", 14) if len(elements) < 15: raise Exception("Unable to split GPGGA" % len(elements)) t = time.strftime("%m%d%y") + elements[1] if "." in t: t = t.split(".")[0] self.date = parse_date(t, "%m%d%y%H%M%S") self.latitude = nmea2deg(float(elements[2]), elements[3]) self.longitude = nmea2deg(float(elements[4]), elements[5]) print "%f,%f" % (self.latitude, self.longitude) self.satellites = int(elements[7]) self.altitude = float(elements[9]) m = re.match("^([0-9]*)(\*[A-z0-9]{2})\r?\n?(.*)$", elements[14]) if not m: raise Exception("No checksum (%s)" % elements[14]) csum = m.group(2) if "," in m.group(3): sta, com = m.group(3).split(",", 1) if not sta.strip().startswith("$"): self.station = utils.filter_to_ascii(sta.strip()[0:8]) self.comment = utils.filter_to_ascii(com.strip()[0:20]) self._original_comment = self.comment if len(self.comment) >=7 and "*" in self.comment[-3:-1]: self._parse_dprs_comment() self.valid = self._test_checksum(string, csum)
def _parse_GPGGA(self, string): elements = string.split(",", 14) if len(elements) < 15: raise Exception("Unable to split GPGGA" % len(elements)) t = time.strftime("%m%d%y") + elements[1] if "." in t: t = t.split(".")[0] self.date = parse_date(t, "%m%d%y%H%M%S") self.latitude = nmea2deg(float(elements[2]), elements[3]) self.longitude = nmea2deg(float(elements[4]), elements[5]) print("Gps : %f,%f" % (self.latitude, self.longitude)) self.satellites = int(elements[7]) self.altitude = float(elements[9]) m = re.match("^([0-9]*)(\*[A-z0-9]{2})\r?\n?(.*)$", elements[14]) if not m: raise Exception("No checksum (%s)" % elements[14]) csum = m.group(2) if "," in m.group(3): sta, com = m.group(3).split(",", 1) if not sta.strip().startswith("$"): self.station = utils.filter_to_ascii(sta.strip()[0:8]) self.comment = utils.filter_to_ascii(com.strip()[0:20]) self._original_comment = self.comment if len(self.comment) >= 7 and "*" in self.comment[-3:-1]: self._parse_dprs_comment() self.valid = self._test_checksum(string, csum)
def _parse_GPRMC(self, string): if "\r\n" in string: nmea, station = string.split("\r\n", 1) else: nmea = string station = "" elements = nmea.split(",", 12) if len(elements) < 12: raise Exception("Unable to split GPRMC (%i)" % len(elements)) t = elements[1] d = elements[9] if "." in t: t = t.split(".", 2)[0] self.date = parse_date(d+t, "%d%m%y%H%M%S") self.latitude = nmea2deg(float(elements[3]), elements[4]) self.longitude = nmea2deg(float(elements[5]), elements[6]) self.speed = float(elements[7]) self.direction = float(elements[8]) if "*" in elements[11]: end = 11 # NMEA <=2.0 elif "*" in elements[12]: end = 12 # NMEA 2.3 else: raise Exception("GPRMC has no checksum in 12 or 13") m = re.match("^.?(\*[A-z0-9]{2})", elements[end]) if not m: print "Invalid end: %s" % elements[end] return csum = m.group(1) if "," in station: sta, com = station.split(",", 1) self.station = utils.filter_to_ascii(sta.strip()) self.comment = utils.filter_to_ascii(com.strip()) self._original_comment = self.comment if len(self.comment) >= 7 and "*" in self.comment[-3:-1]: self._parse_dprs_comment() if elements[2] != "A": self.valid = False print "GPRMC marked invalid by GPS (%s)" % elements[2] else: print "GPRMC is valid" self.valid = self._test_checksum(string, csum)
def _parse_GPRMC(self, string): if "\r\n" in string: nmea, station = string.split("\r\n", 1) else: nmea = string station = "" elements = nmea.split(",", 12) if len(elements) < 12: raise Exception("Unable to split GPRMC (%i)" % len(elements)) t = elements[1] d = elements[9] if "." in t: t = t.split(".", 2)[0] self.date = parse_date(d + t, "%d%m%y%H%M%S") self.latitude = nmea2deg(float(elements[3]), elements[4]) self.longitude = nmea2deg(float(elements[5]), elements[6]) self.speed = float(elements[7]) self.direction = float(elements[8]) if "*" in elements[11]: end = 11 # NMEA <=2.0 elif "*" in elements[12]: end = 12 # NMEA 2.3 else: raise Exception("GPRMC has no checksum in 12 or 13") m = re.match("^.?(\*[A-z0-9]{2})", elements[end]) if not m: print("Gps : Invalid end: %s" % elements[end]) return csum = m.group(1) if "," in station: sta, com = station.split(",", 1) self.station = utils.filter_to_ascii(sta.strip()) self.comment = utils.filter_to_ascii(com.strip()) self._original_comment = self.comment if len(self.comment) >= 7 and "*" in self.comment[-3:-1]: self._parse_dprs_comment() if elements[2] != "A": self.valid = False print("Gps : GPRMC marked invalid by GPS (%s)" % elements[2]) else: print("Gps : GPRMC is valid") self.valid = self._test_checksum(string, csum)
def __str__(self): if self.compress: c = "+" else: c = "-" #data = utils.filter_to_ascii(self.data[:20]) #tolto il limite dei 20 caratteri data = utils.filter_to_ascii(self.data) #print("-----------" #) #print("Ddt2 : DDT2%s: %i:%i:%i %s->%s (%s...[%i])" % (c, # self.seq, # self.session, # self.type, # self.s_station, # self.d_station, # data, # len(self.data)) return "DDT2%s: %i:%i:%i %s->%s (%s...[%i])" % (c, self.seq, self.session, self.type, self.s_station, self.d_station, data, len(self.data))
def create_form_from_mail(config, mail, tmpfn): subject = mail.get("Subject", "[no subject]") sender = mail.get("From", "Unknown <*****@*****.**>") xml = None body = "" if mail.is_multipart(): html = None for part in mail.walk(): if part.get_content_maintype() == "multipart": continue elif part.get_content_type() == "d-rats/form_xml": xml = str(part.get_payload()) break # A form payload trumps all elif part.get_content_type() == "text/plain": body += part.get_payload(decode=True) elif part.get_content_type() == "text/html": html = part.get_payload(decode=True) if not body: body = html else: body = mail.get_payload(decode=True) if not body and not xml: raise Exception("Unable to find a usable part") messageid = mail.get("Message-ID", time.strftime("%m%d%Y%H%M%S")) if not msgrouting.msg_lock(tmpfn): print "AIEE: Unable to lock incoming email message file!" if xml: f = file(tmpfn, "w") f.write(xml) f.close() form = formgui.FormFile(tmpfn) recip = form.get_recipient_string() if "%" in recip: recip, addr = recip.split("%", 1) recip = recip.upper() else: print "Email from %s: %s" % (sender, subject) recip, addr = rfc822.parseaddr(mail.get("To", "UNKNOWN")) efn = os.path.join(config.form_source_dir(), "email.xml") form = formgui.FormFile(efn) form.set_field_value("_auto_sender", sender) form.set_field_value("recipient", recip) form.set_field_value("subject", "EMAIL: %s" % subject) form.set_field_value("message", utils.filter_to_ascii(body)) form.set_path_src(sender.strip()) form.set_path_dst(recip.strip()) form.set_path_mid(messageid) form.save_to(tmpfn) return form
def _send_text_block(self, string): f = ddt2.DDT2RawData() f.seq = 0 f.session = 1 # Chat (for now) f.s_station = "CQCQCQ" f.d_station = "CQCQCQ" f.data = utils.filter_to_ascii(string) self._handle_frame(f)
def __str__(self): if self.compress: c = "+" else: c = "-" data = utils.filter_to_ascii(self.data[:20]) return "DDT2%s: %i:%i:%i %s->%s (%s...[%i])" % ( c, self.seq, self.session, self.type, self.s_station, self.d_station, data, len(self.data))
def __str__(self): if self.compress: c = "+" else: c = "-" data = utils.filter_to_ascii(self.data[:20]) return "DDT2%s: %i:%i:%i %s->%s (%s...[%i])" % (c, self.seq, self.session, self.type, self.s_station, self.d_station, data, len(self.data))
def __str__(self): return "%s -> %s [%s]: %s" % (self.call_from, self.call_to, chr(self.kind), utils.filter_to_ascii(self.payload))