def __lt__(self, other): a = self.sortKey.text() b = other.sortKey.text() if len(a) == 5 and len(b) == 5 and a[2] == ":" and b[2] == ":": # we compare times return stringtoseconds(a) < stringtoseconds(b) else: try: # if those are numbers return int(a) < int(b) except: # else we do a string compare return a < b
def calculateRC(self): if len(self.aw.qmc.timex) > 2: if not len(self.startEdit.text()) or not len(self.endEdit.text()): #empty field return starttime = stringtoseconds(str(self.startEdit.text())) endtime = stringtoseconds(str(self.endEdit.text())) if starttime == -1 or endtime == -1: self.result1.setText( QApplication.translate( "Label", "Time syntax error. Time not valid", None)) self.result2.setText("") return if endtime > self.aw.qmc.timex[-1] or endtime < starttime: self.result1.setText( QApplication.translate( "Label", "Error: End time smaller than Start time", None)) self.result2.setText("") return if self.aw.qmc.timeindex[0] != -1: start = self.aw.qmc.timex[self.aw.qmc.timeindex[0]] else: start = 0 startindex = self.aw.qmc.time2index(starttime + start) endindex = self.aw.qmc.time2index(endtime + start) #delta deltatime = self.aw.qmc.timex[endindex] - self.aw.qmc.timex[ startindex] deltatemperature = self.aw.qmc.temp2[endindex] - self.aw.qmc.temp2[ startindex] if deltatime == 0: deltaseconds = 0 else: deltaseconds = deltatemperature / deltatime deltaminutes = deltaseconds * 60. string1 = QApplication.translate( "Label", "Best approximation was made from {0} to {1}", None).format( stringfromseconds(self.aw.qmc.timex[startindex] - start), stringfromseconds(self.aw.qmc.timex[endindex] - start)) string2 = QApplication.translate( "Label", "<b>{0}</b> {1}/sec, <b>{2}</b> {3}/min", None).format("%.2f" % (deltaseconds), self.aw.qmc.mode, "%.2f" % (deltaminutes), self.aw.qmc.mode) self.result1.setText(string1) self.result2.setText(string2) else: self.result1.setText( QApplication.translate("Label", "No profile found", None)) self.result2.setText("")
def validatetimeorder(self): time = [] checks = self.readchecks() time.append( stringtoseconds(str(self.Edit0.text())) + self.aw.qmc.timex[self.aw.qmc.timeindex[0]]) time.append( stringtoseconds(str(self.Edit1.text())) + self.aw.qmc.timex[self.aw.qmc.timeindex[0]]) time.append( stringtoseconds(str(self.Edit2.text())) + self.aw.qmc.timex[self.aw.qmc.timeindex[0]]) time.append( stringtoseconds(str(self.Edit3.text())) + self.aw.qmc.timex[self.aw.qmc.timeindex[0]]) time.append( stringtoseconds(str(self.Edit4.text())) + self.aw.qmc.timex[self.aw.qmc.timeindex[0]]) time.append( stringtoseconds(str(self.Edit5.text())) + self.aw.qmc.timex[self.aw.qmc.timeindex[0]]) time.append( stringtoseconds(str(self.Edit6.text())) + self.aw.qmc.timex[self.aw.qmc.timeindex[0]]) for i in range(len(time) - 1): if time[i + 1] <= time[i] and checks[i + 1] != 0: return i return 1000
def updatewindow(self): limits_changed = False # trigger auto limits on leaving the dialog if active if not self.aw.qmc.flagon and self.autotimexFlag.isChecked(): self.autoAxis() if not self.aw.qmc.flagon and (self.autodeltaxETFlag.isChecked() or self.autodeltaxBTFlag.isChecked()): self.autoDeltaAxis() # self.aw.qmc.time_grid = self.timeGridCheckBox.isChecked() self.aw.qmc.temp_grid = self.tempGridCheckBox.isChecked() self.aw.qmc.loadaxisfromprofile = self.loadAxisFromProfile.isChecked() try: yl = int(str(self.ylimitEdit.text())) yl_min = int(str(self.ylimitEdit_min.text())) if yl > yl_min: if (self.aw.qmc.ylimit != yl) or (self.aw.qmc.ylimit_min != yl_min): limits_changed = True self.aw.qmc.ylimit = yl self.aw.qmc.ylimit_min = yl_min except: pass try: zl = int(str(self.zlimitEdit.text())) zl_min = int(str(self.zlimitEdit_min.text())) if (self.aw.qmc.zlimit != zl) or (self.aw.qmc.zlimit_min != zl_min): limits_changed = True if zl > zl_min: self.aw.qmc.zlimit = zl self.aw.qmc.zlimit_min = zl_min except: pass if limits_changed and self.aw.qmc.crossmarker == True: # switch crosslines off and on again to adjust for changed axis limits self.aw.qmc.togglecrosslines() self.aw.qmc.togglecrosslines() endedittime_str = str(self.xlimitEdit.text()) if endedittime_str is not None and endedittime_str != "": endeditime = stringtoseconds(endedittime_str) self.aw.qmc.endofx = endeditime self.aw.qmc.locktimex_end = endeditime else: self.aw.qmc.endofx = self.aw.qmc.endofx_default self.aw.qmc.locktimex_end = self.aw.qmc.endofx_default startedittime_str = str(self.xlimitEdit_min.text()) if startedittime_str is not None and startedittime_str != "": starteditime = stringtoseconds(startedittime_str) if starteditime >= 0 and self.aw.qmc.timeindex[0] != -1: self.aw.qmc.startofx = self.aw.qmc.timex[ self.aw.qmc.timeindex[0]] + starteditime elif starteditime >= 0 and self.aw.qmc.timeindex[0] == -1: self.aw.qmc.startofx = starteditime elif starteditime < 0 and self.aw.qmc.timeindex[0] != -1: self.aw.qmc.startofx = self.aw.qmc.timex[ self.aw.qmc.timeindex[0]] - abs(starteditime) else: self.aw.qmc.startofx = starteditime self.aw.qmc.locktimex_start = starteditime else: self.aw.qmc.startofx = self.aw.qmc.startofx_default self.aw.qmc.locktimex_start = self.aw.qmc.startofx_default try: step100 = self.step100Edit.text().strip() if step100 == "": self.aw.qmc.step100temp = None else: self.aw.qmc.step100temp = int(step100) except: pass resettime = stringtoseconds(str(self.resetEdit.text())) if resettime > 0: self.aw.qmc.resetmaxtime = resettime chargetime = stringtoseconds(str(self.chargeminEdit.text())) if chargetime <= 0: self.aw.qmc.chargemintime = chargetime self.aw.qmc.fixmaxtime = not self.fixmaxtimeFlag.isChecked() self.aw.qmc.locktimex = self.locktimexFlag.isChecked() self.aw.qmc.autotimex = self.autotimexFlag.isChecked() self.aw.qmc.autodeltaxET = self.autodeltaxETFlag.isChecked() self.aw.qmc.autodeltaxBT = self.autodeltaxBTFlag.isChecked() self.aw.qmc.redraw(recomputeAllDeltas=False) string = QApplication.translate( "Message", "xlimit = ({2},{3}) ylimit = ({0},{1}) zlimit = ({4},{5})", None).format(str(self.ylimitEdit_min.text()), str(self.ylimitEdit.text()), str(self.xlimitEdit_min.text()), str(self.xlimitEdit.text()), str(self.zlimitEdit_min.text()), str(self.zlimitEdit.text())) self.aw.sendmessage(string) self.close()
def extractProfileRoastLog(url, _): res = {} # the interpreted data set try: s = requests.Session() s.mount('file://', FileAdapter()) page = s.get(url.toString(), timeout=(4, 15), headers={"Accept-Encoding": "gzip"}) tree = html.fromstring(page.content) title = "" title_elements = tree.xpath('//h2[contains(@id,"page-title")]/text()') if len(title_elements) > 0: title = title_elements[0].strip() tag_values = {} for tag in [ "Roastable:", "Starting mass:", "Ending mass:", "Roasted on:", "Roasted by:", "Roaster:", "Roast level:", "Roast Notes:" ]: tag_elements = tree.xpath( '//td[contains(@class,"text-rt") and normalize-space(text())="{}"]/following::td[1]/text()' .format(tag)) if len(tag_elements) > 0: tag_values[tag] = "\n".join([e.strip() for e in tag_elements]) # {'Roastable:': '2003000 Diablo FTO BULK', 'Starting mass:': '140.00 lb', 'Ending mass:': '116.80 lb', 'Roasted on:': 'Thu, Jun 6th, 2019 11:11 PM', 'Roasted by:': '*****@*****.**', 'Roaster:': 'Diedrich CR-70'} if "Roasted on:" in tag_values: try: dt = dateutil.parser.parse(tag_values["Roasted on:"]) dateQt = QDateTime.fromTime_t(int(round(dt.timestamp()))) if dateQt.isValid(): res["roastdate"] = encodeLocal(dateQt.date().toString()) res["roastisodate"] = encodeLocal(dateQt.date().toString( Qt.ISODate)) res["roasttime"] = encodeLocal(dateQt.time().toString()) res["roastepoch"] = int(dateQt.toTime_t()) res["roasttzoffset"] = libtime.timezone except: pass w_in = 0 w_out = 0 u = "lb" if "Starting mass:" in tag_values: w_in, u = tag_values["Starting mass:"].strip().split(" ") if "Ending mass:" in tag_values: w_out, u = tag_values["Ending mass:"].strip().split(" ") res["weight"] = [ float(w_in), float(w_out), ("Kg" if u.strip() == "kg" else "lb") ] if "Roasted by:" in tag_values: res["operator"] = tag_values["Roasted by:"] if "Roaster:" in tag_values: res["roastertype"] = tag_values["Roaster:"] if "Roast level:" in tag_values: try: c = int(round(float(tag_values["Roast level:"]))) res["ground_color"] = c except: pass if "Roast Notes:" in tag_values: res["roastingnotes"] = tag_values["Roast Notes:"] if title == "" and "Roastable:" in tag_values: title = tag_values["Roastable:"] if title != "": res["title"] = title # if DROP temp > 300 => F else C source_elements = tree.xpath('//script[contains(@id,"source")]/text()') if len(source_elements) > 0: source_element = source_elements[0].strip() pattern = re.compile(r"\"rid=(\d+)\"") d = pattern.findall(source_element) if len(d) > 0: rid = d[0] url = "https://roastlog.com/roasts/profiles/?rid={}".format( rid) headers = { "X-Requested-With": "XMLHttpRequest", "Accept": "application/json", "Accept-Encoding": "gzip" } response = requests.get(url, timeout=(4, 15), headers=headers) data_json = response.json() timeindex = [-1, 0, 0, 0, 0, 0, 0, 0] specialevents = [] specialeventstype = [] specialeventsvalue = [] specialeventsStrings = [] if "line_plots" in data_json: mode = "F" timex = [] temp1, temp2, temp3, temp4 = [], [], [], [] temp3_label = "TC3" temp4_label = "TC4" # temp1ror = [] for lp in data_json["line_plots"]: if "channel" in lp and "data" in lp: if lp["channel"] == 0: # BT data = lp["data"] timex = [d[0] / 1000 for d in data] temp1 = [d[1] for d in data] elif lp["channel"] == 1: # ET temp2 = [d[1] for d in lp["data"]] elif lp["channel"] == 2: # XT1 temp3 = [d[1] for d in lp["data"]] if "label" in lp: temp3_label = lp["label"] elif lp["channel"] == 3: # XT2 temp4 = [d[1] for d in lp["data"]] if "label" in lp: temp4_label = lp["label"] # elif lp["channel"] == 4: # BT RoR # temp1ror = [d[1] for d in lp["data"]] res["timex"] = timex if len(timex) == len(temp1): res["temp2"] = temp1 else: res["temp2"] = [-1] * len(timex) if len(timex) == len(temp2): res["temp1"] = temp2 else: res["temp1"] = [-1] * len(timex) if len(temp3) == len(timex) or len(temp4) == len(timex): temp3_visibility = True temp4_visibility = True # add one (virtual) extra device res["extradevices"] = [25] res["extratimex"] = [timex] if len(temp3) == len(timex): res["extratemp1"] = [temp3] else: res["extratemp1"] = [[-1] * len(timex)] temp3_visibility = False if len(temp4) == len(timex): res["extratemp2"] = [temp4] else: res["extratemp2"] = [[-1] * len(timex)] temp4_visibility = False res["extraname1"] = [temp3_label] res["extraname2"] = [temp4_label] res["extramathexpression1"] = [""] res["extramathexpression2"] = [""] res["extraLCDvisibility1"] = [temp3_visibility] res["extraLCDvisibility2"] = [temp4_visibility] res["extraCurveVisibility1"] = [temp3_visibility] res["extraCurveVisibility2"] = [temp4_visibility] res["extraDelta1"] = [False] res["extraDelta2"] = [False] res["extraFill1"] = [False] res["extraFill2"] = [False] res["extradevicecolor1"] = ['black'] res["extradevicecolor2"] = ['black'] res["extramarkersizes1"] = [6.0] res["extramarkersizes2"] = [6.0] res["extramarkers1"] = [None] res["extramarkers2"] = [None] res["extralinewidths1"] = [1.0] res["extralinewidths2"] = [1.0] res["extralinestyles1"] = ['-'] res["extralinestyles2"] = ['-'] res["extradrawstyles1"] = ['default'] res["extradrawstyles2"] = ['default'] timex_events = { "Intro temperature": 0, "yellowing": 1, "Yellow": 1, "DRY": 1, "Dry": 1, "dry": 1, "Dry End": 1, "Start 1st crack": 2, "START 1st": 2, "End 1st crack": 3, "Start 2nd crack": 4, "End 2nd crack": 5, "Drop temperature": 6 } if "table_events" in data_json: for te in data_json["table_events"]: if "label" in te and "time" in te: if te["label"] in timex_events: try: timex_idx = res["timex"].index( stringtoseconds(te["time"])) timeindex[timex_events[ te["label"]]] = timex_idx except: pass else: try: timex_idx = res["timex"].index( stringtoseconds(te["time"])) specialeventsStrings.append(te["label"]) specialevents.append(timex_idx) specialeventstype.append(4) specialeventsvalue.append(0) except: pass res["timeindex"] = timeindex mode = "F" if timeindex[6] != 0 and len(temp1) > timeindex[6] and temp1[ timeindex[6]] < 250: mode = "C" if timeindex[0] > -1 and len(temp1) > timeindex[0] and temp1[ timeindex[0]] < 250: mode = "C" res["mode"] = mode if len(specialevents) > 0: res["specialevents"] = specialevents res["specialeventstype"] = specialeventstype res["specialeventsvalue"] = specialeventsvalue res["specialeventsStrings"] = specialeventsStrings except Exception as e: # import traceback # import sys # traceback.print_exc(file=sys.stdout) pass return res
def return_values(self): self.values[0] = stringtoseconds(str(self.timeEdit.text())) self.values[1] = float(self.tempEdit.text()) self.accept()
def changeflags(self, _): sender = self.sender() if sender == self.dryend: idi = 1 elif sender == self.fcs: idi = 2 elif sender == self.fce: idi = 3 elif sender == self.scs: idi = 4 elif sender == self.sce: idi = 5 else: return if self.validatetimeorder() != 1000: if idi == 1: if self.dryend.isChecked(): self.dryend.setChecked(False) elif idi == 2: if self.fcs.isChecked(): self.fcs.setChecked(False) elif idi == 3: if self.fce.isChecked(): self.fce.setChecked(False) elif idi == 4: if self.scs.isChecked(): self.scs.setChecked(False) elif idi == 5: if self.sce.isChecked(): self.sce.setChecked(False) #ERROR time from edit boxes is not in ascending order strings = [ QApplication.translate("Message", "CHARGE", None), QApplication.translate("Message", "DRY END", None), QApplication.translate("Message", "FC START", None), QApplication.translate("Message", "FC END", None), QApplication.translate("Message", "SC START", None), QApplication.translate("Message", "SC END", None), QApplication.translate("Message", "DROP", None) ] st = QApplication.translate( "Message", "Times need to be in ascending order. Please recheck {0} time", None).format(strings[idi]) QMessageBox.information( self, QApplication.translate("Message", "Designer Config", None), st) return #idi = id index if self.aw.qmc.timeindex[idi]: #ERASE mark point self.aw.qmc.currentx = self.aw.qmc.timex[ self.aw.qmc.timeindex[idi]] self.aw.qmc.currenty = self.aw.qmc.temp2[ self.aw.qmc.timeindex[idi]] self.aw.qmc.removepoint() else: #ADD mark point if idi == 1: timez = stringtoseconds(str(self.Edit1.text( ))) + self.aw.qmc.timex[self.aw.qmc.timeindex[0]] bt = float(str(self.Edit1bt.text())) et = float(str(self.Edit1et.text())) if idi == 2: timez = stringtoseconds(str(self.Edit2.text( ))) + self.aw.qmc.timex[self.aw.qmc.timeindex[0]] bt = float(str(self.Edit2bt.text())) et = float(str(self.Edit2et.text())) if idi == 3: timez = stringtoseconds(str(self.Edit3.text( ))) + self.aw.qmc.timex[self.aw.qmc.timeindex[0]] bt = float(str(self.Edit3bt.text())) et = float(str(self.Edit3et.text())) if idi == 4: timez = stringtoseconds(str(self.Edit4.text( ))) + self.aw.qmc.timex[self.aw.qmc.timeindex[0]] bt = float(str(self.Edit4bt.text())) et = float(str(self.Edit4et.text())) if idi == 5: timez = stringtoseconds(str(self.Edit5.text( ))) + self.aw.qmc.timex[self.aw.qmc.timeindex[0]] bt = float(str(self.Edit5bt.text())) et = float(str(self.Edit5et.text())) self.aw.qmc.currentx = timez self.aw.qmc.currenty = bt newindex = self.aw.qmc.addpoint(manual=False) self.aw.qmc.timeindex[idi] = newindex self.aw.qmc.temp2[self.aw.qmc.timeindex[idi]] = bt self.aw.qmc.temp1[self.aw.qmc.timeindex[idi]] = et self.aw.qmc.xaxistosm(redraw=False) self.aw.qmc.redrawdesigner()
def settimes(self, _): #check input strings = [ QApplication.translate("Message", "CHARGE", None), QApplication.translate("Message", "DRY END", None), QApplication.translate("Message", "FC START", None), QApplication.translate("Message", "FC END", None), QApplication.translate("Message", "SC START", None), QApplication.translate("Message", "SC END", None), QApplication.translate("Message", "DROP", None) ] timecheck = self.validatetime() if timecheck != 1000: st = QApplication.translate( "Message", "Incorrect time format. Please recheck {0} time", None).format(strings[timecheck]) QMessageBox.information( self, QApplication.translate("Message", "Designer Config", None), st) return 1 checkvalue = self.validatetimeorder() if checkvalue != 1000: st = QApplication.translate( "Message", "Times need to be in ascending order. Please recheck {0} time", None).format(strings[checkvalue + 1]) QMessageBox.information( self, QApplication.translate("Message", "Designer Config", None), st) return 1 if self.Edit0bt.text() != self.Edit0btcopy: self.aw.qmc.temp2[self.aw.qmc.timeindex[0]] = float( str(self.Edit0bt.text())) self.Edit0btcopy = self.Edit0bt.text() if self.Edit0et.text() != self.Edit0etcopy: self.aw.qmc.temp1[self.aw.qmc.timeindex[0]] = float( str(self.Edit0et.text())) self.Edit0etcopy = self.Edit0et.text() if self.dryend.isChecked(): if self.Edit1.text() != self.Edit1copy: if stringtoseconds(str(self.Edit1.text())): timez = stringtoseconds(str(self.Edit1.text( ))) + self.aw.qmc.timex[self.aw.qmc.timeindex[0]] self.aw.qmc.timex[self.aw.qmc.timeindex[1]] = timez self.Edit1copy = self.Edit1.text() if self.Edit1bt.text() != self.Edit1btcopy: self.aw.qmc.temp2[self.aw.qmc.timeindex[1]] = float( str(self.Edit1bt.text())) self.Edit1btcopy = self.Edit1bt.text() if self.Edit1et.text() != self.Edit1etcopy: self.aw.qmc.temp1[self.aw.qmc.timeindex[1]] = float( str(self.Edit1et.text())) self.Edit1etcopy = self.Edit1et.text() if self.fcs.isChecked(): if self.Edit2.text() != self.Edit2copy: if stringtoseconds(str(self.Edit2.text())): timez = stringtoseconds(str(self.Edit2.text( ))) + self.aw.qmc.timex[self.aw.qmc.timeindex[0]] self.aw.qmc.timex[self.aw.qmc.timeindex[2]] = timez self.Edit2copy = self.Edit2.text() if self.Edit2bt.text() != self.Edit2btcopy: self.aw.qmc.temp2[self.aw.qmc.timeindex[2]] = float( str(self.Edit2bt.text())) self.Edit2btcopy = self.Edit2bt.text() if self.Edit2et.text() != self.Edit2etcopy: self.aw.qmc.temp1[self.aw.qmc.timeindex[2]] = float( str(self.Edit2et.text())) self.Edit2etcopy = self.Edit2et.text() if self.fce.isChecked(): if self.Edit3.text() != self.Edit3copy: if stringtoseconds(str(self.Edit3.text())): timez = stringtoseconds(str(self.Edit3.text( ))) + self.aw.qmc.timex[self.aw.qmc.timeindex[0]] self.aw.qmc.timex[self.aw.qmc.timeindex[3]] = timez self.Edit3copy = self.Edit3.text() if self.Edit3bt.text() != self.Edit3btcopy: self.aw.qmc.temp2[self.aw.qmc.timeindex[3]] = float( str(self.Edit3bt.text())) self.Edit3btcopy = self.Edit3bt.text() if self.Edit3et.text() != self.Edit3etcopy: self.aw.qmc.temp1[self.aw.qmc.timeindex[3]] = float( str(self.Edit3et.text())) self.Edit3etcopy = self.Edit3et.text() if self.scs.isChecked(): if self.Edit4.text() != self.Edit4copy: if stringtoseconds(str(self.Edit4.text())): timez = stringtoseconds(str(self.Edit4.text( ))) + self.aw.qmc.timex[self.aw.qmc.timeindex[0]] self.aw.qmc.timex[self.aw.qmc.timeindex[4]] = timez self.Edit4copy = self.Edit4.text() if self.Edit4bt.text() != self.Edit4btcopy: self.aw.qmc.temp2[self.aw.qmc.timeindex[4]] = float( str(self.Edit4bt.text())) self.Edit4btcopy = self.Edit4bt.text() if self.Edit4et.text() != self.Edit4etcopy: self.aw.qmc.temp1[self.aw.qmc.timeindex[4]] = float( str(self.Edit4et.text())) self.Edit4etcopy = self.Edit4et.text() if self.sce.isChecked(): if self.Edit5.text() != self.Edit5copy: if stringtoseconds(str(self.Edit5.text())): timez = stringtoseconds(str(self.Edit5.text( ))) + self.aw.qmc.timex[self.aw.qmc.timeindex[0]] self.aw.qmc.timex[self.aw.qmc.timeindex[5]] = timez self.Edit5copy = self.Edit5.text() if self.Edit5bt.text() != self.Edit5btcopy: self.aw.qmc.temp2[self.aw.qmc.timeindex[5]] = float( str(self.Edit5bt.text())) self.Edit5btcopy = self.Edit5bt.text() if self.Edit5et.text() != self.Edit5etcopy: self.aw.qmc.temp1[self.aw.qmc.timeindex[5]] = float( str(self.Edit5et.text())) self.Edit5etcopy = self.Edit5et.text() if self.Edit6.text() != self.Edit6copy: if stringtoseconds(str(self.Edit6.text())): timez = stringtoseconds(str(self.Edit6.text( ))) + self.aw.qmc.timex[self.aw.qmc.timeindex[0]] self.aw.qmc.timex[self.aw.qmc.timeindex[6]] = timez self.Edit6copy = self.Edit6.text() if self.Edit6bt.text() != self.Edit6btcopy: self.aw.qmc.temp2[self.aw.qmc.timeindex[6]] = float( str(self.Edit6bt.text())) self.Edit6btcopy = self.Edit6bt.text() if self.Edit6et.text() != self.Edit6etcopy: self.aw.qmc.temp1[self.aw.qmc.timeindex[6]] = float( str(self.Edit6et.text())) self.Edit6etcopy = self.Edit6et.text() for i in range(1, 6): #1-5 self.aw.qmc.designertimeinit[i] = self.aw.qmc.timex[ self.aw.qmc.timeindex[i]] self.aw.qmc.xaxistosm(redraw=False) self.aw.qmc.redrawdesigner() return 0
def savealarms(self): try: self.alarmtable.sortItems(0) nalarms = self.alarmtable.rowCount() self.aw.qmc.loadalarmsfromprofile = self.loadAlarmsFromProfile.isChecked() self.aw.qmc.loadalarmsfrombackground = self.loadAlarmsFromBackground.isChecked() self.aw.qmc.alarmflag = [1]*nalarms self.aw.qmc.alarmguard = [-1]*nalarms self.aw.qmc.alarmnegguard = [-1]*nalarms self.aw.qmc.alarmtime = [-1]*nalarms self.aw.qmc.alarmoffset = [0]*nalarms self.aw.qmc.alarmcond = [1]*nalarms self.aw.qmc.alarmsource = [1]*nalarms self.aw.qmc.alarmtemperature = [500.]*nalarms self.aw.qmc.alarmaction = [0]*nalarms self.aw.qmc.alarmbeep = [0]*nalarms self.aw.qmc.alarmstrings = [""]*nalarms for i in range(nalarms): flag = self.alarmtable.cellWidget(i,1) self.aw.qmc.alarmflag[i] = int(flag.isChecked()) guard = self.alarmtable.cellWidget(i,2) try: guard_value = int(str(guard.text())) - 1 except Exception: guard_value = -1 if guard_value > -1 and guard_value < nalarms: self.aw.qmc.alarmguard[i] = guard_value else: self.aw.qmc.alarmguard[i] = -1 negguard = self.alarmtable.cellWidget(i,3) try: negguard_value = int(str(negguard.text())) - 1 except Exception: negguard_value = -1 if negguard_value > -1 and negguard_value < nalarms: self.aw.qmc.alarmnegguard[i] = negguard_value else: self.aw.qmc.alarmnegguard[i] = -1 timez = self.alarmtable.cellWidget(i,4) self.aw.qmc.alarmtime[i] = self.aw.qmc.menuidx2alarmtime[timez.currentIndex()] offset = self.alarmtable.cellWidget(i,5) if offset and offset != "": self.aw.qmc.alarmoffset[i] = max(0,stringtoseconds(str(offset.text()))) atype = self.alarmtable.cellWidget(i,6) self.aw.qmc.alarmsource[i] = int(str(atype.currentIndex())) - 3 cond = self.alarmtable.cellWidget(i,7) self.aw.qmc.alarmcond[i] = int(str(cond.currentIndex())) temp = self.alarmtable.cellWidget(i,8) try: self.aw.qmc.alarmtemperature[i] = float(self.aw.comma2dot(str(temp.text()))) except Exception: self.aw.qmc.alarmtemperature[i] = 0.0 action = self.alarmtable.cellWidget(i,9) self.aw.qmc.alarmaction[i] = int(str(action.currentIndex() - 1)) beepWidget = self.alarmtable.cellWidget(i,10) beep = beepWidget.layout().itemAt(1).widget() if beep and beep is not None: self.aw.qmc.alarmbeep[i] = int(beep.isChecked()) description = self.alarmtable.cellWidget(i,11) self.aw.qmc.alarmstrings[i] = description.text() except Exception as ex: _, _, exc_tb = sys.exc_info() self.aw.qmc.adderror((QApplication.translate("Error Message", "Exception:",None) + " savealarms(): {0}").format(str(ex)),exc_tb.tb_lineno)