• Stars
    star
    100
  • Rank 340,703 (Top 7 %)
  • Language
    Python
  • License
    MIT License
  • Created over 6 years ago
  • Updated about 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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

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

More Repositories

1

rpi-alexa-docker

Docker deployed Alexa Client for the Raspberry Pi. Built for Hypriot. https://github.com/amzn/alexa-avs-raspberry-pi
19
star
2

sensor2json

Exposes GPIO sensor data via JSON REST endpoint.
Python
14
star
3

kubeups

Prometheus Electricity/Uninterruptible Power Supply Monitoring built for Kubernetes
Smarty
12
star
4

apcupsd-influxdb-exporter

Docker-based APCUPSd daemon that sends UPS-device information to InfluxDB.
Python
10
star
5

kubeinflight

Monitor Live Air Traffic using Software Defined Radio and Kubernetes
Makefile
6
star
6

hypriot-lirc

Control IR Remotes connected to a RaspberryPI
Python
5
star
7

apcupsd-mqtt

Post APCUPSD ups data to MQTT Brokers. Home-Assistant
Python
4
star
8

hypriot-ds18b20

Hypriot Docker image that runs a RESTful web service providing temperature values derived from connected DS18B20 sensors. Designed for RaspberryPi.
Python
4
star
9

apcupsd

UPS monitoring
Dockerfile
2
star
10

pihole-ansible

Ansible-based configuration of PiHole for local-DNS and wildcard DNS resolution.
2
star
11

rke2-ansible

RKE2 cluster provisioning via Ansible.
2
star
12

rancher-steamdeck

FIPS-140-2 on a gaming system, why not. #kubernetes
1
star
13

rainbowroad-docker

Docker to run a python webserver that displays a different colors in an attempt to visually show the presence of different Docker containers.
Python
1
star
14

any-docker-on-adx

Example showing the creation of a Docker image and deployment on the ADX platform.
Dockerfile
1
star
15

fleet-iac

continuous delivery via Rancher's Fleet
Mustache
1
star
16

apcupsd-tcp

Docker-based apcupsd daemon that communicates over TCP. Kubernetes supported.
Dockerfile
1
star
17

adx-resources

ADX/Docker/Kubernetes Knowledge Base Articles & Links
1
star
18

somanyquestions

Tool to scrape news-sites to see just how many question marks they reference in link titles. Click bait at its finest.
Python
1
star
19

mooit

Cowsay webservice. Commonly used as a canary test for new k8s cluster deployments.
Python
1
star