def _do_thermeq(self): """ Do what thermeq must do :return: nothing """ # save open window dictionary for adjustment ow = self.get_open_windows() eq3_result, eq3_error = self.eq3.read_data(False) if eq3_result: # set values self.get_control_values() # log messages logmsg.update(self._status_msg() + " Checking #" + str(self.setup.intervals["max"][0]) + " sec", 'I') logmsg.update(self.eq3.plain(), 'I') # do control self.control() # update JSONs self.write_strings() # set status self._set_status() # do logging self.do_device_logging() # do some valve_ignored adjustment self.adjust_ignored_valves(ow) # save bridge self.set_bridge_control_values() bridge.save(self.setup.bridge_file) else: self.var.heating = None if any("response" in e for e in eq3_error): self.queue_msg('M') else: self.queue_msg('E') # flush error to log logmsg.update("".join(str(e) + " " for e in eq3_error), 'E')
def process_msg(self): """ Process message queue :return: nothing """ cw_msg = bridge.rcw("msg") while len(self.var.msgQ) > 0: logmsg.update("Message queue=" + str(self.var.msgQ), 'D') while not str(bridge.get(cw_msg)) == "": time.sleep(self.setup.timeout) tosend = self.var.msgQ.pop() logmsg.update("Sending message [" + str(tosend) + "]", 'D') if tosend == "E": self.var.error = True self.var.err2Clear = True elif tosend == "C": self.var.err2Clear = False self.var.err2LastStatus = True logmsg.update("Clearing error LED", 'D') elif tosend == "R": bridge.save(self.setup.bridgefile) if self.setup.target == "yun": bridge.put(cw_msg, tosend) elif self.setup.target == "rpi": if tosend == "H": # action.do(True) pass elif tosend == "S": # action.do(False) pass
def write_strings(self): """ construct and write CSV data, Log debug string and current status string """ log_str = bridge.try_read("status", False) + ", " if self.setup.preference == "per": log_str += str(self.setup.valve_switch) + "%" + " at " + str( self.setup.valve_num) + " valve(s)." elif self.setup.preference == "total": log_str += "total value of " + str(self.setup.total_switch) + "." log_str += "\n" csvfile.write(time.strftime("%d/%m/%Y %H:%M:%S", time.localtime()), 1 if self.var.heating else 0, 1 if self.var.ventilating else 0) csvfile.write(self.eq3.csv()) csvfile.write("\n") # second web # JSON formatted status json_status = self.eq3.json_status() secweb.write("status", json_status) # and bridge variable bridge.put("sys", json_status) # nice text web secweb.nice(log_str + self.eq3.plain()) # readiness for dashboard bridge.save(secweb.sw.location["bridge"])
def update_counters(self, heat_start): # save the date nw = datetime.datetime.date(datetime.datetime.now()).strftime("%d-%m-%Y") tm = time.time() # update total heat counter if self.var.heating: tmp = self.var.ht["total"][0] tmp += int(time.time() - self.var.ht["total"][1]) bridge.put("ht", self.var.ht) bridge.put("htstr", datetime.timedelta(seconds=tmp)) logmsg.update("Total heat counter updated to " + str(datetime.timedelta(seconds=tmp))) self.var.ht["total"][0] = tmp self.var.ht["total"][1] = time.time() # is there a key for today? if nw in self.var.ht: if heat_start: self.var.ht[nw][1] = tm elif self.var.heating: totalheat = int(self.var.ht[nw][0] + (tm - self.var.ht[nw][1])) self.var.ht[nw] = [totalheat, time.time()] bridge.put("ht", self.var.ht) bridge.put("daily", datetime.timedelta(seconds=totalheat)) else: if len(self.var.ht) > 1: # if there a key, this must be old key(s) # save the old date, and flush values into log for k in self.var.ht.keys(): v = self.var.ht[k] if not k == "total": logmsg.update(str(k) + " heating daily summary: " + str(datetime.timedelta(seconds=v[0])), 'I') logmsg.update("Deleting old daily key: " + str(k), 'D') del self.var.ht[k] # and close CSV file self.export_csv("close") # create the new key logmsg.update("Creating new daily key: " + str(nw)) self.var.ht.update({nw: [0, time.time()]}) # so its a new day, update other values self.export_csv("init") # day readings warning, take number of heated readings and divide by 2 drw = self.var.heatReadings / 2 logmsg.update("Day reading warnings value=" + str(drw)) for k, v in self.var.dev_log.iteritems(): logmsg.update("Valve: " + str(k) + " has value " + str(v[0])) if v[0] > drw: logmsg.update("Valve: " + str(k) + " reports during heating too many same % positions, e.g. " + str(v[0]) + " per " + str(drw)) self.var.dev_log[k][0] = 0 self.var.heatReadings = 0 bridge.save(self.setup.bridgefile)
def update_counters(self, heat_start): # save the date nw = datetime.datetime.date( datetime.datetime.now()).strftime("%d-%m-%Y") tm = time.time() support.call_home("applive") # is there a key for today? # logmsg.debug("ht=", self.var.ht, ", heat_start=", heat_start) if nw in self.var.ht: if heat_start: self.var.ht[nw][1] = tm elif self.var.heating: daily_heat_sum = int(self.var.ht[nw][0] + (tm - self.var.ht[nw][1])) logmsg.debug("Daily heat sum=", daily_heat_sum) self.var.ht[nw] = [daily_heat_sum, time.time()] bridge.put("ht", self.var.ht) logmsg.update("Daily heat counter updated to " + str(datetime.timedelta(seconds=daily_heat_sum))) else: if len(self.var.ht) > 0: # if there a key, this must be old key(s) # save the old date, and flush values into log for k in self.var.ht.keys(): v = self.var.ht[k] logmsg.update( str(k) + " daily heating summary: " + str(datetime.timedelta(seconds=v[0])), 'I') logmsg.update("Deleting old daily key: " + str(k), 'D') del self.var.ht[k] self.export_csv("close") # create the new key self.var.ht.update({nw: [0, time.time()]}) logmsg.update("Creating new daily key: " + str(nw) + "=" + str(self.var.ht[nw])) # so its a new day, update other values self.export_csv("init") # day readings warning, take number of heated readings and divide by 2 drw = self.var.heat_readings / 2 logmsg.update("Day reading warnings value=" + str(drw)) for k, v in self.var.dev_log.iteritems(): logmsg.update("Valve: " + str(k) + " has value " + str(v[0])) if v[0] > drw: logmsg.update( "Valve: " + str(k) + " reports during heating too many same % positions, e.g. " + str(v[0]) + " per " + str(drw)) self.var.dev_log[k][0] = 0 self.var.heat_readings = 0 bridge.save(self.setup.bridge_file) bridge.put("ht", self.var.ht)
def update_counters(self, heat_start): # save the date nw = datetime.datetime.date(datetime.datetime.now()).strftime("%d-%m-%Y") tm = time.time() support.call_home("applive") # is there a key for today? # logmsg.debug("ht=", self.var.ht, ", heat_start=", heat_start) if nw in self.var.ht: if heat_start: self.var.ht[nw][1] = tm elif self.var.heating: daily_heat_sum = int(self.var.ht[nw][0] + (tm - self.var.ht[nw][1])) logmsg.debug("Daily heat sum=", daily_heat_sum) self.var.ht[nw] = [daily_heat_sum, time.time()] bridge.put("ht", self.var.ht) logmsg.update("Daily heat counter updated to " + str(datetime.timedelta(seconds=daily_heat_sum))) else: if len(self.var.ht) > 0: # if there a key, this must be old key(s) # save the old date, and flush values into log for k in self.var.ht.keys(): v = self.var.ht[k] logmsg.update(str(k) + " daily heating summary: " + str(datetime.timedelta(seconds=v[0])), 'I') logmsg.update("Deleting old daily key: " + str(k), 'D') del self.var.ht[k] self.export_csv("close") # create the new key self.var.ht.update({nw: [0, time.time()]}) logmsg.update("Creating new daily key: " + str(nw) + "=" + str(self.var.ht[nw])) # so its a new day, update other values self.export_csv("init") # day readings warning, take number of heated readings and divide by 2 drw = self.var.heat_readings / 2 logmsg.update("Day reading warnings value=" + str(drw)) for k, v in self.var.dev_log.iteritems(): logmsg.update("Valve: " + str(k) + " has value " + str(v[0])) if v[0] > drw: logmsg.update("Valve: " + str(k) + " reports during heating too many same % positions, e.g. " + str(v[0]) + " per " + str(drw)) self.var.dev_log[k][0] = 0 self.var.heat_readings = 0 bridge.save(self.setup.bridge_file) bridge.put("ht", self.var.ht)
def process_msg(self): """ Process message queue :return: nothing """ while len(self.var.msgQ) > 0: logmsg.update("Message queue: " + str(self.var.msgQ), 'D') wait_cycle = False if support.is_yun(): # this is waiting routine to ensure that msg queue is processed by 32u4 part tmp_br = bridge.get("msg") if not support.is_empty(tmp_br): time.sleep(self.setup.timeout) wait_cycle = True if not wait_cycle: to_send = self.var.msgQ.pop() logmsg.update("Sending message [" + str(to_send) + "]", 'D') # if we are going to reset, save bridge file if to_send == "R": bridge.save(self.setup.bridge_file) if support.is_yun(): # signal to 32u4 that we have something to process bridge.put("msg", to_send) elif support.is_rpi(): if to_send == "H": # TBI RPI # uncomment line below for RPi # action.do(True) pass elif to_send == "S": # TBI RPI # uncomment line below for RPi # action.do(False) pass elif support.is_win(): # insert windows code here # print "nt" logmsg.update("Processing message on Windows: " + str(to_send))
def _do_thermeq(self): """ Do what thermeq must do :return: nothing """ # save open window dictionary for adjustment ow = self.get_open_windows() eq3_result, eq3_error = self.eq3.read_data(False) if eq3_result: # set values self.get_control_values() # log messages logmsg.update( self._status_msg() + " Checking #" + str(self.setup.intervals["max"][0]) + " sec", 'I') logmsg.update(self.eq3.plain(), 'I') # do control self.control() # update JSONs self.write_strings() # set status self._set_status() # do logging self.do_device_logging() # do some valve_ignored adjustment self.adjust_ignored_valves(ow) # save bridge self.set_bridge_control_values() bridge.save(self.setup.bridge_file) else: self.var.heating = None if any("response" in e for e in eq3_error): self.queue_msg('M') else: self.queue_msg('E') # flush error to log logmsg.update("".join(str(e) + " " for e in eq3_error), 'E')
def write_strings(self): """ construct and write CSV data, Log debug string and current status string """ log_str = bridge.try_read("status", False) + ", " if self.setup.preference == "per": log_str += str(self.setup.valve_switch) + "%" + " at " + str(self.setup.valve_num) + " valve(s)." elif self.setup.preference == "total": log_str += "total value of " + str(self.setup.total_switch) + "." log_str += "\n" csvfile.write(time.strftime("%d/%m/%Y %H:%M:%S", time.localtime()), 1 if self.var.heating else 0, 1 if self.var.ventilating else 0) csvfile.write(self.eq3.csv()) csvfile.write("\n") # second web # JSON formatted status json_status = self.eq3.json_status() secweb.write("status", json_status) # and bridge variable bridge.put("sys", json_status) # nice text web secweb.nice(log_str + self.eq3.plain()) # readiness for dashboard bridge.save(secweb.sw.location["bridge"])
def intervals(self): # do upgrade according schedule if self._is("upg"): if not autoupdate.do(self.setup.version, self._is_beta()): logmsg.update("Auto update is disabled or failed.") else: logmsg.update("thermeq3 updated.") # sendWarning("upgrade", temp_key, body) # do update variables according schedule if self._is("var"): # >>> updateAllTimes() bridge.save(self.setup.bridgefile) self.get_ip() self.update_ignores_2sit() # check max according schedule if self._is("max"): # beta features here if self._is_beta(): sm, am, kk = profiles.do(self.setup.selectedMode, self.var.actModeIndex, self.var.situation) if sm != self.setup.selectedMode or am != self.var.actModeIndex: self.setup.selectedMode = sm self.var.actModeIndex = am self.set_mode(kk) # end of beta cmd = self._getcmd() if cmd == "quit": return 0xFF elif cmd == "log_debug": logmsg.level('D') elif cmd == "log_info": logmsg.level('I') elif cmd[0:4] == "mute": key = cmd[4:] if key in self.eq3.windows: self.eq3.windows[key][0] = datetime.datetime.now() self.eq3.windows[key][1] = True logmsg.update("OWW for key " + str(key) + " is muted for " + str( self.setup.intervals["oww"][2]) + " seconds.") elif cmd == "rebridge": bridge.load(self.setup.bridgefile) # literal processing self._literal_process() elif cmd == "updatetime": # updateAllTimes() pass elif cmd == "led": if self.var.heating: self.queue_msg("H") else: self.queue_msg("S") elif cmd == "upgrade": # doUpdate() pass if self.eq3.read_data(False): logmsg.update(self._status_msg() + " Every" + str(self.setup.intervals["max"][0]) + " sec", 'I') logmsg.update(self.eq3.plain(), 'I') # update JSONs self.get_control_values() self.control() # doDevLogging() pass