Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -682,6 +682,8 @@ def view_image():
|
|
682 |
|
683 |
|
684 |
|
|
|
|
|
685 |
TOMATO_PROFILE = {
|
686 |
'N (NO3-)': 200,
|
687 |
'N (NH4+)': 20,
|
@@ -692,17 +694,6 @@ TOMATO_PROFILE = {
|
|
692 |
'S': 100
|
693 |
}
|
694 |
|
695 |
-
# Обновленные коэффициенты для перевода ppm в mS/cm (более точные)
|
696 |
-
EC_FACTORS = {
|
697 |
-
'N (NO3-)': 0.71,
|
698 |
-
'N (NH4+)': 0.72,
|
699 |
-
'P': 0.74,
|
700 |
-
'K': 0.70,
|
701 |
-
'Mg': 0.61,
|
702 |
-
'Ca': 0.66,
|
703 |
-
'S': 0.53
|
704 |
-
}
|
705 |
-
|
706 |
fertilizers_db = {
|
707 |
"Кальциевая селитра": {
|
708 |
"N (NO3-)": 0.118,
|
@@ -731,6 +722,7 @@ class NutrientCalculator:
|
|
731 |
self.volume = volume_liters
|
732 |
self.results = {}
|
733 |
self.final_profile = {}
|
|
|
734 |
|
735 |
def calculate(self, profile):
|
736 |
self.final_profile = profile.copy()
|
@@ -803,26 +795,43 @@ class NutrientCalculator:
|
|
803 |
self.final_profile['N (NH4+)'] = 0
|
804 |
|
805 |
def calculate_ec(self):
|
806 |
-
"""
|
807 |
-
|
808 |
-
return round(total_ppm / 700, 2) # 700 - стандартный коэффициент
|
809 |
-
|
810 |
-
def calculate_total_ppm(self):
|
811 |
-
"""Расчет общего количества ppm в растворе"""
|
812 |
-
return sum(TOMATO_PROFILE.values())
|
813 |
|
814 |
def print_report(self):
|
815 |
ec = self.calculate_ec()
|
816 |
-
|
817 |
-
print(
|
818 |
-
|
819 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
820 |
|
821 |
# Пример использования
|
822 |
-
|
823 |
-
|
824 |
-
calc.
|
825 |
-
|
826 |
|
827 |
|
828 |
|
|
|
682 |
|
683 |
|
684 |
|
685 |
+
from tabulate import tabulate
|
686 |
+
|
687 |
TOMATO_PROFILE = {
|
688 |
'N (NO3-)': 200,
|
689 |
'N (NH4+)': 20,
|
|
|
694 |
'S': 100
|
695 |
}
|
696 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
697 |
fertilizers_db = {
|
698 |
"Кальциевая селитра": {
|
699 |
"N (NO3-)": 0.118,
|
|
|
722 |
self.volume = volume_liters
|
723 |
self.results = {}
|
724 |
self.final_profile = {}
|
725 |
+
self.total_ppm = sum(TOMATO_PROFILE.values())
|
726 |
|
727 |
def calculate(self, profile):
|
728 |
self.final_profile = profile.copy()
|
|
|
795 |
self.final_profile['N (NH4+)'] = 0
|
796 |
|
797 |
def calculate_ec(self):
|
798 |
+
"""Расчет электропроводимости (700 ppm ≈ 1 mS/cm)"""
|
799 |
+
return round(self.total_ppm / 700, 2)
|
|
|
|
|
|
|
|
|
|
|
800 |
|
801 |
def print_report(self):
|
802 |
ec = self.calculate_ec()
|
803 |
+
|
804 |
+
print("\n" + "="*50)
|
805 |
+
print(f"РАСЧЕТ ПИТАТЕЛЬНОГО РАСТВОРА ДЛЯ {self.volume} ЛИТРОВ")
|
806 |
+
print("="*50)
|
807 |
+
|
808 |
+
print(f"\nОБЩАЯ КОНЦЕНТРАЦИЯ: {self.total_ppm} ppm")
|
809 |
+
print(f"ЭЛЕКТРОПРОВОДИМОСТЬ (EC): {ec} mS/cm (при 25°C)")
|
810 |
+
|
811 |
+
print("\nРЕКОМЕНДУЕМЫЕ УДОБРЕНИЯ:")
|
812 |
+
table = []
|
813 |
+
for fert, data in self.results.items():
|
814 |
+
table.append([
|
815 |
+
fert,
|
816 |
+
f"{data['граммы']:.3f} г",
|
817 |
+
f"{data['миллиграммы']} мг",
|
818 |
+
f"+{list(data.keys())[2]} {data[list(data.keys())[2]]} ppm"
|
819 |
+
])
|
820 |
+
print(tabulate(table, headers=["Удобрение", "Граммы", "Миллиграммы", "Добавит"]))
|
821 |
+
|
822 |
+
print("\nОСТАТОЧНЫЙ ДЕФИЦИТ:")
|
823 |
+
deficit = {k: v for k, v in self.final_profile.items() if v > 0.1}
|
824 |
+
if deficit:
|
825 |
+
for el, val in deficit.items():
|
826 |
+
print(f" {el}: {round(val, 1)} ppm")
|
827 |
+
else:
|
828 |
+
print(" Все элементы полностью покрыты")
|
829 |
|
830 |
# Пример использования
|
831 |
+
if __name__ == "__main__":
|
832 |
+
calc = NutrientCalculator(volume_liters=10)
|
833 |
+
results = calc.calculate(TOMATO_PROFILE.copy())
|
834 |
+
calc.print_report()
|
835 |
|
836 |
|
837 |
|