Pushover notifications with Tilt Hydrometer

Today I modified atlefren/pytilt in order to send push notifications to my phone, instead of sending data to remote server. It uses Pushover and Advanced Python Scheduler to send one notification per hour for every Tilt nearby.

import sys
import datetime
import time
import httplib
import urllib

from apscheduler.schedulers.blocking import BlockingScheduler

import bluetooth._bluetooth as bluez

import blescan

TILTS = {
        'a495bb10c5b14b44b5121370f02d74de': 'Red',
        'a495bb20c5b14b44b5121370f02d74de': 'Green',
        'a495bb30c5b14b44b5121370f02d74de': 'Black',
        'a495bb40c5b14b44b5121370f02d74de': 'Purple',
        'a495bb50c5b14b44b5121370f02d74de': 'Orange',
        'a495bb60c5b14b44b5121370f02d74de': 'Blue',
        'a495bb70c5b14b44b5121370f02d74de': 'Yellow',
        'a495bb80c5b14b44b5121370f02d74de': 'Pink',
}

def distinct(objects):
    seen = set()
    unique = []
    for obj in objects:
        if obj['uuid'] not in seen:
            unique.append(obj)
            seen.add(obj['uuid'])
    return unique

def to_celsius(fahrenheit):
    return round((fahrenheit - 32.0) / 1.8, 2)

def notify(msg):
    conn = httplib.HTTPSConnection("api.pushover.net:443")
    conn.request("POST", "/1/messages.json",
    urllib.urlencode({
        "token": "af6bai9bodcfbexieswjpennj4fxxd",
        "user": "uxeuanyhid5k143uru7ecx3g9ghyqi",
        "message": msg,
    }), { "Content-type": "application/x-www-form-urlencoded" })
    conn.getresponse()

def monitor_tilt():
    ret = False
    while True:
        beacons = distinct(blescan.parse_events(sock, 10))
        for beacon in beacons:
            if beacon['uuid'] in TILTS.keys():
                print('notify')
                notify({
                     'color': TILTS[beacon['uuid']],
                     'temp': to_celsius(beacon['major']),
                     'gravity': beacon['minor']
                })
                ret = True;

        if ret == True:
            return;

        time.sleep(10)

if __name__ == '__main__':
    dev_id = 0
    try:
        sock = bluez.hci_open_dev(dev_id)
        print 'Starting pytilt logger'
    except:
        print 'error accessing bluetooth device...'
        sys.exit(1)

    blescan.hci_le_set_scan_parameters(sock)
    blescan.hci_enable_le_scan(sock)
    monitor_tilt()
    scheduler = BlockingScheduler()
    scheduler.add_job(monitor_tilt, 'interval', hours=1)
    scheduler.start()

Oatmeal stout with Chinook

Yesterday I brewed Oatmeal stout with chinook hops using the following recipe:

  1. Water:
    • 19 liters batch
    • Mash for 60 minutes with 19 liters at 67°C
    • Sparge with 5 liters 75-80°C
    • 1/2 tablet of Protofloc, boil for 10 minutes
    • Boil for 120 minutes
  2. Grain bill:
  3. Hops:
    • 50 g Chinook, 11% alpha acids, boil for 60 minutes
  4. Yeast:
  5. Parameters:
    • Measured 1054 OG with Tilt hydrometer
    • Measured 17-19°C with Tilt thermometer
    • 1010 FG
    • 5.8 % ABV

Session IPA

Today I brewed a session IPA. This brew tested my new Brewferm Grain Gorilla malts mill, it was brewed in Sliven, so I had all my equipment at my disposal. The original idea for this beer was that it should be an IPA. It seems that my malts mill settings were suboptimal, so the efficiency was low. The recipe is similiar to the first recipe that I brewed using the Brewster. Modified a bit due to issues with the hop scale.

Recipe for 19 liters batch:

  • 30 liters of tap water without modifications (mashing with 19 liters)
  • 5 kg Pale Ale Viking malt, bought from napravisibira.com, milled yesterday
  • 75 g Citra Hops with 12.7% Alpha acids, boil for 15 minutes, bought from true.beer
  • 100 g Citra Hops for dry hopping for 3 days
  • Mashing for 60 minutes at 67°C
  • Sparging with 5 liters of water at 75-80°C
  • Boil for 60 minutes
  • 1/2 tablet of Protofloc, boil for 10 minutes
  • Measured 1041 OG, using Tilt hydrometer, monitoring the fermentation on my iPhone
  • SafAle US-05 yeast
  • Ferment for 5 days at room temperature (18-22°C)
  • Measured 1011 FG, 4.1% ABV

Tilt hydrometer stout recipe

Here is a recipe for a stout that was brewed today. Due to the Coronavirus Pandemic quarantine my new brewing equipment is not available. Had to use the old equipment for this beer. It consists of:

  • 40 liters Igloo Cooler mash tun
  • 50 liters kettle
  • 30 liters plastic fermenter

This was the first brew that used Tilt Hydrometer for gravity and temperature readings. It worked out of the box and without calibration. Matched the gravity measured using analogue hydrometer.

  1. Water:
    • 30 liters tap water
    • Mash for 60 minutes
    • Sparge
    • Boil for 60 minutes
  2. Grain bill:
    • 5.0 kg Chateau Pale Ale Malt
    • 1.0 kg Chateau Munich Malt
    • 0.3 kg Chateau Cafe Malt
    • 0.3 kg Chateau Chocolat Malt
    • 0.2 kg Oats, flaked
    • 0.05 kg Roasted Barley
  3. Hops:
    • 20 g Summit, 20% alpha acids, boil for 60 minutes
    • 8.5 g Centennial, 9.7% alpha acids, boil for 40 minutes
  4. Yeast:
  5. Parameters:
    • Measured 1060 OG (both with Tilt and other hydrometer) (low efficiency, probably due to the cooler bag mashing or sub-optimally milled grains)
    • 1010 FG (hopefully)
    • 6.6 % ABV
  6. Photos:
    • After sparging after sparging
    • Wort wort
    • Boiling boiling
    • Tilt hydrometer tilt
    • Tilt screenshot tilt

Brewster beer 1 recipe

The purpose of this recipe was to test drive the new Brewster Beacon 40.

Recipe for 17 liters batch:

  • 25 liters of tap water without modifications
  • 5 kg Pale Ale Viking malt, bought from napravisibira.com
  • 25 g Citra Hops with 12.7% Alpha acids, boil for 55 minutes, bought from true.beer
  • Mashing for 60 minutes at 67°C
  • Sparging with 2 liters of water at 75°C
  • Boil for 60 minutes
  • 1/2 tablet of Protofloc, boil for 10 minutes
  • Measured 1054 OG
  • SafAle US-05 yeast
  • Ferment for 5 days at room temperature
  • Measured 1010 FG, 5.8% ABV