Beer fermentation controller
go
Go to file
Søren Rasmussen 87f684db9a
Some checks reported errors
continuous-integration/drone/push Build encountered an error
Rename package from sng to snr
2024-06-15 16:31:02 +02:00
.vscode Upgrade to go 1.20 and add vendor catalog 2023-04-22 10:37:23 +02:00
build/debian Packaging 2022-07-24 10:01:28 +02:00
cmd/fermentord Rename package from sng to snr 2024-06-15 16:31:02 +02:00
internal Rename package from sng to snr 2024-06-15 16:31:02 +02:00
pkg Rename package from sng to snr 2024-06-15 16:31:02 +02:00
vendor Update dependencies 2024-06-15 15:58:47 +02:00
.drone.yml Upgrade to go 1.20 and add vendor catalog 2023-04-22 10:37:23 +02:00
.editorconfig Work since initial 2021-08-30 22:46:38 +02:00
.gitignore Upgrade to go 1.20 and add vendor catalog 2023-04-22 10:37:23 +02:00
go.mod Rename package from sng to snr 2024-06-15 16:31:02 +02:00
go.sum Update dependencies 2024-06-15 15:58:47 +02:00
Makefile Adjust makefile for development 2022-07-29 00:46:47 +02:00
README.md Update README 2022-03-18 13:41:34 +01:00
states.md Work since initial 2021-08-30 22:46:38 +02:00
wiring.md Add wiring.md 2022-03-13 18:30:35 +01:00

fermentord

Control the temperature of your fermentation process.

Integrations

  • NATS
  • Prometheus
  • Sentry

Epics

Heater/Cooler

Persona Description
Brewer The person responsible for the wort and the fermentation process
Operator The person responsible for the fermentation tank and the system controlling it

As a brewer I need to maintain the wort at a specific temperature so that my fermentation process is predictable As an operator I need an alert if the system can't maintain the temperature, so that I may correct the problem

Ambient temperature

  • Ambient temperature
  • Case temperature
  • Wort temperature
  • Wort gravity

User stories

Acceptance criteria

  • Given the wort is at or above the requested temperature and the heater is running then stop the heater

  • Given the wort is above the requested temperature and the heater is not running then start the cooler

  • Given the wort is above the requested temperature

  • Given the wort is too cold and the cooler is running then stop the cooler

  • Given the wort is too cold and the cooler is not running then start the heater

  • Given the cooler is running

  • Given the cooler is running when then the heater may not start

  • Given the heater is running then the cooler may not start

  • Given the temperature is

Data logging

  • Ambient temperature

  • Case temperature

  • Wort temperature

  • Wort gravity

  • Data is stored in sqlite3

  • Data is scraped and stored in PostgreSQL

  • Data is removed from sqlite3 when confirmed in PostgreSQL

Metrics

Prometheus metrics

  • Ambient temperature
  • Chamber temperature
  • Wort temperature
  • Wort gravity
  • Heater state
  • Cooler state
  • Tank pressure

Drivers

On the Raspberry Pi you'll need to add dtoverlay=w1-gpio (for regular connection) or dtoverlay=w1-gpio,pullup="y" (for parasitic connection) to your /boot/config.txt. The default data pin is GPIO4, but that can be changed from 4 to x with dtoverlay=w1-gpio,gpiopin=x.

echo dtoverlay=w1-gpio,gpiopin=4,pullup=0 >> /boot/config.txt

modprobe wire
modprobe w1-gpio
modprobe w1-therm

Build

A Raspberry Pi 1 is used, so we compile for ARMv6.

cd cmd/fermentord
GOARCH=arm GOARM=6 GOOS=linux go build