def __init__(self): QMainWindow.__init__(self) self.__SerNum = 0 self.__lang = 'german' self.conf_file = None file_exist = False try: self.conf_file = open('./conf.cfg', mode='r', encoding='utf-8') file_exist = True except: pass self.Foo = None self.ui = Ui_MainWindow() self.ui.setupUi(self) s = ''' + BodyMeda aktivieren + ================== Beim aktivieren werden alle aufgezeichneten Sensordaten auf dem Armband gelöscht! + Koerperdaten uebertragen + ================== Beim uebertragen der Koerperdaten werden alle aufgezeichneten Sensordaten auf dem Armband gelöscht!''' self.ui.teHints.setReadOnly(False) self.ui.teHints.setPlainText(s) self.ui.teHints.setReadOnly(True) ################################################## # prefill comboboxes # sex self.ui.cbSex.addItem('Frau') self.ui.cbSex.addItem('Mann') # hand self.ui.cbHand.addItem('links') self.ui.cbHand.addItem('rechts') # smoker self.ui.cbSmoker.addItem('nein') self.ui.cbSmoker.addItem('ja') # Weight for i in range(40, 251, 1): self.ui.cbWeight.addItem(str(i)) else: self.ui.cbWeight.setMaxVisibleItems(20) # Height for i in range(100, 221, 1): self.ui.cbHeight.addItem(str(i)) else: self.ui.cbHeight.setMaxVisibleItems(20) # ee-Target for i in range(1500, 8001, 50): self.ui.cbEeTarget.addItem(str(i)) else: self.ui.cbEeTarget.setMaxVisibleItems(20) # step-Target for i in range(500, 30001, 50): self.ui.cbStepTarget.addItem(str(i)) else: self.ui.cbStepTarget.setMaxVisibleItems(20) # birthdate day for i in range(1, 32, 1): self.ui.cbBDayDay.addItem(str(i)) else: self.ui.cbBDayDay.setMaxVisibleItems(31) # birthday month for i in range(1, 13, 1): self.ui.cbBDayMonth.addItem(str(i)) else: self.ui.cbBDayMonth.setMaxVisibleItems(12) # birthday year for i in range(1940, 1999, 1): self.ui.cbBDayYear.addItem(str(i)) else: self.ui.cbBDayYear.setMaxVisibleItems(20) # ################################################## if file_exist: r = self.conf_file.read() self.conf_file.close() data = r.replace(' ', '').split('\n') for line in data: line = line.split('=') if line[0] == 'sex': if self.__lang == 'german': if line[1] == 'female': self.ui.cbSex.setCurrentText('Frau') else: self.ui.cbSex.setCurrentText('Mann') else: if line[1] == 'female': self.ui.cbSex.setCurrentText('female') else: self.ui.cbSex.setCurrentText('male') elif line[0] == 'hand': if self.__lang == 'german': if line[1] == 'left': self.ui.cbHand.setCurrentText('links') else: self.ui.cbHand.setCurrentText('rechts') else: if line[1] == 'left': self.ui.cbHand.setCurrentText('left') else: self.ui.cbHand.setCurrentText('right') elif line[0] == 'smoker': if self.__lang == 'german': if line[1] == 'false': self.ui.cbSmoker.setCurrentText('nein') else: self.ui.cbSmoker.setCurrentText('ja') else: if line[1] == 'false': self.ui.cbSmoker.setCurrentText('no') else: self.ui.cbSmoker.setCurrentText('yes') elif line[0] == 'weight': self.ui.cbWeight.setCurrentText(line[1]) elif line[0] == 'height': self.ui.cbHeight.setCurrentText(line[1]) elif line[0] == 'cals': self.ui.cbEeTarget.setCurrentText(line[1]) elif line[0] == 'steps': self.ui.cbStepTarget.setCurrentText(line[1]) elif line[0] == 'day': self.ui.cbBDayDay.setCurrentText(line[1]) elif line[0] == 'month': self.ui.cbBDayMonth.setCurrentText(line[1]) elif line[0] == 'year': self.ui.cbBDayYear.setCurrentText(line[1]) else: pass self.Seek()
class MainWindow(QMainWindow): # # # def __init__(self): QMainWindow.__init__(self) self.__SerNum = 0 self.__lang = 'german' self.conf_file = None file_exist = False try: self.conf_file = open('./conf.cfg', mode='r', encoding='utf-8') file_exist = True except: pass self.Foo = None self.ui = Ui_MainWindow() self.ui.setupUi(self) s = ''' + BodyMeda aktivieren + ================== Beim aktivieren werden alle aufgezeichneten Sensordaten auf dem Armband gelöscht! + Koerperdaten uebertragen + ================== Beim uebertragen der Koerperdaten werden alle aufgezeichneten Sensordaten auf dem Armband gelöscht!''' self.ui.teHints.setReadOnly(False) self.ui.teHints.setPlainText(s) self.ui.teHints.setReadOnly(True) ################################################## # prefill comboboxes # sex self.ui.cbSex.addItem('Frau') self.ui.cbSex.addItem('Mann') # hand self.ui.cbHand.addItem('links') self.ui.cbHand.addItem('rechts') # smoker self.ui.cbSmoker.addItem('nein') self.ui.cbSmoker.addItem('ja') # Weight for i in range(40, 251, 1): self.ui.cbWeight.addItem(str(i)) else: self.ui.cbWeight.setMaxVisibleItems(20) # Height for i in range(100, 221, 1): self.ui.cbHeight.addItem(str(i)) else: self.ui.cbHeight.setMaxVisibleItems(20) # ee-Target for i in range(1500, 8001, 50): self.ui.cbEeTarget.addItem(str(i)) else: self.ui.cbEeTarget.setMaxVisibleItems(20) # step-Target for i in range(500, 30001, 50): self.ui.cbStepTarget.addItem(str(i)) else: self.ui.cbStepTarget.setMaxVisibleItems(20) # birthdate day for i in range(1, 32, 1): self.ui.cbBDayDay.addItem(str(i)) else: self.ui.cbBDayDay.setMaxVisibleItems(31) # birthday month for i in range(1, 13, 1): self.ui.cbBDayMonth.addItem(str(i)) else: self.ui.cbBDayMonth.setMaxVisibleItems(12) # birthday year for i in range(1940, 1999, 1): self.ui.cbBDayYear.addItem(str(i)) else: self.ui.cbBDayYear.setMaxVisibleItems(20) # ################################################## if file_exist: r = self.conf_file.read() self.conf_file.close() data = r.replace(' ', '').split('\n') for line in data: line = line.split('=') if line[0] == 'sex': if self.__lang == 'german': if line[1] == 'female': self.ui.cbSex.setCurrentText('Frau') else: self.ui.cbSex.setCurrentText('Mann') else: if line[1] == 'female': self.ui.cbSex.setCurrentText('female') else: self.ui.cbSex.setCurrentText('male') elif line[0] == 'hand': if self.__lang == 'german': if line[1] == 'left': self.ui.cbHand.setCurrentText('links') else: self.ui.cbHand.setCurrentText('rechts') else: if line[1] == 'left': self.ui.cbHand.setCurrentText('left') else: self.ui.cbHand.setCurrentText('right') elif line[0] == 'smoker': if self.__lang == 'german': if line[1] == 'false': self.ui.cbSmoker.setCurrentText('nein') else: self.ui.cbSmoker.setCurrentText('ja') else: if line[1] == 'false': self.ui.cbSmoker.setCurrentText('no') else: self.ui.cbSmoker.setCurrentText('yes') elif line[0] == 'weight': self.ui.cbWeight.setCurrentText(line[1]) elif line[0] == 'height': self.ui.cbHeight.setCurrentText(line[1]) elif line[0] == 'cals': self.ui.cbEeTarget.setCurrentText(line[1]) elif line[0] == 'steps': self.ui.cbStepTarget.setCurrentText(line[1]) elif line[0] == 'day': self.ui.cbBDayDay.setCurrentText(line[1]) elif line[0] == 'month': self.ui.cbBDayMonth.setCurrentText(line[1]) elif line[0] == 'year': self.ui.cbBDayYear.setCurrentText(line[1]) else: pass self.Seek() # # # def Proc_Start(self): ts = int(time.time()) year = datetime.datetime.fromtimestamp(ts).strftime('%d_%m_%Y') date = datetime.datetime.fromtimestamp(ts).strftime('%H_%M_%S') if self.__lang == 'german': p = '.\\data\\Ausgelesen_am_%s_um_%s.csv' % (year, date) x = '.\\data\\Ausgelesen_am_%s_um_%s.xml' % (year, date) s = '.\\data\\Ausgelesen_am_%s_um_%s.swd' % (year, date) else: p = '.\\data\\Read_at_%s_at_%s.csv' % (year, date) x = '.\\data\\Read_at_%s_at_%s.xml' % (year, date) s = '.\\data\\Read_at_%s_at_%s.swd' % (year, date) c = '%s --fromSerial=%s --toCsv=%s' % (self.BmHackPath, self.Port[0], p) if self.ui.cbClear.isChecked(): c += ' --clear' os.system(c) if self.ui.cbSex.currentText() == 'Frau' or self.ui.cbSex.currentText( ) == 'female': sex = 'female' else: sex = 'male' if self.ui.cbHand.currentText( ) == 'links' or self.ui.cbHand.currentText() == 'left': hand = 'left' else: hand = 'right' if self.ui.cbSmoker.currentText( ) == 'nein' or self.ui.cbSmoker.currentText() == 'no': smoker = 'false' else: smoker = 'true' w = int(self.ui.cbWeight.currentText()) h = int(self.ui.cbHeight.currentText()) ee = self.ui.cbEeTarget.currentText() steps = self.ui.cbStepTarget.currentText() day = self.ui.cbBDayDay.currentText() month = self.ui.cbBDayMonth.currentText() year = self.ui.cbBDayYear.currentText() try: self.Foo = src.file_op.FileOp( p, x, s, [hand, w, h, sex, smoker, ee, steps, day, month, year]) self.Foo.Run() except: if self.__lang == 'german': print('\n\nKonnte CSV-Datei nicht oeffnen...\n\n') else: print('\n\nCould not open CSV-File...\n\n') # # # def ClearOnly(self): c = '%s --fromSerial=%s --clear' % (self.BmHackPath, self.Port[0]) os.system(c) # # # def Proc_End(self): self.close() # # # def SafeBody(self): self.conf_file = open('./conf.cfg', mode='w', encoding='utf-8') if self.ui.cbSex.currentText() == 'Frau' or self.ui.cbSex.currentText( ) == 'female': self.conf_file.write('sex=female\n') else: self.conf_file.write('sex=male\n') if self.ui.cbHand.currentText( ) == 'links' or self.ui.cbHand.currentText() == 'left': self.conf_file.write('hand=left\n') else: self.conf_file.write('hand=right\n') if self.ui.cbSmoker.currentText( ) == 'nein' or self.ui.cbSmoker.currentText() == 'no': self.conf_file.write('smoker=false\n') else: self.conf_file.write('smoker=true\n') self.conf_file.write('weight=%s\n' % (self.ui.cbWeight.currentText())) self.conf_file.write('height=%s\n' % (self.ui.cbHeight.currentText())) self.conf_file.write('cals=%s\n' % (self.ui.cbEeTarget.currentText())) self.conf_file.write('steps=%s\n' % (self.ui.cbStepTarget.currentText())) self.conf_file.write('day=%s\n' % (self.ui.cbBDayDay.currentText())) self.conf_file.write('month=%s\n' % (self.ui.cbBDayMonth.currentText())) self.conf_file.write('year=%s\n' % (self.ui.cbBDayYear.currentText())) self.conf_file.close() # # # def Seek(self): self.Port = self.FindBodymedia() self.ui.cbClear.setEnabled(False) self.ui.btnStart.setEnabled(False) self.ui.btnClearOnly.setEnabled(False) self.ui.btnBodyData.setEnabled(False) if self.Port == False: if self.__lang == 'german': self.ui.lbShow.setText('BodyMedia nicht gefunden') else: self.ui.lbShow.setText('BodyMedia not found') else: self.ui.lbShow.setText(self.Port[1]) self.ui.btnStart.setEnabled(True) self.ui.cbClear.setEnabled(True) self.ui.btnClearOnly.setEnabled(True) self.ui.btnBodyData.setEnabled(True) self.BmHackPath = '.\\bin\\Windows\\bm_hack\\bm_hack.exe' # # # def FindBodymedia(self): com_ports = tools.comports() for port in com_ports: if 'BodyMedia' in port[1]: return port else: return False # # # def SwitchLanguage(self): if self.__lang == 'german': self.__lang = 'english' # group boxes self.ui.gbBodyData.setTitle('Bodydata') self.ui.gbBDay.setTitle('Birthday') self.ui.gbHeightWeight.setTitle('Height and Weight') self.ui.gbTargets.setTitle('Targets') self.ui.gbOthers.setTitle('Others') # labels self.ui.lbBirthday.setText('Birthdate:') self.ui.lbDay.setText('Day') self.ui.lbMonth.setText('Month') self.ui.lbYear.setText('Year') self.ui.lbHeight.setText('Height in cm:') self.ui.lbWeight.setText('Weight in kg:') self.ui.lbKCal.setText('Calories:') self.ui.lbSteps.setText('Steps:') self.ui.lbSex.setText('Sex:') self.ui.lbHand.setText('Handedness:') self.ui.lbSmoker.setText('Smoker:') #self.ui.lbShow.setText('') # checkboxes self.ui.cbClear.setText('Delete device memory after reading') # buttons self.ui.btnSeek.setText('Armband not\nfound?\nSeek again') self.ui.btnStart.setText('Read\nBodyMedia') self.ui.btnClearOnly.setText('Activate BodyMedia') self.ui.btnClose.setText('Close') self.ui.btnBodyData.setText( 'Write currently set Bodydata to the BodyMedia') # comboboxes # Sex s = self.ui.cbSex.currentText() self.ui.cbSex.removeItem(1) self.ui.cbSex.removeItem(0) self.ui.cbSex.addItem('female') self.ui.cbSex.addItem('male') if s == 'Frau': self.ui.cbSex.setCurrentText('female') else: self.ui.cbSex.setCurrentText('male') # hand h = self.ui.cbHand.currentText() self.ui.cbHand.removeItem(1) self.ui.cbHand.removeItem(0) self.ui.cbHand.addItem('left') self.ui.cbHand.addItem('right') if h == 'links': self.ui.cbHand.setCurrentText('left') else: self.ui.cbHand.setCurrentText('right') # smoker s = self.ui.cbSmoker.currentText() self.ui.cbSmoker.removeItem(1) self.ui.cbSmoker.removeItem(0) self.ui.cbSmoker.addItem('no') self.ui.cbSmoker.addItem('yes') if s == 'nein': self.ui.cbSmoker.setCurrentText('no') else: self.ui.cbSmoker.setCurrentText('yes') s = ''' + Activate BodyMedia + ================== By activating the BodyMedia all current Sensordata will be deleted! + Write Bodydata + ================== By writing your Bodydata to the BodyMedia all current Sensordata will be deleted!''' self.ui.teHints.setReadOnly(False) self.ui.groupBox_2.setTitle('Hints') self.ui.teHints.setPlainText(s) self.ui.teHints.setReadOnly(True) else: self.__lang = 'german' # group boxes self.ui.gbBodyData.setTitle('Koerperdaten') self.ui.gbBDay.setTitle('Geburtstag') self.ui.gbHeightWeight.setTitle('Groesse und Gewicht') self.ui.gbTargets.setTitle('Ziele') self.ui.gbOthers.setTitle('Sonstiges') # labels self.ui.lbBirthday.setText('Geburtstag:') self.ui.lbDay.setText('Tag') self.ui.lbMonth.setText('Monat') self.ui.lbYear.setText('Jahr') self.ui.lbHeight.setText('Groesse in cm:') self.ui.lbWeight.setText('Gewicht in kg:') self.ui.lbKCal.setText('Kalorien:') self.ui.lbSteps.setText('Schritte:') self.ui.lbSex.setText('Geschlecht:') self.ui.lbHand.setText('Haender:') self.ui.lbSmoker.setText('Raucher:') #self.ui.lbShow.setText('') # checkboxes self.ui.cbClear.setText('Speicher nach dem Auslesen loeschen') # buttons self.ui.btnSeek.setText('Armband nicht\ngefunden?\nErneut Suchen') self.ui.btnStart.setText('BodyMedia\nauslesen') self.ui.btnClearOnly.setText('BodyMedia aktivieren') self.ui.btnClose.setText('Beenden') self.ui.btnBodyData.setText( 'Aktuell eingestellte Koerperdaten auf das BodyMedia uebertragen' ) # comboboxes # Sex s = self.ui.cbSex.currentText() self.ui.cbSex.removeItem(1) self.ui.cbSex.removeItem(0) self.ui.cbSex.addItem('Frau') self.ui.cbSex.addItem('Mann') if s == 'female': self.ui.cbSex.setCurrentText('Frau') else: self.ui.cbSex.setCurrentText('Mann') # hand h = self.ui.cbHand.currentText() self.ui.cbHand.removeItem(1) self.ui.cbHand.removeItem(0) self.ui.cbHand.addItem('links') self.ui.cbHand.addItem('rechts') if h == 'left': self.ui.cbHand.setCurrentText('links') else: self.ui.cbHand.setCurrentText('rechts') # smoker s = self.ui.cbSmoker.currentText() self.ui.cbSmoker.removeItem(1) self.ui.cbSmoker.removeItem(0) self.ui.cbSmoker.addItem('nein') self.ui.cbSmoker.addItem('ja') if s == 'no': self.ui.cbSmoker.setCurrentText('nein') else: self.ui.cbSmoker.setCurrentText('ja') s = ''' + BodyMeda aktivieren + ================== Beim aktivieren werden alle aufgezeichneten Sensordaten auf dem Armband gelöscht! + Koerperdaten uebertragen + ================== Beim uebertragen der Koerperdaten werden alle aufgezeichneten Sensordaten auf dem Armband gelöscht!''' self.ui.teHints.setReadOnly(False) self.ui.groupBox_2.setTitle('Hinweise') self.ui.teHints.setPlainText(s) self.ui.teHints.setReadOnly(True) self.Seek() # # # def PushToBM(self): self.SafeBody() if self.ui.cbSex.currentText() == 'Frau' or self.ui.cbSex.currentText( ) == 'female': sex = 'female' else: sex = 'male' if self.ui.cbHand.currentText( ) == 'links' or self.ui.cbHand.currentText() == 'left': hand = 'left' else: hand = 'right' if self.ui.cbSmoker.currentText( ) == 'nein' or self.ui.cbSmoker.currentText() == 'no': smoker = 'false' else: smoker = 'true' w = int(self.ui.cbWeight.currentText()) h = int(self.ui.cbHeight.currentText()) d = int(self.ui.cbBDayDay.currentText()) m = int(self.ui.cbBDayMonth.currentText()) y = int(self.ui.cbBDayYear.currentText()) self.SetBodyData(smoker, sex, hand, d, m, y, h, w) # # # def CheckSum(self, c): checksum = 0 for item in c: checksum += item else: checksum = checksum % 256 return struct.pack('B', checksum) # # # def __CreateSerialReq(self): sync = b'\xab' end = b'\xba\xba\xba\xba' s = b'\x03\x3c\x00\x00\x00\x00\x0e\xff\xff\xff\xff\x87\x01\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' s = sync + s + self.CheckSum(s) + end return s # # # def __GetSerialNum(self): x = self.__CreateSerialReq() try: ser = serial.Serial(self.Port[0], baudrate=921600) except: print('\n\n -- ERROR Could not open Serial-Port! Aborting!') return ser.write(x) ret = b'' i = 0 while i < 66: ret += ser.read() i += 1 else: ser.close() ser_num = ret[4:8] self.__SerNum = (ser_num[0] << 24) | (ser_num[1] << 16) | ( ser_num[2] << 8) | ser_num[3] # # # def SetBodyData(self, smoker, sex, hand, d, m, y, h, w): self.__GetSerialNum() try: ser = serial.Serial(self.Port[0], baudrate=921600) except: print('\n\n -- ERROR Could not open Serial-Port! Aborting!') return t = int(time.time()) if smoker == 'false': smoker = b'\x02' else: smoker = b'\x01' if sex == 'female': sex = b'\x02' else: sex = b'\x01' if hand == 'left': hand = b'\x01' else: hand = b'\x02' h = int(round((h / 2.54), 0)) w = int(round((w * 2.2046), 0)) messages = [ b'\x03\x3c\x00\x00\x00\x00\x0e\xff\xff\xff\xff\x81\x01\x00\x00\x00\x00\x00\x00\x00\x00' + struct.pack('<I', self.__SerNum) + b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e\xff\xff\xff\xff\x87\x02\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e\xff\xff\xff\xff\x87\x03\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x87\x04\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x87\x05\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x87\x06\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x89\x07\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x8c\x08\x80\x07\x02\x00\x10\x43\x55\x53\x54\x4f\x4d\x00\x00\x00\x08\x09\x0b\x0c\x0e\x10\x11\x12\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x8c\x09\x80\x07\x02\x01\x11\x43\x55\x53\x54\x4f\x4d\x00\x00\x00\x14\x15\x17\x18\x19\x1a\x1b\x1c\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x8c\x0a\x80\x07\x02\x02\x12\x43\x55\x53\x54\x4f\x4d\x00\x00\x00\x1d\x1e\x1f\x22\x23\x25\x26\x27\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x8c\x0b\x80\x07\x02\x03\x13\x43\x55\x53\x54\x4f\x4d\x00\x00\x00\x28\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x8c\x0c\x00\x00\x02\x04\x14\x43\x55\x53\x54\x4f\x4d\x00\x00\x00\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x8c\x0d\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e\xff\xff\xff\xff\x87\x01\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e\xff\xff\xff\xff\x81\x02\x00\x00\x00\x00\x00\x00\x00\x00' + struct.pack('<I', self.__SerNum) + b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e\xff\xff\xff\xff\x87\x03\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e\xff\xff\xff\xff\x87\x04\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x87\x05\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x87\x06\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x87\x07\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x87\x08\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x89\x09\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack( '>I', self.__SerNum) + b'\x86\x0a' + hand + b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x0b\xdc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x89\x0c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack( '>I', self.__SerNum) + b'\x86\x0d' + struct.pack('i', t) + b'\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack( '>I', self.__SerNum) + b'\x86\x0e' + struct.pack( 'B', m) + b'\x00\x00\x00' + struct.pack( 'B', d) + b'\x00\x00\x00' + struct.pack('H', y) + b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x0f\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x10\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x11\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x12\x60\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x13\x31\x32\x33\x34\x35\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack( '>I', self.__SerNum) + b'\x86\x14' + struct.pack('H', w) + b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack( '>I', self.__SerNum) + b'\x86\x16' + struct.pack('B', h) + b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x25\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x17\x40\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x18\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack( '>I', self.__SerNum) + b'\x86\x19' + sex + b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x1a\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack( '>I', self.__SerNum) + b'\x86\x1c' + smoker + b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00' ] sync = b'\xab' end = b'\xba\xba\xba\xba' cnt = 0 for m in messages: s = sync + m + self.CheckSum(m) + end print('\nMessages to send remaining: %s' % (len(messages) - cnt)) print('Send Message to BodyMedia...') ser.write(s) cnt += 1 ret = b'' i = 0 print('Wait for Response...') while i < 66: ret = ser.read() i += 1 else: print('Got Response...') else: ser.close() print('\n\nSend all Messages!')
class MainWindow(QMainWindow): # # # def __init__(self): QMainWindow.__init__(self) self.__SerNum = 0 self.__lang = 'german' self.conf_file = None file_exist = False try: self.conf_file = open('./conf.cfg', mode='r', encoding='utf-8') file_exist = True except: pass self.Foo = None self.ui = Ui_MainWindow() self.ui.setupUi(self) s = ''' + BodyMeda aktivieren + ================== Beim aktivieren werden alle aufgezeichneten Sensordaten auf dem Armband gelöscht! + Koerperdaten uebertragen + ================== Beim uebertragen der Koerperdaten werden alle aufgezeichneten Sensordaten auf dem Armband gelöscht!''' self.ui.teHints.setReadOnly(False) self.ui.teHints.setPlainText(s) self.ui.teHints.setReadOnly(True) ################################################## # prefill comboboxes # sex self.ui.cbSex.addItem('Frau') self.ui.cbSex.addItem('Mann') # hand self.ui.cbHand.addItem('links') self.ui.cbHand.addItem('rechts') # smoker self.ui.cbSmoker.addItem('nein') self.ui.cbSmoker.addItem('ja') # Weight for i in range(40, 251, 1): self.ui.cbWeight.addItem(str(i)) else: self.ui.cbWeight.setMaxVisibleItems(20) # Height for i in range(100, 221, 1): self.ui.cbHeight.addItem(str(i)) else: self.ui.cbHeight.setMaxVisibleItems(20) # ee-Target for i in range(1500, 8001, 50): self.ui.cbEeTarget.addItem(str(i)) else: self.ui.cbEeTarget.setMaxVisibleItems(20) # step-Target for i in range(500, 30001, 50): self.ui.cbStepTarget.addItem(str(i)) else: self.ui.cbStepTarget.setMaxVisibleItems(20) # birthdate day for i in range(1, 32, 1): self.ui.cbBDayDay.addItem(str(i)) else: self.ui.cbBDayDay.setMaxVisibleItems(31) # birthday month for i in range(1, 13, 1): self.ui.cbBDayMonth.addItem(str(i)) else: self.ui.cbBDayMonth.setMaxVisibleItems(12) # birthday year for i in range(1940, 1999, 1): self.ui.cbBDayYear.addItem(str(i)) else: self.ui.cbBDayYear.setMaxVisibleItems(20) # ################################################## if file_exist: r = self.conf_file.read() self.conf_file.close() data = r.replace(' ', '').split('\n') for line in data: line = line.split('=') if line[0] == 'sex': if self.__lang == 'german': if line[1] == 'female': self.ui.cbSex.setCurrentText('Frau') else: self.ui.cbSex.setCurrentText('Mann') else: if line[1] == 'female': self.ui.cbSex.setCurrentText('female') else: self.ui.cbSex.setCurrentText('male') elif line[0] == 'hand': if self.__lang == 'german': if line[1] == 'left': self.ui.cbHand.setCurrentText('links') else: self.ui.cbHand.setCurrentText('rechts') else: if line[1] == 'left': self.ui.cbHand.setCurrentText('left') else: self.ui.cbHand.setCurrentText('right') elif line[0] == 'smoker': if self.__lang == 'german': if line[1] == 'false': self.ui.cbSmoker.setCurrentText('nein') else: self.ui.cbSmoker.setCurrentText('ja') else: if line[1] == 'false': self.ui.cbSmoker.setCurrentText('no') else: self.ui.cbSmoker.setCurrentText('yes') elif line[0] == 'weight': self.ui.cbWeight.setCurrentText(line[1]) elif line[0] == 'height': self.ui.cbHeight.setCurrentText(line[1]) elif line[0] == 'cals': self.ui.cbEeTarget.setCurrentText(line[1]) elif line[0] == 'steps': self.ui.cbStepTarget.setCurrentText(line[1]) elif line[0] == 'day': self.ui.cbBDayDay.setCurrentText(line[1]) elif line[0] == 'month': self.ui.cbBDayMonth.setCurrentText(line[1]) elif line[0] == 'year': self.ui.cbBDayYear.setCurrentText(line[1]) else: pass self.Seek() # # # def Proc_Start(self): ts = int(time.time()) year = datetime.datetime.fromtimestamp(ts).strftime('%d_%m_%Y') date = datetime.datetime.fromtimestamp(ts).strftime('%H_%M_%S') if self.__lang == 'german': p = '.\\data\\Ausgelesen_am_%s_um_%s.csv' % (year, date) x = '.\\data\\Ausgelesen_am_%s_um_%s.xml' % (year, date) s = '.\\data\\Ausgelesen_am_%s_um_%s.swd' % (year, date) else: p = '.\\data\\Read_at_%s_at_%s.csv' % (year, date) x = '.\\data\\Read_at_%s_at_%s.xml' % (year, date) s = '.\\data\\Read_at_%s_at_%s.swd' % (year, date) c = '%s --fromSerial=%s --toCsv=%s' % (self.BmHackPath, self.Port[0], p) if self.ui.cbClear.isChecked(): c += ' --clear' os.system(c) if self.ui.cbSex.currentText() == 'Frau' or self.ui.cbSex.currentText() == 'female': sex = 'female' else: sex = 'male' if self.ui.cbHand.currentText() == 'links' or self.ui.cbHand.currentText() == 'left': hand = 'left' else: hand = 'right' if self.ui.cbSmoker.currentText() == 'nein' or self.ui.cbSmoker.currentText() == 'no': smoker = 'false' else: smoker = 'true' w = int(self.ui.cbWeight.currentText()) h = int(self.ui.cbHeight.currentText()) ee = self.ui.cbEeTarget.currentText() steps = self.ui.cbStepTarget.currentText() day = self.ui.cbBDayDay.currentText() month = self.ui.cbBDayMonth.currentText() year = self.ui.cbBDayYear.currentText() try: self.Foo = src.file_op.FileOp(p, x, s, [hand, w, h, sex, smoker, ee, steps, day, month, year]) self.Foo.Run() except: if self.__lang == 'german': print('\n\nKonnte CSV-Datei nicht oeffnen...\n\n') else: print('\n\nCould not open CSV-File...\n\n') # # # def ClearOnly(self): c = '%s --fromSerial=%s --clear' % (self.BmHackPath, self.Port[0]) os.system(c) # # # def Proc_End(self): self.close() # # # def SafeBody(self): self.conf_file = open('./conf.cfg', mode='w', encoding='utf-8') if self.ui.cbSex.currentText() == 'Frau' or self.ui.cbSex.currentText() == 'female': self.conf_file.write('sex=female\n') else: self.conf_file.write('sex=male\n') if self.ui.cbHand.currentText() == 'links' or self.ui.cbHand.currentText() == 'left': self.conf_file.write('hand=left\n') else: self.conf_file.write('hand=right\n') if self.ui.cbSmoker.currentText() == 'nein' or self.ui.cbSmoker.currentText() == 'no': self.conf_file.write('smoker=false\n') else: self.conf_file.write('smoker=true\n') self.conf_file.write('weight=%s\n' % (self.ui.cbWeight.currentText())) self.conf_file.write('height=%s\n' % (self.ui.cbHeight.currentText())) self.conf_file.write('cals=%s\n' % (self.ui.cbEeTarget.currentText())) self.conf_file.write('steps=%s\n' % (self.ui.cbStepTarget.currentText())) self.conf_file.write('day=%s\n' % (self.ui.cbBDayDay.currentText())) self.conf_file.write('month=%s\n' % (self.ui.cbBDayMonth.currentText())) self.conf_file.write('year=%s\n' % (self.ui.cbBDayYear.currentText())) self.conf_file.close() # # # def Seek(self): self.Port = self.FindBodymedia() self.ui.cbClear.setEnabled(False) self.ui.btnStart.setEnabled(False) self.ui.btnClearOnly.setEnabled(False) self.ui.btnBodyData.setEnabled(False) if self.Port == False: if self.__lang == 'german': self.ui.lbShow.setText('BodyMedia nicht gefunden') else: self.ui.lbShow.setText('BodyMedia not found') else: self.ui.lbShow.setText(self.Port[1]) self.ui.btnStart.setEnabled(True) self.ui.cbClear.setEnabled(True) self.ui.btnClearOnly.setEnabled(True) self.ui.btnBodyData.setEnabled(True) self.BmHackPath = '.\\bin\\Windows\\bm_hack\\bm_hack.exe' # # # def FindBodymedia(self): com_ports = tools.comports() for port in com_ports: if 'BodyMedia' in port[1]: return port else: return False # # # def SwitchLanguage(self): if self.__lang == 'german': self.__lang = 'english' # group boxes self.ui.gbBodyData.setTitle('Bodydata') self.ui.gbBDay.setTitle('Birthday') self.ui.gbHeightWeight.setTitle('Height and Weight') self.ui.gbTargets.setTitle('Targets') self.ui.gbOthers.setTitle('Others') # labels self.ui.lbBirthday.setText('Birthdate:') self.ui.lbDay.setText('Day') self.ui.lbMonth.setText('Month') self.ui.lbYear.setText('Year') self.ui.lbHeight.setText('Height in cm:') self.ui.lbWeight.setText('Weight in kg:') self.ui.lbKCal.setText('Calories:') self.ui.lbSteps.setText('Steps:') self.ui.lbSex.setText('Sex:') self.ui.lbHand.setText('Handedness:') self.ui.lbSmoker.setText('Smoker:') #self.ui.lbShow.setText('') # checkboxes self.ui.cbClear.setText('Delete device memory after reading') # buttons self.ui.btnSeek.setText('Armband not\nfound?\nSeek again') self.ui.btnStart.setText('Read\nBodyMedia') self.ui.btnClearOnly.setText('Activate BodyMedia') self.ui.btnClose.setText('Close') self.ui.btnBodyData.setText('Write currently set Bodydata to the BodyMedia') # comboboxes # Sex s = self.ui.cbSex.currentText() self.ui.cbSex.removeItem(1) self.ui.cbSex.removeItem(0) self.ui.cbSex.addItem('female') self.ui.cbSex.addItem('male') if s == 'Frau': self.ui.cbSex.setCurrentText('female') else: self.ui.cbSex.setCurrentText('male') # hand h = self.ui.cbHand.currentText() self.ui.cbHand.removeItem(1) self.ui.cbHand.removeItem(0) self.ui.cbHand.addItem('left') self.ui.cbHand.addItem('right') if h == 'links': self.ui.cbHand.setCurrentText('left') else: self.ui.cbHand.setCurrentText('right') # smoker s = self.ui.cbSmoker.currentText() self.ui.cbSmoker.removeItem(1) self.ui.cbSmoker.removeItem(0) self.ui.cbSmoker.addItem('no') self.ui.cbSmoker.addItem('yes') if s == 'nein': self.ui.cbSmoker.setCurrentText('no') else: self.ui.cbSmoker.setCurrentText('yes') s = ''' + Activate BodyMedia + ================== By activating the BodyMedia all current Sensordata will be deleted! + Write Bodydata + ================== By writing your Bodydata to the BodyMedia all current Sensordata will be deleted!''' self.ui.teHints.setReadOnly(False) self.ui.groupBox_2.setTitle('Hints') self.ui.teHints.setPlainText(s) self.ui.teHints.setReadOnly(True) else: self.__lang = 'german' # group boxes self.ui.gbBodyData.setTitle('Koerperdaten') self.ui.gbBDay.setTitle('Geburtstag') self.ui.gbHeightWeight.setTitle('Groesse und Gewicht') self.ui.gbTargets.setTitle('Ziele') self.ui.gbOthers.setTitle('Sonstiges') # labels self.ui.lbBirthday.setText('Geburtstag:') self.ui.lbDay.setText('Tag') self.ui.lbMonth.setText('Monat') self.ui.lbYear.setText('Jahr') self.ui.lbHeight.setText('Groesse in cm:') self.ui.lbWeight.setText('Gewicht in kg:') self.ui.lbKCal.setText('Kalorien:') self.ui.lbSteps.setText('Schritte:') self.ui.lbSex.setText('Geschlecht:') self.ui.lbHand.setText('Haender:') self.ui.lbSmoker.setText('Raucher:') #self.ui.lbShow.setText('') # checkboxes self.ui.cbClear.setText('Speicher nach dem Auslesen loeschen') # buttons self.ui.btnSeek.setText('Armband nicht\ngefunden?\nErneut Suchen') self.ui.btnStart.setText('BodyMedia\nauslesen') self.ui.btnClearOnly.setText('BodyMedia aktivieren') self.ui.btnClose.setText('Beenden') self.ui.btnBodyData.setText('Aktuell eingestellte Koerperdaten auf das BodyMedia uebertragen') # comboboxes # Sex s = self.ui.cbSex.currentText() self.ui.cbSex.removeItem(1) self.ui.cbSex.removeItem(0) self.ui.cbSex.addItem('Frau') self.ui.cbSex.addItem('Mann') if s == 'female': self.ui.cbSex.setCurrentText('Frau') else: self.ui.cbSex.setCurrentText('Mann') # hand h = self.ui.cbHand.currentText() self.ui.cbHand.removeItem(1) self.ui.cbHand.removeItem(0) self.ui.cbHand.addItem('links') self.ui.cbHand.addItem('rechts') if h == 'left': self.ui.cbHand.setCurrentText('links') else: self.ui.cbHand.setCurrentText('rechts') # smoker s = self.ui.cbSmoker.currentText() self.ui.cbSmoker.removeItem(1) self.ui.cbSmoker.removeItem(0) self.ui.cbSmoker.addItem('nein') self.ui.cbSmoker.addItem('ja') if s == 'no': self.ui.cbSmoker.setCurrentText('nein') else: self.ui.cbSmoker.setCurrentText('ja') s = ''' + BodyMeda aktivieren + ================== Beim aktivieren werden alle aufgezeichneten Sensordaten auf dem Armband gelöscht! + Koerperdaten uebertragen + ================== Beim uebertragen der Koerperdaten werden alle aufgezeichneten Sensordaten auf dem Armband gelöscht!''' self.ui.teHints.setReadOnly(False) self.ui.groupBox_2.setTitle('Hinweise') self.ui.teHints.setPlainText(s) self.ui.teHints.setReadOnly(True) self.Seek() # # # def PushToBM(self): self.SafeBody() if self.ui.cbSex.currentText() == 'Frau' or self.ui.cbSex.currentText() == 'female': sex = 'female' else: sex = 'male' if self.ui.cbHand.currentText() == 'links' or self.ui.cbHand.currentText() == 'left': hand = 'left' else: hand = 'right' if self.ui.cbSmoker.currentText() == 'nein' or self.ui.cbSmoker.currentText() == 'no': smoker = 'false' else: smoker = 'true' w = int(self.ui.cbWeight.currentText()) h = int(self.ui.cbHeight.currentText()) d = int(self.ui.cbBDayDay.currentText()) m = int(self.ui.cbBDayMonth.currentText()) y = int(self.ui.cbBDayYear.currentText()) self.SetBodyData(smoker, sex, hand, d, m, y, h, w) # # # def CheckSum(self, c): checksum = 0 for item in c: checksum += item else: checksum = checksum % 256 return struct.pack('B', checksum) # # # def __CreateSerialReq(self): sync = b'\xab' end= b'\xba\xba\xba\xba' s = b'\x03\x3c\x00\x00\x00\x00\x0e\xff\xff\xff\xff\x87\x01\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' s = sync + s + self.CheckSum(s) + end return s # # # def __GetSerialNum(self): x = self.__CreateSerialReq() try: ser = serial.Serial(self.Port[0], baudrate=921600) except: print('\n\n -- ERROR Could not open Serial-Port! Aborting!') return ser.write(x) ret = b'' i = 0 while i < 66: ret += ser.read() i += 1 else: ser.close() ser_num = ret[4:8] self.__SerNum = (ser_num[0] << 24) | (ser_num[1] << 16) | (ser_num[2] << 8) | ser_num[3] # # # def SetBodyData(self, smoker, sex, hand, d, m, y, h, w): self.__GetSerialNum() try: ser = serial.Serial(self.Port[0], baudrate=921600) except: print('\n\n -- ERROR Could not open Serial-Port! Aborting!') return t = int(time.time()) if smoker == 'false': smoker = b'\x02' else: smoker = b'\x01' if sex == 'female': sex = b'\x02' else: sex = b'\x01' if hand =='left': hand = b'\x01' else: hand = b'\x02' h = int(round((h / 2.54), 0)) w = int(round((w * 2.2046), 0)) messages = [ b'\x03\x3c\x00\x00\x00\x00\x0e\xff\xff\xff\xff\x81\x01\x00\x00\x00\x00\x00\x00\x00\x00' + struct.pack('<I', self.__SerNum) + b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e\xff\xff\xff\xff\x87\x02\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e\xff\xff\xff\xff\x87\x03\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x87\x04\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x87\x05\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x87\x06\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x89\x07\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x8c\x08\x80\x07\x02\x00\x10\x43\x55\x53\x54\x4f\x4d\x00\x00\x00\x08\x09\x0b\x0c\x0e\x10\x11\x12\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x8c\x09\x80\x07\x02\x01\x11\x43\x55\x53\x54\x4f\x4d\x00\x00\x00\x14\x15\x17\x18\x19\x1a\x1b\x1c\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x8c\x0a\x80\x07\x02\x02\x12\x43\x55\x53\x54\x4f\x4d\x00\x00\x00\x1d\x1e\x1f\x22\x23\x25\x26\x27\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x8c\x0b\x80\x07\x02\x03\x13\x43\x55\x53\x54\x4f\x4d\x00\x00\x00\x28\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x8c\x0c\x00\x00\x02\x04\x14\x43\x55\x53\x54\x4f\x4d\x00\x00\x00\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x8c\x0d\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e\xff\xff\xff\xff\x87\x01\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e\xff\xff\xff\xff\x81\x02\x00\x00\x00\x00\x00\x00\x00\x00' + struct.pack('<I', self.__SerNum) + b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e\xff\xff\xff\xff\x87\x03\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e\xff\xff\xff\xff\x87\x04\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x87\x05\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x87\x06\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x87\x07\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x87\x08\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x89\x09\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x0a' + hand + b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x0b\xdc\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x89\x0c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x0d' + struct.pack('i', t) + b'\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x0e' + struct.pack('B', m) + b'\x00\x00\x00' + struct.pack('B', d) + b'\x00\x00\x00' + struct.pack('H', y) + b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x0f\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x10\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x11\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x12\x60\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x13\x31\x32\x33\x34\x35\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x14' + struct.pack('H', w) + b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x16' + struct.pack('B', h) + b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x25\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x17\x40\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x18\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x19' + sex + b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x1a\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00', b'\x03\x3c\x00\x00\x00\x00\x0e' + struct.pack('>I', self.__SerNum) + b'\x86\x1c' + smoker + b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00' ] sync = b'\xab' end= b'\xba\xba\xba\xba' cnt = 0 for m in messages: s = sync + m + self.CheckSum(m) + end print('\nMessages to send remaining: %s' % (len(messages) - cnt)) print('Send Message to BodyMedia...') ser.write(s) cnt += 1 ret = b'' i = 0 print('Wait for Response...') while i < 66: ret = ser.read() i += 1 else: print('Got Response...') else: ser.close() print('\n\nSend all Messages!')