Author Topic: Post Boil SG request  (Read 2412 times)

Offline gizzygizmo

  • BeerSmith Brewer
  • ***
  • Posts: 25
  • BeerSmith Rocks!
Post Boil SG request
« on: June 20, 2019, 05:26:39 PM »
I'd like to request a variable be created to display the post-boil gravity... while the wort is still hot and hasn't shrunk yet. I've been playing with removing shrinkage to see the math that adjust volumes based on temp and I've come to the conclusion that $EST_OG is the gravity reading of the cooled/shrunk wort.  Trying to match this value at post-boil will be off.

Examples...

Shrinkage removed from equipment:
1) post mash/preboil volume 8 and Gravity of 1.039
2) Post boil volume is displayed as 6.5 gallons => 8 gallons - boil off 1.5 and no shrinkage
3) OG of 1.048 is displayed
Math on this is 39 * 8 = 312 points, divided by final volume of 6.5g = 1.048, all is well.

Having a 4% shrinkage in equipment:
1) post mash /preboil volume of 8.27 and Gravity of 1.038 (i suspect because 8 gallons + 3-4% shrinkage at 150degF is 8.27 and will make the Gravity be (39*8)/8.27 => 37.72 and it rounds up to display 37.27
2) Post boil volume is displayed as 6.77 = 8.27 pre boil, minus boil off 1.5, minus shrinkage of .22
3) OG of 1.048 is displayed
Math on this is 38 * 8.27 = 312.26, divided by final volume of 6.5 = 1.048

My issue is that I like to check the gravity right toward the end of boil.  So when the post boil volume is reached around 6.77 gallons i'm reading 1.046 etc, and trying to figure out why i'm short. My instinct is to do the math of "preboil OG * preboil volume / current volume" to get what my SG should be.  At the end of boil I would assume i should get the OG.  But the OG displayed is for chilled/cooled/shrunk wort not hot 212degF expanded wort.

My custom brewsteps currently  display "measure post boil volume: " and suggest $POST_BOIL_VOLUME.
Then I have a line for "measure post boil gravity: " and i'm suggesting $EST_EG. 

The $EST_EG  is usually off by a bit, in one case i'm getting 1.046.  Initially I thought i was off and would think i need to adjust with some DME to 1.048.  If that's done then it'll chill/shrink and be at 1.049.  These numbers don't seem to bad,  and i never really noticed until i started doing some batches of RIS in which the values are exaggerated.  A 8.27gallon volume preboil at 1.084 gives me 6.77gallons at 1.102, chilled it is 1.106.   I don't swat 1 or 2 gravity points, but i want to know why i'm off by 4-5 points and the only thing I did was boil.

I would like to be able to just display the value here.. or if I could do some math somehow and display my own values that would be nice.  I'd like to multiply the batch volume * gravity and divide by pre-boil volume to display a target "post boil gravity" that I can check before the wort is chilled.  If any numbers are wrong "now" i can throw DME in or water and it will be sanitized by heat.  If i wait until its chilled it's too late.

For now i'm just scribbling in a number, and i can do math if the volumes are off (larger/smaller preboil or post-boil than planned means I need to change the numbers anyway)

Offline gizzygizmo

  • BeerSmith Brewer
  • ***
  • Posts: 25
  • BeerSmith Rocks!
Re: Post Boil SG request
« Reply #1 on: June 21, 2019, 12:04:29 PM »
While researching I found the boil off tool actually has this data... and someone else with the same questions:

https://imgur.com/a/uiAMQ

This tool shows 1.103 Post Boil Gravity at 6.75gal.  Then when i check my recipe i have 1.106 at 6.5gallons.

I just want to be able to print $POST_BOIL_GRAVITY in custom reports.

Offline gizzygizmo

  • BeerSmith Brewer
  • ***
  • Posts: 25
  • BeerSmith Rocks!
Re: Post Boil SG request
« Reply #2 on: June 21, 2019, 12:07:10 PM »
I think the real question would be that if we are cooling our sample down to 60-68degF is the sample shrinking 4% as well and therefore the PreBoil and PostBoil SG calcs should not include shrinkage/dilution. 

I always cool my samples down, but i'm using a hydrometer so it doesn't take long.  The SG does go up from the initial measurement, but I would have taken any readings and assume that my mash eff was a function of my preboil SG vs what's technically possible.

Offline Oginme

  • BeerSmith Grandmaster Brewer
  • *****
  • Posts: 2832
  • Goats, guitars, and a home brew; Life is good!
    • Longvu LaManchas
