DmitrMakeev commited on
Commit
7bc1e72
·
verified ·
1 Parent(s): b0d1f9f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +54 -14
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._apply_potassium_nitrate()
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 _apply_potassium_nitrate(self):
 
776
  k_need = self.final_profile['K']
777
  if k_need <= 0:
778
  return
779
- k_content = fertilizers_db["Калий азотнокислый"]["K"]
780
- grams = (k_need * self.volume) / (k_content * 1000)
781
- added_n = grams * fertilizers_db["Калий азотнокислый"]["N (NO3-)"] * 1000 / self.volume
782
-
783
- self.final_profile['N (NO3-)'] -= added_n
784
- self._apply_fertilizer("Калий азотнокислый", grams, {'внесет NO3': round(added_n, 1)})
785
- self.final_profile['K'] = 0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- f"+{list(data.keys())[2]} {data[list(data.keys())[2]]} ppm"
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)))