mash/beerxml.h

Sat, 14 Jul 2018 17:21:25 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Sat, 14 Jul 2018 17:21:25 +0200
changeset 533
49580ca85ab7
parent 143
54f9b5d39e4c
permissions
-rw-r--r--

Versie 0.6.3. MQTT device berichten alleen als een fermenter ingeschakeld is. MQTT fermenter birth en death berichhten als een fementer in of uitgeschakeld wordt. MQTT node death bericht bij normaal afsluiten van de daemon. Alle MQTT persistent berichten worden nu goed opgeruikmd.

#ifndef	_BEERXML_H
#define	_BEERXML_H


/*
 * See http://www.beerxml.com/beerxml.htm for more information.
 * This standard isn't perfect, but it works. Note that some
 * fields are not well defined. Some precentages are safe if you
 * declare them as float instead of intergers.
 *
 * The function parseBeerXML() reads the file and puts the
 * contents in the following tree:
 *
 * recipes recipe hops hop
 *                     hop
 *                fermentables fermentable
 *                             fermentable
 *                yeasts yeast
 *                       yeast
 *                miscs misc
 *                      misc
 *                waters water
 *                       water
 *                style
 *                mash mash_step
 *                     mash_step
 *                equipment
 *         recipe hops hop 
 *           and so on.
 */

typedef struct _hop_rec {
    struct _hop_rec	*next;
    char		*name;			/* Name of the hops				*/
    int			version;		/* Should be 1 for this version of the standard	*/
    float		alpha;			/* Percent alpha of hops			*/
    float		amount;			/* Weight in Kilograms of the hops used.	*/
    char		*use;			/* "Boil", "Dry Hop", "Mash", "First Wort" or "Aroma"	*/
    float		time;			/* The time as measured in minutes. 		*/
    char		*notes;			/* Textual notes about the hops.		*/
    char		*type;			/* "Bittering", "Aroma" or "Both"		*/
    char		*form;			/* "Pellet", "Plug" or "Leaf"			*/
    float		beta;			/* Hop beta percentage.				*/
    float		hsi;			/* Hop Stability Index				*/
    char		*origin;		/* Place of origin for the hops			*/
    char		*substitutes;		/* Substitutes that can be used for this hops	*/
    float		humulene;		/* Humulene level in percent.			*/
    float		caryophyllene;		/* Caryophyllene level in percent.		*/
    float		cohumulone;		/* Cohumulone level in percent			*/
    float		myrcene;		/* Myrcene level in percent			*/
} hop_rec;

typedef struct _fermentable_rec {
    struct _fermentable_rec	*next;
    char		*name;			/* Name						*/
    int			version;		/* Record version				*/
    char		*type;			/* "Grain", "Sugar", "Extract", "Dry Extract" or "Adjunct"	*/
    char		*notes;			/* Notes					*/
    float		amount;			/* Weight in KG					*/
    float		yield;			/* Percent dry yield (fine grain)		*/
    float		color;			/* The color of the item in Lovibond		*/
    int			add_after_boil;		/* May be TRUE.					*/
    char		*origin;		/* Country or place of origin			*/
    char		*supplier;		/* Supplier of the grain/extract/sugar		*/
    float		coarse_fine_diff;	/* Percent difference between the coarse grain yield and fine grain yield.	*/
    float		moisture;		/* Percent moisture in the grain.		*/
    float		diastatic_power;	/* The diastatic power of the grain		*/
    float		protein;		/* The percent protein in the grain.		*/
    float		max_in_batch;		/* The recommended maximum percentage		*/
    int			recommend_mash;		/* TRUE if it is recommended to mash		*/
} fermentable_rec;

typedef struct _equipment_rec {
    char		*name;			/* Name of the equipment profile		*/
    int			version;		/* Version of the equipment record.		*/
    float		boil_size;		/* The pre-boil volume used.			*/
    float		batch_size;		/* The target volume of the batch.		*/
    float		tun_volume;		/* Volume of the mash tun in liters.		*/
    float		tun_weight;		/* Weight of the mash tun in kilograms.		*/
    float		tun_specific_heat;	/* The specific heat of the mash tun.		*/
    float		top_up_water;		/* The amount of top up water normally added.	*/
    float		trub_chiller_loss;	/* The amount of wort normally lost.		*/
    float		evap_rate;		/* Perc of wort lost to evaporation per hour.	*/
    float		boil_time;		/* The normal amount of time one boils		*/
    int			calc_boil_volume;	/* Flag denoting to calculate the boil size.	*/
    float		lauter_deadspace;	/* Amount lost to the lauter tun.		*/
    float		top_up_kettle;		/* Amount normally added to the boil 		*/
    float		hop_utilization;	/* Large batch hop utilization.			*/
    char		*notes;			/* Notes associated with the equipment.		*/
} equipment_rec;