Re: Post Boil SG request
« Reply #3 on: June 21, 2019, 01:23:04 PM »
As in your other post, I think you misunderstanding the gravity measurements.  The gravity measurement should always be taken at the calibration temperature of your hydrometer and this figure should be marked on the scale of the hydrometer.  What the program does not do accurately enough is correct the volume to standard conditions for purposes of completing the sugar balance equation.  This error is equivalent to the actual thermal expansion when the volume measurement is taken and recorded.  If you use a thermal expansion coefficient of 4% (212F/100C) and measure the volume at 154F/68C, then the thermal expansion of water is around 2.3%.  This means that the sugar balance error is around 1.7%, which is typically around most brewer's measurement error for volume. 

At hot temperatures or cold temperatures the amount of sugar and the contribution to density is the same.  It is the thermal expansion of the water which is different from room temperature to hot temperatures.
Recycle your grains, feed them to a goat!

Offline gizzygizmo

  • BeerSmith Brewer
  • ***
  • Posts: 25
  • BeerSmith Rocks!
Re: Post Boil SG request
« Reply #4 on: June 22, 2019, 09:47:20 AM »
So are you measuring the gravity of your wort at the preboil temp of 170degF (mash out) and then again post boil at 212degF?  Or do you take the sample and chill it to 68degF and measure? 

My older hydrometer has corrections for temp, so technically I guess you could take it at 170 or 212 degF and adjust for temp.  But I've since moved on to a refractometer and hanna which both require the sample to cool (which happens in a matter of minutes).  This is very similar to pH readings, which are always displayed and talked about at room temp, nobody takes pH readings at mash temp ... and if they do they have to correct for temp back to down to room temp.

The original request I had was to be able to display the "POST BOIL GRAVITY' which would be the gravity at 212degF before cooling.  The program currently only displays the EST_OG which is the SG at room/pitching temp.  This way I could add/remove DME while the wort was still hot enough to sanitize it the adjuncts.    What i'm finding now is that I'm going to want the numbers corrected to room temp volumes because that's the temp i'm having to-do readings.   I'm not taking the SG readings at preboil/boil temps and then trying to correct the SG value for temp; i'm actually cooling the sample and taking the readings at room temp like I do with pH.

It may make more sense to print the total gravity points, then the corrected SG reading with the room temp, volume in parenthesis in case you're doing math on total points, and then preboil volume.

Example, maybe allow access to these variables so I can pick which one sto display.. or display them all:

PreBoil:
8.27 gallons (8 gallons room temp)
1.084 SG at 170degF (1.086 SG room temp)

Final Volume:
6.77 gallons post boil (6.5 gallons room temp)
1.103 SG at 212degF (1.106 SG at room temp)

The value i thought I needed was 1.103 "post boil OG" but what i'm finding I really want is "pre boil sg at room temp".

Offline dtapke

  • BeerSmith Grandmaster Brewer
  • *****
  • Posts: 452
Re: Post Boil SG request
« Reply #5 on: August 12, 2019, 08:16:43 AM »
I was trying to answer some questions to a new user of the software about this on a recent brew day. I would love to see the addition of perhaps @TEMP in the pre-boil, post-boil, etc measurements. this would reduce the need to worry about thermal expansion and adjusting the rate in the equipment profile.
'
this way one could input "pre-boil volume" as X.XX units @ XXX degrees (F/C), as well as into fermenter at X.XX units @ XX Degrees (F/C)
32g eHERMS
Drinking: Dopplebock, NEIPA, Pils
Primary: empty
Secondary/Lagering:
Next Brew: RIS

Offline gizzygizmo

  • BeerSmith Brewer
  • ***
  • Posts: 25
  • BeerSmith Rocks!
Re: Post Boil SG request
« Reply #6 on: September 22, 2019, 12:39:45 PM »
Yes... after seeing multiple post on multiple forums of different software, the range of opinions.  I think it may be best to just disclose the temp some of these calcs assume somehow.  "at 68degF", put it in a hover bubble, or just disclose the equations in the help section.

I'm fairly certain all SG and pH readings should be done at 68degF.  Therefore water expansion needs to be accounted for if we're talking volumes at 168degF (mashout) or 212degF (post-boil).  If i have 6.75 gallons of wort at post boil right when i click off the burner i want to know what my SG is going to be, im cooling a sample to read with hydrometer or refractometer.  It's really 6.5g once cooled... so whatever total points should be divided by 6.5 not 6.75.

Maybe print it like this:
Post Boil 6.75g (6.5g @ 68degF)

That would help someone doing math on adding DME or brewers crystals to try and fix their OG while still at a temp.   I know BS has volumes tab, but it's not easily printed as a variable in a custom HTML.  I'd love to be able to use math functions and have access to all variables in the custom reports so we could just generator our own.

Offline GigaFemto

  • BeerSmith Grandmaster Brewer
  • *****
  • Posts: 325
  • Muonic Matter Rocks!
