mirror of
https://github.com/Manuel83/craftbeerpi3
synced 2026-09-19 07:49:08 +02:00
@@ -85,6 +85,7 @@ INSERT OR IGNORE INTO config VALUES ('sensor_cols', 4, 'select', 'Adjust the wid
|
|||||||
INSERT OR IGNORE INTO config VALUES ('unit', 'C', 'select', 'Temperature Unit', '["C","F"]');
|
INSERT OR IGNORE INTO config VALUES ('unit', 'C', 'select', 'Temperature Unit', '["C","F"]');
|
||||||
INSERT OR IGNORE INTO config VALUES ('brewery_name', 'My Home Brewery', 'text', 'Your brewery name', NULL );
|
INSERT OR IGNORE INTO config VALUES ('brewery_name', 'My Home Brewery', 'text', 'Your brewery name', NULL );
|
||||||
INSERT OR IGNORE INTO config VALUES ('buzzer', 16, 'select', 'Buzzer GPIO', '[16,17,18,19,20]');
|
INSERT OR IGNORE INTO config VALUES ('buzzer', 16, 'select', 'Buzzer GPIO', '[16,17,18,19,20]');
|
||||||
|
INSERT OR IGNORE INTO config VALUES ('buzzer_beep_level', 'HIGH', 'select', 'Buzzer Logic Beep Level', '["HIGH", "LOW"]');
|
||||||
INSERT OR IGNORE INTO config VALUES ('setup', 'YES', 'select', 'Show the Setup dialog', '["YES","NO"]');
|
INSERT OR IGNORE INTO config VALUES ('setup', 'YES', 'select', 'Show the Setup dialog', '["YES","NO"]');
|
||||||
INSERT OR IGNORE INTO config VALUES ('brew_name', '', 'text', 'Brew Name', NULL);
|
INSERT OR IGNORE INTO config VALUES ('brew_name', '', 'text', 'Brew Name', NULL);
|
||||||
INSERT OR IGNORE INTO config VALUES ('donation_notification', 'YES', 'select', 'Disable Donation Notification', '["YES","NO"]');
|
INSERT OR IGNORE INTO config VALUES ('donation_notification', 'YES', 'select', 'Disable Donation Notification', '["YES","NO"]');
|
||||||
|
|||||||
+13
-1
@@ -19,7 +19,8 @@ show_menu () {
|
|||||||
"7" "Software Update (git pull)" \
|
"7" "Software Update (git pull)" \
|
||||||
"8" "Reset File Changes (git reset --hard)" \
|
"8" "Reset File Changes (git reset --hard)" \
|
||||||
"9" "Clear all logs" \
|
"9" "Clear all logs" \
|
||||||
"10" "Reboot Raspberry Pi" 3>&1 1>&2 2>&3)
|
"10" "Reboot Raspberry Pi" \
|
||||||
|
"11" "Stop CraftBeerPi, Clear logs, Start CraftBeerPi" 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
BUTTON=$?
|
BUTTON=$?
|
||||||
# Exit if user pressed cancel or escape
|
# Exit if user pressed cancel or escape
|
||||||
@@ -143,6 +144,17 @@ show_menu () {
|
|||||||
show_menu
|
show_menu
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
11)
|
||||||
|
confirmAnswer "Are you sure you want to reboot CraftBeerPi and delete all log files?"
|
||||||
|
if [ $? = 0 ]; then
|
||||||
|
sudo /etc/init.d/craftbeerpiboot stop
|
||||||
|
sudo rm -rf logs/*.log
|
||||||
|
sudo /etc/init.d/craftbeerpiboot start
|
||||||
|
show_menu
|
||||||
|
else
|
||||||
|
show_menu
|
||||||
|
fi
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -160,18 +160,16 @@ class BoilStep(StepBase):
|
|||||||
temp = Property.Number("Temperature", configurable=True, default_value=100, description="Target temperature for boiling")
|
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")
|
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")
|
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="First Hop alert")
|
hop_1 = Property.Number("Hop 1 Addition", configurable=True, description="Fist Hop alert")
|
||||||
hop_1_added = Property.Number("",default_value=None)
|
hop_1_added = Property.Number("",default_value=None)
|
||||||
hop_2 = Property.Number("Hop 2 Addition", configurable=True, description="Second Hop alert")
|
hop_2 = Property.Number("Hop 2 Addition", configurable=True, description="Second Hop alert")
|
||||||
hop_2_added = Property.Number("", default_value=None)
|
hop_2_added = Property.Number("", default_value=None)
|
||||||
hop_3 = Property.Number("Hop 3 Addition", configurable=True, description="Third Hop alert")
|
hop_3 = Property.Number("Hop 3 Addition", configurable=True)
|
||||||
hop_3_added = Property.Number("", default_value=None)
|
hop_3_added = Property.Number("", default_value=None, description="Third Hop alert")
|
||||||
hop_4 = Property.Number("Hop 4 Addition", configurable=True, description="Fourth Hop alert")
|
hop_4 = Property.Number("Hop 4 Addition", configurable=True)
|
||||||
hop_4_added = Property.Number("", default_value=None)
|
hop_4_added = Property.Number("", default_value=None, description="Fourth Hop alert")
|
||||||
hop_5 = Property.Number("Hop 5 Addition", configurable=True, description="Fifth Hop alert")
|
hop_5 = Property.Number("Hop 5 Addition", configurable=True)
|
||||||
hop_5_added = Property.Number("", default_value=None)
|
hop_5_added = Property.Number("", default_value=None, description="Fives Hop alert")
|
||||||
fining = Property.Number("Fining Addition", configurable=True, default_value=15)
|
|
||||||
fining_added = Property.Number("",default_value=None, description="Fining Agent Alert")
|
|
||||||
|
|
||||||
def init(self):
|
def init(self):
|
||||||
'''
|
'''
|
||||||
@@ -204,18 +202,11 @@ class BoilStep(StepBase):
|
|||||||
|
|
||||||
def check_hop_timer(self, number, value):
|
def check_hop_timer(self, number, value):
|
||||||
|
|
||||||
if self.__getattribute__("hop_%s_added" % number) is not True and (int(value) * 60) == (
|
if self.__getattribute__("hop_%s_added" % number) is not True and time.time() > (
|
||||||
self.timer_end - int(time.time())):
|
self.timer_end - (int(self.timer) * 60 - int(value) * 60)):
|
||||||
self.__setattr__("hop_%s_added" % number, True)
|
self.__setattr__("hop_%s_added" % number, True)
|
||||||
self.notify("Hop Alert", "Please add Hop %s" % number, timeout=None)
|
self.notify("Hop Alert", "Please add Hop %s" % number, timeout=None)
|
||||||
|
|
||||||
def check_fining_timer(self, value):
|
|
||||||
|
|
||||||
if self.__getattribute__("fining_added") is not True and (int(value) * 60) == (
|
|
||||||
self.timer_end - int(time.time())):
|
|
||||||
self.__setattr__("fining_added", True)
|
|
||||||
self.notify("Fining Alert", "Please add fining agent", timeout=None)
|
|
||||||
|
|
||||||
def execute(self):
|
def execute(self):
|
||||||
'''
|
'''
|
||||||
This method is execute in an interval
|
This method is execute in an interval
|
||||||
@@ -225,7 +216,6 @@ class BoilStep(StepBase):
|
|||||||
if self.get_kettle_temp(self.kettle) >= float(self.temp):
|
if self.get_kettle_temp(self.kettle) >= float(self.temp):
|
||||||
# Check if Timer is Running
|
# Check if Timer is Running
|
||||||
if self.is_timer_finished() is None:
|
if self.is_timer_finished() is None:
|
||||||
self.notify("Boil Temp Reached", "Starting the boil timer")
|
|
||||||
self.start_timer(int(self.timer) * 60)
|
self.start_timer(int(self.timer) * 60)
|
||||||
else:
|
else:
|
||||||
self.check_hop_timer(1, self.hop_1)
|
self.check_hop_timer(1, self.hop_1)
|
||||||
@@ -233,8 +223,6 @@ class BoilStep(StepBase):
|
|||||||
self.check_hop_timer(3, self.hop_3)
|
self.check_hop_timer(3, self.hop_3)
|
||||||
self.check_hop_timer(4, self.hop_4)
|
self.check_hop_timer(4, self.hop_4)
|
||||||
self.check_hop_timer(5, self.hop_5)
|
self.check_hop_timer(5, self.hop_5)
|
||||||
self.check_fining_timer(self.fining)
|
|
||||||
|
|
||||||
# Check if timer finished and go to next step
|
# Check if timer finished and go to next step
|
||||||
if self.is_timer_finished() == True:
|
if self.is_timer_finished() == True:
|
||||||
self.notify("Boil Step Completed!", "Starting the next step", timeout=None)
|
self.notify("Boil Step Completed!", "Starting the next step", timeout=None)
|
||||||
|
|||||||
@@ -10,10 +10,11 @@ except Exception as e:
|
|||||||
class Buzzer(object):
|
class Buzzer(object):
|
||||||
|
|
||||||
sound = ["H", 0.1, "L", 0.1, "H", 0.1, "L", 0.1, "H", 0.1, "L"]
|
sound = ["H", 0.1, "L", 0.1, "H", 0.1, "L", 0.1, "H", 0.1, "L"]
|
||||||
def __init__(self, gpio):
|
def __init__(self, gpio, beep_level):
|
||||||
try:
|
try:
|
||||||
cbpi.app.logger.info("INIT BUZZER NOW GPIO%s" % gpio)
|
cbpi.app.logger.info("INIT BUZZER NOW GPIO%s" % gpio)
|
||||||
self.gpio = int(gpio)
|
self.gpio = int(gpio)
|
||||||
|
self.beep_level = beep_level
|
||||||
GPIO.setmode(GPIO.BCM)
|
GPIO.setmode(GPIO.BCM)
|
||||||
GPIO.setup(self.gpio, GPIO.OUT)
|
GPIO.setup(self.gpio, GPIO.OUT)
|
||||||
self.state = True
|
self.state = True
|
||||||
@@ -31,10 +32,14 @@ class Buzzer(object):
|
|||||||
try:
|
try:
|
||||||
for i in sound:
|
for i in sound:
|
||||||
if (isinstance(i, str)):
|
if (isinstance(i, str)):
|
||||||
if i == "H":
|
if i == "H" and self.beep_level == "HIGH":
|
||||||
GPIO.output(int(self.gpio), GPIO.HIGH)
|
GPIO.output(int(self.gpio), GPIO.HIGH)
|
||||||
else:
|
elif i == "H" and self.beep_level != "HIGH":
|
||||||
GPIO.output(int(self.gpio), GPIO.LOW)
|
GPIO.output(int(self.gpio), GPIO.LOW)
|
||||||
|
elif i == "L" and self.beep_level == "HIGH":
|
||||||
|
GPIO.output(int(self.gpio), GPIO.LOW)
|
||||||
|
else:
|
||||||
|
GPIO.output(int(self.gpio), GPIO.HIGH)
|
||||||
else:
|
else:
|
||||||
time.sleep(i)
|
time.sleep(i)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -45,6 +50,8 @@ class Buzzer(object):
|
|||||||
@cbpi.initalizer(order=1)
|
@cbpi.initalizer(order=1)
|
||||||
def init(cbpi):
|
def init(cbpi):
|
||||||
gpio = cbpi.get_config_parameter("buzzer", 16)
|
gpio = cbpi.get_config_parameter("buzzer", 16)
|
||||||
cbpi.buzzer = Buzzer(gpio)
|
beep_level = cbpi.get_config_parameter("buzzer_beep_level", "HIGH")
|
||||||
|
|
||||||
|
cbpi.buzzer = Buzzer(gpio, beep_level)
|
||||||
cbpi.beep()
|
cbpi.beep()
|
||||||
cbpi.app.logger.info("INIT OK")
|
cbpi.app.logger.info("INIT OK")
|
||||||
|
|||||||
@@ -51,8 +51,6 @@ class BeerXMLImport(FlaskView):
|
|||||||
name = self.getRecipeName(id)
|
name = self.getRecipeName(id)
|
||||||
self.api.set_config_parameter("brew_name", name)
|
self.api.set_config_parameter("brew_name", name)
|
||||||
boil_time = self.getBoilTime(id)
|
boil_time = self.getBoilTime(id)
|
||||||
infuse = self.getMashinTemp(id)
|
|
||||||
mashinstep_type = cbpi.get_config_parameter("step_mashin", "MashInStep")
|
|
||||||
mashstep_type = cbpi.get_config_parameter("step_mash", "MashStep")
|
mashstep_type = cbpi.get_config_parameter("step_mash", "MashStep")
|
||||||
mash_kettle = cbpi.get_config_parameter("step_mash_kettle", None)
|
mash_kettle = cbpi.get_config_parameter("step_mash_kettle", None)
|
||||||
|
|
||||||
@@ -66,13 +64,11 @@ class BeerXMLImport(FlaskView):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
||||||
## Add Mashin step
|
|
||||||
Step.insert(**{"name": "MashIn", "type": mashinstep_type, "config": {"kettle": mash_kettle, "temp": infuse}})
|
|
||||||
for row in steps:
|
for row in steps:
|
||||||
Step.insert(**{"name": row.get("name"), "type": mashstep_type, "config": {"kettle": mash_kettle, "temp": float(row.get("temp")), "timer": row.get("timer")}})
|
Step.insert(**{"name": row.get("name"), "type": mashstep_type, "config": {"kettle": mash_kettle, "temp": float(row.get("temp")), "timer": row.get("timer")}})
|
||||||
|
Step.insert(**{"name": "ChilStep", "type": "ChilStep", "config": {"timer": 15}})
|
||||||
## Add cooking step
|
## Add cooking step
|
||||||
Step.insert(**{"name": "Boil", "type": boilstep_type, "config": {"kettle": boil_kettle, "temp": boil_temp, "timer": boil_time}})
|
Step.insert(**{"name": "Boil", "type": boilstep_type, "config": {"kettle": boil_kettle, "temp": boil_temp, "timer": boil_time}})
|
||||||
Step.insert(**{"name": "ChilStep", "type": "ChilStep", "config": {"timer": 15}})
|
|
||||||
## Add Whirlpool step
|
## Add Whirlpool step
|
||||||
Step.insert(**{"name": "Whirlpool", "type": "ChilStep", "config": {"timer": 15}})
|
Step.insert(**{"name": "Whirlpool", "type": "ChilStep", "config": {"timer": 15}})
|
||||||
self.api.emit("UPDATE_ALL_STEPS", Step.get_all())
|
self.api.emit("UPDATE_ALL_STEPS", Step.get_all())
|
||||||
@@ -91,14 +87,6 @@ class BeerXMLImport(FlaskView):
|
|||||||
e = xml.etree.ElementTree.parse(self.BEER_XML_FILE).getroot()
|
e = xml.etree.ElementTree.parse(self.BEER_XML_FILE).getroot()
|
||||||
return float(e.find('./RECIPE[%s]/BOIL_TIME' % (str(id))).text)
|
return float(e.find('./RECIPE[%s]/BOIL_TIME' % (str(id))).text)
|
||||||
|
|
||||||
def getMashinTemp(self, id):
|
|
||||||
e = xml.etree.ElementTree.parse(self.BEER_XML_FILE).getroot()
|
|
||||||
tempstr = e.find('./RECIPE[%s]/MASH/MASH_STEPS/MASH_STEP/INFUSE_TEMP' % (str(id))).text
|
|
||||||
val = tempstr[:-1]
|
|
||||||
infuse = float(val.rstrip())
|
|
||||||
|
|
||||||
return infuse
|
|
||||||
|
|
||||||
def getSteps(self, id):
|
def getSteps(self, id):
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user