mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-07 00:09:51 +03:00
add analog counter command, fix #327 "value"
This commit is contained in:
@@ -38,6 +38,12 @@ void AnalogSensor::start() {
|
|||||||
F_(info),
|
F_(info),
|
||||||
[&](const char * value, const int8_t id, JsonObject & output) { return command_info(value, id, output); },
|
[&](const char * value, const int8_t id, JsonObject & output) { return command_info(value, id, output); },
|
||||||
F_(info_cmd));
|
F_(info_cmd));
|
||||||
|
Command::add(
|
||||||
|
EMSdevice::DeviceType::ANALOGSENSOR,
|
||||||
|
F_(counter),
|
||||||
|
[&](const char * value, const int8_t id) { return command_counter(value, id); },
|
||||||
|
F("set counter value"),
|
||||||
|
CommandFlag::ADMIN_ONLY);
|
||||||
}
|
}
|
||||||
|
|
||||||
// load settings from the customization file, sorts them and initializes the GPIOs
|
// load settings from the customization file, sorts them and initializes the GPIOs
|
||||||
@@ -279,7 +285,7 @@ void AnalogSensor::publish_values(const bool force) {
|
|||||||
dataSensor["name"] = sensor.name();
|
dataSensor["name"] = sensor.name();
|
||||||
switch (sensor.type()) {
|
switch (sensor.type()) {
|
||||||
case AnalogType::COUNTER:
|
case AnalogType::COUNTER:
|
||||||
dataSensor["count"] = (uint16_t)sensor.value(); // convert to integer
|
dataSensor["value"] = (uint16_t)sensor.value(); // convert to integer
|
||||||
break;
|
break;
|
||||||
case AnalogType::ADC:
|
case AnalogType::ADC:
|
||||||
dataSensor["value"] = (float)sensor.value(); // float
|
dataSensor["value"] = (float)sensor.value(); // float
|
||||||
@@ -363,12 +369,13 @@ bool AnalogSensor::command_info(const char * value, const int8_t id, JsonObject
|
|||||||
if (id == -1) { // show number and id
|
if (id == -1) { // show number and id
|
||||||
JsonObject dataSensor = output.createNestedObject(sensor.name());
|
JsonObject dataSensor = output.createNestedObject(sensor.name());
|
||||||
dataSensor["id"] = sensor.id();
|
dataSensor["id"] = sensor.id();
|
||||||
dataSensor["name"] = sensor.name();
|
dataSensor["type"] = FL_(enum_sensortype)[sensor.type()];
|
||||||
dataSensor["type"] = sensor.type();
|
if (sensor.type() == AnalogType::ADC) {
|
||||||
dataSensor["uom"] = sensor.uom();
|
dataSensor["uom"] = EMSdevice::uom_to_string(sensor.uom());
|
||||||
dataSensor["offset"] = sensor.offset();
|
dataSensor["offset"] = sensor.offset();
|
||||||
dataSensor["factor"] = sensor.factor();
|
dataSensor["factor"] = sensor.factor();
|
||||||
dataSensor["value"] = sensor.value();
|
}
|
||||||
|
dataSensor["value"] = sensor.value();
|
||||||
} else {
|
} else {
|
||||||
output[sensor.name()] = sensor.value();
|
output[sensor.name()] = sensor.value();
|
||||||
}
|
}
|
||||||
@@ -398,6 +405,25 @@ std::string AnalogSensor::Sensor::name() const {
|
|||||||
return name_;
|
return name_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set the counter value, id is gpio-no
|
||||||
|
bool AnalogSensor::command_counter(const char * value, const int8_t id) {
|
||||||
|
int val;
|
||||||
|
if (!Helpers::value2number(value, val)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (auto & sensor : sensors_) {
|
||||||
|
if (sensor.type() == AnalogType::COUNTER && sensor.id() == id) {
|
||||||
|
if (val < 0) { // negative values corrects
|
||||||
|
sensor.set_value(sensor.value() + val);
|
||||||
|
} else { // positive values are set
|
||||||
|
sensor.set_value(val);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// hard coded tests
|
// hard coded tests
|
||||||
#ifdef EMSESP_DEBUG
|
#ifdef EMSESP_DEBUG
|
||||||
void AnalogSensor::test() {
|
void AnalogSensor::test() {
|
||||||
|
|||||||
Reference in New Issue
Block a user