JXCT Soil Sensor 7-in-1 3.10.1
IoT система мониторинга почвы на базе ESP32
Загрузка...
Поиск...
Не найдено
jxct_config_vars.h
См. документацию.
1#pragma once
2
3// Аппаратные пины (перенесены в jxct_constants.h для централизации)
4// Оставляем только те, которые еще не перенесены
5#define BOOT_BUTTON 0
6#define STATUS_LED_PIN 2
7
8// Интервалы (мс) - ОПТИМИЗИРОВАННАЯ ПРОИЗВОДИТЕЛЬНОСТЬ
9// ИСПРАВЛЕНО: Используем constexpr для унификации с jxct_constants.h
10constexpr unsigned long SENSOR_READ_INTERVAL =
11 2000; // 2 сек (было 1 сек) - оптимальный баланс точности и производительности
12constexpr unsigned long MQTT_PUBLISH_INTERVAL = 1800000; // 30 мин (1800000 мс) - правильная единица измерения
13constexpr unsigned long THINGSPEAK_INTERVAL = 600000; // 10 мин (было 15 мин) - более частые обновления
14constexpr unsigned long WEB_UPDATE_INTERVAL = 3000; // 3 сек (было 5 сек) - максимальная отзывчивость веб-интерфейса
15
16// Константы для системы - v2.5.0 подготовка к OTA
17#define HTTP_PORT 80 // Порт веб-сервера
18#define DNS_PORT 53 // Порт DNS сервера для captive portal
19#define LED_FAST_BLINK_MS 100 // Быстрое мигание LED
20#define LED_SLOW_BLINK_MS 500 // Медленное мигание LED
21#define WIFI_MAX_ATTEMPTS 20 // Максимум попыток подключения к WiFi
22#define WIFI_RETRY_DELAY_MS 500 // Задержка между попытками WiFi
23#define BUTTON_HOLD_TIME_MS 2000 // Время удержания кнопки для сброса
24#define CONFIG_SAVE_DELAY_MS 2000 // Задержка перед перезагрузкой после сохранения
25#define WATCHDOG_TIMEOUT_SEC 30 // Таймаут watchdog timer
26#define OTA_WATCHDOG_TIMEOUT_SEC 60 // Увеличенный таймаут для OTA
27
28// ДЕЛЬТА-ФИЛЬТР v2.2.1: Пороговые значения для публикации (ПРАВИЛЬНЫЕ ЗНАЧЕНИЯ)
29// ИСПРАВЛЕНО: Используем constexpr для унификации с jxct_constants.h
30constexpr float DELTA_TEMPERATURE = 0.5f; // ±0.5°C (правильное значение)
31constexpr float DELTA_HUMIDITY = 2.0f; // ±2.0% (правильное значение)
32constexpr float DELTA_PH = 0.1f; // ±0.1 pH (правильное значение)
33constexpr float DELTA_EC = 50.0f; // ±50 µS/cm (правильное значение)
34constexpr float DELTA_NPK = 10.0f; // ±10 mg/kg (правильное значение)
35constexpr unsigned char FORCE_PUBLISH_CYCLES =
36 5; // Принудительная публикация каждые 5 циклов (5 мин при 1 мин интервале)
37
38// Modbus ID по умолчанию
39#define JXCT_MODBUS_ID 1
40
41// Константы для точки доступа
42#define WIFI_AP_SSID "JXCT-Setup"
43#define WIFI_AP_PASS "12345678"
44
45// Экспорт глобальной конфигурации
46#include <Preferences.h>
47
48// Оптимизированная упакованная структура конфигурации
49struct __attribute__((packed)) Config
50{
51 // WiFi настройки
52 char ssid[32];
53 char password[32]; // Сократил с 64 до 32 (обычно достаточно)
54
55 // MQTT настройки
56 char mqttServer[48]; // Сократил с 64 до 48 байт
57 uint16_t mqttPort;
58 char mqttUser[24]; // Сократил с 32 до 24 байт
59 char mqttPassword[24]; // Сократил с 32 до 24 байт
60 char mqttTopicPrefix[48]; // Сократил с 64 до 48 байт
61 char mqttDeviceName[24]; // Сократил с 32 до 24 байт
62 uint8_t mqttQos;
63
64 // ThingSpeak настройки
65 char thingSpeakApiKey[24]; // Сократил с 32 до 24 байт
66 char thingSpeakChannelId[12]; // Сократил с 16 до 12 байт
67 uint16_t thingspeakInterval;
68
69 // Информация о устройстве
70 char manufacturer[24]; // Сократил с 32 до 24 байт
71 char model[24]; // Сократил с 32 до 24 байт
72 char swVersion[12]; // Сократил с 16 до 12 байт
73
74 // NTP настройки
75 char ntpServer[48]; // Сократил с 64 до 48 байт
76 uint32_t ntpUpdateInterval;
77
78 // Датчик настройки
79 uint8_t modbusId;
80
81 // Безопасность веб-интерфейса
82 char webPassword[24]; // Пароль для доступа к веб-интерфейсу
83
84 // v2.3.0: Настраиваемые интервалы (16 байт)
85 uint32_t sensorReadInterval; // Интервал опроса датчика (1-300 сек, по умолчанию 1 сек)
86 uint32_t mqttPublishInterval; // Интервал MQTT публикации (1-60 мин)
87 uint32_t thingSpeakInterval; // Интервал ThingSpeak (5-120 мин)
88 uint32_t webUpdateInterval; // Интервал обновления веб-интерфейса (5-60 сек)
89
90 // v2.3.0: Настраиваемые пороги дельта-фильтра (20 байт)
91 float deltaTemperature; // Порог температуры (0.1-5.0°C)
92 float deltaHumidity; // Порог влажности (0.5-10.0%)
93 float deltaPh; // Порог pH (0.01-1.0)
94 float deltaEc; // Порог EC (10-500 µS/cm)
95 float deltaNpk; // Порог NPK (1-50 mg/kg)
96
97 // v2.3.0: Настройки скользящего среднего (МИНИМАЛЬНАЯ ФИЛЬТРАЦИЯ)
98 uint8_t movingAverageWindow; // Размер окна (5-15 измерений)
99 uint8_t forcePublishCycles; // Принудительная публикация (5-50 циклов)
100 uint8_t filterAlgorithm; // 0=среднее
101 uint8_t outlierFilterEnabled; // отключен для минимальной фильтрации
102
103 // v2.5.1: Настройки калибровки
104 uint8_t soilProfile; // 0 = sand, 1 = loam, 2 = peat
105
106 // v2.6.0: Агро-профили
107 float latitude; // Широта устройства (градусы)
108 float longitude; // Долгота устройства (градусы)
109 char cropId[16]; // Идентификатор культуры ("tomato", ...)
110
111 // v2.6.0: Детектор полива
112 float irrigationSpikeThreshold; // % прироста влажности
113 uint16_t irrigationHoldMinutes; // мин удержания повышенной влажности
114 uint16_t postIrrigationHoldMinutes; // мин игнорировать коррекцию после полива
115
116 // v2.6.1: Тип среды выращивания (0=outdoor,1=greenhouse,2=indoor)
117 uint8_t environmentType;
118
119 // v3.10.0: УЛУЧШЕННАЯ СИСТЕМА ФИЛЬТРАЦИИ (8 байт)
120 float exponentialAlpha; // Коэффициент экспоненциального сглаживания
121 float outlierThreshold; // Порог выбросов (σ)
122 uint8_t kalmanEnabled; // Фильтр Калмана (0=отключен, 1=включен)
123 uint8_t adaptiveFiltering; // Адаптивная фильтрация (0=отключена, 1=включена)
124
125 // v3.10.1: СИСТЕМА КАЛИБРОВКИ (28 байт)
126 float temperatureOffset; // Смещение температуры (°C)
127 float humidityOffset; // Смещение влажности (%)
128 float npkSlopeN; // Коэффициент наклона для азота
129 float npkOffsetN; // Смещение для азота (мг/кг)
130 float npkSlopeP; // Коэффициент наклона для фосфора
131 float npkOffsetP; // Смещение для фосфора (мг/кг)
132 float npkSlopeK; // Коэффициент наклона для калия
133 float npkOffsetK; // Смещение для калия (мг/кг)
134
135 // Битовые поля для boolean флагов (экономия 4 байта)
136 struct __attribute__((packed))
137 {
138 uint8_t hassEnabled : 1; // 1 бит вместо 1 байта
139 uint8_t useRealSensor : 1; // 1 бит вместо 1 байта
140 uint8_t mqttEnabled : 1; // 1 бит вместо 1 байта
141 uint8_t thingSpeakEnabled : 1; // 1 бит вместо 1 байта
142 uint8_t compensationEnabled : 1; // Включена ли научная компенсация (температура/влажность)
143 uint8_t isGreenhouse : 1; // 1 = теплица, 0 = открытый грунт (устарело)
144 uint8_t seasonalAdjustEnabled : 1; // Учитывать сезонные коэффициенты
145 uint8_t autoOtaEnabled : 1; // автоматическое OTA разрешено
146 } flags;
147};
148
149extern Config config;
150extern Preferences preferences;
151
152// Объявления функций работы с конфигом
153void loadConfig();
154void saveConfig();
155void resetConfig();
156bool isConfigValid();
constexpr unsigned char FORCE_PUBLISH_CYCLES
Definition jxct_config_vars.h:35
constexpr float DELTA_HUMIDITY
Definition jxct_config_vars.h:31
constexpr float DELTA_PH
Definition jxct_config_vars.h:32
constexpr unsigned long WEB_UPDATE_INTERVAL
Definition jxct_config_vars.h:14
struct __attribute__((packed)) Config
Definition jxct_config_vars.h:49
Config config
Definition config.cpp:38
constexpr float DELTA_EC
Definition jxct_config_vars.h:33
constexpr float DELTA_NPK
Definition jxct_config_vars.h:34
void saveConfig()
Definition config.cpp:234
Preferences preferences
Definition config.cpp:39
void resetConfig()
Definition config.cpp:334
constexpr unsigned long SENSOR_READ_INTERVAL
Definition jxct_config_vars.h:10
constexpr unsigned long MQTT_PUBLISH_INTERVAL
Definition jxct_config_vars.h:12
constexpr unsigned long THINGSPEAK_INTERVAL
Definition jxct_config_vars.h:13
constexpr float DELTA_TEMPERATURE
Definition jxct_config_vars.h:30
void loadConfig()
Definition config.cpp:43
bool isConfigValid()
Definition config.cpp:432