def Parse(self, data):
        self._data = data
        segs = data.split("@")
        if len(segs) != 2:
            raise PacketException("Invalid upload terminal log req packet")

        # 获取imei
        self._fields["imei"] = terminal_proto.Field(
            terminal_proto.STRING_FIELD).FromStr(segs[0])

        # 获取日志数据
        segs3 = segs[1].split("%")
        if len(segs3) <= 0:
            raise PacketException("Invalid upload terminal log req packet")
        for v in segs3:
            segs4 = v.split(",")
            if len(segs4) != 2:
                raise PacketException("Invalid upload terminal log req packet")

            f = terminal_proto.ComplexField()
            f.fields["time"] = terminal_proto.Field(
                terminal_proto.DATE_FIELD).FromStr(segs4[0])  # 日志时间
            f.fields["type"] = terminal_proto.Field(
                terminal_proto.INTEGER_FIELD).FromStr(segs4[1])  # 日志类型

            if not self._fields.has_key("log_items"):
                self._fields["log_items"] = []
            self._fields["log_items"].append(f)
    def Parse(self, data):
        self._data = data
        segs = data.split("@")
        if len(segs) != 2:
            raise PacketException("Invalid upload station log req packet")

        # 获取imei
        self._fields["imei"] = terminal_proto.Field(
            terminal_proto.STRING_FIELD).FromStr(segs[0])

        self._fields["station_locator_data"] = terminal_proto.Field(
            terminal_proto.STRING_FIELD).FromStr(segs[1][1:])
    def Parse(self, data):
        #pdb.set_trace()
        self._data = data
        segs = data.split("@")
        if len(segs) != 2:
            raise PacketException("Invalid report health info request packet")

        # 获取imei
        self._fields["imei"] = terminal_proto.Field(
            terminal_proto.STRING_FIELD).FromStr(segs[0])
        self._fields["command"] = terminal_proto.Field(
            terminal_proto.STRING_FIELD).FromStr(segs[1])
    def Parse(self, data):
        self._data = data
        segs = data.split("@")
        if len(segs) != 2:
            raise PacketException("Invalid set params ack packet")

        # 获取imei
        self._fields["imei"] = terminal_proto.Field(
            terminal_proto.STRING_FIELD).FromStr(segs[0])

        # 获取指令名
        self._fields["command"] = terminal_proto.Field(
            terminal_proto.STRING_FIELD).FromStr(segs[1])
    def Parse(self, data):
        #pdb.set_trace()
        self._data = data
        segs = data.split("@")
        if len(segs) != 2:
            raise PacketException("Invalid report health info request packet")

        # 获取imei
        self._fields["imei"] = terminal_proto.Field(
            terminal_proto.STRING_FIELD).FromStr(segs[0])

        # 得到健康信息
        segs3 = segs[1].split("#")
        if len(segs3) <= 0:
            raise PacketException("Invalid report health info request packet")
        for v in segs3:
            # 得到健康数据段类型
            tp = terminal_proto.Field(terminal_proto.INTEGER_FIELD).FromStr(
                v[0:1]).Value()

            # 得到健康数据
            if tp == 1:  # 睡眠数据
                tmp = terminal_proto.ComplexField()

                segs4 = v[2:].split(",")
                if len(segs4) != 3:
                    raise PacketException(
                        "Invalid report health info request packet")

                tmp.fields["begin_time"] = terminal_proto.Field(
                    terminal_proto.DATE_FIELD).FromStr(segs4[0])  # 开始时间

                #  得到总时间以秒位单位
                totalTimeStr = segs4[1]
                tmp.fields["total_secs"] = terminal_proto.Field(
                    terminal_proto.INTEGER_FIELD).FromStr(totalTimeStr)

                tmp.fields["quality"] = terminal_proto.Field(
                    terminal_proto.INTEGER_FIELD).FromStr(segs4[2])  # 睡眠质量

                if not self._fields.has_key("sleep_data"):
                    self._fields["sleep_data"] = []
                self._fields["sleep_data"].append(tmp)
            elif tp == 2:  # 心率数据
                tmp = terminal_proto.ComplexField()

                tmp.fields["begin_time"] = terminal_proto.Field(
                    terminal_proto.DATE_FIELD).FromStr(v[2:16])  # 开始时间
                tmp.fields["value"] = terminal_proto.Field(
                    terminal_proto.INTEGER_FIELD).FromStr(v[17:])

                if not self._fields.has_key("heart_rate_data"):
                    self._fields["heart_rate_data"] = []
                self._fields["heart_rate_data"].append(tmp)
            else:
                raise PacketException(
                    "Invalid report health info request packet")
    def Parse(self, data):
        self._data = data
        segs = data.split("@")
        if len(segs) != 2:
            raise PacketException("Invalid heatbeat req packet")

        # 获取imei
        self._fields["imei"] = terminal_proto.Field(
            terminal_proto.STRING_FIELD).FromStr(segs[0])

        if segs[1] != "Heart":
            raise PacketException("Invalid heatbeat req packet")
    def Parse(self, data):
        self._data = data
        segs = data.split("@")
        if len(segs) != 2:
            raise PacketException("Invalid report terminal status req packet")

        # 获取imei
        self._fields["imei"] = terminal_proto.Field(
            terminal_proto.STRING_FIELD).FromStr(segs[0])

        # 获取状态数据
        segs3 = segs[1].split("%")
        if len(segs3) != 4:
            raise PacketException("Invalid report terminal status req packet")

        self._fields["iccid"] = terminal_proto.Field(
            terminal_proto.STRING_FIELD).FromStr(segs3[0])  # SIM卡卡号
        self._fields["hardware_version"] = terminal_proto.Field(
            terminal_proto.STRING_FIELD).FromStr(segs3[1])  # 硬件版本
        self._fields["software_version"] = terminal_proto.Field(
            terminal_proto.STRING_FIELD).FromStr(segs3[2])  # 软件版本
        self._fields["electric_quantity"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs3[3])  # 电量
    def Parse(self, data):
        self._data = data
        segs = data.split("@")
        if len(segs) != 2:
            raise PacketException("Invalid upload station log req packet")

        # 获取imei
        self._fields["imei"] = terminal_proto.Field(
            terminal_proto.STRING_FIELD).FromStr(segs[0])

        segs2 = segs[1][1:].split("#")
        if len(segs2) != 2:
            raise PacketException("Invalid upload station log req packet")

        segs3 = segs2[0].split(";")
        if len(segs3) != 2:
            raise PacketException("Invalid upload station log req packet")

        self._fields["station_locator_data"] = terminal_proto.Field(
            terminal_proto.STRING_FIELD).FromStr(segs3[0])

        self._fields["near_station_locator_data"] = terminal_proto.Field(
            terminal_proto.STRING_FIELD).FromStr(segs3[1])

        # 获取附加数据
        segs4 = segs2[1].split(",")
        if len(segs4) != 5:
            raise PacketException(
                "Invalid report location info request packet")

        self._fields["status"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs4[0])  # 状态
        self._fields["electric_quantity"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs4[1])  # 电量
        self._fields["step_count"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs4[2])  # 步数
        self._fields["distance"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs4[3])  # 距离
        self._fields["calorie"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs4[4])  # 卡路里
    def Parse(self, data):
        self._data = data
        pos = data.find("@")
        if pos == 0:
            raise PacketException(
                "Invalid report location info request packet")
        segs = [data[0:pos], data[pos + 1:]]
        # 获取imei
        self._fields["imei"] = terminal_proto.Field(
            terminal_proto.STRING_FIELD).FromStr(segs[0])

        # 得到参数和附加参数列表
        pos = segs[1].rfind("#")
        if pos == 0:
            raise PacketException(
                "Invalid report location info request packet")
        segs3 = [segs[1][0:pos], segs[1][pos + 1:]]
        # 获取定位状态
        self._fields["locator_status"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs3[0][0:1])

        # 获取定位数据
        locatorInfo = LocationInfo()
        locatorInfo.Parse(segs3[0])
        self._fields["location_info"] = locatorInfo

        # 获取附加数据
        segs4 = segs3[1].split(",")
        if len(segs4) != 5:
            raise PacketException(
                "Invalid report location info request packet")

        self._fields["status"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs4[0])  # 状态
        self._fields["electric_quantity"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs4[1])  # 电量
        self._fields["step_count"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs4[2])  # 步数
        self._fields["distance"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs4[3])  # 距离
        self._fields["calorie"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs4[4])  # 卡路里
