def configure(self, qParentWidget): try: d = dict() d['debug'] = (ValueType.boolean, "Debug", self.config['GENERAL']['debug'] == "True", None, None) d['morerequests'] = ( ValueType.boolean, "Fast Connection", self.config['GENERAL']['morerequests'] == "True", None, None) d['serversperpage'] = ( ValueType.integer, "Servers per page:", int(self.config['GENERAL']['serversperpage']), 0, 250) d['api'] = (ValueType.string, "API Base URL:", self.config['GENERAL']['api'], None, 1) d['alternatebackgroundcolor'] = ( ValueType.string, "Alternate row bg color:", self.config['GENERAL']['alternatebackgroundcolor'], None, 1) getValues(None, "Server Browser Settings", d, self.configDialogClosed) except: from traceback import format_exc try: ts3.logMessage(format_exc(), ts3defines.LogLevel.LogLevel_ERROR, "PyTSon::" + self.name, 0) except: print("Error in " + self.name + ".configure: " + format_exc())
def configure(self, qParentWidget): try: d = dict() d['debug'] = (ValueType.boolean, "Debug", self.cfg['general']['debug'] == "True", None, None) d['enabled'] = (ValueType.boolean, "Broadcast own changes", self.cfg['general']['enabled'] == "True", None, None) d['pw'] = (ValueType.boolean, "Broadcast server passwords", self.cfg['general']['pw'] == "True", None, None) d['channel'] = (ValueType.boolean, "Broadcast new channel", self.cfg['general']['channel'] == "True", None, None) d['channelpw'] = (ValueType.boolean, "Broadcast channel pw", self.cfg['general']['channelpw'] == "True", None, None) d['status'] = (ValueType.string, "AFK status text:", self.cfg['general']['status'], None, 1) getValues(None, "{} Settings".format(self.name), d, self.configDialogClosed) except: from traceback import format_exc try: ts3.logMessage(format_exc(), ts3defines.LogLevel.LogLevel_ERROR, "PyTSon::" + self.name, 0) except: print("Error in " + self.name + ".configure: " + format_exc())
def off(force=False): logging.debug("off called.") if islocked() and not force: logging.debug("Asked to swich fan off, but fan is locked") rrdtool.update(DATADIR + '/fan.rrd', 'N:' + getvalues.getValues()['Fan']) mqtt.publishFan(getvalues.getValues()['Fan']) else: logging.debug("Current fan value is: %s" % getvalues.getValues()['Fan']) if getvalues.getValues()['Fan'] != "0": if not DRYRUN: subprocess.call([SISPMCTL, "-A " + FANOUTPORT]) subprocess.call([SISPMCTL, "-f " + FANOUTPORT]) if force: subprocess.call([SISPMCTL, "-A " + FANINPORT]) subprocess.call([SISPMCTL, "-f " + FANINPORT]) else: subprocess.call([ SISPMCTL, "-A", FANINPORT, "--Aafter", "2", "--Ado", "off" ]) logging.info("switched fan off.") rrdtool.update(DATADIR + '/fan.rrd', 'N:0') mqtt.publishFan(0)
def configure(self, qParentWidget): try: d = dict() for n, v in self.cfg['general'].items(): if n == "cfgversion": continue d[n] = (ValueType.boolean, n.title(), self.cfg.getboolean('general', n), None, None) getValues(qParentWidget, self.name, d, self.configDialogClosed) except: from traceback import format_exc;ts3.logMessage(format_exc(), ts3defines.LogLevel.LogLevel_ERROR, "PyTSon", 0)
def configure(self, qParentWidget): if not self.dlg: self.dlg = contactStatsFilters(self) self.dlg.show() self.dlg.raise_() self.dlg.activateWindow() return QDialog.Rejected d = dict() for k in self.cfg['filters']: d[k] = (ValueType.string, k, self.cfg['filters'][k], None, 1) getValues(None, "Count Contacts Prefixes", d, self.configDialogClosed)
def on(force=False): logging.debug("on called.") if islocked() and not force: logging.debug("Asked to swich fan on, but fan is locked") rrdtool.update(DATADIR+'/fan.rrd','N:'+getvalues.getValues()['Fan']) else: if getvalues.getValues()['Fan'] == "0": if not DRYRUN: subprocess.call([SISPMCTL,"-A "+FANINPORT]) subprocess.call([SISPMCTL,"-o "+FANINPORT]) subprocess.call([SISPMCTL,"-A",FANOUTPORT,"--Aafter","2","--Ado","on"]) logging.info("switched fan on.") rrdtool.update(DATADIR+'/fan.rrd','N:1')
def configure(self, qParentWidget): try: # Start QDialog method + if not self.dlg: self.dlg = SettingsDialog(self) self.dlg.show() self.dlg.raise_() self.dlg.activateWindow() # End QDialog method - # Start getValues method + d = dict() d['api'] = (ValueType.string, "Example String:", self.cfg['general']['example string'], None, 1) widgets = getValues(None, self.name + " Settings", d, self.configDialogClosed) # End getValues method - # Start QInputDialog method + result = QInputDialog.getText( qParentWidget, self.name + " Settings", "Example String:", QLineEdit.Normal, self.cfg['general']['example string']) if not result: return self.cfg.set('general', 'api', result) with open(self.ini, 'w') as configfile: self.cfg.write(configfile) # End QInputDialog method - except: from traceback import format_exc logMessage(format_exc(), ts3defines.LogLevel.LogLevel_ERROR, "PyTSon", 0)
def cron(): currentState = getvalues.getValues() Fan = currentState["Fan"] logging.debug("cron called. Current values are %s" % currentState) if "U" in currentState.itervalues(): logging.info("cron: switching fan off due to invalid state (%s)" % currentState) off() else: AHkeller = float(currentState["AHkeller"]) AHaussen = float(currentState["AHaussen"]) if Fan == "0": margin = AHmargin else: margin = AHmargin - AHhysterese if AHaussen > AHkeller - margin: logging.debug("abs. hum. outside is larger, switching fan off") off() else: logging.debug( "abs. hum. outside is smaller, considering further...") Tkeller = float(currentState["Tkeller"]) DPkeller = float(currentState["DPkeller"]) Taussen = float(currentState["Taussen"]) if Taussen > Tkeller: if Fan == "0": margin = Thysterese else: margin = 0.0 if (Taussen < Tkellermax) or (Tkeller < Tkellermax - margin): logging.debug( "temp. outside is higher and cellar is not too warm, switching fan on." ) on() else: logging.debug( "temp. outside is higher but cellar is too warm, switching fan off." ) off() else: if Fan == "0": marginT = Thysterese marginDP = DPmargin else: marginT = 0.0 marginDP = DPmargin - DPhysterese if ((Taussen > Tkellermin) or (Tkeller > Tkellermin + marginT)) and ( Tkeller > DPkeller + marginDP): logging.debug( "temp. outside is lower but cellar is warm enough and well above dew point, switching fan on." ) on() else: logging.debug( "temp. outside is lower and cellar is too cold or too close to dew point, switching fan off." ) off() subprocess.call(BINDIR + '/makegraphs.sh')
def configure(self, qParentWidget): d = dict() d['debug'] = (ValueType.boolean, "Debug", self.cfg['general']['debug'] == "True", None, None) d['enabled'] = (ValueType.boolean, "Broadcast own changes", self.cfg['general']['enabled'] == "True", None, None) d['pw'] = (ValueType.boolean, "Broadcast server passwords", self.cfg['general']['pw'] == "True", None, None) d['channel'] = (ValueType.boolean, "Broadcast new channel", self.cfg['general']['channel'] == "True", None, None) d['channelpw'] = (ValueType.boolean, "Broadcast channel pw", self.cfg['general']['channelpw'] == "True", None, None) d['status'] = (ValueType.string, "AFK status text:", self.cfg['general']['status'], None, 1) getValues(None, "{} Settings".format(self.name), d, self.configDialogClosed)
def on(force=False): logging.debug("on called.") if islocked() and not force: logging.debug("Asked to swich fan on, but fan is locked") rrdtool.update(DATADIR + '/fan.rrd', 'N:' + getvalues.getValues()['Fan']) mqtt.publishFan(getvalues.getValues()['Fan']) else: if UseInterval and (LockInterval or not force): FanRatio = str( round(float(IntervalOn) / (IntervalOn + IntervalOff), 3)) logging.debug("Interval ventilation in use, setting ratio to " + FanRatio) else: FanRatio = "1" if getvalues.getValues()['Fan'] != FanRatio: if not DRYRUN: if UseInterval and (LockInterval or not force): subprocess.call([SISPMCTL, "-A " + FANINPORT]) subprocess.call([SISPMCTL, "-o " + FANINPORT]) subprocess.call([ SISPMCTL, "-A", FANINPORT, "--Aafter", str(IntervalOn), "--Ado", "off", "--Aafter", str(IntervalOff), "--Ado", "on", "--Aloop", str(IntervalOn + IntervalOff) ]) subprocess.call([ SISPMCTL, "-A", FANOUTPORT, "--Aafter", "2", "--Ado", "on", "--Aafter", str(IntervalOn - 2), "--Ado", "off", "--Aloop", str(IntervalOn + IntervalOff) ]) else: subprocess.call([SISPMCTL, "-A " + FANINPORT]) subprocess.call([SISPMCTL, "-o " + FANINPORT]) subprocess.call([ SISPMCTL, "-A", FANOUTPORT, "--Aafter", "2", "--Ado", "on" ]) logging.info("switched fan on.") rrdtool.update(DATADIR + '/fan.rrd', 'N:' + FanRatio) mqtt.publishFan(FanRatio)
def configure(self, qParentWidget): try: d = dict() d['enabled'] = (ValueType.boolean, "Enabled", self.config['general']['enabled'] == "True", None, None) d['debug'] = (ValueType.boolean, "Debug", self.config['general']['debug'] == "True", None, None) d['cids'] = (ValueType.string, "CIDS:", self.config['general']['cids'], None, 1) d['clids'] = (ValueType.string, "CLIDS:", self.config['general']['clids'], None, 1) getValues(None, self.name + " Settings", d, self.configDialogClosed) except: from traceback import format_exc try: ts3lib.logMessage(format_exc(), ts3defines.LogLevel.LogLevel_ERROR, "PyTSon::" + self.name, 0) except: print("Error in " + self.name + ".configure: " + format_exc())
def cron(): currentState = getvalues.getValues() Fan = currentState["Fan"] logging.debug("cron called. Current values are %s" % currentState) if "U" in currentState.itervalues(): logging.info("cron: switching fan off due to invalid state (%s)" % currentState) off() else: AHkeller = float(currentState["AHkeller"]) AHaussen = float(currentState["AHaussen"]) if Fan == "0": margin = AHmargin else: margin = AHmargin - AHhysterese if AHaussen > AHkeller - margin: logging.debug("abs. hum. outside is larger, switching fan off") off() else: logging.debug("abs. hum. outside is smaller, considering further...") Tkeller = float(currentState["Tkeller"]) DPkeller = float(currentState["DPkeller"]) Taussen = float(currentState["Taussen"]) if Taussen > Tkeller: if Fan == "0": margin = Thysterese else: margin = 0.0 if ( Taussen < Tkellermax ) or ( Tkeller < Tkellermax - margin ): logging.debug("temp. outside is higher and cellar is not too warm, switching fan on.") on() else: logging.debug("temp. outside is higher but cellar is too warm, switching fan off.") off() else: if Fan == "0": marginT = Thysterese marginDP = DPmargin else: marginT = 0.0 marginDP = DPmargin - DPhysterese if ( ( Taussen > Tkellermin ) or ( Tkeller > Tkellermin + marginT ) ) and ( Tkeller > DPkeller + marginDP ): logging.debug("temp. outside is lower but cellar is warm enough and well above dew point, switching fan on.") on() else: logging.debug("temp. outside is lower and cellar is too cold or too close to dew point, switching fan off.") off() subprocess.call(BINDIR+'/makegraphs.sh')
def lock(state,duration): if duration == "inf": unlocktime = "inf" else: try: unlocktime = int(duration) unlocktime = int(time.time())+unlocktime*60 except: logging.error("Ungültige Angabe für Sperrdauer: %s" % duration) return False logging.info("Locking fan to %s for %s minutes" % ( state, duration )) f = open(LOCKFILE,'w') f.write(str(unlocktime)) f.close() currentState = getvalues.getValues()['Fan'] if str(state) == currentState: logging.debug("lock: Fan is already in state %s, not switching" % state) else: logging.debug("lock: Switching fan to state %s" % state) if state == 0: off(force=True) elif state == 1: on(force=True)
def lock(state, duration): if duration == "inf": unlocktime = "inf" else: try: unlocktime = int(duration) unlocktime = int(time.time()) + unlocktime * 60 except: logging.error("Ungültige Angabe für Sperrdauer: %s" % duration) return False logging.info("Locking fan to %s for %s minutes" % (state, duration)) f = open(LOCKFILE, 'w') f.write(str(unlocktime)) f.close() currentState = getvalues.getValues()['Fan'] if str(state) == currentState: logging.debug("lock: Fan is already in state %s, not switching" % state) else: logging.debug("lock: Switching fan to state %s" % state) if state == 0: off(force=True) elif state == 1: on(force=True)
#!/usr/bin/env python import time import serial import getvalues as gv ser = serial.Serial( port='/dev/ttyAMA0', baudrate = 9600, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1 ) counter=0 while counter<200: data=gv.getValues() if len(data) != 0: ser.write('%s'%data) counter += 1 time.sleep(1)
def updateValues(self): currentState = getvalues.getValues() if currentState['Tkeller'] == "U": Tkeller = "--" else: Tkeller = "%5.1f°C" % float(currentState['Tkeller']) if currentState['RHkeller'] == "U": RHkeller = "--" else: RHkeller = "%2.0f%%" % float(currentState['RHkeller']) if currentState['DPkeller'] == "U": DPkeller = "--" else: DPkeller = "%5.1f°C" % float(currentState['DPkeller']) if currentState['AHkeller'] == "U": AHkeller = "--" else: AHkeller = "%3.1fg/m³" % float(currentState['AHkeller']) if currentState['Taussen'] == "U": Taussen = "--" else: Taussen = "%5.1f°C" % float(currentState['Taussen']) if currentState['RHaussen'] == "U": RHaussen = "--" else: RHaussen = "%2.0f%%" % float(currentState['RHaussen']) if currentState['DPaussen'] == "U": DPaussen = "--" else: DPaussen = "%5.1f°C" % float(currentState['DPaussen']) if currentState['AHaussen'] == "U": AHaussen = "--" else: AHaussen = "%3.1fg/m³" % float(currentState['AHaussen']) if currentState['Fan'] == "U": Fan = "--" self.FanLabel.configure(background="black") self.FanLabel.configure(foreground="white") else: if float(currentState['Fan']) > .99: Fan = "AN" self.FanLabel.configure(background="green") self.FanLabel.configure(foreground="white") else: Fan = "AUS" self.FanLabel.configure(background="red") self.FanLabel.configure(foreground="white") RHimage = PhotoImage(file=GRAPHDIR + '/rhsmall.png') AHimage = PhotoImage(file=GRAPHDIR + '/ahsmall.png') self.RHLabel.configure(image=RHimage) self.AHLabel.configure(image=AHimage) self.RHLabel.image = RHimage self.AHLabel.image = AHimage self.KellerLine1.set(Tkeller + " " + RHkeller) self.KellerLine2.set(DPkeller + " " + AHkeller) self.AussenLine1.set(Taussen + " " + RHaussen) self.AussenLine2.set(DPaussen + " " + AHaussen) self.FanLine.set("Lüfter: " + Fan) root.after(60000, self.updateValues)
def updateValues(self): currentState = getvalues.getValues() if currentState['Tkeller'] == "U": self.Tkeller.set("-- ") else: self.Tkeller.set("%5.1f°C" % float(currentState['Tkeller'])) if currentState['RHkeller'] == "U": self.RHkeller.set("--") self.RHkellerLabel.configure(foreground="black") else: RHkeller = float(currentState['RHkeller']) self.RHkeller.set("%2.0f%%" % RHkeller) if RHkeller > 60.0: self.RHkellerLabel.configure(foreground="red") else: self.RHkellerLabel.configure(foreground="black") if currentState['DPkeller'] == "U": self.DPkeller.set("-- ") else: self.DPkeller.set("%5.1f°C" % float(currentState['DPkeller'])) if currentState['AHkeller'] == "U": self.AHkeller.set("--") else: self.AHkeller.set("%3.1fg/m³" % float(currentState['AHkeller'])) if currentState['Taussen'] == "U": self.Taussen.set("-- ") else: self.Taussen.set("%5.1f°C" % float(currentState['Taussen'])) if currentState['RHaussen'] == "U": self.RHaussen.set("--") else: self.RHaussen.set("%2.0f%%" % float(currentState['RHaussen'])) if currentState['DPaussen'] == "U": self.DPaussen.set("-- ") else: self.DPaussen.set("%5.1f°C" % float(currentState['DPaussen'])) if currentState['AHaussen'] == "U": self.AHaussen.set("--") else: self.AHaussen.set("%4.1fg/m³" % float(currentState['AHaussen'])) if currentState['Fan'] == "U": Fan = "--" self.FanLabel.configure(background="black") self.FanLabel.configure(foreground="white") else: if float(currentState['Fan']) > .99: Fan = "AN" self.FanLabel.configure(background="green") self.FanLabel.configure(foreground="white") else: Fan = "AUS" self.FanLabel.configure(background="red") self.FanLabel.configure(foreground="white") RHimage = PhotoImage(file=GRAPHDIR+'/rhsmall.png') AHimage = PhotoImage(file=GRAPHDIR+'/ahsmall.png') self.RHLabel.configure(image=RHimage) self.AHLabel.configure(image=AHimage) self.RHLabel.image = RHimage self.AHLabel.image = AHimage self.FanLine.set("Lüfter: "+Fan) islocked = fanctl.islocked() if islocked: self.LockLabel.configure(background="red") if islocked == "inf": self.LockLine.set("gesperrt") else: if islocked > ( 6*24*60*60 ): n = ( islocked -1 ) / ( 7*24*60*60 ) + 1 unit = "Woche" plural = "n" elif islocked > ( 23*60*60 ): n = ( islocked - 1 ) / ( 24*60*60 ) + 1 unit = "Tag" plural = "e" self.LockLine.set("%i Tage" % n) elif islocked > ( 59*60 ): n = ( islocked - 1 ) / ( 60*60 ) + 1 unit = "Stunde" plural = "n" self.LockLine.set("%i Stunden" % n) else: n = ( islocked -1 ) / 60 + 1 unit = "Minute" plural = "n" self.LockLine.set("% i Minuten" % n) if n > 1: unit += plural self.LockLine.set("%i %s" % (n,unit)) else: self.LockLabel.configure(background="blue") self.LockLine.set("Auto") self.TimeLine.set(time.strftime("%a %-d.%-m.%Y %H:%M"))
def updateValues(self): currentState = getvalues.getValues() if currentState['Tkeller'] == "U": Tkeller = "--" else: Tkeller = "%5.1f°C" % float(currentState['Tkeller']) if currentState['RHkeller'] == "U": RHkeller = "--" else: RHkeller = "%2.0f%%" % float(currentState['RHkeller']) if currentState['DPkeller'] == "U": DPkeller = "--" else: DPkeller = "%5.1f°C" % float(currentState['DPkeller']) if currentState['AHkeller'] == "U": AHkeller = "--" else: AHkeller = "%3.1fg/m³" % float(currentState['AHkeller']) if currentState['Taussen'] == "U": Taussen = "--" else: Taussen = "%5.1f°C" % float(currentState['Taussen']) if currentState['RHaussen'] == "U": RHaussen = "--" else: RHaussen = "%2.0f%%" % float(currentState['RHaussen']) if currentState['DPaussen'] == "U": DPaussen = "--" else: DPaussen = "%5.1f°C" % float(currentState['DPaussen']) if currentState['AHaussen'] == "U": AHaussen = "--" else: AHaussen = "%3.1fg/m³" % float(currentState['AHaussen']) if currentState['Fan'] == "U": Fan = "--" self.FanLabel.configure(background="black") self.FanLabel.configure(foreground="white") else: if float(currentState['Fan']) > .99: Fan = "AN" self.FanLabel.configure(background="green") self.FanLabel.configure(foreground="white") else: Fan = "AUS" self.FanLabel.configure(background="red") self.FanLabel.configure(foreground="white") RHimage = PhotoImage(file=GRAPHDIR+'/rhsmall.png') AHimage = PhotoImage(file=GRAPHDIR+'/ahsmall.png') self.RHLabel.configure(image=RHimage) self.AHLabel.configure(image=AHimage) self.RHLabel.image = RHimage self.AHLabel.image = AHimage self.KellerLine1.set(Tkeller+" "+RHkeller) self.KellerLine2.set(DPkeller+" "+AHkeller) self.AussenLine1.set(Taussen+" "+RHaussen) self.AussenLine2.set(DPaussen+" "+AHaussen) self.FanLine.set("Lüfter: "+Fan) root.after(60000,self.updateValues)