Added Hop alarms to boil step

This commit is contained in:
avollkopf 2021-03-30 21:00:17 +02:00
parent 06bc69b367
commit 5cb0ce76de

View file

@ -3,6 +3,10 @@ import asyncio
from cbpi.api import parameters, Property, action from cbpi.api import parameters, Property, action
from cbpi.api.step import StepResult, CBPiStep from cbpi.api.step import StepResult, CBPiStep
from cbpi.api.timer import Timer from cbpi.api.timer import Timer
from datetime import datetime
import time
from voluptuous.schema_builder import message
from cbpi.api.dataclasses import NotificationAction, NotificationType
@parameters([Property.Number(label="Timer", description="Time in Minutes", configurable=True), @parameters([Property.Number(label="Timer", description="Time in Minutes", configurable=True),
@ -115,20 +119,51 @@ class ActorStep(CBPiStep):
return StepResult.DONE return StepResult.DONE
@parameters([Property.Number(label="Timer", description="Time in Minutes", configurable=True), @parameters([Property.Number(label="Timer", description="Time in Minutes", configurable=True),
Property.Number(label="Temp", description="Boil temperature", configurable=True), Property.Number(label="Temp", description="Boil temperature", configurable=True),
Property.Sensor(label="Sensor"), Property.Sensor(label="Sensor"),
Property.Kettle(label="Kettle")]) Property.Kettle(label="Kettle"),
Property.Select("First_Wort", options=["Yes","No"], description="First Wort Hop alert if set to Yes"),
Property.Number("Hop_1", configurable = True, description="First Hop alert (minutes before finish)"),
Property.Number("Hop_2", configurable=True, description="Second Hop alert (minutes before finish)"),
Property.Number("Hop_3", configurable=True, description="Third Hop alert (minutes before finish)"),
Property.Number("Hop_4", configurable=True, description="Fourth Hop alert (minutes before finish)"),
Property.Number("Hop_5", configurable=True, description="Fifth Hop alert (minutes before finish)"),
Property.Number("Hop_6", configurable=True, description="Sixth Hop alert (minutes before finish)")])
class BoilStep(CBPiStep): class BoilStep(CBPiStep):
@action("Start Timer", [])
async def start_timer(self):
if self.timer.is_running == None:
self.cbpi.notify(self.name, 'Timer started', NotificationType.INFO)
self.timer.start()
else:
self.cbpi.notify(self.name, 'Timer is already running', NotificationType.WARNING)
@action("Add 5 Minutes to Timer", [])
async def add_timer(self):
if self.timer.is_running != None:
self.cbpi.notify(self.name, '5 Minutes added', NotificationType.INFO)
await self.timer.add(300)
else:
self.cbpi.notify(self.name, 'Timer must be running to add time', NotificationType.WARNING)
async def on_timer_done(self, timer): async def on_timer_done(self, timer):
self.summary = "" self.summary = ""
await self.next() await self.next()
async def on_timer_update(self, timer, seconds): async def on_timer_update(self, timer, seconds):
self.summary = Timer.format_time(seconds) self.summary = Timer.format_time(seconds)
self.remaining_seconds = seconds
await self.push_update() await self.push_update()
async def check_hop_timer(self, number, value):
if value is not None and value != '' and self.hops_added[number-1] is not True:
if self.remaining_seconds != None and self.remaining_seconds <= (int(value) * 60 + 1):
self.hops_added[number-1]= True
self.cbpi.notify('Hop Alert', "Please add Hop %s" % number, NotificationType.INFO)
async def on_start(self): async def on_start(self):
if self.timer is None: if self.timer is None:
self.timer = Timer(int(self.props.Timer) * 60, on_update=self.on_timer_update, on_done=self.on_timer_done) self.timer = Timer(int(self.props.Timer) * 60, on_update=self.on_timer_update, on_done=self.on_timer_done)
@ -136,6 +171,10 @@ class BoilStep(CBPiStep):
await self.cbpi.kettle.set_target_temp(self.props.Kettle, int(self.props.Temp)) await self.cbpi.kettle.set_target_temp(self.props.Kettle, int(self.props.Temp))
self.summary = "Waiting for Target Temp" self.summary = "Waiting for Target Temp"
await self.push_update() await self.push_update()
self.first_wort_hop_flag = False
self.first_wort_hop=self.props.First_Wort
self.hops_added=["","","","","",""]
self.remaining_seconds = None
async def on_stop(self): async def on_stop(self):
await self.timer.stop() await self.timer.stop()
@ -145,18 +184,28 @@ class BoilStep(CBPiStep):
async def reset(self): async def reset(self):
self.timer = Timer(int(self.props.Timer) * 60, on_update=self.on_timer_update, on_done=self.on_timer_done) self.timer = Timer(int(self.props.Timer) * 60, on_update=self.on_timer_update, on_done=self.on_timer_done)
@action("Start Timer", [])
async def star_timer(self):
self.timer.start()
async def run(self): async def run(self):
if self.first_wort_hop_flag == False and self.first_wort_hop == "Yes":
self.first_wort_hop_flag = True
self.cbpi.notify('First Wort Hop Addition!', 'Please add hops for first wort', NotificationType.INFO)
while self.running == True: while self.running == True:
await asyncio.sleep(1) await asyncio.sleep(1)
sensor_value = self.get_sensor_value(self.props.Sensor) sensor_value = self.get_sensor_value(self.props.Sensor)
if sensor_value.get("value") >= int(self.props.Temp) and self.timer.is_running is not True: if sensor_value.get("value") >= int(self.props.Temp) and self.timer.is_running is not True:
self.timer.start() self.timer.start()
estimated_completion_time = datetime.fromtimestamp(time.time()+ (int(self.props.Timer))*60)
self.cbpi.notify(self.name, 'Timer started. Estimated completion: {}'.format(estimated_completion_time.strftime("%H:%M")), NotificationType.INFO)
self.timer.is_running = True self.timer.is_running = True
else:
await self.check_hop_timer(1, self.props.Hop_1)
await self.check_hop_timer(2, self.props.Hop_2)
await self.check_hop_timer(3, self.props.Hop_3)
await self.check_hop_timer(4, self.props.Hop_4)
await self.check_hop_timer(5, self.props.Hop_5)
await self.check_hop_timer(6, self.props.Hop_6)
return StepResult.DONE return StepResult.DONE