Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -683,6 +683,7 @@ def view_image():
|
|
683 |
|
684 |
|
685 |
|
|
|
686 |
|
687 |
# Профиль питательного раствора для томатов (ppm)
|
688 |
TOMATO_PROFILE = {
|
@@ -695,7 +696,7 @@ TOMATO_PROFILE = {
|
|
695 |
'S': 100
|
696 |
}
|
697 |
|
698 |
-
#
|
699 |
fertilizers_db = {
|
700 |
"Кальциевая селитра": {
|
701 |
"N (NO3-)": 0.118,
|
@@ -705,6 +706,10 @@ fertilizers_db = {
|
|
705 |
"N (NO3-)": 0.138,
|
706 |
"K": 0.387,
|
707 |
},
|
|
|
|
|
|
|
|
|
708 |
"Аммоний азотнокислый": {
|
709 |
"N (NO3-)": 0.175,
|
710 |
"N (NH4+)": 0.175,
|
@@ -731,7 +736,7 @@ class NutrientCalculator:
|
|
731 |
self._apply_magnesium_sulfate()
|
732 |
self._apply_calcium_nitrate()
|
733 |
self._apply_mkp()
|
734 |
-
self.
|
735 |
self._apply_ammonium_nitrate()
|
736 |
return self.results
|
737 |
|
@@ -772,17 +777,54 @@ class NutrientCalculator:
|
|
772 |
self._apply_fertilizer("Монофосфат калия", grams, {'внесет K': round(added_k, 1)})
|
773 |
self.final_profile['P'] = 0
|
774 |
|
775 |
-
def
|
|
|
776 |
k_need = self.final_profile['K']
|
777 |
if k_need <= 0:
|
778 |
return
|
779 |
-
|
780 |
-
|
781 |
-
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
786 |
|
787 |
def _apply_ammonium_nitrate(self):
|
788 |
nh4_need = self.final_profile['N (NH4+)']
|
@@ -823,11 +865,12 @@ class NutrientCalculator:
|
|
823 |
print("\nРЕКОМЕНДУЕМЫЕ УДОБРЕНИЯ:")
|
824 |
table = []
|
825 |
for fert, data in self.results.items():
|
|
|
826 |
table.append([
|
827 |
fert,
|
828 |
f"{data['граммы']:.3f} г",
|
829 |
f"{data['миллиграммы']} мг",
|
830 |
-
|
831 |
])
|
832 |
print(tabulate(table, headers=["Удобрение", "Граммы", "Миллиграммы", "Добавит"]))
|
833 |
|
@@ -856,8 +899,5 @@ if __name__ == "__main__":
|
|
856 |
|
857 |
|
858 |
|
859 |
-
|
860 |
-
|
861 |
-
|
862 |
if __name__ == '__main__':
|
863 |
app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))
|
|
|
683 |
|
684 |
|
685 |
|
686 |
+
from tabulate import tabulate
|
687 |
|
688 |
# Профиль питательного раствора для томатов (ppm)
|
689 |
TOMATO_PROFILE = {
|
|
|
696 |
'S': 100
|
697 |
}
|
698 |
|
699 |
+
# Обновленная база данных удобрений с добавлением сульфата калия
|
700 |
fertilizers_db = {
|
701 |
"Кальциевая селитра": {
|
702 |
"N (NO3-)": 0.118,
|
|
|
706 |
"N (NO3-)": 0.138,
|
707 |
"K": 0.387,
|
708 |
},
|
709 |
+
"Калий сернокислый": { # Добавлен новый компонент
|
710 |
+
"K": 0.448, # 44.8% K
|
711 |
+
"S": 0.184, # 18.4% S
|
712 |
+
},
|
713 |
"Аммоний азотнокислый": {
|
714 |
"N (NO3-)": 0.175,
|
715 |
"N (NH4+)": 0.175,
|
|
|
736 |
self._apply_magnesium_sulfate()
|
737 |
self._apply_calcium_nitrate()
|
738 |
self._apply_mkp()
|
739 |
+
self._apply_potassium_fertilizers() # Измененный метод для работы с двумя калийными удобрениями
|
740 |
self._apply_ammonium_nitrate()
|
741 |
return self.results
|
742 |
|
|
|
777 |
self._apply_fertilizer("Монофосфат калия", grams, {'внесет K': round(added_k, 1)})
|
778 |
self.final_profile['P'] = 0
|
779 |
|
780 |
+
def _apply_potassium_fertilizers(self):
|
781 |
+
"""Новый метод для распределения калия между двумя удобрениями"""
|
782 |
k_need = self.final_profile['K']
|
783 |
if k_need <= 0:
|
784 |
return
|
785 |
+
|
786 |
+
# Сначала вносим часть калия через сернокислый калий для компенсации серы
|
787 |
+
s_deficit = max(0, self.final_profile['S'])
|
788 |
+
if s_deficit > 0:
|
789 |
+
# Рассчитываем сколько сернокислого калия нужно для компенсации дефицита серы
|
790 |
+
s_content = fertilizers_db["Калий сернокислый"]["S"]
|
791 |
+
k2so4_grams = (s_deficit * self.volume) / (s_content * 1000)
|
792 |
+
|
793 |
+
# Сколько калия это добавит
|
794 |
+
added_k = k2so4_grams * fertilizers_db["Калий сернокислый"]["K"] * 1000 / self.volume
|
795 |
+
|
796 |
+
# Если этим удобрением мы покрываем больше калия, чем нужно
|
797 |
+
if added_k > k_need:
|
798 |
+
k2so4_grams = (k_need * self.volume) / (fertilizers_db["Калий сернокислый"]["K"] * 1000)
|
799 |
+
added_k = k_need
|
800 |
+
added_s = k2so4_grams * fertilizers_db["Калий сернокислый"]["S"] * 1000 / self.volume
|
801 |
+
else:
|
802 |
+
added_s = s_deficit
|
803 |
+
|
804 |
+
self._apply_fertilizer(
|
805 |
+
"Калий сернокислый",
|
806 |
+
k2so4_grams,
|
807 |
+
{
|
808 |
+
'внесет K': round(added_k, 1),
|
809 |
+
'внесет S': round(added_s, 1)
|
810 |
+
}
|
811 |
+
)
|
812 |
+
self.final_profile['K'] -= added_k
|
813 |
+
self.final_profile['S'] -= added_s
|
814 |
+
k_need = self.final_profile['K']
|
815 |
+
|
816 |
+
# Остаток калия вносим азотнокислым калием
|
817 |
+
if k_need > 0:
|
818 |
+
kno3_grams = (k_need * self.volume) / (fertilizers_db["Калий азотнокислый"]["K"] * 1000)
|
819 |
+
added_n = kno3_grams * fertilizers_db["Калий азотнокислый"]["N (NO3-)"] * 1000 / self.volume
|
820 |
+
|
821 |
+
self._apply_fertilizer(
|
822 |
+
"Калий азотнокислый",
|
823 |
+
kno3_grams,
|
824 |
+
{'внесет NO3': round(added_n, 1)}
|
825 |
+
)
|
826 |
+
self.final_profile['K'] = 0
|
827 |
+
self.final_profile['N (NO3-)'] -= added_n
|
828 |
|
829 |
def _apply_ammonium_nitrate(self):
|
830 |
nh4_need = self.final_profile['N (NH4+)']
|
|
|
865 |
print("\nРЕКОМЕНДУЕМЫЕ УДОБРЕНИЯ:")
|
866 |
table = []
|
867 |
for fert, data in self.results.items():
|
868 |
+
additions = [f"+{k}: {v} ppm" for k, v in data.items() if k.startswith('внесет')]
|
869 |
table.append([
|
870 |
fert,
|
871 |
f"{data['граммы']:.3f} г",
|
872 |
f"{data['миллиграммы']} мг",
|
873 |
+
"\n".join(additions)
|
874 |
])
|
875 |
print(tabulate(table, headers=["Удобрение", "Граммы", "Миллиграммы", "Добавит"]))
|
876 |
|
|
|
899 |
|
900 |
|
901 |
|
|
|
|
|
|
|
902 |
if __name__ == '__main__':
|
903 |
app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))
|