Esempio n. 1
0
    def execute(self):
        '''
        This method is execute in an interval
        :return:
        '''

        # Check if Target Temp is reached
        if self.mode == "Timer":
            if cbpi.get_sensor_value(int(self.sensor)) >= float(
                    self.mash_temp):
                if self.is_timer_finished() is None:
                    self.start_timer(int(self.timer) * 60)

            # Check if timer finished and go to next step
            if self.is_timer_finished() == True:
                self.notify("Mash Step Completed!",
                            "Starting the next step",
                            timeout=None)
                self.next()

        if self.mode == "User input":
            if cbpi.get_sensor_value(int(self.sensor)) >= float(
                    self.mash_temp):
                self.notify("Mash Temp reached!",
                            "User input needed to proceed to next step",
                            timeout=None)
                self.mode = "All done. Wait for user"
Esempio n. 2
0
def show_singlemode(id1):
    cbpi.app.logger.info("LCDDisplay  - id1 an Funktion übergeben %s" % (id1))
    s = cbpi.cache.get("active_step")

    #read the current temperature of kettle with id1 from parameters
    current_sensor_value_id1 = (cbpi.get_sensor_value(
        int(cbpi.cache.get("kettle").get(id1).sensor)))

    #get the state of the heater of the current kettle
    heater_of_kettle = int(cbpi.cache.get("kettle").get(id1).heater)
    #cbpi.app.logger.info("LCDDisplay  - heater id %s" % (heater_of_kettle))

    heater_status = cbpi.cache.get("actors").get(heater_of_kettle).state
    #cbpi.app.logger.info("LCDDisplay  - heater status (0=off, 1=on) %s" % (heater_status))

    #line1 the stepname
    line1 = (u'%s' % (s.name, )).ljust(20)[:20]

    #line2 when steptimer is runnig show remaining time and kettlename
    if s.timer_end is not None:
        time_remaining = time.strftime(u"%H:%M:%S",
                                       time.gmtime(s.timer_end - time.time()))
        line2 = ((u"%s %s" %
                  ((cbpi.cache.get("kettle")[id1].name).ljust(12)[:11],
                   time_remaining)).ljust(20)[:20])
    else:
        line2 = ((u'%s' % (cbpi.cache.get("kettle")[id1].name)).ljust(20)[:20])

    #line3
    line3 = (u"Targ. Temp:%6.2f%s" %
             (float(cbpi.cache.get("kettle")[id1].target_temp),
              (u"°C"))).ljust(20)[:20]

    #line4 needs errorhandling because there may be tempvalue without sensordates and so it is none and than an error is thrown
    try:
        line4 = (u"Curr. Temp:%6.2f%s" % (float(current_sensor_value_id1),
                                          (u"°C"))).ljust(20)[:20]
    except:
        cbpi.app.logger.info(
            "LCDDisplay  - singlemode current_sensor_value_id1 exception %s" %
            (current_sensor_value_id1))
        line4 = (u"Curr. Temp: %s" % (("No Data")))[:20]

    lcd.cursor_pos = (0, 0)
    lcd.write_string(line1)
    lcd.cursor_pos = (0, 19)
    if bk == 0 and heater_status != 0:
        lcd.write_string(u"\x00")
        global bk
        bk = 1
    else:
        lcd.write_string(u" ")
        global bk
        bk = 0
    lcd.cursor_pos = (1, 0)
    lcd.write_string(line2)
    lcd.cursor_pos = (2, 0)
    lcd.write_string(line3)
    lcd.cursor_pos = (3, 0)
    lcd.write_string(line4)
