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