JXCT Soil Sensor 7-in-1 3.10.1
IoT система мониторинга почвы на базе ESP32
Загрузка...
Поиск...
Не найдено
crop_recommendation_engine.h
См. документацию.
1
7#ifndef CROP_RECOMMENDATION_ENGINE_H
8#define CROP_RECOMMENDATION_ENGINE_H
9
10#include <Arduino.h>
11#include <map>
12#include <vector>
14
15// Используем структуру SensorData из modbus_sensor.h
16#include "../modbus_sensor.h"
17
18// Для NPKReferences и SoilType
19#include "../../include/sensor_types.h"
20
21// Структуры для устранения проблемы с легко перепутываемыми параметрами (удалены - теперь в sensor_types.h)
22// CropCompensationParams и CropECCompensationParams определены в sensor_types.h
23
24// Структура конфигурации культуры
26{
27 float temperature; // °C
28 float humidity; // %
29 float ec; // μS/cm
30 float ph; // pH
31 float nitrogen; // мг/кг
32 float phosphorus; // мг/кг
33 float potassium; // мг/кг
34
35 CropConfig() : temperature(0), humidity(0), ec(0), ph(0), nitrogen(0), phosphorus(0), potassium(0) {}
36
37 CropConfig(float t, float h, float e, float p, float n, float ph, float k)
38 : temperature(t), humidity(h), ec(e), ph(p), nitrogen(n), phosphorus(ph), potassium(k)
39 {
40 }
41};
42
43// Структура результата рекомендаций
45{
46 String cropType;
48 String season;
49 String soilType; // Добавляем тип почвы
53};
54
56{
57 private:
58 std::map<String, CropConfig> cropConfigs;
59
60 // Коэффициенты компенсации датчиков [Источник: SSSA Journal, 2008; Advances in Agronomy, 2014]
61 const float pH_alpha = -0.01F; // Температурный коэффициент для pH
62 const float pH_beta = 0.005F; // Влажностный коэффициент для pH
63 const float EC_gamma = 0.02F; // Температурный коэффициент для EC
64 const float NPK_delta = 0.03F; // Температурный коэффициент для NPK
65 const float NPK_epsilon = 0.01F; // Влажностный коэффициент для NPK
66
67<<<<<<< HEAD
68 // Функции компенсации датчиков
69 float compensatePH(float pH_raw, float temperature, float moisture);
70 // (Удалено) float compensateEC(float EC_raw, float temperature);
71 // (Удалено) float compensateNPK(float NPK_raw, float temperature, float moisture);
72
73 // Внутренние функции компенсации с Builder паттерном
74 float compensatePH(const CropCompensationParams& params);
75 float compensateEC(const CropECCompensationParams& params);
76 float compensateNPK(const CropCompensationParams& params);
77=======
78 // УДАЛЕНО: Функции компенсации датчиков
79 // Используется SensorCompensationService для единообразной компенсации
80>>>>>>> develop
81
82 // Новые перегруженные методы компенсации
83 float compensateEC(float EC_raw, float temperature, float humidity, SoilType soilType);
84 NPKReferences compensateNPK(float N_raw, float P_raw, float K_raw, float temperature, float humidity, SoilType soilType);
85 // Старые методы (оставлены для совместимости, deprecated)
86 [[deprecated("Use compensateEC with soilType and humidity")]]
87 float compensateEC(float EC_raw, float temperature);
88 [[deprecated("Use compensateNPK with all elements and soilType")]]
89 float compensateNPK(float NPK_raw, float temperature, float moisture);
90 // Парсер типа почвы
91 static SoilType parseSoilType(const String& soilTypeStr);
92
93 void initializeCropConfigs();
94 CropConfig applySeasonalAdjustments(const CropConfig& base, const String& season);
95 CropConfig applyGrowingTypeAdjustments(const CropConfig& base, const String& growingType);
96 CropConfig applySoilTypeAdjustments(const CropConfig& base, const String& soilType); // Добавляем метод
97 String generateScientificRecommendations(const SensorData& data, const CropConfig& config, const String& cropType,
98 const String& soilType);
99 String calculateSoilHealthStatus(const SensorData& data, const CropConfig& config);
100 String generateScientificNotes(const SensorData& data, const CropConfig& config, const String& cropType,
101 const String& soilType);
102
103 public:
105
106 // Основной метод генерации рекомендаций
107 RecommendationResult generateRecommendation(const SensorData& data, const String& cropType,
108 const String& growingType = "soil", const String& season = "spring",
109 const String& soilType = "loam" // Добавляем тип почвы
110 );
111
112 // Получение списка доступных культур
113 std::vector<String> getAvailableCrops() const;
114
115 // Получение конфигурации культуры
116 CropConfig getCropConfig(const String& cropType) const;
117
118 // Валидация данных с датчиков
119 bool validateSensorData(const SensorData& data) const;
120
121 // Получение научных данных о культуре
122 String getCropScientificInfo(const String& cropType) const;
123
124 // Реализация интерфейса ICropRecommendationEngine
125 RecValues computeRecommendations(const String& cropId, const SoilProfile& soilProfile,
126 const EnvironmentType& envType) override;
127
128 void applySeasonalCorrection(RecValues& rec, Season season, bool isGreenhouse) override;
129
130 // 🌱 Специфические рекомендации по культурам для неизмеряемых элементов
131 String generateCropSpecificRecommendations(const String& cropName,
132 const NPKReferences& npk,
133 SoilType soilType,
134 float pH);
135};
136
137#endif // CROP_RECOMMENDATION_ENGINE_H
Интерфейс для движка рекомендаций по культурам
Definition crop_recommendation_engine.h:56
String getCropScientificInfo(const String &cropType) const
Definition crop_recommendation_engine.cpp:1016
RecValues computeRecommendations(const String &cropId, const SoilProfile &soilProfile, const EnvironmentType &envType) override
Вычисляет рекомендации для указанной культуры
Definition crop_recommendation_engine.cpp:1099
String generateCropSpecificRecommendations(const String &cropName, const NPKReferences &npk, SoilType soilType, float pH)
Генерирует специфические рекомендации по культурам для неизмеряемых элементов
CropConfig getCropConfig(const String &cropType) const
Definition crop_recommendation_engine.cpp:989
CropRecommendationEngine()
Definition crop_recommendation_engine.cpp:182
std::vector< String > getAvailableCrops() const
Definition crop_recommendation_engine.cpp:979
void applySeasonalCorrection(RecValues &rec, Season season, bool isGreenhouse) override
Применяет сезонные корректировки к рекомендациям
Definition crop_recommendation_engine.cpp:1126
RecommendationResult generateRecommendation(const SensorData &data, const String &cropType, const String &growingType="soil", const String &season="spring", const String &soilType="loam")
Definition crop_recommendation_engine.cpp:328
bool validateSensorData(const SensorData &data) const
Definition crop_recommendation_engine.cpp:1005
Интерфейс для движка рекомендаций по культурам
Definition ICropRecommendationEngine.h:37
Config config
Definition config.cpp:38
Definition fake_sensor.cpp:26
Season
Сезоны
Definition sensor_types.h:66
EnvironmentType
Типы среды выращивания
Definition sensor_types.h:56
SoilType
Типы почвы
Definition sensor_types.h:16
SoilProfile
Профили почвы
Definition sensor_types.h:36
Параметры компенсации для культур
Definition sensor_types.h:166
Definition crop_recommendation_engine.h:26
float potassium
Definition crop_recommendation_engine.h:33
CropConfig()
Definition crop_recommendation_engine.h:35
float humidity
Definition crop_recommendation_engine.h:28
float temperature
Definition crop_recommendation_engine.h:27
CropConfig(float t, float h, float e, float p, float n, float ph, float k)
Definition crop_recommendation_engine.h:37
float nitrogen
Definition crop_recommendation_engine.h:31
float phosphorus
Definition crop_recommendation_engine.h:32
float ec
Definition crop_recommendation_engine.h:29
float ph
Definition crop_recommendation_engine.h:30
Параметры компенсации EC для культур
Definition sensor_types.h:180
NPK значения
Definition sensor_types.h:101
Definition ICropRecommendationEngine.h:15
Definition crop_recommendation_engine.h:45
String healthStatus
Definition crop_recommendation_engine.h:51
String season
Definition crop_recommendation_engine.h:48
String scientificNotes
Definition crop_recommendation_engine.h:52
String cropType
Definition crop_recommendation_engine.h:46
String soilType
Definition crop_recommendation_engine.h:49
String recommendations
Definition crop_recommendation_engine.h:50
String growingType
Definition crop_recommendation_engine.h:47
Данные датчика
Definition sensor_types.h:77