Wed, 03 Jun 2020 21:02:57 +0200
Fixed missing light_state commands for the webcam.
<?php require_once($_SERVER['DOCUMENT_ROOT'].'/config.php'); require_once($_SERVER['DOCUMENT_ROOT'].'/includes/formulas.php'); $link = mysqli_connect(DBASE_HOST,DBASE_USER,DBASE_PASS,DBASE_NAME); if (! $link) { die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); } if (! mysqli_set_charset($link, "utf8" )) { echo "error"; return 1; } //setlocale ( LC_ALL, 'nl_NL.UTF-8'); if (isset($_GET["record"])) $record = $_GET["record"]; else $record = 148; $result = mysqli_query($link, "SELECT * FROM recipes WHERE record='".$record."'"); $row = mysqli_fetch_array($result); $recipetype = array( 'Extract', 'Partial Mash', 'All Grain' ); $styletype = array( 'Lager', 'Ale', 'Mead', 'Wheat', 'Mixed', 'Cider' ); $hoptype = array( 'Bittering', 'Aroma', 'Both' ); $hopform = array( 'Pellet', 'Plug', 'Leaf', 'Leaf', 'Leaf' ); $hopuse = array( 'Mash', 'First wort', 'Boil', 'Aroma', 'Whirlpool', 'Dry hop' ); $fermentabletype = array( 'Grain', 'Sugar', 'Extract', 'Dry extract', 'Adjunct' ); $graintype = array( 'Base', 'Roast', 'Crystal', 'Kilned', 'Sour malt', 'Special', 'No malt' ); $yeasttype = array( 'Lager', 'Ale', 'Wheat', 'Wine', 'Champagne', 'Other', 'Other', 'Other', 'Other', 'Other' ); $yeastform = array( 'Liquid', 'Dry', 'Slant', 'Culture', 'Frozen', 'Bottle', 'Dry' ); $yeastuse = array( 'Primary', 'Secondary', 'Tertiary', 'Bottle' ); $misctype = array( 'Spice', 'Herb', 'Flavor', 'Fining', 'Water agent', 'Yeast nutrient', 'Other' ); $miscuse = array( 'Starter', 'Mash', 'Boil', 'Primary', 'Secondary', 'Bottling' ); $mashsteptype = array( 'Infusion', 'Temperature', 'Decoction' ); $colormethod = array( 'Morey', 'Mosher', 'Daniels', 'Halberstadt', 'Naudts' ); $ibumethod = array( 'Tinseth', 'Rager', 'Daniels', 'Garetz', 'Mosher', 'Noonan' ); function field($x, $field, $value) { xmlwriter_start_element($x, $field); xmlwriter_text($x, $value); xmlwriter_end_element($x); } /* * Create beerxml output */ $xw = xmlwriter_open_memory(); xmlwriter_set_indent($xw, 1); $res = xmlwriter_set_indent_string($xw, ' '); xmlwriter_start_document($xw, '1.0', 'UTF-8'); xmlwriter_start_element($xw, 'RECIPES'); xmlwriter_start_element($xw, 'RECIPE'); // Recipe basics field($xw, 'VERSION', '1'); field($xw, 'NAME', $row['name']); field($xw, 'NOTES', $row['notes']); field($xw, 'TYPE', $recipetype[$row['type']]); field($xw, 'BREWER', 'Anonymous'); field($xw, 'BATCH_SIZE', sprintf("%.4f",floatval($row['batch_size']))); field($xw, 'BOIL_SIZE', sprintf("%.4f",floatval($row['boil_size']))); field($xw, 'BOIL_TIME', sprintf("%.3f",floatval($row['boil_time']))); field($xw, 'EFFICIENCY', sprintf("%.4f",floatval($row['efficiency']))); if (floatval($row['est_og']) > 0) { field($xw, 'EST_OG', sprintf("%.3f",floatval($row['est_og']))); } if (floatval($row['est_fg']) > 0) { field($xw, 'EST_FG', sprintf("%.3f",floatval($row['est_fg']))); } if (floatval($row['est_abv']) > 0) { field($xw, 'EST_ABV', sprintf("%.1f",floatval($row['est_abv']))); } if (floatval($row['est_color']) > 0) { field($xw, 'EST_COLOR', sprintf("%.6f", ebc_to_srm(floatval($row['est_color'])))); field($xw, 'COLOR_METHOD', $colormethod[$row['color_method']]); } if (floatval($row['est_ibu']) > 0) { field($xw, 'EST_IBU', sprintf("%.1f",floatval($row['est_ibu']))); field($xw, 'IBU_METHOD', $ibumethod[$row['ibu_method']]); } // Style xmlwriter_start_element($xw, 'STYLE'); field($xw, 'VERSION', '1'); field($xw, 'NAME', $row['st_name']); field($xw, 'CATEGORY', $row['st_category']); field($xw, 'CATEGORY_NUMBER', $row['st_category_number']); field($xw, 'STYLE_LETTER', $row['st_letter']); field($xw, 'STYLE_GUIDE', $row['st_guide']); field($xw, 'TYPE', $styletype[$row['st_type']]); field($xw, 'OG_MIN', sprintf("%.3f",floatval($row['st_og_min']))); field($xw, 'OG_MAX', sprintf("%.3f",floatval($row['st_og_max']))); field($xw, 'FG_MIN', sprintf("%.3f",floatval($row['st_fg_min']))); field($xw, 'FG_MAX', sprintf("%.3f",floatval($row['st_fg_max']))); field($xw, 'IBU_MIN', sprintf("%.0f",floatval($row['st_ibu_min']))); field($xw, 'IBU_MAX', sprintf("%.0f",floatval($row['st_ibu_max']))); field($xw, 'COLOR_MIN', sprintf("%.2f",ebc_to_srm(floatval($row['st_color_min'])))); field($xw, 'COLOR_MAX', sprintf("%.2f",ebc_to_srm(floatval($row['st_color_max'])))); field($xw, 'CARB_MIN', sprintf("%.1f",floatval($row['st_carb_min']))); field($xw, 'CARB_MAX', sprintf("%.1f",floatval($row['st_carb_max']))); field($xw, 'ABV_MIN', sprintf("%.1f",floatval($row['st_abv_min']))); field($xw, 'ABV_MAX', sprintf("%.1f",floatval($row['st_abv_max']))); xmlwriter_end_element($xw); // STYLE xmlwriter_start_element($xw, 'EQUIPMENT'); field($xw, 'VERSION', '1'); field($xw, 'NAME', 'Dummy Brewery'); field($xw, 'BATCH_SIZE', sprintf("%.2f",floatval($row['batch_size']))); field($xw, 'BOIL_SIZE', sprintf("%.2f",floatval($row['boil_size']))); field($xw, 'BOIL_TIME', sprintf("%.0f",floatval($row['boil_time']))); xmlwriter_end_element($xw); // EQUIPMENT xmlwriter_start_element($xw, 'HOPS'); $arr = json_decode($row['json_hops'], true); foreach($arr as $item) { //foreach element in $arr xmlwriter_start_element($xw, 'HOP'); field($xw, 'VERSION', '1'); field($xw, 'NAME', $item['h_name']); field($xw, 'ALPHA', sprintf("%.1f",floatval($item['h_alpha']))); field($xw, 'AMOUNT', sprintf("%.4f",floatval($item['h_amount']))); field($xw, 'USE', $hopuse[$item['h_useat']]); field($xw, 'TIME', $item['h_time']); field($xw, 'TYPE', $hoptype[$item['h_type']]); field($xw, 'FORM', $hopform[$item['h_form']]); field($xw, 'BETA', sprintf("%.1f",floatval($item['h_beta']))); field($xw, 'HSI', sprintf("%.1f",floatval($item['h_hsi']))); field($xw, 'ORIGIN', $item['h_origin']); xmlwriter_end_element($xw); // HOP } xmlwriter_end_element($xw); // HOPS xmlwriter_start_element($xw, 'FERMENTABLES'); $arr = json_decode($row['json_fermentables'], true); foreach($arr as $item) { //foreach element in $arr if ($item['f_added'] <= 3) { xmlwriter_start_element($xw, 'FERMENTABLE'); field($xw, 'VERSION', '1'); field($xw, 'NAME', $item['f_name']); field($xw, 'TYPE', $fermentabletype[$item['f_type']]); field($xw, 'AMOUNT', sprintf("%.4f",floatval($item['f_amount']))); field($xw, 'YIELD', sprintf("%.1f",floatval($item['f_yield']))); field($xw, 'COLOR', sprintf("%.1f",ebc_to_srm(floatval($item['f_color'])))); field($xw, 'ADD_AFTER_BOIL', ($item['f_added'] > 1) ? 'TRUE':'FALSE'); field($xw, 'ORIGIN', $item['f_origin']); field($xw, 'SUPPLIER', $item['f_supplier']); if (floatval($item['f_coarse_fine_diff'])) field($xw, 'COARSE_FINE_DIFF', sprintf("%.4f",floatval($item['f_coarse_fine_diff']))); if (floatval($item['f_moisture'])) field($xw, 'MOISTURE', sprintf("%.4f",floatval($item['f_moisture']))); if (floatval($item['f_diastatic_power'])) field($xw, 'DIASTATIC_POWER', sprintf("%.4f",floatval($item['f_diastatic_power']))); if (floatval($item['f_protein'])) field($xw, 'PROTEIN', sprintf("%.4f",floatval($item['f_protein']))); if (floatval($item['f_max_in_batch'])) field($xw, 'MAX_IN_BATCH', sprintf("%.1f",floatval($item['f_max_in_batch']))); field($xw, 'RECOMMEND_MASH', ($item['f_recommend_mash']) ? 'TRUE':'FALSE'); field($xw, 'GRAINTYPE', $graintype[$item['f_graintype']]); xmlwriter_end_element($xw); // FERMENTABLE } } xmlwriter_end_element($xw); // FERMENTABLES xmlwriter_start_element($xw, 'MISCS'); $arr = json_decode($row['json_miscs'], true); foreach($arr as $item) { xmlwriter_start_element($xw, 'MISC'); field($xw, 'VERSION', '1'); field($xw, 'NAME', $item['m_name']); field($xw, 'TYPE', $misctype[$item['m_type']]); field($xw, 'AMOUNT', sprintf("%.5f",floatval($item['m_amount']))); field($xw, 'AMOUNT_IS_WEIGHT', ($item['m_amount_is_weight']) ? 'TRUE':'FALSE'); field($xw, 'USE', $miscuse[$item['m_use_use']]); field($xw, 'TIME', sprintf("%.0f",floatval($item['m_time']))); xmlwriter_end_element($xw); // MISC } xmlwriter_end_element($xw); // MISCS xmlwriter_start_element($xw, 'YEASTS'); $arr = json_decode($row['json_yeasts'], true); foreach($arr as $item) { //foreach element in $arr xmlwriter_start_element($xw, 'YEAST'); field($xw, 'VERSION', '1'); field($xw, 'NAME', $item['y_name']); field($xw, 'TYPE', $yeasttype[$item['y_type']]); field($xw, 'FORM', $yeastform[$item['y_form']]); field($xw, 'AMOUNT', sprintf("%.5f",floatval($item['y_amount']))); field($xw, 'AMOUNT_IS_WEIGHT', ($item['y_form'] == 1) ? 'TRUE':'FALSE'); field($xw, 'LABORATORY', $item['y_laboratory']); field($xw, 'PRODUCT_ID', $item['y_product_id']); field($xw, 'MIN_TEMPERATURE', sprintf("%.1f",floatval($item['y_min_temperature']))); field($xw, 'MAX_TEMPERATURE', sprintf("%.1f",floatval($item['y_max_temperature']))); field($xw, 'ATTENUATION', sprintf("%.1f",floatval($item['y_attenuation']))); field($xw, 'ADD_TO_SECONDARY', ($item['y_use'] == 0) ? 'FALSE':'TRUE'); xmlwriter_end_element($xw); // YEAST } xmlwriter_end_element($xw); // YEASTS xmlwriter_start_element($xw, 'WATERS'); xmlwriter_start_element($xw, 'WATER'); // Source 1 field($xw, 'VERSION', '1'); field($xw, 'NAME', $row['w1_name']); field($xw, 'AMOUNT', sprintf("%.2f",floatval($row['w1_amount']))); field($xw, 'CALCIUM', sprintf("%.2f",floatval($row['w1_calcium']))); field($xw, 'MAGNESIUM', sprintf("%.2f",floatval($row['w1_magnesium']))); field($xw, 'BICARBONATE', sprintf("%.2f",floatval($row['w1_total_alkalinity']) * 1.22)); field($xw, 'SULFATE', sprintf("%.2f",floatval($row['w1_sulfate']))); field($xw, 'CHLORIDE', sprintf("%.2f",floatval($row['w1_chloride']))); field($xw, 'SODIUM', sprintf("%.2f",floatval($row['w1_sodium']))); field($xw, 'PH', sprintf("%.1f",floatval($row['w1_ph']))); field($xw, 'TOTAL_ALKALINITY', sprintf("%.2f",floatval($row['w1_total_alkalinity']))); xmlwriter_end_element($xw); // WATER if (strlen($row['w2_name'])) { xmlwriter_start_element($xw, 'WATER'); // Source 2 field($xw, 'VERSION', '1'); field($xw, 'NAME', $row['w2_name']); field($xw, 'AMOUNT', sprintf("%.2f",floatval($row['w2_amount']))); field($xw, 'CALCIUM', sprintf("%.2f",floatval($row['w2_calcium']))); field($xw, 'MAGNESIUM', sprintf("%.2f",floatval($row['w2_magnesium']))); field($xw, 'BICARBONATE', sprintf("%.2f",floatval($row['w2_total_alkalinity']) * 1.22)); field($xw, 'SULFATE', sprintf("%.2f",floatval($row['w2_sulfate']))); field($xw, 'CHLORIDE', sprintf("%.2f",floatval($row['w2_chloride']))); field($xw, 'SODIUM', sprintf("%.2f",floatval($row['w2_sodium']))); field($xw, 'PH', sprintf("%.1f",floatval($row['w2_ph']))); field($xw, 'TOTAL_ALKALINITY', sprintf("%.2f",floatval($row['w2_total_alkalinity']))); xmlwriter_end_element($xw); // WATER } xmlwriter_end_element($xw); // WATERS xmlwriter_start_element($xw, 'MASH'); field($xw, 'VERSION', '1'); field($xw, 'NAME', $row['mash_name']); field($xw, 'GRAIN_TEMP', '10.0'); field($xw, 'PH', sprintf("%.1f",floatval($row['sparge_ph']))); field($xw, 'SPARGE_TEMP', sprintf("%.1f",floatval($row['sparge_temp']))); xmlwriter_start_element($xw, 'MASH_STEPS'); $arr = json_decode($row['json_mashs'], true); foreach($arr as $item) { //foreach element in $arr xmlwriter_start_element($xw, 'MASH_STEP'); field($xw, 'VERSION', '1'); field($xw, 'NAME', $item['step_name']); field($xw, 'TYPE', $mashsteptype[$item['step_type']]); if ($item['step_type'] == 0) { field($xw, 'INFUSE_AMOUNT', sprintf("%.3f",floatval($item['step_infuse_amount']))); field($xw, 'INFUSE_TEMP', sprintf("%.3f",floatval($item['step_infuse_temp']))); } if ($item['step_type'] == 2) { field($xw, 'DECOCTION_AMT', sprintf("%.3f",floatval($item['step_infuse_amount']))); } field($xw, 'STEP_TEMP', sprintf("%.1f",floatval($item['step_temp']))); field($xw, 'STEP_TIME', sprintf("%.1f",floatval($item['step_time']))); field($xw, 'RAMP_TIME', sprintf("%.1f",floatval($item['ramp_time']))); field($xw, 'END_TEMP', sprintf("%.1f",floatval($item['end_temp']))); field($xw, 'PH', sprintf("%.1f",floatval($row['mash_ph']))); xmlwriter_end_element($xw); // MASH_STEP } xmlwriter_end_element($xw); // MASH_STEPS xmlwriter_end_element($xw); // MASH xmlwriter_end_element($xw); // RECIPE xmlwriter_end_element($xw); // RECIPES xmlwriter_end_document($xw); $beerxml = xmlwriter_output_memory($xw); Header('Content-type: text/xml'); header('Content-Disposition: attachment; filename="' . $row['name'] . '.xml"'); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Pragma: no-cache'); header('Content-Length: '.strlen($beerxml)); exit($beerxml);