Fermenter

This BrewskiTech project will show you how to create a low-cost temperature controlled fermentation chamber to help you make better beer. The project uses basic materials and low-cost electronic components to make a fermentation chamber that can be controlled and automated via Home Assistant.
Features:
- Cool fermenting beer to up to 20 degrees F below ambient air temperature
- Use inexpensive frozen ice bottles to provide cooling, rather than expensive compressor or peltier based solutions
- View and control temperature though browser or phone based Home Assistant interface
- Automate temperature ramping and notifications via Home Assistant
All source files are available in the github repo.
Video Tutorials
A series of video tutorials is available on the BrewskiTech YouTube channel, in this playlist.
Building the box
The first step in constructing the fermenter is to make the insulating box. We're using a classic "Son of Fermenter" box which has separate chambers for the ice bottles used for cooling and the carboy of fermenting beer. This box design uses 2 inch rigid foam board for both insulation and for the structure.
Box Plans
The original "Son of Fermenter" plans can be found here.
A more modern set of plans can be found here.
Box Materials
Materials needed:
- a 4 ft x 8 ft sheet of 2 inch thick rigid foam board insulation
- a 10 oz tube of construction adhesive
- a roll of HVAC foil tape
- a 10 ft roll of 3/4 in self-adhesive foam rubber weather stripping
- 1 in x 2 in x 8 ft wood strips
- 8 magnetic catches
Tools needed:
- caulk gun
- screwdriver
- utility knife with a blade at least 4 inches long
Building the electronics
The electronics for this project include an ESP8266-based NodeMCU that acts as the "brain" and connects to a temperature sensor, a relay module (to power the fan), and an LCD display. This allows us to control the temperature in the box and connect it to Home Assistant.
Electronics Plans
A fritzing file is available for download in the github repo
Breadboard Plan
Circuit Schematic
Electronics Materials
Materials needed:
- NodeMCU
- waterproof 1-wire temperature sensor
- 3VDC opto-isolated relay model capable to handling at least 12V @ 10 amps
- 12VDC 10 amp power supply
- 120mm computer case fan
- [optional] 16x2 character LCD display with serial (I2C) interface
Home Assistant setup
After the electronics are complete, they can be added to Home Assistant to allow temperature control and automation to be controlled remotely via Home Assistant in a web browser or in the mobile app.
YAML configuration
The latest YAML file can be found here.
esphome:
name: "fermenter1"
platform: ESP8266
board: nodemcuv2
# Enable logging
logger:
# Enable Home Assistant API
api:
ota:
- platform: esphome
password: !secret esphome_ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Fermenter1 Fallback Hotspot"
password: !secret wifi_backup_password
captive_portal:
switch:
- platform: gpio
name: "Fermenter LED"
inverted: true
pin: D0
- platform: gpio
id: fan_power
name: "Fermenter Fan Power"
pin: D5
# pin D3 may be fried on this NodeMCU
dallas:
- pin: D4
update_interval: 5s
sensor:
- name: "Fermenter temperature"
id: fermenter_temp
platform: dallas
index: 0
#- platform: pulse_counter
# pin: D6
# id: fermenter_fan_rpm
# name: "Fermenter Fan RPM"
# update_interval: 5s
# filters:
# - multiply: 0.5 # 2 pulses per revolution
# Kegerator thermostat
climate:
- name: "Fermenter thermostat"
id: fermenter_thermostat
default_preset: home
platform: thermostat
visual:
min_temperature: -1
max_temperature: 40
temperature_step: 1
sensor: fermenter_temp
preset:
# Standard presets
- name: home
mode: cool
default_target_temperature_high: 15
cool_deadband: 0.1
cool_overrun: 0.1
min_cooling_off_time: 1s
min_cooling_run_time: 1s
min_idle_time: 1s
cool_action:
- switch.turn_on: fan_power
idle_action:
- switch.turn_off: fan_power
i2c:
sda: D2
scl: D1
display:
- platform: lcd_pcf8574
dimensions: 16x2
address: 0x27
lambda: |-
it.print(0,0,"BT Fermenter");
it.printf(0,1,"Temp:%.1fF/%.1fF", (id(fermenter_temp).state) * 9 / 5 + 32, (id(fermenter_thermostat).target_temperature) * 9 / 5 + 32);
Automation
Now that the fermenter is setup and working in Home Assistant we can create automations that will make the fermenter even more useful. The following are two automation ideas.
Ice Check
Since ice bottles are used to provide cold air in the fermenter, a rule to send a notification when the ice bottles have melted and need to be changed is very useful.
One way to detect when the ice bottles have melted can be configured using the visual editor (no YAML editing required) in Home Assistant:
- Trigger: When Fermenter's Fan Power has been on for more than 20 minutes
- And If: none
- Then Do: Send notififcation to user's phone with the message: "Fermenter ice need to be checked"
Automatic Temperature Ramp
At the end of brewing, we often "cold crash" the beer to help it clarify. If the temperature is dropped too quickly it can shock the yeast which can lead to off flavors and reduced head retention in the final beer.
This rule can be used to automatically perform a "slow" cold crash:
- Trigger: Periodic Time Interval with a period of 6 hours
- Put "/6" in the Hours field
- And If: The current fermenter temperature is greater than 45 degrees F
- This is the "floor" of the ramp, and is where the fermenter temperature will end (assuming the fermenter can reach this temperature).
- Then Do: Decrement the fermenter thermostat by 1 degree F
- This action can't be implemented fully in the visual editor. Choose to "Set the target temperature" on the fermenter's climate object, and set the target to the fermenter device.
- Then choose "Edit in YAML" and set the data field to:
data:
temperature: >-
{{ state_attr('climate.fermenter_thermostat', 'temperature') | float(60) - 1
}}
Adding a Heater Circuit
In some situations, it can be useful to also be able to heat your fermenting beer. For instance, trying to ferment an ale in a cold basement/garage in the middle of winter. This tutorial video shows how to easily add a warming wrap to the fermenter that is controlled by our ESPHome temperature controller and an off-the-shelf smart plug.
Parts List
- Smart plug (see video for details and requirements)
- Heat mat (10" x 20", look for a seed germination mat or similar)
YAML configuration
The latest YAML file can be found here.
First, we need to add a new switch element that will import a smart plug from Home Assistant. Find the Entity ID in the properties of the smart plug and enter it in the entity_id field.
switch:
- platform: homeassistant
entity_id: switch.plug1_relay
id: heater_power
Next, we need to modify the climate object so that it will enable heating mode. This requires a few changes.
- Change the mode in the preset from COOL to HEAT_COOL. Also add a default value for the heat setpoint
mode: HEAT_COOL
default_target_temperature_low: 50 °F
- Set the minimum heating on and off times. 30 seconds is a good value to start with.
min_heating_off_time: 30s
min_heating_run_time: 30s
- Add a heat_action and add another action to the idle_action. heater_power should match the id field of the new switch element.
heat_action:
- switch.turn_on: heater_power
idle_action:
- switch.turn_off: fan_power
- switch.turn_off: heater_power