typedef struct _yeast_rec {
    struct _yeast_rec	*next;
    char		*name;			/* Name of the yeast.				*/
    int			version;		/* Version of the standard.			*/
    char		*type;			/* “Ale”, “Lager”, “Wheat”, “Wine”, “Champagne”	*/
    char		*form;			/* “Liquid”, “Dry”, “Slant” or “Culture”	*/
    float		amount;			/* The amount of yeast, measured in liters.	*/
    int			amount_is_weight;	/* TRUE if the amount measurement is a weight	*/
    char		*laboratory;		/* The laboratory that produced the yeast.	*/
    char		*product_id;		/* The manufacturer’s product ID label		*/
    float		min_temperature;	/* The minimum recommended temperature		*/
    float		max_temperature;	/* The maximum recommended temperature		*/
    char		*flocculation;		/* “Low”, “Medium”, “High” or “Very High”	*/
    float		attenuation;		/* Average attenuation for this yeast strain.	*/
    char		*notes;			/* Notes on this yeast strain.			*/
    char		*best_for;		/* Beerstyle this yeast is best suited for.	*/
    int			times_cultured;		/* Number of times this yeast has been reused	*/
    int			max_reuse;		/* Recommended maximum reuse times		*/
    int			add_to_secondary;	/* Flag this yeast was added for a secondary	*/
} yeast_rec;

typedef struct _misc_rec {
    struct _misc_rec	*next;
    char		*name;			/* Name of the misc item.			*/
    int			version;		/* Version number of this element.		*/
    char		*type;			/* “Spice”, “Fining”, “Water Agent”, “Herb”, “Flavor”, “Other”	*/
    char		*use;			/* “Boil”, “Mash”, “Primary”, “Secondary”, “Bottling”	*/
    float		time;			/* Time the misc was boiled, steeped, mashed, etc in minutes.	*/
    float		amount;			/* Amount of item used. Liters or Weight	*/
    int			amount_is_weight;	/* TRUE if amount is weight			*/
    char		*use_for;		/* Desc. of what the ingredient is used for	*/
    char		*notes;			/* Detailed notes on the item including usage.	*/
} misc_rec;

typedef struct _water_rec {
    struct _water_rec	*next;
    char		*name;			/* Name of the water profile			*/
    int			version;		/* Version of the water record.			*/
    float		amount;			/* Volume of water to use in a recipe in liters	*/
    float		calcium;		/* The amount of calcium (Ca) in ppm		*/
    float		bicarbonate;		/* The amount of bicarbonate (HCO3) in ppm.	*/
    float		sulfate;		/* The amount of Sulfate (SO4) in ppm.		*/
    float		chloride;		/* The amount of Chloride (Cl) in ppm.		*/
    float		sodium;			/* The amount of Sodium (Na) in ppm.		*/
    float		magnesium;		/* The amount of Magnesium (Mg) in ppm.		*/
    float		ph;			/* The PH of the water.				*/
    char		*notes;			/* Notes about the water profile.		*/
} water_rec;

typedef struct _style_rec {
    char		*name;			/* Name of the style profile			*/
    char		*category;		/* Category that this style belongs to		*/
    int			version;		/* Version of the style record.			*/
    char		*category_number;	/* Number or identifier for this style category	*/
    char		*style_letter;		/* The specific style number or subcategory	*/
    char		*style_guide;		/* The name of the style guide			*/
    char		*type;			/* “Lager”, “Ale”, “Mead”, “Wheat”, “Mixed” or “Cider”	*/
    float		og_min;			/* Original gracity				*/
    float		og_max;
    float		fg_min;			/* Final gravity				*/
    float		fg_max;
    float		ibu_min;		/* Bitterness for this style as measured	*/
    float		ibu_max;		/* in International Bitterness Units (IBUs)	*/
    float		color_min;		/* The recommended color in SRM			*/
    float		color_max;
    float		carb_min;		/* The recommended carbonation for this style	*/
    float		carb_max;		/* in volumes of CO2				*/
    float		abv_min;		/* Alcohol by volume as a percentage.		*/
    float		abv_max;
    char		*notes;			/* Description of the style, history		*/
    char		*profile;		/* Flavor and aroma profile for this style	*/
    char		*ingredients;		/* Suggested ingredients for this style		*/
    char		*examples;		/* Example beers of this style.			*/
} style_rec;

typedef struct _mash_step {
    struct _mash_step	*next;
    char		*name;			/* Name of this step				*/
    int			version;		/* Record version				*/
    char		*type;			/* “Infusion”, “Temperature” or “Decoction”	*/
    float		infuse_amount;		/* Wateri vol. in liters to infuse in this step	*/
    float		infuse_temp;		/* niet officieel - berekenen	*/
    float		step_temp;		/* The target temperature for this step		*/
    float		end_temp;		/* The final temperature you can expect		*/
    float		step_time;		/* The number of minutes to spend		*/
    float		ramp_time;		/* Time to achieve the desired step temperature	*/
    float		water_grain_ratio;	/* niet officieel - berekenen	*/
    float		decotion_amt;		/* niet officieel	*/
} mash_step;

