All Projects → bgulla → boozer

bgulla / boozer

Licence: MIT license
Kegerator Monitoring Platform. RPi + Docker + Beer + Metrics + Slack. k3s kubernetes friendly.

Programming Languages

python
139335 projects - #7 most used programming language
Dockerfile
14818 projects

Projects that are alternatives of or similar to boozer

Addon Grafana
Grafana - Home Assistant Community Add-ons
Stars: ✭ 102 (+9.68%)
Mutual labels:  grafana, homeassistant
ha-config-ataraxis
My Home Assistant Configs. If you like what you see, please ⭐️my repo. It would encourage me a lot 🤘
Stars: ✭ 146 (+56.99%)
Mutual labels:  grafana, homeassistant
tilt-pitch
Simple replacement for the Tilt Hydrometer mobile apps and TiltPi with lots of features
Stars: ✭ 32 (-65.59%)
Mutual labels:  homebrew, grafana
Solarthing
Monitors an Outback MATE and a Renogy Rover - MPPT Charge Controller. Integrates with Grafana, PVOutput and more!
Stars: ✭ 33 (-64.52%)
Mutual labels:  grafana, slack-bot
hometop HT3
Pimp your heater.
Stars: ✭ 34 (-63.44%)
Mutual labels:  raspberrypi, homeassistant
Raspberrymatic
🏠 A lightweight, buildroot-based Linux operating system alternative for your CCU3, ELV-Charly or for running your IoT "HomeMatic CCU" as a virtual appliance (using ESXi, Proxmox, VirtualBox, Docker/OCI, Kubernetes/K8s, Home Assistant, etc.) or on your own RaspberryPi, Tinkerboard, etc. SBC devices...
Stars: ✭ 803 (+763.44%)
Mutual labels:  raspberrypi, homeassistant
bme680 to influxdb
Simple script that sends your BME680 temp, pressure, humidity and gas sensor data to InfluxDB.
Stars: ✭ 21 (-77.42%)
Mutual labels:  raspberrypi, grafana
formula1-telemetry-kafka
No description or website provided.
Stars: ✭ 99 (+6.45%)
Mutual labels:  grafana
flex-table-card
Highly Flexible Lovelace Card - arbitrary contents/columns/rows, regex matched, perfect to show appdaemon created content and anything breaking out of the entity_id + attributes concept
Stars: ✭ 122 (+31.18%)
Mutual labels:  homeassistant
ConsolePi
Raspberry Pi Based Serial Console Server, with PushBullet Notification of IP changes, Automatic VPN termination, custom menu, Power Outlet Control, and a lot more
Stars: ✭ 109 (+17.2%)
Mutual labels:  raspberrypi
adafruit-i2c-pwm-driver
Node.js implementation for the Adafruit 16-Channel 12-bit PWM/Servo Driver
Stars: ✭ 25 (-73.12%)
Mutual labels:  adafruit
watsor
Object detection for video surveillance
Stars: ✭ 203 (+118.28%)
Mutual labels:  homeassistant
octoscreen
A touchscreen client for Octoprint
Stars: ✭ 26 (-72.04%)
Mutual labels:  raspberrypi
jbpm-spring-boot
Sample of a jbpm service with spring boot. It runs on OpenShift and it has prometheus metrics and a grafana dashboard
Stars: ✭ 16 (-82.8%)
Mutual labels:  grafana
docker-iot-stack
💻 My personal Docker IoT Stack
Stars: ✭ 24 (-74.19%)
Mutual labels:  grafana
balena-wpe
Fullscreen WebKit browser with hardware accelerated CSS, WebGL, and HTML5 video for the RaspberryPi 3.
Stars: ✭ 372 (+300%)
Mutual labels:  raspberrypi
github-custom-component-tutorial
A tutorial for creating a custom component for Home Assistant using GitHub's API.
Stars: ✭ 31 (-66.67%)
Mutual labels:  homeassistant
nifi-prometheus-reporter
A reporting task in Nifi which is capable of sending monitoring statistics as prometheus metrics to a prometheus pushgateway.
Stars: ✭ 48 (-48.39%)
Mutual labels:  grafana
aprenda-python
Aprendizado, dicas e projetos sobre Python
Stars: ✭ 22 (-76.34%)
Mutual labels:  raspberrypi
nx
Userland library for Nintendo Switch homebrew (and other potential purposes), written in pure Rust and some assembly bits
Stars: ✭ 67 (-27.96%)
Mutual labels:  homebrew

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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].