Re: Post Boil SG request
« Reply #7 on: September 26, 2019, 03:19:43 PM »
...  I'd love to be able to use math functions and have access to all variables in the custom reports so we could just generator our own.

Yes, this would be great, and I would really love it. However, it may be a big technical challenge. An alternative, that I will also suggest in its own thread, is to have some user-filled fields that would be undefined by BeerSmith but could be filled in by users and referenced in custom reports.

Offline gizzygizmo

  • BeerSmith Brewer
  • ***
  • Posts: 25
  • BeerSmith Rocks!
Re: Post Boil SG request
« Reply #8 on: December 05, 2019, 11:16:18 AM »
What i've done is use custom reports and put "(_________)" after some of the variables so I can fill in the real values.  This works for either writing the correct OG.  This worked for a while, but i've found it makes entering session data harder too...

eg: if BS says pre-boil OG is 1.051 at 8.01gallons, i write to the side "1.053 / 7.75g" so I know i should get 1.053.  Then I can do 53*7.75 to find total points and find out if i need to boil off more/less to hit my OG on the dot.  Problem is, once you come back to BS to enter "1.053" into the session data it thinks i have an 84% mash eff, because it expected 1.051. 

Soo.... now i've gone back and put 0% for shrinkage and put "(_______)" next to volumes so i can put the heat adjusted volume.  For preboil I multiply by 1.03 to account for 150-175degF.  For post-boil i multiply by 1.04 to account for 212.

This way I have on the brewsheet the actual volumes "at temp" and cooled, as well as the proper "cooled" SG/OG readings.  Also when entering the values into session data it reports correct mash efficiency so recipe creation is easier, no surprises. 

The only catch is you need to do the math yourself for thermal expansion, which is a shame because it's a built in function.  I hope this gets fixed soon.

Offline gizzygizmo

  • BeerSmith Brewer
  • ***
  • Posts: 25
  • BeerSmith Rocks!
Re: Post Boil SG request
« Reply #9 on: March 12, 2020, 11:37:14 AM »
I found a way around this for now... the Beersmith custom report generate uses a webkit which allows javascript to run.  That allow us to do some string manipulation and math to get things.

Here's a custom report example I have where I can get some items I wanted:
1) total points = show total gravity points at mash step in case my volumes are off, i can do quick math to figure out top up water or more aggresive boil off rates.
2) Removing " SG" from the gravity readings so they fit better on the sheet... i like to say "Est OG" which is implied SG... this allows fitting more items in a row
3) converting SG to Plato
4) shrinking the water volumes for better cals.  For example, endoing boil volume may be 6.5 at flame out but after chilling it should reduce by 4% shrinkage and be 6.25... i need to use 6.25 for math operations as well as confirmation to me that i'm spot on while draining to kettle
5) a function to show actual pre-boil OG.  Due to the issues above with how preboil OG is calculated i wrote another function... this one takes points based off "pre boil OG * pre boil volume" which appears correct.. then divides it by the "shrunk" pre-boil volume to get a correct room temp reading for Preboil SG

Place this in the "head" section of your custom report:
Code: [Select]
<script>
<script>
var og = '$EST_OG';
var fg = '$EST_FG ';
var pog = '$PRE_BOIL_OG';
var prevol = '$DISPLAY_BOIL_SIZE';
var postvol = '$POST_BOIL_VOLUME';

function remove_sg(item) {
  // function to remove " SG" from end of SG so math can be performed
  return item.slice(0, 5);
}

function total_points() {
  // function to calc total points for use in adhoc math dring brewday
  // Unable to use EST_OG here due to later added adjuncts and no ability
  // to seperate the PPG of Sugard, etc.
  var vol = prevol.split(" ")[0];
  var sg = pog.slice(2, 5);
  return (vol * sg).toFixed(1)
}

function sg_to_plato(gravity) {
  // convert SG to plato for display purposes
  // plato = (-1 * 616.868) + (1111.14 * sg) ? (630.272 * sg^2) + (135.997 * sg^3)
  var sg = gravity.slice(0, 5);
  var plato = (-1 * 616.868) + (1111.14 * sg) - (630.272 * Math.pow(sg, 2)) + (135.997 *  Math.pow(sg, 3));
  return plato.toFixed(1);
}

function vol_shrink(volume, shrinkage) {
  //  reduce the "volume" of liquid by the shrinkage amount... 
  var vol = volume.split(" ")[0]
  vol = vol / shrinkage; // take out the 4% that was added due to heat
  return vol.toFixed(2);
}

function actual_preog() {
  // function to back-calculate the correct preboil SG based
  // on total points and a "room temp" sample instead of "hot" sample
  var points = remove_sg(pog).slice(2, 5) * prevol.split(" ")[0];
  var actualPreOG = points / vol_shrink(prevol, 1.03);
  return (actualPreOG / 1000 + 1).toFixed(4);
}


