diff --git a/modules/base_plugins/brew_steps/__init__.py b/modules/base_plugins/brew_steps/__init__.py index 177ff46..c3dbd9f 100644 --- a/modules/base_plugins/brew_steps/__init__.py +++ b/modules/base_plugins/brew_steps/__init__.py @@ -1,221 +1,229 @@ -# -*- coding: utf-8 -*- -import time - - -from modules.core.props import Property, StepProperty -from modules.core.step import StepBase -from modules import cbpi - - - -@cbpi.step -class MashStep(StepBase): - ''' - Just put the decorator @cbpi.step on top of a method - ''' - # Properties - temp = Property.Number("Temperature", configurable=True, description="Target Temperature of Mash Step") - kettle = StepProperty.Kettle("Kettle", description="Kettle in which the mashing takes place") - timer = Property.Number("Timer in Minutes", configurable=True, description="Timer is started when the target temperature is reached") - - def init(self): - ''' - Initialize Step. This method is called once at the beginning of the step - :return: - ''' - # set target tep - self.set_target_temp(self.temp, self.kettle) - - @cbpi.action("Start Timer Now") - def start(self): - ''' - Custom Action which can be execute form the brewing dashboard. - All method with decorator @cbpi.action("YOUR CUSTOM NAME") will be available in the user interface - :return: - ''' - if self.is_timer_finished() is None: - self.start_timer(int(self.timer) * 60) - - def reset(self): - self.stop_timer() - self.set_target_temp(self.temp, self.kettle) - - def finish(self): - self.set_target_temp(0, self.kettle) - - def execute(self): - ''' - This method is execute in an interval - :return: - ''' - - # Check if Target Temp is reached - if self.get_kettle_temp(self.kettle) >= float(self.temp): - # Check if Timer is Running - 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.next() - - -@cbpi.step -class MashInStep(StepBase): - ''' - Just put the decorator @cbpi.step on top of a method - ''' - # Properties - temp = Property.Number("Temperature", configurable=True, description="Target Temperature of Mash Step") - kettle = StepProperty.Kettle("Kettle", description="Kettle in which the mashing takes place") - s = False - - @cbpi.action("Change Power") - def change_power(self): - self.actor_power(1, 50) - - def init(self): - ''' - Initialize Step. This method is called once at the beginning of the step - :return: - ''' - # set target tep - self.s = False - self.set_target_temp(self.temp, self.kettle) - - - - def execute(self): - ''' - This method is execute in an interval - :return: - ''' - - # Check if Target Temp is reached - if self.get_kettle_temp(self.kettle) >= float(self.temp) and self.s is False: - self.s = True - self.notify("Step Temp Reached!", "Please press the next button to continue", timeout=None) - - - -@cbpi.step -class ChilStep(StepBase): - - timer = Property.Number("Timer in Minutes", configurable=True, default_value=0, description="Timer is started immediately") - - @cbpi.action("Stat Timer") - def start(self): - if self.is_timer_finished() is None: - self.start_timer(int(self.timer) * 60) - - def reset(self): - self.stop_timer() - - - def finish(self): - pass - - def execute(self): - if self.is_timer_finished() is None: - self.start_timer(int(self.timer) * 60) - - if self.is_timer_finished() == True: - self.next() - -@cbpi.step -class PumpStep(StepBase): - - pump = StepProperty.Actor("Pump", description="Pump actor gets toogled") - timer = Property.Number("Timer in Minutes", configurable=True, default_value=0, description="Timer is started immediately") - - @cbpi.action("Stat Timer") - def start(self): - if self.is_timer_finished() is None: - self.start_timer(int(self.timer) * 60) - - def reset(self): - self.stop_timer() - - - def finish(self): - self.actor_off(int(self.pump)) - - def init(self): - self.actor_on(int(self.pump)) - - def execute(self): - if self.is_timer_finished() is None: - self.start_timer(int(self.timer) * 60) - - if self.is_timer_finished() == True: - self.next() - -@cbpi.step -class BoilStep(StepBase): - ''' - Just put the decorator @cbpi.step on top of a method - ''' - # Properties - temp = Property.Number("Temperature", configurable=True, default_value=100, description="Target temperature for boiling") - kettle = StepProperty.Kettle("Kettle", description="Kettle in which the boiling step takes place") - timer = Property.Number("Timer in Minutes", configurable=True, default_value=90, description="Timer is started when target temperature is reached") - hop_1 = Property.Number("Hop 1 Addition", configurable=True, description="Fist Hop alert") - hop_1_added = Property.Number("",default_value=None) - hop_2 = Property.Number("Hop 2 Addition", configurable=True, description="Second Hop alert") - hop_2_added = Property.Number("", default_value=None) - hop_3 = Property.Number("Hop 3 Addition", configurable=True) - hop_3_added = Property.Number("", default_value=None, description="Second Hop alert") - - def init(self): - ''' - Initialize Step. This method is called once at the beginning of the step - :return: - ''' - # set target tep - self.set_target_temp(self.temp, self.kettle) - - - - - @cbpi.action("Start Timer Now") - def start(self): - ''' - Custom Action which can be execute form the brewing dashboard. - All method with decorator @cbpi.action("YOUR CUSTOM NAME") will be available in the user interface - :return: - ''' - if self.is_timer_finished() is None: - self.start_timer(int(self.timer) * 60) - - def reset(self): - self.stop_timer() - self.set_target_temp(self.temp, self.kettle) - - def finish(self): - self.set_target_temp(0, self.kettle) - - - def check_hop_timer(self, number, value): - - if self.__getattribute__("hop_%s_added" % number) is not True and time.time() > ( - self.timer_end - (int(self.timer) * 60 - int(value) * 60)): - self.__setattr__("hop_%s_added" % number, True) - self.notify("Hop Alert", "Please add Hop %s" % number, timeout=None) - - def execute(self): - ''' - This method is execute in an interval - :return: - ''' - # Check if Target Temp is reached - if self.get_kettle_temp(self.kettle) >= float(self.temp): - # Check if Timer is Running - if self.is_timer_finished() is None: - self.start_timer(int(self.timer) * 60) - else: - self.check_hop_timer(1, self.hop_1) - self.check_hop_timer(2, self.hop_2) - self.check_hop_timer(3, self.hop_3) - # Check if timer finished and go to next step - if self.is_timer_finished() == True: - self.next() +# -*- coding: utf-8 -*- +import time + + +from modules.core.props import Property, StepProperty +from modules.core.step import StepBase +from modules import cbpi + + +@cbpi.step +class MashStep(StepBase): + ''' + Just put the decorator @cbpi.step on top of a method + ''' + # Properties + temp = Property.Number("Temperature", configurable=True, description="Target Temperature of Mash Step") + kettle = StepProperty.Kettle("Kettle", description="Kettle in which the mashing takes place") + timer = Property.Number("Timer in Minutes", configurable=True, description="Timer is started when the target temperature is reached") + + def init(self): + ''' + Initialize Step. This method is called once at the beginning of the step + :return: + ''' + # set target tep + self.set_target_temp(self.temp, self.kettle) + + @cbpi.action("Start Timer Now") + def start(self): + ''' + Custom Action which can be execute form the brewing dashboard. + All method with decorator @cbpi.action("YOUR CUSTOM NAME") will be available in the user interface + :return: + ''' + if self.is_timer_finished() is None: + self.start_timer(int(self.timer) * 60) + + def reset(self): + self.stop_timer() + self.set_target_temp(self.temp, self.kettle) + + def finish(self): + self.set_target_temp(0, self.kettle) + + def execute(self): + ''' + This method is execute in an interval + :return: + ''' + + # Check if Target Temp is reached + if self.get_kettle_temp(self.kettle) >= float(self.temp): + # Check if Timer is Running + 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: + # if you dont want a beep sound comment out like : # cbpi.MashStepEndBeep() + cbpi.MashStepEndBeep() + self.next() + + +@cbpi.step +class MashInStep(StepBase): + ''' + Just put the decorator @cbpi.step on top of a method + ''' + # Properties + temp = Property.Number("Temperature", configurable=True, description="Target Temperature of Mash Step") + kettle = StepProperty.Kettle("Kettle", description="Kettle in which the mashing takes place") + s = False + + @cbpi.action("Change Power") + def change_power(self): + self.actor_power(1, 50) + + def init(self): + ''' + Initialize Step. This method is called once at the beginning of the step + :return: + ''' + # set target tep + self.s = False + self.set_target_temp(self.temp, self.kettle) + + + + def execute(self): + ''' + This method is execute in an interval + :return: + ''' + + # Check if Target Temp is reached + if self.get_kettle_temp(self.kettle) >= float(self.temp) and self.s is False: + self.s = True + self.notify("Step Temp Reached!", "Please press the next button to continue", timeout=None) + # if you dont want a beep sound comment out like : # cbpi.MashInStepEndBeep() + cbpi.MashInStepEndBeep() + + +@cbpi.step +class ChilStep(StepBase): + + timer = Property.Number("Timer in Minutes", configurable=True, default_value=0, description="Timer is started immediately") + + @cbpi.action("Stat Timer") + def start(self): + if self.is_timer_finished() is None: + self.start_timer(int(self.timer) * 60) + + def reset(self): + self.stop_timer() + + + def finish(self): + pass + + def execute(self): + if self.is_timer_finished() is None: + self.start_timer(int(self.timer) * 60) + + if self.is_timer_finished() == True: + # if you dont want a beep sound comment out like : # cbpi.ChilStepEndBeep() + cbpi.ChilStepEndBeep() + self.next() + +@cbpi.step +class PumpStep(StepBase): + + pump = StepProperty.Actor("Pump", description="Pump actor gets toogled") + timer = Property.Number("Timer in Minutes", configurable=True, default_value=0, description="Timer is started immediately") + + @cbpi.action("Stat Timer") + def start(self): + if self.is_timer_finished() is None: + self.start_timer(int(self.timer) * 60) + + def reset(self): + self.stop_timer() + + + def finish(self): + self.actor_off(int(self.pump)) + + def init(self): + self.actor_on(int(self.pump)) + + def execute(self): + if self.is_timer_finished() is None: + self.start_timer(int(self.timer) * 60) + + if self.is_timer_finished() == True: + # if you dont want a beep sound comment out like : # cbpi.PumpStepEndBeep() + cbpi.PumpStepEndBeep() + self.next() + +@cbpi.step +class BoilStep(StepBase): + ''' + Just put the decorator @cbpi.step on top of a method + ''' + # Properties + temp = Property.Number("Temperature", configurable=True, default_value=100, description="Target temperature for boiling") + kettle = StepProperty.Kettle("Kettle", description="Kettle in which the boiling step takes place") + timer = Property.Number("Timer in Minutes", configurable=True, default_value=90, description="Timer is started when target temperature is reached") + hop_1 = Property.Number("Hop 1 Addition", configurable=True, description="Fist Hop alert") + hop_1_added = Property.Number("",default_value=None) + hop_2 = Property.Number("Hop 2 Addition", configurable=True, description="Second Hop alert") + hop_2_added = Property.Number("", default_value=None) + hop_3 = Property.Number("Hop 3 Addition", configurable=True) + hop_3_added = Property.Number("", default_value=None, description="Second Hop alert") + + def init(self): + ''' + Initialize Step. This method is called once at the beginning of the step + :return: + ''' + # set target tep + self.set_target_temp(self.temp, self.kettle) + + + + + @cbpi.action("Start Timer Now") + def start(self): + ''' + Custom Action which can be execute form the brewing dashboard. + All method with decorator @cbpi.action("YOUR CUSTOM NAME") will be available in the user interface + :return: + ''' + if self.is_timer_finished() is None: + self.start_timer(int(self.timer) * 60) + + def reset(self): + self.stop_timer() + self.set_target_temp(self.temp, self.kettle) + + def finish(self): + self.set_target_temp(0, self.kettle) + + + def check_hop_timer(self, number, value): + + if self.__getattribute__("hop_%s_added" % number) is not True and time.time() > ( + self.timer_end - (int(self.timer) * 60 - int(value) * 60)): + self.__setattr__("hop_%s_added" % number, True) + self.notify("Hop Alert", "Please add Hop %s" % number, timeout=None) + + def execute(self): + ''' + This method is execute in an interval + :return: + ''' + # Check if Target Temp is reached + if self.get_kettle_temp(self.kettle) >= float(self.temp): + # Check if Timer is Running + if self.is_timer_finished() is None: + self.start_timer(int(self.timer) * 60) + else: + self.check_hop_timer(1, self.hop_1) + self.check_hop_timer(2, self.hop_2) + self.check_hop_timer(3, self.hop_3) + # Check if timer finished and go to next step + if self.is_timer_finished() == True: + # if you dont want a beep sound comment out like : # cbpi.BoilStepEndBeep() + cbpi.BoilStepEndBeep() + self.next()