Esempio n. 1
0
 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')
Esempio n. 2
0
 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
Esempio n. 3
0
    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"])
Esempio n. 4
0
    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)
Esempio n. 5
0
    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)
Esempio n. 6
0
    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)
Esempio n. 7
0
 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))
Esempio n. 8
0
 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))
Esempio n. 9
0
 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')
Esempio n. 10
0
    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"])
Esempio n. 11
0
 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