# HG changeset patch # User Michiel Broek # Date 1718291520 -7200 # Node ID 150485d06b304a2b404020d7682eb4236feafdf5 # Parent 2ae5a4697a45a8d6b6bd35c159fecff3aef898aa Brought the web interface in sync with the new bmsapp water treatment. diff -r 2ae5a4697a45 -r 150485d06b30 www/includes/db_product.php --- a/www/includes/db_product.php Fri May 03 21:02:54 2024 +0200 +++ b/www/includes/db_product.php Thu Jun 13 17:12:00 2024 +0200 @@ -73,6 +73,8 @@ $sql .= "', eq_mash_volume='" . $_POST['eq_mash_volume']; $sql .= "', eq_mash_max='" . $_POST['eq_mash_max']; $sql .= "', eq_efficiency='" . $_POST['eq_efficiency']; + $sql .= "', eq_HLT_volume='" . $_POST['eq_HLT_volume']; + $sql .= "', eq_HLT_deadspace='" . $_POST['eq_HLT_deadspace']; // brewdate if ($_POST['brew_date_start'] == '') $sql .= "', brew_date_start=NULL"; @@ -247,7 +249,15 @@ $sql .= "', wb_sodium='" . $_POST['wb_sodium']; $sql .= "', wb_magnesium='" . $_POST['wb_magnesium']; $sql .= "', wb_total_alkalinity='" . $_POST['wb_total_alkalinity']; - $sql .= "', wb_ph='" . $_POST['wb_ph']; + $sql .= "', wb_ph='" . $_POST['wb_ph']; + $sql .= "', tw_name='" . $_POST['tw_name']; + $sql .= "', tw_calcium='" . $_POST['tw_calcium']; + $sql .= "', tw_sulfate='" . $_POST['tw_sulfate']; + $sql .= "', tw_chloride='" . $_POST['tw_chloride']; + $sql .= "', tw_sodium='" . $_POST['tw_sodium']; + $sql .= "', tw_magnesium='" . $_POST['tw_magnesium']; + $sql .= "', tw_total_alkalinity='" . $_POST['tw_total_alkalinity']; + $sql .= "', tw_ph='" . $_POST['tw_ph']; $sql .= "', wa_acid_name='" . $_POST['wa_acid_name']; $sql .= "', wa_acid_perc='" . $_POST['wa_acid_perc']; $sql .= "', wa_base_name='" . $_POST['wa_base_name']; @@ -718,6 +728,8 @@ $brew .= ',"eq_chiller_volume":' . floatval($row['eq_chiller_volume']); $brew .= ',"eq_chiller_lpm":' . floatval($row['eq_chiller_lpm']); $brew .= ',"eq_chiller_loss":' . floatval($row['eq_chiller_loss']); + $brew .= ',"eq_HLT_volume":' . floatval($row['eq_HLT_volume']); + $brew .= ',"eq_HLT_deadspace":' . floatval($row['eq_HLT_deadspace']); $brew .= ',"brew_date_start":"' . $row['brew_date_start']; $brew .= '","brew_mash_ph":' . floatval($row['brew_mash_ph']); $brew .= ',"brew_mash_sg":' . floatval($row['brew_mash_sg']); @@ -865,7 +877,15 @@ $brew .= ',"wb_sodium":' . floatval($row['wb_sodium']); $brew .= ',"wb_magnesium":' . floatval($row['wb_magnesium']); $brew .= ',"wb_total_alkalinity":' . floatval($row['wb_total_alkalinity']); - $brew .= ',"wb_ph":' . floatval($row['wb_ph']); + $brew .= ',"wb_ph":' . floatval($row['wb_ph']); + $brew .= ',"tw_name":"' . str_replace($escapers, $replacements, $row['tw_name']); + $brew .= '","tw_calcium":' . floatval($row['tw_calcium']); + $brew .= ',"tw_sulfate":' . floatval($row['tw_sulfate']); + $brew .= ',"tw_chloride":' . floatval($row['tw_chloride']); + $brew .= ',"tw_sodium":' . floatval($row['tw_sodium']); + $brew .= ',"tw_magnesium":' . floatval($row['tw_magnesium']); + $brew .= ',"tw_total_alkalinity":' . floatval($row['tw_total_alkalinity']); + $brew .= ',"tw_ph":' . floatval($row['tw_ph']); $brew .= ',"wa_acid_name":' . $row['wa_acid_name']; $brew .= ',"wa_acid_perc":' . $row['wa_acid_perc']; $brew .= ',"wa_base_name":' . $row['wa_base_name']; diff -r 2ae5a4697a45 -r 150485d06b30 www/js/prod_view.js --- a/www/js/prod_view.js Fri May 03 21:02:54 2024 +0200 +++ b/www/js/prod_view.js Thu Jun 13 17:12:00 2024 +0200 @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (C) 2018-2023 + * Copyright (C) 2018-2024 * * Michiel Broek * @@ -177,6 +177,8 @@ { name: 'eq_chiller_volume', type: 'float' }, { name: 'eq_chiller_lpm', type: 'float' }, { name: 'eq_chiller_loss', type: 'float' }, + { name: 'eq_HLT_volume', type: 'float' }, + { name: 'eq_HLT_deadspace', type: 'float' }, { name: 'brew_date_start', type: 'string' }, { name: 'brew_mash_ph', type: 'float' }, { name: 'brew_mash_sg', type: 'float' }, @@ -325,6 +327,14 @@ { name: 'wb_magnesium', type: 'float' }, { name: 'wb_total_alkalinity', type: 'float' }, { name: 'wb_ph', type: 'float' }, + { name: 'tw_name', type: 'string' }, + { name: 'tw_calcium', type: 'float' }, + { name: 'tw_sulfate', type: 'float' }, + { name: 'tw_chloride', type: 'float' }, + { name: 'tw_sodium', type: 'float' }, + { name: 'tw_magnesium', type: 'float' }, + { name: 'tw_total_alkalinity', type: 'float' }, + { name: 'tw_ph', type: 'float' }, { name: 'wa_acid_name', type: 'int' }, { name: 'wa_acid_perc', type: 'int' }, { name: 'wa_base_name', type: 'int' }, @@ -390,6 +400,8 @@ $('#eq_chiller_lpm').val(dataRecord.eq_chiller_lpm); $('#eq_chiller_loss').val(dataRecord.eq_chiller_loss); $('#eq_fermenter_volume').val((dataRecord.eq_batch_size / 1.04) - dataRecord.eq_trub_loss - dataRecord.eq_chiller_loss ); + $('#eq_HLT_volume').val(dataRecord.eq_HLT_volume); + $('#eq_HLT_deadspace').val(dataRecord.eq_HLT_deadspace); // Brewdate $('#brew_date_start').val(dataRecord.brew_date_start); $('#brew_mash_ph').val(dataRecord.brew_mash_ph); @@ -563,6 +575,16 @@ $('#wb_magnesium').val(dataRecord.wb_magnesium); $('#wb_total_alkalinity').val(dataRecord.wb_total_alkalinity); $('#wb_ph').val(dataRecord.wb_ph); + $('#tw_name').val(dataRecord.tw_name); + $('#tw_calcium').val(dataRecord.tw_calcium); + $('#tw_sulfate').val(dataRecord.tw_sulfate); + $('#tw_chloride').val(dataRecord.tw_chloride); + $('#tw_sodium').val(dataRecord.tw_sodium); + $('#tw_magnesium').val(dataRecord.tw_magnesium); + $('#tw_total_alkalinity').val(dataRecord.tw_total_alkalinity); + $('#tw_bicarbonate').val(dataRecord.tw_total_alkalinity * 1.22); + $('#tw_ph').val(dataRecord.tw_ph); + $('#wa_acid_name').val(dataRecord.wa_acid_name); $('#wa_acid_perc').val(dataRecord.wa_acid_perc); $('#starter_type').val(StarterTypeData[dataRecord.starter_type].nl); @@ -2392,8 +2414,6 @@ } ph = TpH; dataRecord.wb_ph = ph; - $('#wb_ph').val(Round(ph, 2)); - $('#est_mash_ph').val(Round(ph, 2)); } else { /* Manual calculate pH */ $('.c_mashph').hide(); @@ -2429,10 +2449,11 @@ bicarbonate = wg_bicarbonate - protonDeficit * frac / liters; total_alkalinity = bicarbonate * 50 / 61; ph = pHa; - $('#wb_ph').val(Round(ph, 2)); - $('#est_mash_ph').val(Round(ph, 2)); } + $('#wb_ph').val(Round(ph, 2)); + $('#est_mash_ph').val(Round(ph, 2)); + if ((AT == 3) && (liters > 0)) { // Sulfuric / Zwavelzuur RA = parseFloat($('#wa_caso4').jqxNumberInput('decimal')) * MMSO4 / MMCaSO4 + parseFloat($('#wa_mgso4').jqxNumberInput('decimal')) * MMSO4 / MMMgSO4 + @@ -2492,6 +2513,11 @@ Res = 'hoog'; setRangeIndicator('so4_cl', Res); + $('#tw_bicarbonate').val(Round(Bicarbonate(dataRecord.tw_total_alkalinity, dataRecord.tw_ph))); + $('#tw_hardness').val(Round(Hardness(dataRecord.tw_calcium, dataRecord.tw_magnesium), 1)); + $('#tw_ra').val(Round(ResidualAlkalinity(dataRecord.tw_total_alkalinity, dataRecord.tw_calcium, dataRecord.tw_magnesium), 1)); + + calcSparge(); $('#wb_calcium').val(Round(calcium, 1)); $('#wb_magnesium').val(Round(magnesium, 1)); $('#wb_sodium').val(Round(sodium, 1)); @@ -2502,6 +2528,30 @@ $('#wb_hardness').val(Hardness(calcium, magnesium)); $('#wb_ra').val(ResidualAlkalinity(total_alkalinity, calcium, magnesium)); + /* Mix sparge and mash waters to display the final water. */ + calcium = mix(dataRecord.wg_amount, dataRecord.sparge_volume, calcium, parseFloat($('#sw_calcium').jqxNumberInput('decimal'))); + magnesium = mix(dataRecord.wg_amount, dataRecord.sparge_volume, magnesium, parseFloat($('#sw_magnesium').jqxNumberInput('decimal'))); + sodium = mix(dataRecord.wg_amount, dataRecord.sparge_volume, sodium, parseFloat($('#sw_sodium').jqxNumberInput('decimal'))); + sulfate = mix(dataRecord.wg_amount, dataRecord.sparge_volume, sulfate, parseFloat($('#sw_sulfate').jqxNumberInput('decimal'))); + chloride = mix(dataRecord.wg_amount, dataRecord.sparge_volume, chloride, parseFloat($('#sw_chloride').jqxNumberInput('decimal'))); + total_alkalinity = mix(dataRecord.wg_amount, dataRecord.sparge_volume, total_alkalinity, parseFloat($('#sw_total_alkalinity').jqxNumberInput('decimal'))); + ph = -Math.log10(((Math.pow(10, -dataRecord.wb_ph) * dataRecord.wg_amount) + + (Math.pow(10, -parseFloat($('#sw_ph').jqxNumberInput('decimal'))) * dataRecord.sparge_volume)) / + (dataRecord.wg_amount + dataRecord.sparge_volume)); + bicarbonate = Bicarbonate(total_alkalinity, ph); + + $('#fw_amount').val(dataRecord.wg_amount + dataRecord.sparge_volume); + $('#fw_calcium').val(Round(calcium, 1)); + $('#fw_magnesium').val(Round(magnesium, 1)); + $('#fw_sodium').val(Round(sodium, 1)); + $('#fw_sulfate').val(Round(sulfate, 1)); + $('#fw_chloride').val(Round(chloride, 1)); + $('#fw_bicarbonate').val(Round(bicarbonate, 1)); + $('#fw_total_alkalinity').val(Round(total_alkalinity, 1)); + $('#fw_ph').val(Round(ph, 2)); + $('#fw_hardness').val(Round(Hardness(calcium, magnesium), 1)); + $('#fw_ra').val(Round(ResidualAlkalinity(total_alkalinity, calcium, magnesium), 1)); + if (calcium < 40) { setRangeIndicator('calcium', 'laag'); } else if (calcium > 150) { @@ -2542,9 +2592,9 @@ setRangeIndicator('chloride', 'hoog'); setRangeIndicator('sulfate', 'hoog'); } - if (ph < 5.2) { + if (ph < 5.0) { setRangeIndicator('ph', 'laag'); - } else if (ph > 5.6) { + } else if (ph > 5.5) { setRangeIndicator('ph', 'hoog'); } else { setRangeIndicator('ph', 'normaal'); @@ -2554,7 +2604,6 @@ } else { setRangeIndicator('bicarbonate', 'normaal'); } - calcSparge(); calcMiscs(); calcSupplies(); } @@ -2611,6 +2660,7 @@ } /* Show the spargewate with salt additions */ + $('#sw_amount').val(dataRecord.sparge_volume); $('#sw_calcium').val(Round(ws_calcium, 1)); $('#sw_magnesium').val(Round(ws_magnesium, 1)); $('#sw_sodium').val(Round(ws_sodium, 1)); @@ -2935,6 +2985,7 @@ $('#eq_chiller_type').jqxInput({ theme: theme, width: 180, height: 23 }); $('#eq_chiller_to79').jqxNumberInput(Show0dec); $('#eq_chiller_volume,#eq_chiller_lpm,#eq_chiller_loss').jqxNumberInput(Show2dec); + $('#eq_HLT_volume,#eq_HLT_deadspace').jqxNumberInput(Show1dec); // Tab 3, Fermentables $('#est_color2').jqxTooltip({ content: 'De kleur in EBC. Dit wordt automatisch berekend.' }); @@ -3070,6 +3121,12 @@ $('#tgt_so4_cl,#got_so4_cl').jqxNumberInput(Show1wat); $('#preboil_ph').jqxNumberInput(Show2wat); + // Target water + $('#tw_name').jqxInput({ theme: theme, width: 200, height: 23 }); + $('#tw_calcium,#tw_magnesium,#tw_sodium,#tw_bicarbonate,#tw_total_alkalinity,#tw_chloride,#tw_sulfate').jqxNumberInput(Show1wat); + $('#tw_hardness').jqxNumberInput(Show1wat); + $('#tw_ph').jqxNumberInput(Show2wat); + $('#tw_ra').jqxNumberInput(Show1wat); // Water source 1 $('#w1_name').jqxInput({ theme: theme, width: 200, height: 23 }); $('#w1_button').jqxRadioButton({ theme: theme, width: 50, height: 23, disabled: true }); @@ -3092,18 +3149,13 @@ $('#wg_hardness').jqxNumberInput(Show1wat); $('#wg_ra').jqxNumberInput(Show1wat); // Water treated - $('#wb_calcium').jqxTooltip({ content: 'De ideale hoeveelheid Calcium is tussen 40 en 150.'}); $('#wb_calcium').jqxNumberInput(Show1wat); - $('#wb_magnesium').jqxTooltip({ content: 'De ideale hoeveelheid Magnesium is tussen 5 en 40.'}); $('#wb_magnesium').jqxNumberInput(Show1wat); - $('#wb_sodium').jqxTooltip({ content: 'De ideale hoeveelheid Natrium is lager dan 150.'}); $('#wb_sodium').jqxNumberInput(Show1wat); - $('#wb_chloride').jqxTooltip({ content: 'De ideale hoeveelheid Chloride is tussen 50 en 150. Samen met Sulfaat minder dan 500.'}); $('#wb_chloride').jqxNumberInput(Show1wat); - $('#wb_sulfate').jqxTooltip({ content: 'De ideale hoeveelheid Sulfaat is tussen 50 en 400. Samen met Chloride minder dan 500.'}); $('#wb_sulfate').jqxNumberInput(Show1wat); - $('#wb_bicarbonate').jqxTooltip({ content: '0 tot 50 lichte bieren, 50 tot 150 amber bieren, 150 tot 250 donkere bieren.'}); $('#wb_bicarbonate').jqxNumberInput(Show1wat); + $('#wb_total_alkalinity').jqxNumberInput(Show1wat); $('#wb_ph').jqxNumberInput(Show2wat); $('#wb_hardness').jqxNumberInput(Show1wat); $('#wb_ra').jqxNumberInput(Show1wat); @@ -3119,6 +3171,25 @@ $('#sw_ph').jqxNumberInput(Show2wat); $('#sw_hardness').jqxNumberInput(Show1wat); $('#sw_ra').jqxNumberInput(Show1wat); + // Final water + $('#fw_amount').jqxNumberInput(Show1wat); + $('#fw_calcium').jqxTooltip({ content: 'De ideale hoeveelheid Calcium is tussen 40 en 150.'}); + $('#fw_calcium').jqxNumberInput(Show1wat); + $('#fw_magnesium').jqxTooltip({ content: 'De ideale hoeveelheid Magnesium is tussen 5 en 40.'}); + $('#fw_magnesium').jqxNumberInput(Show1wat); + $('#fw_sodium').jqxTooltip({ content: 'De ideale hoeveelheid Natrium is lager dan 150.'}); + $('#fw_sodium').jqxNumberInput(Show1wat); + $('#fw_bicarbonate').jqxTooltip({ content: '0 tot 50 lichte bieren, 50 tot 150 amber bieren, 150 tot 250 donkere bieren.'}); + $('#fw_bicarbonate').jqxNumberInput(Show1wat); + $('#fw_total_alkalinity').jqxNumberInput(Show1wat); + $('#fw_chloride').jqxTooltip({ content: 'De ideale hoeveelheid Chloride is tussen 50 en 150. Samen met Sulfaat minder dan 500.'}); + $('#fw_chloride').jqxNumberInput(Show1wat); + $('#fw_sulfate').jqxTooltip({ content: 'De ideale hoeveelheid Sulfaat is tussen 50 en 400. Samen met Chloride minder dan 500.'}); + $('#fw_sulfate').jqxNumberInput(Show1wat); + $('#fw_ph').jqxTooltip({ content: 'De kook pH is ideaal tussen 5.0 en 5.5.'}); + $('#fw_ph').jqxNumberInput(Show2wat); + $('#fw_hardness').jqxNumberInput(Show1wat); + $('#fw_ra').jqxNumberInput(Show1wat); // Water agents $('#wa_cacl2').jqxTooltip({ content: 'Voor het maken van een ander waterprofiel. Voegt calcium en chloride toe. Voor het verbeteren van zoetere bieren.' }); diff -r 2ae5a4697a45 -r 150485d06b30 www/prod_view.php --- a/www/prod_view.php Fri May 03 21:02:54 2024 +0200 +++ b/www/prod_view.php Thu Jun 13 17:12:00 2024 +0200 @@ -182,18 +182,25 @@ Overbrengen - + Heetwater Volume eind koken L:
Extra water in gistvat L:
- - - Volume naar gistvat L: + Tank volume L: +
+ + Volume naar gistvat L:
+ + Dode ruimte L: +
+ + + @@ -401,6 +408,21 @@ pH Hardheid RA + + + + + +
+
+
+
+
+
+
+
+
+
@@ -463,21 +485,6 @@
- Resultaat: - -
-
-
-
-
-
-
-
-
- - - - Behandeld spoelwater:
@@ -491,6 +498,36 @@
+ + + Behandeld brouwwater: + +
+
+
+
+
+
+
+
+
+
+
+ + + Resultaat: + +
+
+
+
+
+
+
+
+
+ +