Esempio n. 3
0
    def trigger_eval(self):
        #print "trigger"
        if self.trig["s1"]:
            sensor = tryfloat(cbpi.get_sensor_value(tryint(self.trig["s1"])))
        else:
            sensor = 0
        s1 = sensor
        if self.trig["s2"]:
            s2 = tryfloat(cbpi.get_sensor_value(tryint(self.trig["s2"])))
        else:
            s2 = 0
        on = self.out["active"]
        state = self.out["on"]
        off = not self.out["active"]
        trig_sig = bool(eval(self.trig["text"]))

        #based on trigger and immediate settings, enable or disable actor
        if trig_sig == True:
            if self.trig["last"] is False:
                if self.trig["type"] == "Tog":
                    pass  #toggle actor
                    self.update_self(self.power, "Tog")
                elif self.trig["type"] == "Sw":
                    pass  # switch actor on
                    self.update_self(self.power, True)
                if not self.trig["im_on"]:
                    self.times["onoff"] = datetime.utcnow() + self.delay["on"]
                self.trig["last"] = True
            return self.out["req"]
        else:
            if self.trig["last"] is True:
                if self.trig["type"] == "NTog":
                    pass  #toggle actor on negative switch
                elif self.trig["type"] == "Sw":
                    pass  # switch actor off
                    self.update_self(self.power, False)
                if not self.trig["im_off"]:
                    self.times["onoff"] = datetime.utcnow() + self.delay["off"]
                self.trig["last"] = False
            if self.trig["type"] is False:
                return False
            else:
                return self.out["req"]

        #should not get here
        print "Failure: should not be here"
        return False
Esempio n. 4
0
def brewfather_background_task(api):
    api_id = bf_api_id()
    if api_id == "":
        cbpi.notify(
            "Brewfather Error",
            "Id not set. Update brewfather_api_id parameter within System > Parameters.",
            type="danger",
            timeout=None)
        return

    for i, fermenter in cbpi.cache.get("fermenter").iteritems():

        # if we have a beer name, we will log the temperatures
        if fermenter.brewname and fermenter.brewname.strip():
            try:
                queryString = {"id": api_id}

                data = {
                    "name": fermenter.name,
                    "beer": fermenter.brewname,
                    "temp": cbpi.get_sensor_value(fermenter.sensor),
                    "aux_temp": cbpi.get_sensor_value(fermenter.sensor2),
                    "ext_temp": cbpi.get_sensor_value(fermenter.sensor3),
                    "temp_unit": cbpi.get_config_parameter("unit", "C")
                }

                response = requests.post(bf_uri, params=queryString, json=data)

                if response.status_code != 200:
                    cbpi.notify(
                        "Brewfather Error",
                        "Received unsuccessful response. Ensure API Id is correct. HTTP Error Code: "
                        + str(response.status_code),
                        type="danger",
                        timeout=None)

            except BaseException as error:
                cbpi.notify("Brewfather Error",
                            "Unable to send message." + str(error),
                            type="danger",
                            timeout=None)
                pass
Esempio n. 5
0
def sensor_value(sensor):
    print "SENSOR", sensor
    for idx, value in cbpi.cache["sensors"].iteritems():
        print value.__dict__
        if value.name.lower() == sensor:
            v = cbpi.get_sensor_value(value.id)
            speech_text = 'The sensor temperature is %s %s' % (
                v, value.instance.get_unit())
            return question(speech_text).reprompt(speech_text).simple_card(
                'Value Name', speech_text)

    speech_text = "I have notf found the sensor %s. Any further question?" % sensor
    return question(speech_text).reprompt(speech_text).simple_card(
        'Sensor Value', speech_text)
Esempio n. 6
0
def show_multidisplay(refresh):

    s = cbpi.cache.get("active_step")
    for idx, value in cbpi.cache["kettle"].iteritems():
        current_sensor_value = (cbpi.get_sensor_value(value.sensor))

        heater_of_kettle = int(cbpi.cache.get("kettle").get(value.id).heater)
        heater_status = int(
            cbpi.cache.get("actors").get(heater_of_kettle).state)

        line1 = (u'%s' % (s.name, ))[:20]

        #line2 when steptimer is runnig show remaining time and kettlename
        if s.timer_end is not None:
            time_remaining = time.strftime(
                u"%H:%M:%S", time.gmtime(s.timer_end - time.time()))
            line2 = ((u"%s %s" % (
                (value.name).ljust(12)[:11], time_remaining)).ljust(20)[:20])
        else:
            line2 = ((u'%s' % (value.name, ))[:20])

        #line3
        line3 = (u"Targ. Temp:%6.2f%s" % (float(value.target_temp),
                                          (u"°C")))[:20]

        #line4 needs errorhandling because there may be tempvalue without sensordates and so it is none and than an error is thrown
        try:
            line4 = (u"Curr. Temp:%6.2f%s" % (float(current_sensor_value),
                                              (u"°C")))[:20]
        except:
            cbpi.app.logger.info(
                "LCDDisplay  - current_sensor_value exception %s" %
                (current_sensor_value))
            line4 = (u"Curr. Temp: %s" % (("No Data")))[:20]

        lcd.clear()
        lcd.cursor_pos = (0, 0)
        lcd.write_string(line1)
        lcd.cursor_pos = (0, 19)
        if heater_status != 0:
            lcd.write_string(u"\x00")
        lcd.cursor_pos = (1, 0)
        lcd.write_string(line2)
        lcd.cursor_pos = (2, 0)
        lcd.write_string(line3)
        lcd.cursor_pos = (3, 0)
        lcd.write_string(line4)
        time.sleep(refresh)
    pass
