def get_logs_as_json(self, log_type, log_id): """ :param log_type: log type :param log_id: log id :return: log as array """ result = [] if log_type == "s": name = cbpi.cache.get("sensors").get(log_id).name result.append({ "name": name, "data": self.read_log_as_json("sensor", log_id) }) if log_type == "k": kettle = cbpi.cache.get("kettle").get(log_id) result = list( map( self.convert_chart_data_to_json, cbpi.get_controller( kettle.logic).get("class").chart(kettle))) if log_type == "f": fermenter = cbpi.cache.get("fermenter").get(log_id) result = list( map( self.convert_chart_data_to_json, cbpi.get_fermentation_controller( fermenter.logic).get("class").chart(fermenter))) return json.dumps(result)
def toggle(self, id): fermenter = cbpi.cache.get(self.cache_key)[id] try: print(fermenter.state) if fermenter.state is False: # Start controller if fermenter.logic is not None: cfg = fermenter.config.copy() cfg.update( dict(api=cbpi, fermenter_id=fermenter.id, heater=fermenter.heater, sensor=fermenter.sensor)) instance = cbpi.get_fermentation_controller(fermenter.logic).get("class")(**cfg) instance.init() fermenter.instance = instance def run(instance): instance.run() fermenter.state = not fermenter.state cbpi.emit("UPDATE_FERMENTER", cbpi.cache.get(self.cache_key).get(id)) t = cbpi.socketio.start_background_task(target=run, instance=instance) fermenter.state = not fermenter.state cbpi.emit("UPDATE_FERMENTER", cbpi.cache.get(self.cache_key).get(id)) else: # Stop controller fermenter.instance.stop() fermenter.state = not fermenter.state cbpi.emit("UPDATE_FERMENTER", cbpi.cache.get(self.cache_key).get(id)) except Exception as e: print(e) cbpi.notify("Toogle Fementer Controller failed", "Pleae check the %s configuration" % fermenter.name, type="danger", timeout=None) return ('', 500) return ('', 204)
def get_logs_as_json(self, t, id): #print "get logs as json %s %s"%(t,id) data = request.json result = [] if t == "s": name = cbpi.cache.get("sensors").get(id).name result.append({"name": name, "data": self.read_log_as_json("sensor", id)}) if t == "k": kettle = cbpi.cache.get("kettle").get(id) result = map(self.convert_chart_data_to_json, cbpi.get_controller(kettle.logic).get("class").chart(kettle)) if t == "f": fermenter = cbpi.cache.get("fermenter").get(id) result = map(self.convert_chart_data_to_json, cbpi.get_fermentation_controller(fermenter.logic).get("class").chart(fermenter)) if t == "act_sensor": result = self.get_kettle_action_log(id) #kettle = cbpi.cache.get("kettle").get(id) #result = map(self.convert_chart_data_to_json, cbpi.get_controller(kettle.logic).get("class").chart(kettle)) #print result if t == "as": result = self.get_fermenter_action_log(id) if t == "pump": result = self.get_mygpio_action_log(21) return json.dumps(result)
def hard_target_update(api): for key, fermenter in cbpi.cache.get("fermenter").iteritems(): if fermenter.logic == "HardTarget": # restart controller if stopped if fermenter.state is False: cbpi.notify("Restarting Auto Mode", str(fermenter.name), timeout=5000) cbpi.app.logger.info("hard_target_update: restarting auto mode for '{}'".format(fermenter.name)) cfg = fermenter.config.copy() cfg.update(dict(api=cbpi, fermenter_id=fermenter.id, heater=fermenter.heater, sensor=fermenter.sensor)) instance = cbpi.get_fermentation_controller(fermenter.logic).get("class")(**cfg) instance.init() fermenter.instance = instance def run(instance): instance.run() t = cbpi.socketio.start_background_task(target=run, instance=instance) fermenter.state = True cbpi.emit("UPDATE_FERMENTER", cbpi.cache.get("fermenter")[key]) # reset target temp if changed hard_target = float(fermenter.config['hard_target_temp']) if float(fermenter.target_temp) != hard_target: cbpi.notify("Resetting Target Temp", str(fermenter.name), timeout=5000) cbpi.app.logger.info("hard_target_update: resetting taget temp for '{}'".format(fermenter.name)) cbpi.cache.get("fermenter")[key].target_temp = hard_target cbpi.emit("UPDATE_FERMENTER_TARGET_TEMP", {"id": key, "target_temp": hard_target})
def get_logs_as_json(self, t, id): data = request.json result = [] if t == "s": name = cbpi.cache.get("sensors").get(id).name sensor_name = "%s_%s" % ("sensor", str(id)) result.append({"name": name, "data": self.read_log_as_json(sensor_name)}) if t == "k": kettle = cbpi.cache.get("kettle").get(id) result = map(self.convert_chart_data_to_json, cbpi.get_controller(kettle.logic).get("class").chart(kettle)) if t == "f": fermenter = cbpi.cache.get("fermenter").get(id) result = map(self.convert_chart_data_to_json, cbpi.get_fermentation_controller(fermenter.logic).get("class").chart(fermenter)) return json.dumps(result)
def ferm_supervisor_background_task(a): auto_start = cbpi.cache['config']["auto_start"].value for key, value in cbpi.cache.get("fermenter").iteritems(): #print key, " ", value.name if hasattr(value, 'instance'): #print value.instance.alarmed if value.instance.alarmed == 1 and value.instance.alarm_time < time.time( ): # set time for next notificacion if value.instance.rep_time > 0: value.instance.alarm_time = time.time() + float( value.instance.rep_time) * 60 else: # or never notify again value.instance.rep_time = 999999999999 stemp = cbpi.cache['sensors'][int( value.sensor)].instance.last_value server = smtplib.SMTP( cbpi.cache['config']['mail_server'].value, int(cbpi.cache['config']['mail_port'].value)) server.starttls() server.login(cbpi.cache['config']['mail_user'].value, cbpi.cache['config']['mail_psw'].value) msg = "Subject: CraftBeerPi Alarm \r\n\r\n Alarm on " + value.name + " temp " + stemp.__str__( ) + " set point " + value.target_temp.__str__( ) + " at " + strftime("%H:%M:%S on %Y %b %d ", localtime()) server.sendmail(cbpi.cache['config']['mail_user'].value, cbpi.cache['config']['mail_dest'].value, msg) server.quit() if auto_start == 'Yes' and (not value.state) and len(value.steps) > 0: for step in value.steps: if step.state == "A": print "Starting ", key, step.state try: print value.state # Start controller if value.logic is not None: cfg = value.config.copy() cfg.update( dict(api=cbpi, fermenter_id=value.id, heater=value.heater, sensor=value.sensor)) instance = cbpi.get_fermentation_controller( value.logic).get("class")(**cfg) instance.init() value.instance = instance def run(instance): instance.run() t = cbpi.socketio.start_background_task( target=run, instance=instance) value.state = not value.state cbpi.emit("UPDATE_FERMENTER", value) except Exception as e: print e cbpi.notify("Toogle Fementer Controller failed", "Pleae check the %s configuration" % value.name, type="danger", timeout=None) pass pass