Beispiel #10
0
    def Parse(self, data):
        self._data = data

        #协议格式:
        #    005,0#1#2#3#4#5#6#7#8#9#10#11
        out_segs = data.split(",")
        if len(out_segs) != 2 or out_segs[0] != "005":
            raise CommandException("Invalid params command:", data)
        segs = out_segs[1].split("#")
        if len(segs) != 11:
            raise CommandException("Invalid params command:", data)

        self["report_time"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs[0]).Value()
        self["add_friend"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs[1]).Value()
        self["step_enable"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs[2]).Value()
        self["profile"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs[3]).Value()
        self["love"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs[4]).Value()
        self["remote_alert"] = terminal_proto.Field(
            terminal_proto.STRING_FIELD).FromStr(segs[5]).Value()
        self["low_power"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs[6]).Value()
        self["sos"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs[7]).Value()
        self["take_off"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs[8]).Value()
        self["gps_enable"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs[9]).Value()
        self["step_target"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs[10]).Value()
Beispiel #11
0
    def Parse(self, data):
        self._data = ""
        segs = data.split(",")
        if len(segs) != 11 or segs[0] != "005":
            raise CommandException("Invalid params command")

        self.report_time = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs[0]).Value()
        self.add_friend = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs[1]).Value()
        self.step_enable = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs[2]).Value()
        self.profile = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs[3]).Value()
        self.love = terminal_proto.Field(terminal_proto.INTEGER_FIELD).FromStr(
            segs[4]).Value()
        self.remote_alert = terminal_proto.Field(
            terminal_proto.STRING_FIELD).FromStr(segs[5]).Value()
        self.low_power = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs[6]).Value()
        self.sos = terminal_proto.Field(terminal_proto.INTEGER_FIELD).FromStr(
            segs[7]).Value()
        self.take_off = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs[8]).Value()
        self.gps_enable = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs[9]).Value()
        self.step_target = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(segs[10]).Value()
    def Parse(self, data):
        # 获取定位状态
        self._data = data
        self.fields["locator_status"] = terminal_proto.Field(
            terminal_proto.INTEGER_FIELD).FromStr(data[0:1])
        #print data
        #print self.locator_status
        # 获取定位数据
        if self.locator_status == LOCATOR_STATUS_GPS:  # GPS
            # 获取经度类型(E or W)
            self.fields["longitude_type"] = terminal_proto.Field(
                terminal_proto.STRING_FIELD).FromStr(data[1:2])

            # 获取经度
            self.fields["longitude"] = terminal_proto.Field(
                terminal_proto.FLOAT_FIELD).FromStr(data[2:12])

            # 获取维度类型(N or S)
            self.fields["latitude_type"] = terminal_proto.Field(
                terminal_proto.STRING_FIELD).FromStr(data[12:13])

            # 获取维度
            self.fields["latitude"] = terminal_proto.Field(
                terminal_proto.FLOAT_FIELD).FromStr(data[13:22])
            print data[23:37]
            # 获取定位时间
            self.fields["locator_time"] = terminal_proto.Field(
                terminal_proto.DATE_FIELD).FromStr(data[23:37])
        elif self.locator_status == LOCATOR_STATUS_STATION or self.locator_status == LOCATOR_STATUS_MIXED:  # 获取基站或者混合定位数据
            n = len(data) - 15
            if n <= 0:
                raise PacketException("Invalid location info")

            #f = terminal_proto.Field(terminal_proto.STRING_FIELD).FromStr(data[
            #    1:n + 1])
            tmp = data[1:n]
            if self.locator_status == LOCATOR_STATUS_MIXED:
                pos = tmp.find("%")
                if pos == 0:
                    raise PacketException("Invalid location  mixed info")
                segs5 = [tmp[0:pos], tmp[pos + 1:]]
                #logging.info("tang seqs5 pos:%d#####%s#####%s" %
                #             (pos, segs5, tmp))
                self.fields["station_locator_data"] = terminal_proto.Field(
                    terminal_proto.STRING_FIELD).FromStr(segs5[0])
                self.fields["mac"] = terminal_proto.Field(
                    terminal_proto.STRING_FIELD).FromStr(
                        change_unescape_ssid(segs5[1]))
            else:
                self.fields["station_locator_data"] = terminal_proto.Field(
                    terminal_proto.STRING_FIELD).FromStr(tmp)
            self.fields["locator_time"] = terminal_proto.Field(
                terminal_proto.DATE_FIELD).FromStr(data[n + 1:14 + n + 1])
        elif self.locator_status == LOCATOR_STATUS_FAILED:
            self.fields["locator_time"] = terminal_proto.Field(
                terminal_proto.DATE_FIELD).FromStr(data[2:16])
        else:
            raise PacketException("Invalid location info")