typedef struct _mash_profile {
    char                *name;                  /* Name of mash method                          */
    int			version;		/* Record version				*/
    char                *notes;                 /* Additional notes                             */
    float               grain_temp;             /* The temperature of the grain                 */
    mash_step           *mash_steps;            /* List of mash steps                           */
    float               tun_temp;               /* Grain tun temperature                        */
    float               sparge_temp;            /* Temperature of the sparge water              */
    float               ph;                     /* PH of the sparge.                            */
    float               tun_weight;             /* Weight of the mash tun in kilograms          */
    float               tun_specific_heat;      /* Specific heat of the tun material            */
    int	                equip_adjust;		/* Adjust for tun heat loss			*/
} mash_profile;

typedef struct _brew_equipment {
    char 		*name;			/* Name of the equipment profile		*/
    float		boil_size;		/* The pre-boil volume for this equipment setup	*/
    float		batch_size;		/* The target volume of the batch		*/
    float		tun_volume;		/* Volume of the mash tun in liters.		*/
    float		tun_weight;		/* Weight of the mash tun in kilograms.		*/
    float		tun_specific_heat;	/* The specific heat of the mash tun.		*/
    float		top_up_water;		/* The amount of top up water b4 fermenting	*/
    float		trub_chiller_loss;	/* Amount of wort lost during cooling		*/
    float		evap_rate;		/* Perc of wort lost to evaporation per hour.	*/
    float		boil_time;		/* The normal amount of boil time for this eq.	*/
    int			calc_boil_volume;	/* Should the program calculate the boil size.	*/
    float		lauter_dead_space;	/* Amount lost to the lauter tun.		*/
    float		top_up_kettle;		/* Amount added to the boil kettle b4 the boil.	*/
    float		hop_utilization;	/* Large batch hop utilization.			*/
    char		*notes;			/* Notes for this equipment.			*/
} brew_equipment;

typedef struct _recipe_rec {
    struct _recipe_rec 	*next;
    int			version;		/* Current version is 1				*/
    char                *name;                  /* Name of the recipe                           */
    char                *type;                  /* “Extract”, “Partial Mash” or “All Grain”     */
    style_rec		*style;			/* style record					*/
    equipment_rec	*equipment;		/* equipemnt record				*/
    char                *brewer;                /* Name of the brewer                           */
    char		*asst_brewer;		/* Name of the assistent brewer			*/
    float               batch_size;             /* Target size of the finished batch in liters. */
    float               boil_size;              /* Starting size for the main boil in liters    */
    float               boil_time;              /* The total time to boil the wort in minutes.  */
    float               efficiency;             /* The percent brewhouse efficiency             */
    hop_rec		*hops;			/* hops						*/
    fermentable_rec	*fermentables;		/* Fermentables list				*/
    misc_rec		*miscs;			/* Misc ingredients				*/
    yeast_rec		*yeasts;		/* Yeasts					*/
    water_rec		*waters;		/* Water profiles				*/
    mash_profile	*mash;			/* Mash profile					*/
    char		*notes;			/* Notes associated with this recipe		*/
    char		*taste_notes;		/* Tasting notes – may be multiline.		*/
    float		taste_rating;		/* Number between zero and 50.0 (BJCP system)	*/
    float		og;			/* The measured original specific gravity.	*/
    float		fg;			/* The measured final gravity of the beer.	*/
    int			fermentation_stages;	/* The number of fermentation stages used	*/
    int			primary_age;		/* Time spent in the primary in days		*/
    float		primary_temp;		/* Temp in Celsius for the primary fermentation	*/
    int			secondary_age;		/* Time spent in the secondary in days.		*/
    float		secondary_temp;		/* Temp in C for the secondary fermentation.	*/
    int			tertiary_age;		/* Time spent in the third fermenter in days.	*/
    float		tertiary_temp;		/* Temperature in the tertiary fermenter.	*/
    int			age;			/* Time to age the beer in days after bottling.	*/
    float		age_temp;		/* Temperature for aging after bottling.	*/
    char		*date;			/* Date brewed in a easily recognizable format.	*/
    float		carbonation;		/* Volume of CO2 used to carbonate this beer.	*/
    int			forced_carbonation;	/* TRUE if forced carbonated using CO2 pressure	*/
    char		*priming_sugar_name;	/* Text describing the priming agent.		*/
    float		carbonation_temp;	/* Temp for either bottling/forced carbonation.	*/
    float		priming_sugar_equiv;	/* Factor used to convert this priming agent	*/
    float		keg_priming_factor;	/* Used 2 factor amount of sugar for containers	*/
} recipe_rec;


int parseBeerXML(char *);
void printBeerXML(void);


#endif

mercurial