Last active
April 28, 2022 15:49
-
-
Save ricardodani/06362433bc89696270d551cc980bcd05 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def ppm(): | |
REQUIRED_PH = 5.9 | |
solution_volume = int(input('Type solution volume (0-20): ')) | |
desired_solution_volume = int(input('Type desired volume (0-20):')) | |
required_volume = desired_solution_volume - solution_volume | |
print(f"Required volume is {required_volume} liters") | |
current_ppm = int(input('Type current ppm: ')) | |
desired_ppm = int(input('Type desired ppm: ')) | |
current_mg = current_ppm * solution_volume | |
print(f"Current mg is {current_mg}") | |
required_mg = ((desired_ppm * desired_solution_volume) - current_mg) | |
if required_mg < 0: | |
required_mg = 0 | |
print(f"Required mg is {required_mg}") | |
try: | |
required_ppm = required_mg / required_volume | |
except ZeroDivisionError: | |
required_ppm = 0 | |
print( | |
'Solution needed: ' | |
f'volume {required_volume} liters, ' | |
f'eletrocond. {required_ppm:.1f} ppm, ' | |
f'ph {REQUIRED_PH:.1f}' | |
) | |
def get_ml_per_liter(required_ppm): | |
if required_ppm < 100: | |
ml_gallon = 0 | |
elif required_ppm < 200: | |
ml_gallon = 5 | |
elif required_ppm < 400: | |
ml_gallon = 8 | |
elif required_ppm < 600: | |
ml_gallon = 12 | |
elif required_ppm < 800: | |
ml_gallon = 14 | |
elif required_ppm < 1000: | |
ml_gallon = 16 | |
elif required_ppm < 1100: | |
ml_gallon = 17.5 | |
elif required_ppm < 1200: | |
ml_gallon = 19 | |
elif required_ppm < 1300: | |
ml_gallon = 21 | |
else: | |
ml_gallon = 23 | |
gallon_as_liter = 3.79 | |
return ml_gallon / gallon_as_liter | |
ml_per_liter = get_ml_per_liter(required_ppm) | |
total_ml = (required_volume * ml_per_liter) | |
print(f'ml/l => {ml_per_liter:.1f} , so total for {required_volume} l is {total_ml:.1f} ml') | |
def get_propotion_by_purpose(): | |
PURPOSES_PROPORTIONS = { | |
1: (1, 1, 1), | |
2: (3, 2, 1), | |
3: (1, 2, 3) | |
} | |
print( | |
'[Please set the purpose to define ratio]\n' | |
'1. General (cutting, seedling, mild veg., transition)\n' | |
'2. Vegetative\n' | |
'3. Bloom\n' | |
) | |
purpose = None | |
while purpose is None: | |
try: | |
purpose = int(input('Type purpose: ')) | |
assert purpose in (1, 2, 3) | |
except (AssertionError, ValueError): | |
purpose = None | |
print('Invalid purpose, try again!') | |
return PURPOSES_PROPORTIONS[purpose] | |
grow_proportion, micro_proportion, bloom_proportion = get_propotion_by_purpose() | |
max_proportion = grow_proportion + micro_proportion + bloom_proportion | |
ml_of_grow = total_ml * (grow_proportion / max_proportion) | |
ml_of_micro = total_ml * (micro_proportion / max_proportion) | |
ml_of_bloom = total_ml * (bloom_proportion / max_proportion) | |
print( | |
f'Proportion of Grow: {ml_of_grow:.1f} ml or {(ml_of_grow/12.):.1f} "mddrs"\n' | |
f'Proportion of Micro: {ml_of_micro:.1f} ml or {(ml_of_micro/12.):.1f} "mddrs"\n' | |
f'Proportion of Bloom: {ml_of_bloom:.1f} ml or {(ml_of_bloom/12.):.1f} "mddrs"\n' | |
) | |
print(f"... or adjust the ppm to: {required_ppm:.1f}") | |
if __name__ == '__main__': | |
try: | |
ppm() | |
except KeyboardInterrupt: | |
print("\n2Bye!") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment