JXCT Soil Sensor 7-in-1 3.10.1
IoT система мониторинга почвы на базе ESP32
Загрузка...
Поиск...
Не найдено
calibration_storage.h
См. документацию.
1#pragma once
2
3#include <Arduino.h>
4#include <Preferences.h>
5#include <LittleFS.h>
6#include "calibration_data.h"
7
15private:
16 static const char* PREFS_NAMESPACE;
17 static const char* CALIBRATION_KEY;
18 static const char* CALIBRATION_FILE;
19
20 Preferences prefs;
21
22public:
23 CalibrationStorage() = default;
25
29 bool init() {
30 return prefs.begin(PREFS_NAMESPACE, false);
31 }
32
38 bool save(const SensorCalibrationData& data) {
39 String json = data.toJSON();
40
41 // Сохраняем в Preferences (EEPROM)
42 bool prefsOk = prefs.putString(CALIBRATION_KEY, json);
43
44 // Дублируем в файловую систему
45 bool fileOk = saveToFile(json);
46
47 return prefsOk && fileOk;
48 }
49
56 // Сначала пробуем загрузить из Preferences
57 String json = prefs.getString(CALIBRATION_KEY, "");
58
59 if (json.isEmpty()) {
60 // Если нет в Preferences, пробуем файл
61 json = loadFromFile();
62 }
63
64 if (json.isEmpty()) {
65 return false;
66 }
67
68 return data.fromJSON(json);
69 }
70
74 bool hasData() {
75 return prefs.isKey(CALIBRATION_KEY) || LittleFS.exists(CALIBRATION_FILE);
76 }
77
81 bool clear() {
82 prefs.remove(CALIBRATION_KEY);
83
84 if (LittleFS.exists(CALIBRATION_FILE)) {
85 LittleFS.remove(CALIBRATION_FILE);
86 }
87
88 return true;
89 }
90
96 bool exportToFile(const String& filename, const SensorCalibrationData& data) {
97 File file = LittleFS.open(filename, "w");
98 if (!file) {
99 return false;
100 }
101
102 String json = data.toJSON();
103 size_t written = file.print(json);
104 file.close();
105
106 return written > 0;
107 }
108
114 bool importFromFile(const String& filename, SensorCalibrationData& data) {
115 if (!LittleFS.exists(filename)) {
116 return false;
117 }
118
119 File file = LittleFS.open(filename, "r");
120 if (!file) {
121 return false;
122 }
123
124 String json = file.readString();
125 file.close();
126
127 return data.fromJSON(json);
128 }
129
130private:
134 bool saveToFile(const String& json) {
135 File file = LittleFS.open(CALIBRATION_FILE, "w");
136 if (!file) {
137 return false;
138 }
139
140 size_t written = file.print(json);
141 file.close();
142
143 return written > 0;
144 }
145
149 String loadFromFile() {
150 if (!LittleFS.exists(CALIBRATION_FILE)) {
151 return "";
152 }
153
154 File file = LittleFS.open(CALIBRATION_FILE, "r");
155 if (!file) {
156 return "";
157 }
158
159 String json = file.readString();
160 file.close();
161
162 return json;
163 }
164};
165
166// Статические константы
167const char* CalibrationStorage::PREFS_NAMESPACE = "calibration";
168const char* CalibrationStorage::CALIBRATION_KEY = "sensor_cal";
169const char* CalibrationStorage::CALIBRATION_FILE = "/calibration.json";
Структуры данных для системы калибровки датчиков
Definition calibration_storage.h:14
bool init()
Инициализация хранилища
Definition calibration_storage.h:29
~CalibrationStorage()=default
bool load(SensorCalibrationData &data)
Загрузка калибровочных данных
Definition calibration_storage.h:55
bool save(const SensorCalibrationData &data)
Сохранение калибровочных данных
Definition calibration_storage.h:38
bool importFromFile(const String &filename, SensorCalibrationData &data)
Импорт калибровочных данных из файла
Definition calibration_storage.h:114
bool clear()
Очистка всех сохраненных данных
Definition calibration_storage.h:81
bool exportToFile(const String &filename, const SensorCalibrationData &data)
Экспорт калибровочных данных в файл
Definition calibration_storage.h:96
CalibrationStorage()=default
bool hasData()
Проверка наличия сохраненных данных
Definition calibration_storage.h:74
Полная калибровка датчика
Definition calibration_data.h:113
bool fromJSON(const String &json)
Десериализация из JSON.
Definition calibration_data.h:240
String toJSON() const
Сериализация в JSON.
Definition calibration_data.h:162