| @@ -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() | |||||