Esempio n. 7
0
def kettle_value(kettle):
    print "KETTLE", kettle
    for idx, value in cbpi.cache["kettle"].iteritems():
        if value.name.lower() == kettle:
            v = cbpi.get_sensor_value(value.sensor)
            s = cbpi.cache["sensors"].get(int(value.sensor))
            speech_text = 'The Kettle Temperature of %s is %s %s' % (
                str(kettle), v, s.instance.get_unit())

            return question(speech_text).reprompt(speech_text).simple_card(
                'Kettle Value', speech_text)
            #return statement(speech_text).simple_card('Kettle Value', speech_text)

        speech_text = "I have not found the kettle %s. Any further question?" % kettle
    return question(speech_text).reprompt(speech_text).simple_card(
        'Kettle Value', speech_text)
Esempio n. 8
0
    def start_fermentation(self, id):
        #print "start_fermentation"
        active = None
        for idx, s in enumerate(cbpi.cache.get(self.cache_key)[id].steps):
            if s.state == 'A':
                active = s
                break

        inactive = None
        for idx, s in enumerate(cbpi.cache.get(self.cache_key)[id].steps):
            if s.state == 'I':
                inactive = s
                break

        if active is not None:

            active.state = 'D'
            active.end = time.time()
            FermenterStep.update(**active.__dict__)

            del cbpi.cache["fermenter_task"][id]

        if inactive is not None:
            fermenter = self.get_fermenter(inactive.fermenter_id)
            current_temp = cbpi.get_sensor_value(int(fermenter.sensor))

            inactive.state = 'A'
            inactive.start = time.time()

            if fermenter.cooler != '' and fermenter.heater != '':
                inactive.direction = "C" if current_temp >= inactive.temp else "H"
            elif fermenter.heater != '':
                inactive.direction = "H"
            elif fermenter.cooler != '':
                inactive.direction = "C"
            else:
                inactive.direction = "C" if current_temp >= inactive.temp else "H"
            FermenterStep.update(**inactive.__dict__)

            self.postTargetTemp(id, inactive.temp, inactive.start_temp,
                                inactive.stop_temp)

            #print "fermenter_task"
            cbpi.cache["fermenter_task"][id] = inactive

        cbpi.emit("UPDATE_FERMENTER", cbpi.cache.get(self.cache_key)[id])
        return ('', 204)
Esempio n. 9
0
    def execute(self):
        '''
        This method is execute in an interval
        :return:
        '''

        # Check if Target Temp is reached
        if cbpi.get_sensor_value(int(self.sensor)) >= float(self.temp):
            if self.is_timer_finished() is None:
                self.start_timer(int(self.timer) * 60)

        # Check if timer finished and go to next step
        if self.is_timer_finished() == True:
            self.notify("Mash Step Completed!",
                        "Starting the next step",
                        timeout=None)
            next(self)
Esempio n. 10
0
def update():
    s = cbpi.cache.get("active_step")
    text = "Here is your update. "
    if s is not None:
        text = text + 'The current step is %s . ' % (s.name, )

    else:
        text = text + 'There is no brewing process running .'
    text = text + "Now to the brewing kettles. "

    for idx, value in cbpi.cache["kettle"].iteritems():
        current_sensor_value = cbpi.get_sensor_value(value.sensor)
        text = text + "%s has set target temperature to %s and a current temperature of %s. " % (
            value.name, value.target_temp, current_sensor_value)

    text = text + "Any further question?"

    return question(text).reprompt(text).simple_card('CBP Update', text)
