5#include <ArduinoJson.h>
56 std::vector<ModernCalibrationPoint>
points;
68 std::vector<ModernCalibrationPoint>
points;
91 void setZeroPoint(
float n_measured,
float p_measured,
float k_measured) {
163 DynamicJsonDocument doc(2048);
172 JsonObject temp = doc.createNestedObject(
"temperature");
178 JsonObject hum = doc.createNestedObject(
"humidity");
184 JsonObject phObj = doc.createNestedObject(
"ph");
185 JsonArray phPoints = phObj.createNestedArray(
"points");
186 for (
const auto& point :
ph.
points) {
187 JsonObject p = phPoints.createNestedObject();
188 p[
"expected"] = point.expected;
189 p[
"measured"] = point.measured;
190 p[
"timestamp"] = point.timestamp;
192 JsonObject phCoeff = phObj.createNestedObject(
"coefficients");
199 JsonObject ecObj = doc.createNestedObject(
"ec");
200 JsonArray ecPoints = ecObj.createNestedArray(
"points");
201 for (
const auto& point :
ec.
points) {
202 JsonObject p = ecPoints.createNestedObject();
203 p[
"expected"] = point.expected;
204 p[
"measured"] = point.measured;
205 p[
"timestamp"] = point.timestamp;
207 JsonObject ecCoeff = ecObj.createNestedObject(
"coefficients");
214 JsonObject npkObj = doc.createNestedObject(
"npk");
217 JsonObject npkN = npkObj.createNestedObject(
"nitrogen");
222 JsonObject npkP = npkObj.createNestedObject(
"phosphorus");
227 JsonObject npkK = npkObj.createNestedObject(
"potassium");
233 serializeJson(doc, result);
241 DynamicJsonDocument doc(2048);
242 DeserializationError error = deserializeJson(doc, json);
249 device_id = doc[
"device_id"].as<String>();
254 if (doc.containsKey(
"temperature")) {
255 JsonObject temp = doc[
"temperature"];
262 if (doc.containsKey(
"humidity")) {
263 JsonObject hum = doc[
"humidity"];
270 if (doc.containsKey(
"ph")) {
271 JsonObject phObj = doc[
"ph"];
274 if (phObj.containsKey(
"points")) {
276 JsonArray phPoints = phObj[
"points"];
277 for (JsonObject point : phPoints) {
287 if (phObj.containsKey(
"coefficients")) {
288 JsonObject phCoeff = phObj[
"coefficients"];
297 if (doc.containsKey(
"ec")) {
298 JsonObject ecObj = doc[
"ec"];
301 if (ecObj.containsKey(
"points")) {
303 JsonArray ecPoints = ecObj[
"points"];
304 for (JsonObject point : ecPoints) {
314 if (ecObj.containsKey(
"coefficients")) {
315 JsonObject ecCoeff = ecObj[
"coefficients"];
324 if (doc.containsKey(
"npk")) {
325 JsonObject npkObj = doc[
"npk"];
328 if (npkObj.containsKey(
"nitrogen")) {
329 JsonObject npkN = npkObj[
"nitrogen"];
335 if (npkObj.containsKey(
"phosphorus")) {
336 JsonObject npkP = npkObj[
"phosphorus"];
342 if (npkObj.containsKey(
"potassium")) {
343 JsonObject npkK = npkObj[
"potassium"];
Калибровка EC (многоточечная с линейной регрессией)
Definition calibration_data.h:67
std::vector< ModernCalibrationPoint > points
Definition calibration_data.h:68
bool isReady() const
Definition calibration_data.h:73
size_t getPointCount() const
Definition calibration_data.h:72
LinearCoefficients coefficients
Definition calibration_data.h:69
bool hasPoints() const
Definition calibration_data.h:71
Коэффициенты линейной калибровки y = ax + b.
Definition calibration_data.h:30
LinearCoefficients()
Definition calibration_data.h:36
bool is_valid
Definition calibration_data.h:34
float intercept
Definition calibration_data.h:32
float slope
Definition calibration_data.h:31
float r_squared
Definition calibration_data.h:33
Точка калибровки (expected, measured)
Definition calibration_data.h:18
float measured
Definition calibration_data.h:20
ModernCalibrationPoint(float exp, float meas)
Definition calibration_data.h:24
float expected
Definition calibration_data.h:19
uint32_t timestamp
Definition calibration_data.h:21
ModernCalibrationPoint()
Definition calibration_data.h:23
Калибровка NPK (нулевая точка в дистиллированной воде)
Definition calibration_data.h:79
OffsetCalibration nitrogen
Definition calibration_data.h:80
void setZeroPoint(float n_measured, float p_measured, float k_measured)
Definition calibration_data.h:91
OffsetCalibration phosphorus
Definition calibration_data.h:81
bool isReady() const
Definition calibration_data.h:87
uint32_t last_calibration
Definition calibration_data.h:83
NPKCalibration()
Definition calibration_data.h:85
OffsetCalibration potassium
Definition calibration_data.h:82
Простое смещение (offset) для температуры и влажности
Definition calibration_data.h:42
uint32_t timestamp
Definition calibration_data.h:45
OffsetCalibration()
Definition calibration_data.h:47
float offset
Definition calibration_data.h:43
bool is_valid
Definition calibration_data.h:44
Калибровка pH (многоточечная с линейной регрессией)
Definition calibration_data.h:55
bool isReady() const
Definition calibration_data.h:61
size_t getPointCount() const
Definition calibration_data.h:60
std::vector< ModernCalibrationPoint > points
Definition calibration_data.h:56
LinearCoefficients coefficients
Definition calibration_data.h:57
bool hasPoints() const
Definition calibration_data.h:59
Полная калибровка датчика
Definition calibration_data.h:113
String device_id
Definition calibration_data.h:126
NPKCalibration npk
Definition calibration_data.h:123
uint32_t created_at
Definition calibration_data.h:127
void reset()
Сброс всех калибровочных данных
Definition calibration_data.h:150
OffsetCalibration humidity
Definition calibration_data.h:116
OffsetCalibration temperature
Definition calibration_data.h:115
bool fromJSON(const String &json)
Десериализация из JSON.
Definition calibration_data.h:240
uint32_t updated_at
Definition calibration_data.h:128
SensorCalibrationData()
Definition calibration_data.h:130
String toJSON() const
Сериализация в JSON.
Definition calibration_data.h:162
ECCalibration ec
Definition calibration_data.h:120
PHCalibration ph
Definition calibration_data.h:119
void touch()
Обновление времени модификации
Definition calibration_data.h:143
bool isComplete() const
Проверка готовности всей калибровки
Definition calibration_data.h:135