🏗️ Общая архитектура JXCT v3.4.9
> Версия документа: 3.4.9 > Дата обновления: 2025-06-24 > Статус: Актуальная архитектура с фокусом на стабильность
---🎯 ПРИНЦИПЫ АРХИТЕКТУРЫ
1. Стабильность превыше всего
- Эволюционное развитие без революционных изменений
- Тщательное тестирование перед внедрением изменений
2. Модульность и переиспользование
- Четкое разделение ответственности между модулями
- Использование интерфейсов для абстракции
3. Производительность и эффективность
- Оптимизация использования памяти и Flash
- Минимизация накладных расходов
🔧 ОСНОВНЫЕ КОМПОНЕНТЫ
📡 СИСТЕМА ДАТЧИКОВ
#### 🔌 Абстракция датчиков
`cpp
// Файл: include/ISensor.h
`
#### 🎭 Адаптеры датчиков
`cpp
// Файл: src/modbus_sensor.h
`
🧮 СИСТЕМА КОМПЕНСАЦИИ
#### ✅ ИСПРАВЛЕННАЯ ДВУХЭТАПНАЯ КОМПЕНСАЦИЯ
`cpp
// Файл: src/modbus_sensor.cpp
void applyCompensationIfEnabled(SensorData& d, const SoilProfile& profile) { // ШАГ 1: Применяем калибровочную таблицу CSV (лабораторная поверка) float tempCalibrated = CalibrationManager::applyCalibration(d.temperature, profile); float humCalibrated = CalibrationManager::applyCalibration(d.humidity, profile); float ecCalibrated = CalibrationManager::applyCalibration(d.ec, profile); float phCalibrated = CalibrationManager::applyCalibration(d.ph, profile); float nCalibrated = CalibrationManager::applyCalibration(d.nitrogen, profile); float pCalibrated = CalibrationManager::applyCalibration(d.phosphorus, profile); float kCalibrated = CalibrationManager::applyCalibration(d.potassium, profile);
// ШАГ 2: Применяем математическую компенсацию (температурная, влажностная) float ec25 = ecCalibrated / (1.0f + 0.021f * (tempCalibrated - 25.0f)); d.ec = correctEC(ec25, tempCalibrated, humCalibrated, profile.soilType); d.ph = correctPH(phCalibrated, tempCalibrated); correctNPK(tempCalibrated, humCalibrated, d.nitrogen, d.phosphorus, d.potassium, profile.soilType); }
`
#### 🔧 Калибровочный менеджер
`cpp
// Файл: src/calibration_manager.cpp
`
#### 1️⃣ Модель Арчи - EC компенсация
`cpp
float correctEC(float ec25, float temperature, float humidity, SoilType soilType) {
// Температурная компенсация (Archie, 1942)
float tempFactor = 1.0f + 0.021f * (temperature - 25.0f);
// Влажностная компенсация по модели Арчи
float porosity = getPorosity(soilType);
float archieCoeff = getArchieCoefficient(soilType);
float humFactor = pow(humidity / 100.0f, archieCoeff);
return ec25 tempFactor humFactor;
}
`
#### 2️⃣ Уравнение Нернста - pH компенсация
`cpp
float correctPH(float phRaw, float temperature) {
// Температурная поправка pH по уравнению Нернста
// dE/dT = -0.003 V/°C для pH электрода
return phRaw - 0.003f * (temperature - 25.0f);
}
`
`cpp
void correctNPK(float temperature, float humidity,
float& nitrogen, float& phosphorus, float& potassium,
SoilType soilType) {
// Температурная компенсация NPK
float tempFactor = 1.0f - 0.02f * (temperature - 25.0f);
// Влажностная компенсация по FAO 56
float humFactor = 1.0f + 0.05f * (humidity - 50.0f) / 50.0f;
// Применение компенсации
nitrogen = tempFactor humFactor;
phosphorus = tempFactor humFactor;
potassium = tempFactor humFactor;
}
`
🌐 ВЕБ-ИНТЕРФЕЙС
📱 Архитектура веб-интерфейса
`
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Web Browser │ │ ESP32 Web │ │ Data Storage │
│ (Frontend) │◄──►│ Server │◄──►│ (NVS/Flash) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ Sensor Data │
│ Processing │
└─────────────────┘
`
🛣️ Маршрутизация
`cpp
// Файл: src/web/routes_data.cpp
void setupDataRoutes() {
// Основные маршруты данных
server.on("/readings", HTTP_GET, handleReadings);
server.on("/api/sensor", HTTP_GET, handleApiData);
server.on("/api/calibration", HTTP_POST, handleCalibrationUpload);
// Статические файлы
server.on("/calibration_example.csv", HTTP_GET, handleStaticFile);
server.on("/favicon.ico", HTTP_GET, handleStaticFile);
}
`
🎨 UI компоненты
- Информационные блоки с объяснением процессов компенсации
- Цветовая кодировка значений (зеленый, желтый, оранжевый, красный)
- Ссылки на примеры CSV файлов
🔌 ИНТЕГРАЦИИ
🌐 MQTT клиент
`cpp
// Файл: src/mqtt_client.cpp
class MQTTClient {
public:
// Подключение к MQTT серверу
bool connect(const String& server, int port,
const String& username, const String& password);
// Публикация данных
bool publishData(const SensorData& data);
// Подписка на команды
void subscribeToCommands();
private:
// Обработка входящих сообщений
void handleMessage(const String& topic, const String& payload);
};
`
☁️ ThingSpeak интеграция
`cpp
// Файл: src/thingspeak_client.cpp
class ThingSpeakClient {
public:
// Отправка данных в ThingSpeak
bool sendData(const SensorData& data);
// Получение данных из ThingSpeak
SensorData getData();
private:
// HTTP запросы к ThingSpeak API
bool makeRequest(const String& endpoint, const String& data);
};
`
🔍 ЛОГИРОВАНИЕ И ДИАГНОСТИКА
📝 Система логирования
`cpp
// Файл: src/logger.cpp
class Logger {
public:
// Уровни логирования
enum Level { DEBUG, INFO, WARNING, ERROR, CRITICAL };
// Логирование с уровнем
static void log(Level level, const String& message);
// Логирование данных датчика
static void logSensorData(const SensorData& data);
// Логирование ошибок
static void logError(const String& error, const String& context);
private:
// Форматирование времени
static String formatTimestamp();
// Цветной вывод (для отладки)
static String getColorCode(Level level);
};
`
🎯 Валидация данных
`cpp
// Файл: src/validation_utils.cpp
class ValidationUtils {
public:
// Валидация данных датчика
static bool validateSensorData(const SensorData& data);
// Валидация конфигурации
static bool validateConfig(const SystemConfig& config);
// Валидация калибровочной таблицы
static bool validateCalibrationTable(const CalibrationTable& table);
private:
// Проверка диапазонов значений
static bool isInRange(float value, float min, float max);
// Проверка корректности CSV
static bool isValidCSV(const String& csvData);
};
`
🚀 ПРОИЗВОДИТЕЛЬНОСТЬ И ОПТИМИЗАЦИЯ
📊 Использование памяти
- RAM: ~57KB (17.4% от доступной)
- NVS: ~4KB для конфигурации
⚡ Оптимизации
- Статические буферы: Для критических операций
- Кэширование: Результатов вычислений
🔒 БЕЗОПАСНОСТЬ
🛡️ Текущие меры
- Rate limiting: 20 запросов в минуту на IP
- Error handling: Безопасная обработка ошибок
🚧 Планируемые улучшения
- CSRF токены: Для всех POST запросов
- HTTPS: Для веб-интерфейса
📈 МОНИТОРИНГ И МЕТРИКИ
📊 Ключевые метрики
- Время отклика: < 500ms для веб-запросов
- Стабильность: 99.9% uptime
🔍 Диагностика
- Логирование: Все критические операции
- Алерты: При превышении пороговых значений
📋 ПЛАНЫ РАЗВИТИЯ
🎯 Краткосрочные цели (3-6 месяцев)
1. Повышение покрытия тестами до 85% 2. Улучшение безопасности (CSRF, OTA подпись) 3. Оптимизация производительности (кэширование, пулы памяти) 4. Расширение документации (API, примеры использования)🚀 Долгосрочные цели (6-12 месяцев)
1. Модульная архитектура с четким разделением слоев 2. Расширенные интеграции (дополнительные облачные сервисы) 3. Машинное обучение для улучшения точности 4. Мобильное приложение для управления устройством---
Версия: 3.4.9 Дата: 2025-06-24 Автор: JXCT Development Team