Skip to content

Instantly share code, notes, and snippets.

@ricardodani
Last active April 28, 2022 15:49
Show Gist options
  • Save ricardodani/06362433bc89696270d551cc980bcd05 to your computer and use it in GitHub Desktop.
Save ricardodani/06362433bc89696270d551cc980bcd05 to your computer and use it in GitHub Desktop.
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