Esempio n. 11
0
def mqtt_pub(api):
    """
    background process that reads all passive sensors in interval of 5 second
    :return: None
    """

    for i, value in cbpi.cache['kettle'].items():
        topic = 'MQTTDevice/kettle/' + str(i)
        data = {
            'id': i,
            'he':
            cbpi.cache.get("actors").get(int(value.heater)).config["topic"],
            'te': cbpi.get_sensor_value(value.sensor),
            'tt': value.target_temp
        }
        api.cache["mqtt"].client.publish(topic,
                                         payload=json.dumps(
                                             data, ensure_ascii=False),
                                         qos=0,
                                         retain=False)
Esempio n. 12
0
    def check_step(self):
        for key, value in cbpi.cache["fermenter_task"].iteritems():
            try:
                fermenter = self.get_fermenter(key)
                current_temp = cbpi.get_sensor_value(int(fermenter.sensor))

                if value.timer_start is None:
                    #print "1 ....%s key %s  %s" % (fermenter.id,key,value.direction)
                    if value.direction == "H":
                        if current_temp >= value.temp:
                            if fermenter.shake == 0 or fermenter.shake is None:
                                fermenter.shake = fermenter.time()
                            else:
                                sub = time.time() - fermenter.shake
                                if int(sub) > 4:
                                    self.target_temp_reached(key, value)
                                    fermenter.shake = None
                        elif fermenter.shake is not None:
                            fermenter.shake = None
                    else:
                        if current_temp <= value.temp:
                            if fermenter.shake == 0 or fermenter.shake is None:
                                fermenter.shake = time.time()
                            else:
                                sub = time.time() - fermenter.shake
                                if int(sub) > 4:
                                    self.target_temp_reached(key, value)
                                    fermenter.shake = None
                        elif fermenter.shake is not None:
                            fermenter.shake = None

                else:
                    if time.time() >= value.timer_start:
                        if fermenter.shake is not None:
                            fermenter.shake = None
                        self.start_fermentation(key)
                    else:
                        pass
            except Exception as e:
                pass
Esempio n. 13
0
    def check_step(self):
        for key, value in cbpi.cache["fermenter_task"].iteritems():

            try:
                fermenter = self.get_fermenter(key)
                current_temp = current_temp = cbpi.get_sensor_value(int(fermenter.sensor))

                if value.timer_start is None:

                    if value.direction == "H" :

                        if current_temp >= value.temp:
                            self.target_temp_reached(key,value)
                    else:
                        if current_temp <= value.temp:
                            self.target_temp_reached(key, value)
                else:
                    if time.time() >= value.timer_start:
                        self.start_fermentation(key)
                    else:
                        pass
            except Exception as e:
                pass
Esempio n. 14
0
    def start_fermentation(self, id):
        active = None
        for idx, s in enumerate(cbpi.cache.get(self.cache_key)[id].steps):
            if s.state == 'A':
                active = s
                break

        inactive = None
        for idx, s in enumerate(cbpi.cache.get(self.cache_key)[id].steps):
            if s.state == 'I':
                inactive = s
                break

        if active is not None:

            active.state = 'D'
            active.end = time.time()
            FermenterStep.update(**active.__dict__)

            del cbpi.cache["fermenter_task"][id]

        if inactive is not None:
            fermenter = self.get_fermenter(inactive.fermenter_id)
            current_temp = cbpi.get_sensor_value(int(fermenter.sensor))

            inactive.state = 'A'
            inactive.start = time.time()
            inactive.direction = self.calculate_direction(fermenter, current_temp, inactive.temp)
            FermenterStep.update(**inactive.__dict__)

            self.postTargetTemp(id, inactive.temp)

            cbpi.cache["fermenter_task"][id] = inactive

        cbpi.emit("UPDATE_FERMENTER", cbpi.cache.get(self.cache_key)[id])
        return ('', 204)
Esempio n. 15
0
def show_fermentation_multidisplay(refresh):
    for idx, value in cbpi.cache["fermenter"].iteritems():
        current_sensor_value = (cbpi.get_sensor_value(value.sensor))
        #INFO value = modules.fermenter.Fermenter
        #INFO FermenterId = modules.fermenter.Fermenter.id

        #get the state of the heater of the current fermenter, if there is none, except takes place
        try:
            heater_of_fermenter = int(cbpi.cache.get("fermenter").get(value.id).heater)
            #cbpi.app.logger.info("LCDDisplay  - fheater id %s" % (heater_of_fermenter))

            fheater_status = int(cbpi.cache.get("actors").get(heater_of_fermenter).state)
            #cbpi.app.logger.info("LCDDisplay  - fheater status (0=off, 1=on) %s" % (fheater_status))
        except:
            fheater_status = 0

        #get the state of the cooler of the current fermenter, if there is none, except takes place
               
        try:
            cooler_of_fermenter = int(cbpi.cache.get("fermenter").get(value.id).cooler)
            #cbpi.app.logger.info("LCDDisplay  - fcooler id %s" % (cooler_of_fermenter))

            fcooler_status = int(cbpi.cache.get("actors").get(cooler_of_fermenter).state)
            #cbpi.app.logger.info("LCDDisplay  - fcooler status (0=off, 1=on) %s" % (fcooler_status))
        except:
            fcooler_status = 0
        pass

        line1 = (u'%s' % (value.brewname,))[:20]
     
        #line2
        z = 0
        for key, value1 in cbpi.cache["fermenter_task"].iteritems():
            #INFO value1 = modules.fermenter.FermenterStep
            #cbpi.app.logger.info("LCDDisplay  - value1 %s" % (value1.fermenter_id))
            if value1.timer_start is not None and value1.fermenter_id == value.id:
                line2 = interval(value.name,(value1.timer_start- time.time()))
                z = 1
            elif z == 0:
                line2 = (u'%s' % (value.name,))[:20]
            pass
        
        #line3    
        line3 = (u"Targ. Temp:%6.2f%s" % (float(value.target_temp),(u"°C")))[:20]
        
        #line4 needs errorhandling because there may be tempvalue without sensordates and so it is none and than an error is thrown
        try:
            line4 = (u"Curr. Temp:%6.2f%s" % (float(current_sensor_value),(u"°C")))[:20]
        except:
            cbpi.app.logger.info("LCDDisplay  - fermentmode current_sensor_value exception %s" % (current_sensor_value))
            line4 = (u"Curr. Temp: %s" % (("No Data")))[:20]
        pass

        lcd.clear()
        lcd.cursor_pos = (0, 0)
        lcd.write_string(line1)
        lcd.cursor_pos = (0,19)
        if fheater_status != 0:
            lcd.write_string(u"\x00")           
        if fcooler_status != 0:
            lcd.write_string(u"\x01")       
        lcd.cursor_pos = (1, 0)
        lcd.write_string(line2)
        lcd.cursor_pos = (2, 0)
        lcd.write_string(line3)
        lcd.cursor_pos = (3, 0)
        lcd.write_string(line4)

        time.sleep(refresh)
Esempio n. 16
0
 def get_kettle_temp(self, id=None):
     id = int(id)
     if id is None:
         id = self.kettle_id
     return cbpi.get_sensor_value(
         int(self.api.cache.get("kettle").get(id).sensor))
Esempio n. 17
0
 def get_sensor_value(self, id):
     return cbpi.get_sensor_value(id)
Esempio n. 18
0
    def get_sensor_value(self, id=None):

        if id is None:
            id = self.sensor

        return cbpi.get_sensor_value(id)
