From c71034ff12c186fc54480942f1c5ddb39309acf3 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sat, 7 Jun 2025 11:57:01 +0200 Subject: [PATCH] analog counter save to nvs on command and update --- src/core/analogsensor.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/core/analogsensor.cpp b/src/core/analogsensor.cpp index ff3d7baf8..d33131d79 100644 --- a/src/core/analogsensor.cpp +++ b/src/core/analogsensor.cpp @@ -63,7 +63,7 @@ void AnalogSensor::reload(bool get_nvs) { sensors_.clear(); return; } - + changed_ = true; // load the list of analog sensors from the customization service // and store them locally and then activate them EMSESP::webCustomizationService.read([&](WebCustomization & settings) { @@ -74,10 +74,15 @@ void AnalogSensor::reload(bool get_nvs) { for (const auto & sensor : settings.analogCustomizations) { // search customlist if (sensor_.gpio() == sensor.gpio) { // for output sensors set value to new start-value - if ((sensor.type == AnalogType::COUNTER || sensor.type >= AnalogType::DIGITAL_OUT) + if (sensor.type >= AnalogType::DIGITAL_OUT && (sensor_.type() != sensor.type || sensor_.offset() != sensor.offset || sensor_.factor() != sensor.factor)) { sensor_.set_value(sensor.offset); } + if (sensor.type == AnalogType::COUNTER && sensor_.offset() != sensor.offset + && sensor.offset != EMSESP::nvs_.getDouble(sensor.name.c_str(), 0)) { + EMSESP::nvs_.putDouble(sensor.name.c_str(), sensor.offset); + sensor_.set_value(sensor.offset); + } sensor_.set_name(sensor.name); sensor_.set_type(sensor.type); sensor_.set_offset(sensor.offset); @@ -799,7 +804,8 @@ bool AnalogSensor::command_setvalue(const char * value, const int8_t gpio) { // sensor.set_offset(val); sensor.set_value(val); } - if (oldoffset != sensor.offset() && sensor.offset() != EMSESP::nvs_.getDouble(sensor.name().c_str())) { + sensor.set_offset(sensor.value()); + if (sensor.value() != EMSESP::nvs_.getDouble(sensor.name().c_str(), 0)) { EMSESP::nvs_.putDouble(sensor.name().c_str(), sensor.value()); } } else if (sensor.type() == AnalogType::ADC) {