Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -681,11 +681,13 @@ def view_image():
|
|
| 681 |
|
| 682 |
|
| 683 |
|
| 684 |
-
|
|
|
|
|
|
|
| 685 |
TOTAL_NITROGEN = 220 # ppm
|
| 686 |
-
N_RATIO = (10, 5) # Пример:
|
|
|
|
| 687 |
|
| 688 |
-
# Профиль питательного раствора для томатов (ppm)
|
| 689 |
TOMATO_PROFILE = {
|
| 690 |
'P': 50,
|
| 691 |
'K': 350,
|
|
@@ -694,7 +696,6 @@ TOMATO_PROFILE = {
|
|
| 694 |
'S': 100
|
| 695 |
}
|
| 696 |
|
| 697 |
-
# База данных удобрений
|
| 698 |
fertilizers_db = {
|
| 699 |
"Кальциевая селитра": {
|
| 700 |
"N (NO3-)": 0.118,
|
|
@@ -732,24 +733,21 @@ class NutrientCalculator:
|
|
| 732 |
self.initial_n_profile = {}
|
| 733 |
|
| 734 |
def calculate(self, base_profile, total_n, n_ratio):
|
| 735 |
-
# Расчёт NO3 и NH4 на основе общего азота и соотношения
|
| 736 |
total_parts = n_ratio[0] + n_ratio[1]
|
| 737 |
no3 = total_n * (n_ratio[0] / total_parts)
|
| 738 |
nh4 = total_n * (n_ratio[1] / total_parts)
|
| 739 |
|
| 740 |
-
# Сохраняем рассчитанные значения азота
|
| 741 |
self.initial_n_profile = {
|
| 742 |
'N (NO3-)': round(no3, 1),
|
| 743 |
'N (NH4+)': round(nh4, 1)
|
| 744 |
}
|
| 745 |
|
| 746 |
-
# Формирование полного профиля
|
| 747 |
self.final_profile = base_profile.copy()
|
| 748 |
self.final_profile['N (NO3-)'] = no3
|
| 749 |
self.final_profile['N (NH4+)'] = nh4
|
| 750 |
self.total_ppm = total_n + sum(base_profile.values())
|
| 751 |
|
| 752 |
-
#
|
| 753 |
self._apply_magnesium_sulfate()
|
| 754 |
self._apply_calcium_nitrate()
|
| 755 |
self._apply_mkp()
|
|
@@ -844,36 +842,33 @@ class NutrientCalculator:
|
|
| 844 |
return round(self.total_ppm / 700, 2)
|
| 845 |
|
| 846 |
def print_report(self):
|
| 847 |
-
print("\n" + "="*
|
| 848 |
-
print("
|
| 849 |
-
print("="*
|
| 850 |
-
|
| 851 |
-
|
| 852 |
-
|
| 853 |
-
print(
|
| 854 |
-
|
| 855 |
-
|
| 856 |
-
|
| 857 |
-
|
| 858 |
-
|
| 859 |
-
ec = self.calculate_ec()
|
| 860 |
-
print("\n" + "="*50)
|
| 861 |
print(f"РАСЧЕТ ДЛЯ {self.volume} ЛИТРОВ РАСТВОРА")
|
| 862 |
-
print("="*
|
| 863 |
-
print(f"
|
| 864 |
-
print(f"
|
| 865 |
|
| 866 |
print("\nРЕКОМЕНДУЕМЫЕ УДОБРЕНИЯ:")
|
| 867 |
-
|
| 868 |
for fert, data in self.results.items():
|
| 869 |
-
|
| 870 |
-
|
| 871 |
fert,
|
| 872 |
-
f"{data['граммы']
|
| 873 |
f"{data['миллиграммы']} мг",
|
| 874 |
-
"\n".join(
|
| 875 |
])
|
| 876 |
-
print(tabulate(
|
| 877 |
|
| 878 |
print("\nОСТАТОЧНЫЙ ДЕФИЦИТ:")
|
| 879 |
deficit = {k: v for k, v in self.final_profile.items() if v > 0.1}
|
|
@@ -881,13 +876,13 @@ class NutrientCalculator:
|
|
| 881 |
for el, val in deficit.items():
|
| 882 |
print(f" {el}: {round(val, 1)} ppm")
|
| 883 |
else:
|
| 884 |
-
print(" Все элементы полностью
|
| 885 |
|
| 886 |
|
| 887 |
-
#
|
| 888 |
if __name__ == "__main__":
|
| 889 |
-
calc = NutrientCalculator(volume_liters=
|
| 890 |
-
|
| 891 |
calc.print_report()
|
| 892 |
|
| 893 |
|
|
@@ -898,5 +893,6 @@ if __name__ == "__main__":
|
|
| 898 |
|
| 899 |
|
| 900 |
|
|
|
|
| 901 |
if __name__ == '__main__':
|
| 902 |
app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))
|
|
|
|
| 681 |
|
| 682 |
|
| 683 |
|
| 684 |
+
from tabulate import tabulate
|
| 685 |
+
|
| 686 |
+
# Заданные значения
|
| 687 |
TOTAL_NITROGEN = 220 # ppm
|
| 688 |
+
N_RATIO = (10, 5) # Пример: NO3:NH4 = 10:5
|
| 689 |
+
VOLUME_LITERS = 10 # Объём раствора
|
| 690 |
|
|
|
|
| 691 |
TOMATO_PROFILE = {
|
| 692 |
'P': 50,
|
| 693 |
'K': 350,
|
|
|
|
| 696 |
'S': 100
|
| 697 |
}
|
| 698 |
|
|
|
|
| 699 |
fertilizers_db = {
|
| 700 |
"Кальциевая селитра": {
|
| 701 |
"N (NO3-)": 0.118,
|
|
|
|
| 733 |
self.initial_n_profile = {}
|
| 734 |
|
| 735 |
def calculate(self, base_profile, total_n, n_ratio):
|
|
|
|
| 736 |
total_parts = n_ratio[0] + n_ratio[1]
|
| 737 |
no3 = total_n * (n_ratio[0] / total_parts)
|
| 738 |
nh4 = total_n * (n_ratio[1] / total_parts)
|
| 739 |
|
|
|
|
| 740 |
self.initial_n_profile = {
|
| 741 |
'N (NO3-)': round(no3, 1),
|
| 742 |
'N (NH4+)': round(nh4, 1)
|
| 743 |
}
|
| 744 |
|
|
|
|
| 745 |
self.final_profile = base_profile.copy()
|
| 746 |
self.final_profile['N (NO3-)'] = no3
|
| 747 |
self.final_profile['N (NH4+)'] = nh4
|
| 748 |
self.total_ppm = total_n + sum(base_profile.values())
|
| 749 |
|
| 750 |
+
# Расчёт удобрений
|
| 751 |
self._apply_magnesium_sulfate()
|
| 752 |
self._apply_calcium_nitrate()
|
| 753 |
self._apply_mkp()
|
|
|
|
| 842 |
return round(self.total_ppm / 700, 2)
|
| 843 |
|
| 844 |
def print_report(self):
|
| 845 |
+
print("\n" + "="*60)
|
| 846 |
+
print("ПРОФИЛЬ ПИТАТЕЛЬНОГО РАСТВОРА (ИТОГО):")
|
| 847 |
+
print("="*60)
|
| 848 |
+
table = [[el, round(val, 1)] for el, val in self.final_profile.items()]
|
| 849 |
+
print(tabulate(table, headers=["Элемент", "Остаток ppm"]))
|
| 850 |
+
|
| 851 |
+
print("\nИсходный расчёт азота:")
|
| 852 |
+
for form, value in self.initial_n_profile.items():
|
| 853 |
+
print(f" {form}: {value} ppm")
|
| 854 |
+
|
| 855 |
+
print("\n" + "="*60)
|
|
|
|
|
|
|
|
|
|
| 856 |
print(f"РАСЧЕТ ДЛЯ {self.volume} ЛИТРОВ РАСТВОРА")
|
| 857 |
+
print("="*60)
|
| 858 |
+
print(f"Общая концентрация: {self.total_ppm} ppm")
|
| 859 |
+
print(f"EC: {self.calculate_ec()} mS/cm")
|
| 860 |
|
| 861 |
print("\nРЕКОМЕНДУЕМЫЕ УДОБРЕНИЯ:")
|
| 862 |
+
fert_table = []
|
| 863 |
for fert, data in self.results.items():
|
| 864 |
+
details = [f"+{k}: {v} ppm" for k, v in data.items() if k.startswith('внесет')]
|
| 865 |
+
fert_table.append([
|
| 866 |
fert,
|
| 867 |
+
f"{data['граммы']} г",
|
| 868 |
f"{data['миллиграммы']} мг",
|
| 869 |
+
"\n".join(details)
|
| 870 |
])
|
| 871 |
+
print(tabulate(fert_table, headers=["Удобрение", "Граммы", "Миллиграммы", "Добавит"]))
|
| 872 |
|
| 873 |
print("\nОСТАТОЧНЫЙ ДЕФИЦИТ:")
|
| 874 |
deficit = {k: v for k, v in self.final_profile.items() if v > 0.1}
|
|
|
|
| 876 |
for el, val in deficit.items():
|
| 877 |
print(f" {el}: {round(val, 1)} ppm")
|
| 878 |
else:
|
| 879 |
+
print(" Все элементы покрыты полностью")
|
| 880 |
|
| 881 |
|
| 882 |
+
# Запуск
|
| 883 |
if __name__ == "__main__":
|
| 884 |
+
calc = NutrientCalculator(volume_liters=VOLUME_LITERS)
|
| 885 |
+
calc.calculate(TOMATO_PROFILE.copy(), TOTAL_NITROGEN, N_RATIO)
|
| 886 |
calc.print_report()
|
| 887 |
|
| 888 |
|
|
|
|
| 893 |
|
| 894 |
|
| 895 |
|
| 896 |
+
|
| 897 |
if __name__ == '__main__':
|
| 898 |
app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))
|