Esempio n. 19
0
    def execute(self):
        '''
        This method is execute in an interval
        :return: 
        '''
        sensorValue1 = cbpi.get_sensor_value(int(self.sensor1))
        sensorValue2 = cbpi.get_sensor_value(int(self.sensor2))
        volumeChange1 = float(sensorValue1) - float(self.volumeState1)
        volumeChange2 = float(self.volumeState2) - float(sensorValue2)
        kettle1_state = cbpi.cache.get("kettle")[int(self.kettle1)].state
        kettle2_state = cbpi.cache.get("kettle")[int(self.kettle2)].state

        for key, value in cbpi.cache["actors"].iteritems():
            if key == int(self.actor1):
                actorState1 = value.state
            if key == int(self.actor2):
                actorState2 = value.state

        if float(sensorValue1) >= float(
                self.volumeBoil) and kettle1_state is False:
            Kettle2View().toggle(int(self.kettle1))
            self.notify("Kettle Update", "Kettle 1 Auto is on.", timeout=None)
            self.set_target_temp(self.temp, self.kettle1)

        # Check if kettle2 volume limit reached
        if float(sensorValue2) <= float(self.volume2):
            if kettle2_state is True:
                self.set_target_temp(0, self.kettle2)
                Kettle2View().toggle(int(self.kettle2))
                self.notify("Kettle Update",
                            "Kettle 2 Auto is off.",
                            timeout=None)
            if self.is_timer_finished() is None:
                self.start_timer(int(self.timer) * 60)
            # Make sure kettle1 hasn't reached target
            if float(sensorValue1) < float(self.volume1):
                self.actor_on(int(self.actor1))
                if self.is_timer_finished() == True:
                    self.actor_off(int(self.actor2))
                else:
                    self.actor_on(int(self.actor2))
        else:
            if self.volumeState1 > 0:
                totalDiff = float(volumeChange2) - float(volumeChange1)
                if totalDiff > 0:
                    if abs(totalDiff) > float(self.volumeDiff):
                        self.actor_off(int(self.actor2))
                        self.actor_on(int(self.actor1))
                    else:
                        self.actor_on(int(self.actor2))
                else:
                    if abs(totalDiff) > float(self.volumeDiff):
                        self.actor_off(int(self.actor1))
                        self.actor_on(int(self.actor2))
                    else:
                        self.actor_on(int(self.actor1))
            else:
                if volumeChange >= 10:
                    self.volumeState2 = sensorValue2
                    self.volumeState1 = sensorValue1

        # Check if kettle1 target volume has been reached
        if float(sensorValue1) >= float(self.volume1):
            self.set_target_temp(0, self.kettle2)
            self.stop_timer()
            self.start_timer(0)
            self.notify("Sparge Complete!",
                        "Starting the next step.",
                        timeout=None)
            self.next()
Esempio n. 20
0
def currentfermtemp(fermid):
    # read the current temperature of fermenter with fermenter ID from parameters
    current_sensor_value_ferm = (cbpi.get_sensor_value(int(cbpi.cache.get("fermenter").get(fermid).sensor)))
    if DEBUG: cbpi.app.logger.info('NextionDisplay  - currentfermtemp.txt:%s' % current_sensor_value_ferm)
    return current_sensor_value_ferm
Esempio n. 21
0
def Temp(kkid):
    # if DEBUG: cbpi.app.logger.info("NEXTIONDisplay  - Temp detect")
    current_sensor_value_id3 = (cbpi.get_sensor_value(int(cbpi.cache.get("kettle").get(int(kkid)).sensor)))
    curTemp = ("%6.2f" % (float(current_sensor_value_id3)))
    # if DEBUG: cbpi.app.logger.info("NEXTIONDisplay  - Temp: %s" % (curTemp))
    return curTemp
Esempio n. 22
0
def femTemp(femid):
    # cbpi.app.logger.info("TFTDisplay  - ferm Temp ermitteln")
    current_sensor_value_femid = (cbpi.get_sensor_value(int(cbpi.cache.get("fermenter").get(int(femid)).sensor)))
    curfemTemp = ("%6.2f" % (float(current_sensor_value_femid)))
    # cbpi.app.logger.info("TFTDisplay  - FermTemp: %s" % (curfemTemp))
    return curfemTemp
Esempio n. 23
0
def Temp(kkid):
    # cbpi.app.logger.info("TFTDisplay  - Temp ermitteln")
    current_sensor_value_id3 = (cbpi.get_sensor_value(int(cbpi.cache.get("kettle").get(int(kkid)).sensor)))
    curTemp = ("%6.2f" % (float(current_sensor_value_id3)))
    # cbpi.app.logger.info("TFTDisplay  - Temp: %s" % (curTemp))
    return curTemp