function populate_custom_vars() {
  document.getElementById("estOG").innerHTML = remove_sg(og);
  document.getElementById("estFG").innerHTML = remove_sg(fg);

  document.getElementById("platoOG").innerHTML = sg_to_plato(og);
  document.getElementById("platoOG2").innerHTML = sg_to_plato(og);
  document.getElementById("platoFG").innerHTML = sg_to_plato(fg);
  document.getElementById("plato_preOG").innerHTML = sg_to_plato(actual_preog())

  document.getElementById("actual_preOG").innerHTML = actual_preog();
  document.getElementById("actual_preOG2").innerHTML =actual_preog();

  document.getElementById("preboil_vol_shrinked").innerHTML = vol_shrink(prevol, 1.03) + " gal";
  document.getElementById("postboil_vol_shrinked").innerHTML = vol_shrink(postvol, 1.04) + " gal";

  document.getElementById("total_points").innerHTML = total_points();
}
</script>

Then you can space the Element-id's around as such:
Code: [Select]
<div id="wrapper">
        <div id="header">
            <div class="logo">
               <h1>$NAME</h1>
               <h2>$STYLE_NAME ($STYLE_NUMBER $STYLE_LETTER)</h2>
            </div>
        </div>
        <table>
            <tr>
                <td width="25%">
                    <div class="col4">
                        <span class="item">Batch:</span> $DISPLAY_BATCH_SIZE<br>
                        <span class="item">SRM:</span> $EST_COLOR<br>
                        <span class="item">IBU:</span> $IBU<br>
                        <span class="item">Est ABV:</span>  $EST_ABV<br>
                    </div>
                </td>

                <td width="25%">
                    <div class="col4">
                        <span class="item">Packaged Vol:</span> $BOTTLING_VOLUME<br>
                        <span class="item">Est Mash Eff:</span> $EST_MASH_EFFICIENCY<br>
                        <span class="item">Est BH Eff:</span> $EFFICIENCY %<br>
                        <span class="item">Boil time:</span>  $BOIL_TIME min<br>
                    </div>
                </td>

                <td width="25%">
                    <div class="col4">
                        <span class="item">Est OG:</span> <span id="estOG"></span> (<span id="platoOG"></span> P)<br>
                        <span class="item">Est FG:</span> <span id="estFG"></span> (<span id="platoFG"></span> P)<br>
                        <span class="item">Preboil Vol:</span> $DISPLAY_BOIL_SIZE<br>
                        <span class="item">Preboil SG:</span> <span id="actual_preOG"></span> (<span id="plato_preOG"></span> P)<br>
                    </div>
                </td>

                <td width="25%">
                    <div class="col4">
                        <span class="item">Recipe Date:</span> $DATE<br>
                        <span class="item">Total Grain:</span> $TOTAL_GRAINS<br>
                        <span class="item">Brewing Date: _____________</span><br>
                        <span class="item">Packaging Date: ___________</span><br>
                    </div>
                </td>
            </tr>
        </table>
...

        <ul class="checklist">
            <li>Switch power off HLT and set BK ALM</li>
            <li>$SPARGE_STEPS (Total $SPARGE_VOLUME)</li>
            <li>Measure pre-boil gravity _________&nbsp;&nbsp; (target: $PRE_BOIL_OG, <span id="actual_preOG2"></span> SG, total points <span id="total_points"></span>)</li>
            <li>Measure pre-boil volume _________&nbsp;&nbsp; (target: $DISPLAY_BOIL_SIZE, <span id="preboil_vol_shrinked"></span>)</li>
            <li>Sanitize bucket, airlock, o2, all remaining cold side equipment</li>
        </ul>

...

This will hold  me over for now... i have the BS estimated preboil SG, the actual expected SG, the "expanded" or "hot" volume of preboil water as well as the "cooled" volume if i need to do any quick math (SG * cooled volume = total points, divide by expected volume to get new OG... etc).

This produces outputs like this:
Code: [Select]
Batch: 6.25 gal     Packaged Vol: 5.00 gal  Est OG: 1.056 (13.8 P)          Recipe Date: 03/12/20
SRM: 7.0 SRM        Est Mash Eff: 80.0 %    Est FG: 1.015 (3.8 P)           Total Grain: 12.04 lb
IBU: 40.4 IBUs      Est BH Eff: 80.00 %     Preboil Vol: 8.01 gal           Brewing Date: _____________
Est ABV: 5.3 %      Boil time: 60 min       Preboil SG: 1.0443 (11.0 P)     Packaging Date: ___________

*** NOTE, i've chosen to include an extra decimal place in pre-boil OG because that rounding error can be important when using that for math later.

 

modification