Skip to content
/ boozer Public

Kegerator Monitoring Platform. RPi + Docker + Beer + Metrics + Slack. k3s kubernetes friendly.

License

Notifications You must be signed in to change notification settings

bgulla/boozer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

boozer - Kegerator Monitoring Platform

 ____   ___   ___ __________ ____
| __ ) / _ \ / _ \__  / ____|  _ \
|  _ \| | | | | | |/ /|  _| | |_) |
| |_) | |_| | |_| / /_| |___|  _ <
|____/ \___/ \___/____|_____|_| \_\


+---------------+--------------+--------+
|      File     |   Filepath   | Exists |
+---------------+--------------+--------+
|    Database   | ./db.sqlite  |  True  |
| Configuration | ./config.ini |  True  |
+---------------+--------------+--------+
+-------------+---------+
|   Feature   |  Status |
+-------------+---------+
|   Twitter   | enabled |
|     Mqtt    | enabled |
| Temperature | enabled |
|    Slack    | enabled |
|  Scrollphat | enabled |
+-------------+---------+
+-----+------------+--------------------+----------+------------------+
| Tap |    Beer    | Capacity (Gallons) | GPIO Pin | Volume Remaining |
+-----+------------+--------------------+----------+------------------+
|  1  | Test Batch |         5          |    13    |      83.149      |
|  2  | Custom IPA |         5          |    14    |      100.00      |
|  3  | Coors      |         5          |    15    |      100.00      |
|  4  | Seltzer    |         5          |    16    |      0.00        |
+-----+------------+--------------------+----------+------------------+
+----------+-----------+
|   Key    |   Value   |
+----------+-----------+
| influxdb |  enabled  |
| database |   boozer  |
|   host   | texas.lol |
|   port   |   31132   |
| username |    None   |
| password |    None   |
+----------+-----------+
+------------+------------+
|  MQTT-Key  | MQTT-Value |
+------------+------------+
|   broker   | texas.lol  |
|    port    |   31353    |
| Connected? | Connected  |
+------------+------------+
+-------------+-------------+
|    Sensor   | Temperature |
+-------------+-------------+
| temperature |   38.175ยฐ   |
+-------------+-------------+
2019-05-30 10:55:23,545 flowmeter    INFO     Boozer Intialized! Waiting for pours. Drink up, be merry!
2019-05-30 10:56:25,554 influxdb_client INFO     Influx update pushed. temperature = 37.6134

What is boozer

Kegerator monitoring/volume tracking platform writting in Python.

  • Track the remaining beer volume of your kegs! Flow sensors keep a running log of your remaining beer volume, using SQLITE.
  • Slack & Twitter functionality. Sharing is caring.
  • Temperature Monitoring via ds18b20 GPIO sensor or sensors2json microservice/REST
  • IoT functionality with MQTT/Mosquito and InfluxDB.

Support update:

Boozer is now longer in active development but can be used as the basis of new development projects.

Version 2

  • Complete rewrite
  • 1-10 flowsensors are now supported
  • Custom keg sizes are now supported (5gal, 10gal, etc)
  • You can now push metrics directly to InfluxDB and MQTT
  • Enhanced UI with configurable verbosity. No more guessing your configuration.
  • Temperature sensing can now be done via a GPIO sensor or via a REST call.
  • Keg volumes can now be reset without the toolkit
  • New docker image. bgulla/boozer->boozerbar/boozer
  • New plug-in supported architecture.
  • There are breaking changes. Be sure to convert your configuration to match the new schema.

Supported Notification Platforms

Boozer can tweet out whenever a new pour event is detected. The following notification platforms are supported:

  • Slack (webhook) Slack
  • Twitter (oauth)
  • Untappd Auto-Posting. (I broke this, hoping to fix it soon)

Supported Monitoring Platforms

  • InfluxDB
  • MQTT/Mosquitto

Hardware

The following hardware was used in the inital build of boozer but not necessarily required.

Pouring in motion Breadboard

Running in Docker

Simplify deployment with Docker. Instructions for installing docker on RaspberryPi's here. Works in Kubernetes, if you're into the whole distributed computing thing. This assumes you have a beginner-level knowledge of Docker.

docker run --rm  -d --name="boozer" \
    --privileged \
    -v </path/to/config.ini>:/boozer/config.ini \
    -v </path/to/db.sqlite>:/boozer/db.sqlite \
    -t boozerbar/boozer

Home-Assistant

boozer in home-assistant

Add the following to your configuration.yaml file.

mqtt:
  broker: <mqtt_host>
  port: <mqtt_port>
sensor:
  - platform: mqtt
    state_topic: "bar/tap1/value"
    name: "Boozer Tap1"
  - platform: mqtt
    state_topic: "bar/tap1/beverage"
    name: "Boozer Tap1 beverage"
  - platform: mqtt
    state_topic: "bar/tap2/value"
    name: "Boozer Tap2"
  - platform: mqtt
    state_topic: "bar/tap2/beverage"
    name: "Boozer Tap2 beverage"
  - platform: mqtt
    state_topic: "bar/tap3/value"
    name: "Boozer Tap3"
  - platform: mqtt
    state_topic: "bar/tap3/beverage"
    name: "Boozer Tap3 beverage"
  - platform: mqtt
    state_topic: "bar/tap4/value"
    name: "Boozer Tap4"
  - platform: mqtt
    state_topic: "bar/tap4/beverage"
    name: "Boozer Tap4 beverage"

Configuration Sample

[Boozer]
minimum_pour_vol: 0.075 # Used for testing
logging_level: INFO

[Taps]
tap1_gpio_pin: 13
tap1_beer_name: Test Batch
tap1_gallon_capacity: 5
tap2_gpio_pin: 14
tap2_beer_name: Manor Hill Friends Dont Shake Hands
tap2_gallon_capacity: 5
tap3_gpio_pin: 15
tap3_beer_name: Banquet Beer
tap3_gallon_capacity: 5
tap4_gpio_pin: 16
tap4_beer_name: Seltzer
tap4_gallon_capacity: 5

[Slack]
enabled:True
webhookurl: https://hooks.slack.com/services/<redacted>

[Temperature]
enabled: True
sensor_protocol: ds18b20
#sensor_url: http://10.0.1.48:8888/chillerf
#endpoint: http://10.0.1.48:8888/chillerf

[Twitter]
enabled: True
consumer_key="redacted"
consumer_secret="redacted"
access_token="1549176829-redacted"
access_token_secret="redacted"

[Mqtt]
enabled: True
broker: mqtthost.lol
port: 31353
#username: foo
#password: bar


[Logging]
file: /tmp/beer.log

[Scrollphat]
enabled: True

[Influxdb]
enabled: True
host=influxhost.lol
port=8086

Toolkit

๐Ÿบ  pi@bar[/opt/boozer] >docker exec -ti boozer python /boozer/toolkit.py -h
usage: toolkit.py [-h] [--reset-tap RESET_TAP_ID] [--printval] [--temp]
                  [--mqtt]

Example with long option names

optional arguments:
  -h, --help            show this help message and exit
  --reset-tap RESET_TAP_ID, -t RESET_TAP_ID
                        Reset the database value for a tap
  --printval, -p        print all tap volumes
  --temp                print the temperature values
  --mqtt, -m            update the tap values in mqtt broker
  --scrollphat, -s      Test the functionality of the SCROLLPHAT display.

Print Remaining Keg Volumes

๐Ÿบ  pi@bar[/opt/boozer] > docker exec -it boozer python /boozer/toolkit.py --printval
Loaded config...
        Database file:  /boozer/db.sqlite
----------------------------------------------------
        Tap 1 | 100.0 remaining
        Tap 2 | 100.0 remaining
        Tap 3 | 100.0 remaining
        Tap 4 | 100.0 remaining

Force-Update MQTT Broker

๐Ÿบ  pi@bar[/opt/boozer] > docker exec -it boozer python /boozer/toolkit.py --mqtt
Loaded config...
        Database file:  /boozer/db.sqlite
----------------------------------------------------
[MQTT] updated tap 1
[MQTT] updated tap 2
[MQTT] updated tap 3
[MQTT] updated tap 4

Reseting Taps

The time will come to change out your kegs and rather than editing sqlite directly, use the toolkit script to reset your keg volume available to 100%.

๐Ÿบ  pi@bar[/opt/boozer] >docker exec -ti boozer python /boozer/toolkit.py --reset-tap 1
Loaded config...
	Database file:	/boozer/db.sqlite
----------------------------------------------------
current [Tap 1 ] 0.00 remaining
Are you sure that you reset tapid: 1 (y/n): y
Record: Tap 1 Volume 0
Reset Tap  1
updated! [Tap 1 ] 1.0 remaining

protip: another way to reset the tap val to 100% without the toolkit is to add tap1_reset_database:True to the taps configuration. NOTE: you will need to remove the line after starting boozer or your tap value will reset every time boozer is restarted.

Displaying Stats in Grafana

With a little help from Telegraf (or directly with v2) and the Mqtt message broker, bar stats are viewable in real time with Grafana.

Grafana is awesome

Build Pictures

Photos of the bar making process are available here.

FAQs

Most of your questions can probably be answered in the reddit post or the Hackaday feature.

Press:

Updates

  • 5-30-2019: v2 is live
  • 5-22-2018: Temperature sensors are now optional.
  • 7-1-2018: Toolkit functionality finally documented. Reset tap db values and more.
  • 3-2019: new docker image (boozerbar/boozer). new console logging. more flexible config.

The Bar That Started It All

Releases

No releases published

Packages

No packages published