Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
    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})
Beispiel #5
0
    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)
Beispiel #6
0
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