add analog counter command, fix #327 "value"

This commit is contained in:
MichaelDvP
2022-01-26 18:35:12 +01:00
parent d3ca556914
commit 233d82805b

View File

@@ -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() {