From 6a9f8e31fd6d82275b190f999feefafcb3df0b28 Mon Sep 17 00:00:00 2001 From: dashevchenko Date: Mon, 30 Sep 2024 16:48:41 +0300 Subject: [PATCH 1/6] fixed pulse counter telemetry calculation --- .../efento/CoapEfentoTransportResource.java | 77 +++++++++++++++---- .../coap/efento/utils/CoapEfentoUtils.java | 15 ++++ .../coap/efento/utils/PulseCounterType.java | 40 ++++++++++ 3 files changed, 117 insertions(+), 15 deletions(-) create mode 100644 common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/utils/PulseCounterType.java diff --git a/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResource.java b/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResource.java index 1ba7c9aff1..9f530cbc11 100644 --- a/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResource.java +++ b/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResource.java @@ -46,12 +46,15 @@ import org.thingsboard.server.transport.coap.CoapTransportContext; import org.thingsboard.server.transport.coap.callback.CoapDeviceAuthCallback; import org.thingsboard.server.transport.coap.callback.CoapEfentoCallback; import org.thingsboard.server.transport.coap.efento.utils.CoapEfentoUtils; +import org.thingsboard.server.transport.coap.efento.utils.PulseCounterType; import java.nio.ByteBuffer; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.Optional; +import java.util.Set; import java.util.TreeMap; import java.util.UUID; import java.util.concurrent.TimeUnit; @@ -62,6 +65,19 @@ import static org.thingsboard.server.transport.coap.CoapTransportService.CONFIGU import static org.thingsboard.server.transport.coap.CoapTransportService.CURRENT_TIMESTAMP; import static org.thingsboard.server.transport.coap.CoapTransportService.DEVICE_INFO; import static org.thingsboard.server.transport.coap.CoapTransportService.MEASUREMENTS; +import static org.thingsboard.server.transport.coap.efento.utils.CoapEfentoUtils.BREATH_VOC_METADATA_FACTOR; +import static org.thingsboard.server.transport.coap.efento.utils.CoapEfentoUtils.CO2_EQUIVALENT_METADATA_FACTOR; +import static org.thingsboard.server.transport.coap.efento.utils.CoapEfentoUtils.CO2_GAS_METADATA_FACTOR; +import static org.thingsboard.server.transport.coap.efento.utils.CoapEfentoUtils.ELEC_METER_ACC_MAJOR_METADATA_FACTOR; +import static org.thingsboard.server.transport.coap.efento.utils.CoapEfentoUtils.ELEC_METER_ACC_MINOR_METADATA_FACTOR; +import static org.thingsboard.server.transport.coap.efento.utils.CoapEfentoUtils.IAQ_METADATA_FACTOR; +import static org.thingsboard.server.transport.coap.efento.utils.CoapEfentoUtils.PULSE_CNT_ACC_MAJOR_METADATA_FACTOR; +import static org.thingsboard.server.transport.coap.efento.utils.CoapEfentoUtils.PULSE_CNT_ACC_MINOR_METADATA_FACTOR; +import static org.thingsboard.server.transport.coap.efento.utils.CoapEfentoUtils.PULSE_CNT_ACC_WIDE_MAJOR_METADATA_FACTOR; +import static org.thingsboard.server.transport.coap.efento.utils.CoapEfentoUtils.PULSE_CNT_ACC_WIDE_MINOR_METADATA_FACTOR; +import static org.thingsboard.server.transport.coap.efento.utils.CoapEfentoUtils.STATIC_IAQ_METADATA_FACTOR; +import static org.thingsboard.server.transport.coap.efento.utils.CoapEfentoUtils.WATER_METER_ACC_MAJOR_METADATA_FACTOR; +import static org.thingsboard.server.transport.coap.efento.utils.CoapEfentoUtils.WATER_METER_ACC_MINOR_METADATA_FACTOR; import static org.thingsboard.server.transport.coap.efento.utils.CoapEfentoUtils.isBinarySensor; import static org.thingsboard.server.transport.coap.efento.utils.CoapEfentoUtils.isSensorError; @@ -280,6 +296,12 @@ public class CoapEfentoTransportResource extends AbstractCoapTransportResource { } } + valuesMap.values().forEach(jsonObject -> { + for (PulseCounterType pulseCounterType : PulseCounterType.values()) { + calculatePulseCounterTotalValue(jsonObject, pulseCounterType); + } + }); + if (CollectionUtils.isEmpty(valuesMap)) { throw new IllegalStateException("[" + sessionId + "]: Failed to collect Efento measurements, reason, values map is empty!"); } @@ -312,7 +334,8 @@ public class CoapEfentoTransportResource extends AbstractCoapTransportResource { values.addProperty("pulse_cnt_" + channelNumber, (double) (startPoint + sampleOffset)); break; case MEASUREMENT_TYPE_IAQ: - values.addProperty("iaq_" + channelNumber, (startPoint + sampleOffset)); + values.addProperty("iaq_" + channelNumber, (startPoint + sampleOffset) / IAQ_METADATA_FACTOR); + values.addProperty("iaq_metadata_" + channelNumber, (startPoint + sampleOffset) % IAQ_METADATA_FACTOR); break; case MEASUREMENT_TYPE_ELECTRICITY_METER: values.addProperty("watt_hour_" + channelNumber, (double) (startPoint + sampleOffset)); @@ -330,52 +353,67 @@ public class CoapEfentoTransportResource extends AbstractCoapTransportResource { values.addProperty("distance_mm_" + channelNumber, (double) (startPoint + sampleOffset)); break; case MEASUREMENT_TYPE_WATER_METER_ACC_MINOR: - values.addProperty("acc_counter_water_minor_" + channelNumber, (double) (startPoint + sampleOffset)); + values.addProperty("water_cnt_acc_minor_" + channelNumber, (startPoint + sampleOffset) / WATER_METER_ACC_MINOR_METADATA_FACTOR); + values.addProperty("water_cnt_acc_minor_metadata_" + channelNumber, (startPoint + sampleOffset) % WATER_METER_ACC_MINOR_METADATA_FACTOR); break; case MEASUREMENT_TYPE_WATER_METER_ACC_MAJOR: - values.addProperty("acc_counter_water_major_" + channelNumber, (double) (startPoint + sampleOffset)); + values.addProperty("water_cnt_acc_major_" + channelNumber, (startPoint + sampleOffset) / WATER_METER_ACC_MAJOR_METADATA_FACTOR); + values.addProperty("water_cnt_acc_major_metadata_" + channelNumber, (startPoint + sampleOffset) % WATER_METER_ACC_MAJOR_METADATA_FACTOR); break; case MEASUREMENT_TYPE_HUMIDITY_ACCURATE: values.addProperty("humidity_relative_" + channelNumber, (double) (startPoint + sampleOffset) / 10f); break; case MEASUREMENT_TYPE_STATIC_IAQ: - values.addProperty("static_iaq_" + channelNumber, (double) (startPoint + sampleOffset)); + values.addProperty("static_iaq_" + channelNumber, (startPoint + sampleOffset) / STATIC_IAQ_METADATA_FACTOR); + values.addProperty("static_iaq_metadata_" + channelNumber, (startPoint + sampleOffset) % STATIC_IAQ_METADATA_FACTOR); + break; + case MEASUREMENT_TYPE_CO2_GAS: + values.addProperty("co2_gas_" + channelNumber, (startPoint + sampleOffset) / CO2_GAS_METADATA_FACTOR); + values.addProperty("co2_gas_metadata_" + channelNumber, (startPoint + sampleOffset) % CO2_GAS_METADATA_FACTOR); break; case MEASUREMENT_TYPE_CO2_EQUIVALENT: - values.addProperty("co2_ppm_" + channelNumber, (double) (startPoint + sampleOffset)); + values.addProperty("co2_ppm_" + channelNumber, (startPoint + sampleOffset) / CO2_EQUIVALENT_METADATA_FACTOR); + values.addProperty("co2_ppm_metadata_" + channelNumber, (startPoint + sampleOffset) % CO2_EQUIVALENT_METADATA_FACTOR); break; case MEASUREMENT_TYPE_BREATH_VOC: - values.addProperty("breath_voc_ppm_" + channelNumber, (double) (startPoint + sampleOffset)); + values.addProperty("breath_voc_ppm_" + channelNumber, (startPoint + sampleOffset) / BREATH_VOC_METADATA_FACTOR); + values.addProperty("breath_voc_ppm_metadata_" + channelNumber, (startPoint + sampleOffset) % BREATH_VOC_METADATA_FACTOR); break; case MEASUREMENT_TYPE_PERCENTAGE: values.addProperty("percentage_" + channelNumber, (double) (startPoint + sampleOffset) / 100f); break; case MEASUREMENT_TYPE_VOLTAGE: - values.addProperty("voltage_" + channelNumber, (double) (startPoint + sampleOffset) / 10f); + values.addProperty("voltage_" + channelNumber, (double) (startPoint + sampleOffset)); break; case MEASUREMENT_TYPE_CURRENT: - values.addProperty("current_" + channelNumber, (double) (startPoint + sampleOffset) / 100f); + values.addProperty("current_" + channelNumber, (double) (startPoint + sampleOffset)); break; case MEASUREMENT_TYPE_PULSE_CNT_ACC_MINOR: - values.addProperty("pulse_cnt_minor_" + channelNumber, (double) (startPoint + sampleOffset)); + values.addProperty("pulse_cnt_acc_minor_" + channelNumber, (startPoint + sampleOffset) / PULSE_CNT_ACC_MINOR_METADATA_FACTOR); + values.addProperty("pulse_cnt_acc_minor_metadata_" + channelNumber, (startPoint + sampleOffset) % PULSE_CNT_ACC_MINOR_METADATA_FACTOR); break; case MEASUREMENT_TYPE_PULSE_CNT_ACC_MAJOR: - values.addProperty("pulse_cnt_major_" + channelNumber, (double) (startPoint + sampleOffset)); + values.addProperty("pulse_cnt_acc_major_" + channelNumber, (startPoint + sampleOffset) / PULSE_CNT_ACC_MAJOR_METADATA_FACTOR); + values.addProperty("pulse_cnt_acc_major_metadata_" + channelNumber, (startPoint + sampleOffset) % PULSE_CNT_ACC_MAJOR_METADATA_FACTOR); break; case MEASUREMENT_TYPE_ELEC_METER_ACC_MINOR: - values.addProperty("elec_meter_minor_" + channelNumber, (double) (startPoint + sampleOffset)); + values.addProperty("elec_meter_acc_minor_" + channelNumber, (startPoint + sampleOffset) / ELEC_METER_ACC_MINOR_METADATA_FACTOR); + values.addProperty("elec_meter_acc_minor_metadata_" + channelNumber, (startPoint + sampleOffset) % ELEC_METER_ACC_MINOR_METADATA_FACTOR); break; case MEASUREMENT_TYPE_ELEC_METER_ACC_MAJOR: - values.addProperty("elec_meter_major_" + channelNumber, (double) (startPoint + sampleOffset)); + values.addProperty("elec_meter_acc_major_" + channelNumber, (startPoint + sampleOffset) / ELEC_METER_ACC_MAJOR_METADATA_FACTOR); + values.addProperty("elec_meter_acc_major_metadata_" + channelNumber, (startPoint + sampleOffset) % ELEC_METER_ACC_MAJOR_METADATA_FACTOR); break; case MEASUREMENT_TYPE_PULSE_CNT_ACC_WIDE_MINOR: - values.addProperty("pulse_cnt_wide_minor_" + channelNumber, (double) (startPoint + sampleOffset)); + values.addProperty("pulse_cnt_acc_wide_minor_" + channelNumber, (startPoint + sampleOffset) / PULSE_CNT_ACC_WIDE_MINOR_METADATA_FACTOR); + values.addProperty("pulse_cnt_acc_wide_minor_metadata_" + channelNumber, (startPoint + sampleOffset) % PULSE_CNT_ACC_WIDE_MINOR_METADATA_FACTOR); break; case MEASUREMENT_TYPE_PULSE_CNT_ACC_WIDE_MAJOR: - values.addProperty("pulse_cnt_wide_major_" + channelNumber, (double) (startPoint + sampleOffset)); + values.addProperty("pulse_cnt_acc_wide_major_" + channelNumber, (startPoint + sampleOffset) / PULSE_CNT_ACC_WIDE_MAJOR_METADATA_FACTOR); + values.addProperty("pulse_cnt_acc_wide_major_metadata_" + channelNumber, (startPoint + sampleOffset) % PULSE_CNT_ACC_WIDE_MAJOR_METADATA_FACTOR); break; case MEASUREMENT_TYPE_CURRENT_PRECISE: - values.addProperty("current_precise_" + channelNumber, (double) (startPoint + sampleOffset)/1000f); + values.addProperty("current_precise_" + channelNumber, (double) (startPoint + sampleOffset)); break; case MEASUREMENT_TYPE_NO_SENSOR: case UNRECOGNIZED: @@ -387,6 +425,15 @@ public class CoapEfentoTransportResource extends AbstractCoapTransportResource { } } + private void calculatePulseCounterTotalValue(JsonObject value, PulseCounterType pulseCounterType) { + Set keys = value.keySet(); + Optional major = keys.stream().filter(s -> s.startsWith(pulseCounterType.getPrefix() + "major_")).findAny(); + Optional minor = keys.stream().filter(s -> s.startsWith(pulseCounterType.getPrefix() + "minor_")).findAny(); + if (major.isPresent() && minor.isPresent()) { + value.addProperty(pulseCounterType.getPrefix() + "total_value", value.get(major.get()).getAsInt() * pulseCounterType.getMajorResolution() + value.get(minor.get()).getAsInt()); + } + } + private void addBinarySample(ProtoChannel protoChannel, boolean valueIsOk, JsonObject values, int channel, UUID sessionId) { switch (protoChannel.getType()) { case MEASUREMENT_TYPE_OK_ALARM: diff --git a/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/utils/CoapEfentoUtils.java b/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/utils/CoapEfentoUtils.java index 96c1805be3..6e3e81dc94 100644 --- a/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/utils/CoapEfentoUtils.java +++ b/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/utils/CoapEfentoUtils.java @@ -28,6 +28,21 @@ import static org.thingsboard.server.gen.transport.coap.MeasurementTypeProtos.Me public class CoapEfentoUtils { + public static final int PULSE_CNT_ACC_MINOR_METADATA_FACTOR = 6; + public static final int PULSE_CNT_ACC_MAJOR_METADATA_FACTOR = 4; + public static final int ELEC_METER_ACC_MINOR_METADATA_FACTOR = 6; + public static final int ELEC_METER_ACC_MAJOR_METADATA_FACTOR = 4; + public static final int PULSE_CNT_ACC_WIDE_MINOR_METADATA_FACTOR = 6; + public static final int PULSE_CNT_ACC_WIDE_MAJOR_METADATA_FACTOR = 4; + public static final int WATER_METER_ACC_MINOR_METADATA_FACTOR = 6; + public static final int WATER_METER_ACC_MAJOR_METADATA_FACTOR = 4; + public static final int IAQ_METADATA_FACTOR = 3; + public static final int STATIC_IAQ_METADATA_FACTOR = 3; + public static final int CO2_GAS_METADATA_FACTOR = 3; + public static final int CO2_EQUIVALENT_METADATA_FACTOR = 3; + public static final int BREATH_VOC_METADATA_FACTOR = 3; + + public static String convertByteArrayToString(byte[] a) { StringBuilder out = new StringBuilder(); for (byte b : a) { diff --git a/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/utils/PulseCounterType.java b/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/utils/PulseCounterType.java new file mode 100644 index 0000000000..757e1c12a8 --- /dev/null +++ b/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/utils/PulseCounterType.java @@ -0,0 +1,40 @@ +/** + * Copyright © 2016-2024 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.transport.coap.efento.utils; + +public enum PulseCounterType { + + WATER_CNT_ACC("water_cnt_acc_", 100), + PULSE_CNT_ACC("pulse_cnt_acc_", 1000), + ELEC_METER_ACC("elec_meter_acc_", 1000), + PULSE_CNT_ACC_WIDE("pulse_cnt_acc_wide_", 1000000); + + private final String prefix; + private final int majorResolution; + + PulseCounterType(String prefix, int majorResolution) { + this.prefix = prefix; + this.majorResolution = majorResolution; + } + + public String getPrefix() { + return prefix; + } + + public int getMajorResolution() { + return majorResolution; + } +} From a44cf6a6867a0a2f963fba3ac6461bdda54662b5 Mon Sep 17 00:00:00 2001 From: dashevchenko Date: Mon, 30 Sep 2024 18:00:04 +0300 Subject: [PATCH 2/6] refactoring --- .../efento/CoapEfentoTransportResource.java | 44 ++++++++----------- 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResource.java b/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResource.java index 9f530cbc11..d6c8d4f8a1 100644 --- a/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResource.java +++ b/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResource.java @@ -334,8 +334,7 @@ public class CoapEfentoTransportResource extends AbstractCoapTransportResource { values.addProperty("pulse_cnt_" + channelNumber, (double) (startPoint + sampleOffset)); break; case MEASUREMENT_TYPE_IAQ: - values.addProperty("iaq_" + channelNumber, (startPoint + sampleOffset) / IAQ_METADATA_FACTOR); - values.addProperty("iaq_metadata_" + channelNumber, (startPoint + sampleOffset) % IAQ_METADATA_FACTOR); + addPulseCounterProperties(values, "iaq_", channelNumber, startPoint + sampleOffset, IAQ_METADATA_FACTOR); break; case MEASUREMENT_TYPE_ELECTRICITY_METER: values.addProperty("watt_hour_" + channelNumber, (double) (startPoint + sampleOffset)); @@ -353,31 +352,25 @@ public class CoapEfentoTransportResource extends AbstractCoapTransportResource { values.addProperty("distance_mm_" + channelNumber, (double) (startPoint + sampleOffset)); break; case MEASUREMENT_TYPE_WATER_METER_ACC_MINOR: - values.addProperty("water_cnt_acc_minor_" + channelNumber, (startPoint + sampleOffset) / WATER_METER_ACC_MINOR_METADATA_FACTOR); - values.addProperty("water_cnt_acc_minor_metadata_" + channelNumber, (startPoint + sampleOffset) % WATER_METER_ACC_MINOR_METADATA_FACTOR); + addPulseCounterProperties(values, "water_cnt_acc_minor_", channelNumber, startPoint + sampleOffset, WATER_METER_ACC_MINOR_METADATA_FACTOR); break; case MEASUREMENT_TYPE_WATER_METER_ACC_MAJOR: - values.addProperty("water_cnt_acc_major_" + channelNumber, (startPoint + sampleOffset) / WATER_METER_ACC_MAJOR_METADATA_FACTOR); - values.addProperty("water_cnt_acc_major_metadata_" + channelNumber, (startPoint + sampleOffset) % WATER_METER_ACC_MAJOR_METADATA_FACTOR); + addPulseCounterProperties(values, "water_cnt_acc_major_", channelNumber, startPoint + sampleOffset, WATER_METER_ACC_MAJOR_METADATA_FACTOR); break; case MEASUREMENT_TYPE_HUMIDITY_ACCURATE: values.addProperty("humidity_relative_" + channelNumber, (double) (startPoint + sampleOffset) / 10f); break; case MEASUREMENT_TYPE_STATIC_IAQ: - values.addProperty("static_iaq_" + channelNumber, (startPoint + sampleOffset) / STATIC_IAQ_METADATA_FACTOR); - values.addProperty("static_iaq_metadata_" + channelNumber, (startPoint + sampleOffset) % STATIC_IAQ_METADATA_FACTOR); + addPulseCounterProperties(values, "static_iaq_", channelNumber, startPoint + sampleOffset, STATIC_IAQ_METADATA_FACTOR); break; case MEASUREMENT_TYPE_CO2_GAS: - values.addProperty("co2_gas_" + channelNumber, (startPoint + sampleOffset) / CO2_GAS_METADATA_FACTOR); - values.addProperty("co2_gas_metadata_" + channelNumber, (startPoint + sampleOffset) % CO2_GAS_METADATA_FACTOR); + addPulseCounterProperties(values, "co2_gas_", channelNumber, startPoint + sampleOffset, CO2_GAS_METADATA_FACTOR); break; case MEASUREMENT_TYPE_CO2_EQUIVALENT: - values.addProperty("co2_ppm_" + channelNumber, (startPoint + sampleOffset) / CO2_EQUIVALENT_METADATA_FACTOR); - values.addProperty("co2_ppm_metadata_" + channelNumber, (startPoint + sampleOffset) % CO2_EQUIVALENT_METADATA_FACTOR); + addPulseCounterProperties(values, "co2_ppm_", channelNumber, startPoint + sampleOffset, CO2_EQUIVALENT_METADATA_FACTOR); break; case MEASUREMENT_TYPE_BREATH_VOC: - values.addProperty("breath_voc_ppm_" + channelNumber, (startPoint + sampleOffset) / BREATH_VOC_METADATA_FACTOR); - values.addProperty("breath_voc_ppm_metadata_" + channelNumber, (startPoint + sampleOffset) % BREATH_VOC_METADATA_FACTOR); + addPulseCounterProperties(values, "breath_voc_", channelNumber, startPoint + sampleOffset, BREATH_VOC_METADATA_FACTOR); break; case MEASUREMENT_TYPE_PERCENTAGE: values.addProperty("percentage_" + channelNumber, (double) (startPoint + sampleOffset) / 100f); @@ -389,28 +382,22 @@ public class CoapEfentoTransportResource extends AbstractCoapTransportResource { values.addProperty("current_" + channelNumber, (double) (startPoint + sampleOffset)); break; case MEASUREMENT_TYPE_PULSE_CNT_ACC_MINOR: - values.addProperty("pulse_cnt_acc_minor_" + channelNumber, (startPoint + sampleOffset) / PULSE_CNT_ACC_MINOR_METADATA_FACTOR); - values.addProperty("pulse_cnt_acc_minor_metadata_" + channelNumber, (startPoint + sampleOffset) % PULSE_CNT_ACC_MINOR_METADATA_FACTOR); + addPulseCounterProperties(values, "pulse_cnt_acc_minor_", channelNumber, startPoint + sampleOffset, PULSE_CNT_ACC_MINOR_METADATA_FACTOR); break; case MEASUREMENT_TYPE_PULSE_CNT_ACC_MAJOR: - values.addProperty("pulse_cnt_acc_major_" + channelNumber, (startPoint + sampleOffset) / PULSE_CNT_ACC_MAJOR_METADATA_FACTOR); - values.addProperty("pulse_cnt_acc_major_metadata_" + channelNumber, (startPoint + sampleOffset) % PULSE_CNT_ACC_MAJOR_METADATA_FACTOR); + addPulseCounterProperties(values, "pulse_cnt_acc_major_", channelNumber, startPoint + sampleOffset, PULSE_CNT_ACC_MAJOR_METADATA_FACTOR); break; case MEASUREMENT_TYPE_ELEC_METER_ACC_MINOR: - values.addProperty("elec_meter_acc_minor_" + channelNumber, (startPoint + sampleOffset) / ELEC_METER_ACC_MINOR_METADATA_FACTOR); - values.addProperty("elec_meter_acc_minor_metadata_" + channelNumber, (startPoint + sampleOffset) % ELEC_METER_ACC_MINOR_METADATA_FACTOR); + addPulseCounterProperties(values, "elec_meter_acc_minor_", channelNumber, startPoint + sampleOffset, ELEC_METER_ACC_MINOR_METADATA_FACTOR); break; case MEASUREMENT_TYPE_ELEC_METER_ACC_MAJOR: - values.addProperty("elec_meter_acc_major_" + channelNumber, (startPoint + sampleOffset) / ELEC_METER_ACC_MAJOR_METADATA_FACTOR); - values.addProperty("elec_meter_acc_major_metadata_" + channelNumber, (startPoint + sampleOffset) % ELEC_METER_ACC_MAJOR_METADATA_FACTOR); + addPulseCounterProperties(values, "elec_meter_acc_major_", channelNumber, startPoint + sampleOffset, ELEC_METER_ACC_MAJOR_METADATA_FACTOR); break; case MEASUREMENT_TYPE_PULSE_CNT_ACC_WIDE_MINOR: - values.addProperty("pulse_cnt_acc_wide_minor_" + channelNumber, (startPoint + sampleOffset) / PULSE_CNT_ACC_WIDE_MINOR_METADATA_FACTOR); - values.addProperty("pulse_cnt_acc_wide_minor_metadata_" + channelNumber, (startPoint + sampleOffset) % PULSE_CNT_ACC_WIDE_MINOR_METADATA_FACTOR); + addPulseCounterProperties(values, "pulse_cnt_acc_wide_minor_", channelNumber, startPoint + sampleOffset, PULSE_CNT_ACC_WIDE_MINOR_METADATA_FACTOR); break; case MEASUREMENT_TYPE_PULSE_CNT_ACC_WIDE_MAJOR: - values.addProperty("pulse_cnt_acc_wide_major_" + channelNumber, (startPoint + sampleOffset) / PULSE_CNT_ACC_WIDE_MAJOR_METADATA_FACTOR); - values.addProperty("pulse_cnt_acc_wide_major_metadata_" + channelNumber, (startPoint + sampleOffset) % PULSE_CNT_ACC_WIDE_MAJOR_METADATA_FACTOR); + addPulseCounterProperties(values, "pulse_cnt_acc_wide_major_", channelNumber, startPoint + sampleOffset, PULSE_CNT_ACC_WIDE_MAJOR_METADATA_FACTOR); break; case MEASUREMENT_TYPE_CURRENT_PRECISE: values.addProperty("current_precise_" + channelNumber, (double) (startPoint + sampleOffset)); @@ -425,6 +412,11 @@ public class CoapEfentoTransportResource extends AbstractCoapTransportResource { } } + private void addPulseCounterProperties(JsonObject values, String prefix, int channelNumber, int value, int metadataFactor) { + values.addProperty(prefix + "_" + channelNumber, value / metadataFactor); + values.addProperty(prefix + "_metadata_" + channelNumber, value % metadataFactor); + } + private void calculatePulseCounterTotalValue(JsonObject value, PulseCounterType pulseCounterType) { Set keys = value.keySet(); Optional major = keys.stream().filter(s -> s.startsWith(pulseCounterType.getPrefix() + "major_")).findAny(); From 1d5149cb84ef34c0a55f89f376acd4de5ca4bdd9 Mon Sep 17 00:00:00 2001 From: dashevchenko Date: Tue, 1 Oct 2024 10:59:52 +0300 Subject: [PATCH 3/6] fixed test --- .../efento/CoapEfentoTransportResource.java | 8 ++--- ...a => CoapEfentoTransportResourceTest.java} | 34 +++++++++---------- 2 files changed, 21 insertions(+), 21 deletions(-) rename common/transport/coap/src/test/java/org/thingsboard/server/transport/coap/efento/{CoapEfentTransportResourceTest.java => CoapEfentoTransportResourceTest.java} (96%) diff --git a/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResource.java b/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResource.java index d6c8d4f8a1..cd08897c7c 100644 --- a/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResource.java +++ b/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResource.java @@ -367,13 +367,13 @@ public class CoapEfentoTransportResource extends AbstractCoapTransportResource { addPulseCounterProperties(values, "co2_gas_", channelNumber, startPoint + sampleOffset, CO2_GAS_METADATA_FACTOR); break; case MEASUREMENT_TYPE_CO2_EQUIVALENT: - addPulseCounterProperties(values, "co2_ppm_", channelNumber, startPoint + sampleOffset, CO2_EQUIVALENT_METADATA_FACTOR); + addPulseCounterProperties(values, "co2_", channelNumber, startPoint + sampleOffset, CO2_EQUIVALENT_METADATA_FACTOR); break; case MEASUREMENT_TYPE_BREATH_VOC: addPulseCounterProperties(values, "breath_voc_", channelNumber, startPoint + sampleOffset, BREATH_VOC_METADATA_FACTOR); break; case MEASUREMENT_TYPE_PERCENTAGE: - values.addProperty("percentage_" + channelNumber, (double) (startPoint + sampleOffset) / 100f); + values.addProperty("percentage_" + channelNumber, startPoint + sampleOffset); break; case MEASUREMENT_TYPE_VOLTAGE: values.addProperty("voltage_" + channelNumber, (double) (startPoint + sampleOffset)); @@ -413,8 +413,8 @@ public class CoapEfentoTransportResource extends AbstractCoapTransportResource { } private void addPulseCounterProperties(JsonObject values, String prefix, int channelNumber, int value, int metadataFactor) { - values.addProperty(prefix + "_" + channelNumber, value / metadataFactor); - values.addProperty(prefix + "_metadata_" + channelNumber, value % metadataFactor); + values.addProperty(prefix + channelNumber, value / metadataFactor); + values.addProperty(prefix + "metadata_" + channelNumber, value % metadataFactor); } private void calculatePulseCounterTotalValue(JsonObject value, PulseCounterType pulseCounterType) { diff --git a/common/transport/coap/src/test/java/org/thingsboard/server/transport/coap/efento/CoapEfentTransportResourceTest.java b/common/transport/coap/src/test/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResourceTest.java similarity index 96% rename from common/transport/coap/src/test/java/org/thingsboard/server/transport/coap/efento/CoapEfentTransportResourceTest.java rename to common/transport/coap/src/test/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResourceTest.java index 1b6327d62d..c1856a4b5a 100644 --- a/common/transport/coap/src/test/java/org/thingsboard/server/transport/coap/efento/CoapEfentTransportResourceTest.java +++ b/common/transport/coap/src/test/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResourceTest.java @@ -70,7 +70,7 @@ import static org.thingsboard.server.gen.transport.coap.MeasurementTypeProtos.Me import static org.thingsboard.server.gen.transport.coap.MeasurementTypeProtos.MeasurementType.MEASUREMENT_TYPE_WATER_METER_ACC_MINOR; import static org.thingsboard.server.transport.coap.efento.utils.CoapEfentoUtils.convertTimestampToUtcString; -class CoapEfentTransportResourceTest { +class CoapEfentoTransportResourceTest { private static CoapEfentoTransportResource coapEfentoTransportResource; @@ -152,28 +152,28 @@ class CoapEfentTransportResourceTest { Arguments.of(MEASUREMENT_TYPE_ATMOSPHERIC_PRESSURE, List.of(1013), "pressure_1", 101.3), Arguments.of(MEASUREMENT_TYPE_DIFFERENTIAL_PRESSURE, List.of(500), "pressure_diff_1", 500), Arguments.of(MEASUREMENT_TYPE_PULSE_CNT, List.of(300), "pulse_cnt_1", 300), - Arguments.of(MEASUREMENT_TYPE_IAQ, List.of(150), "iaq_1", 150), + Arguments.of(MEASUREMENT_TYPE_IAQ, List.of(150), "iaq_1", 50.0), Arguments.of(MEASUREMENT_TYPE_ELECTRICITY_METER, List.of(1200), "watt_hour_1", 1200), Arguments.of(MEASUREMENT_TYPE_SOIL_MOISTURE, List.of(35), "soil_moisture_1", 35), Arguments.of(MEASUREMENT_TYPE_AMBIENT_LIGHT, List.of(500), "ambient_light_1", 50), Arguments.of(MEASUREMENT_TYPE_HIGH_PRESSURE, List.of(200000), "high_pressure_1", 200000), Arguments.of(MEASUREMENT_TYPE_DISTANCE_MM, List.of(1500), "distance_mm_1", 1500), - Arguments.of(MEASUREMENT_TYPE_WATER_METER_ACC_MINOR, List.of(125), "acc_counter_water_minor_1", 125), - Arguments.of(MEASUREMENT_TYPE_WATER_METER_ACC_MAJOR, List.of(2500), "acc_counter_water_major_1", 2500), + Arguments.of(MEASUREMENT_TYPE_WATER_METER_ACC_MINOR, List.of(125), "water_cnt_acc_minor_1", 20), + Arguments.of(MEASUREMENT_TYPE_WATER_METER_ACC_MAJOR, List.of(2500), "water_cnt_acc_major_1", 625), Arguments.of(MEASUREMENT_TYPE_HUMIDITY_ACCURATE, List.of(525), "humidity_relative_1", 52.5), - Arguments.of(MEASUREMENT_TYPE_STATIC_IAQ, List.of(110), "static_iaq_1", 110), - Arguments.of(MEASUREMENT_TYPE_CO2_EQUIVALENT, List.of(450), "co2_ppm_1", 450), - Arguments.of(MEASUREMENT_TYPE_BREATH_VOC, List.of(220), "breath_voc_ppm_1", 220), - Arguments.of(MEASUREMENT_TYPE_PERCENTAGE, List.of(80), "percentage_1", 0.80), - Arguments.of(MEASUREMENT_TYPE_VOLTAGE, List.of(2400), "voltage_1", 240), - Arguments.of(MEASUREMENT_TYPE_CURRENT, List.of(550), "current_1", 5.5), - Arguments.of(MEASUREMENT_TYPE_PULSE_CNT_ACC_MINOR, List.of(180), "pulse_cnt_minor_1", 180), - Arguments.of(MEASUREMENT_TYPE_PULSE_CNT_ACC_MAJOR, List.of(1200), "pulse_cnt_major_1", 1200), - Arguments.of(MEASUREMENT_TYPE_ELEC_METER_ACC_MINOR, List.of(550), "elec_meter_minor_1", 550), - Arguments.of(MEASUREMENT_TYPE_ELEC_METER_ACC_MAJOR, List.of(5500), "elec_meter_major_1", 5500), - Arguments.of(MEASUREMENT_TYPE_PULSE_CNT_ACC_WIDE_MINOR, List.of(230), "pulse_cnt_wide_minor_1", 230), - Arguments.of(MEASUREMENT_TYPE_PULSE_CNT_ACC_WIDE_MAJOR, List.of(1700), "pulse_cnt_wide_major_1", 1700), - Arguments.of(MEASUREMENT_TYPE_CURRENT_PRECISE, List.of(275), "current_precise_1", 0.275) + Arguments.of(MEASUREMENT_TYPE_STATIC_IAQ, List.of(110), "static_iaq_1", 36), + Arguments.of(MEASUREMENT_TYPE_CO2_EQUIVALENT, List.of(450), "co2_1", 150), + Arguments.of(MEASUREMENT_TYPE_BREATH_VOC, List.of(220), "breath_voc_1", 73), + Arguments.of(MEASUREMENT_TYPE_PERCENTAGE, List.of(80), "percentage_1", 80), + Arguments.of(MEASUREMENT_TYPE_VOLTAGE, List.of(2400), "voltage_1", 2400.0), + Arguments.of(MEASUREMENT_TYPE_CURRENT, List.of(550), "current_1", 550.0), + Arguments.of(MEASUREMENT_TYPE_PULSE_CNT_ACC_MINOR, List.of(180), "pulse_cnt_acc_minor_1", 30), + Arguments.of(MEASUREMENT_TYPE_PULSE_CNT_ACC_MAJOR, List.of(1200), "pulse_cnt_acc_major_1", 300), + Arguments.of(MEASUREMENT_TYPE_ELEC_METER_ACC_MINOR, List.of(550), "elec_meter_acc_minor_1", 91), + Arguments.of(MEASUREMENT_TYPE_ELEC_METER_ACC_MAJOR, List.of(5500), "elec_meter_acc_major_1", 1375), + Arguments.of(MEASUREMENT_TYPE_PULSE_CNT_ACC_WIDE_MINOR, List.of(230), "pulse_cnt_acc_wide_minor_1", 38), + Arguments.of(MEASUREMENT_TYPE_PULSE_CNT_ACC_WIDE_MAJOR, List.of(1700), "pulse_cnt_acc_wide_major_1", 425), + Arguments.of(MEASUREMENT_TYPE_CURRENT_PRECISE, List.of(275), "current_precise_1", 275.0) ); } From e4581cdc2377773662577796731e61b47884f78d Mon Sep 17 00:00:00 2001 From: dashevchenko Date: Tue, 1 Oct 2024 11:24:00 +0300 Subject: [PATCH 4/6] improved tests --- .../CoapEfentoTransportResourceTest.java | 54 ++++++++++++++++--- 1 file changed, 46 insertions(+), 8 deletions(-) diff --git a/common/transport/coap/src/test/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResourceTest.java b/common/transport/coap/src/test/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResourceTest.java index c1856a4b5a..29d144a78f 100644 --- a/common/transport/coap/src/test/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResourceTest.java +++ b/common/transport/coap/src/test/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResourceTest.java @@ -158,8 +158,6 @@ class CoapEfentoTransportResourceTest { Arguments.of(MEASUREMENT_TYPE_AMBIENT_LIGHT, List.of(500), "ambient_light_1", 50), Arguments.of(MEASUREMENT_TYPE_HIGH_PRESSURE, List.of(200000), "high_pressure_1", 200000), Arguments.of(MEASUREMENT_TYPE_DISTANCE_MM, List.of(1500), "distance_mm_1", 1500), - Arguments.of(MEASUREMENT_TYPE_WATER_METER_ACC_MINOR, List.of(125), "water_cnt_acc_minor_1", 20), - Arguments.of(MEASUREMENT_TYPE_WATER_METER_ACC_MAJOR, List.of(2500), "water_cnt_acc_major_1", 625), Arguments.of(MEASUREMENT_TYPE_HUMIDITY_ACCURATE, List.of(525), "humidity_relative_1", 52.5), Arguments.of(MEASUREMENT_TYPE_STATIC_IAQ, List.of(110), "static_iaq_1", 36), Arguments.of(MEASUREMENT_TYPE_CO2_EQUIVALENT, List.of(450), "co2_1", 150), @@ -167,16 +165,56 @@ class CoapEfentoTransportResourceTest { Arguments.of(MEASUREMENT_TYPE_PERCENTAGE, List.of(80), "percentage_1", 80), Arguments.of(MEASUREMENT_TYPE_VOLTAGE, List.of(2400), "voltage_1", 2400.0), Arguments.of(MEASUREMENT_TYPE_CURRENT, List.of(550), "current_1", 550.0), - Arguments.of(MEASUREMENT_TYPE_PULSE_CNT_ACC_MINOR, List.of(180), "pulse_cnt_acc_minor_1", 30), - Arguments.of(MEASUREMENT_TYPE_PULSE_CNT_ACC_MAJOR, List.of(1200), "pulse_cnt_acc_major_1", 300), - Arguments.of(MEASUREMENT_TYPE_ELEC_METER_ACC_MINOR, List.of(550), "elec_meter_acc_minor_1", 91), - Arguments.of(MEASUREMENT_TYPE_ELEC_METER_ACC_MAJOR, List.of(5500), "elec_meter_acc_major_1", 1375), - Arguments.of(MEASUREMENT_TYPE_PULSE_CNT_ACC_WIDE_MINOR, List.of(230), "pulse_cnt_acc_wide_minor_1", 38), - Arguments.of(MEASUREMENT_TYPE_PULSE_CNT_ACC_WIDE_MAJOR, List.of(1700), "pulse_cnt_acc_wide_major_1", 425), Arguments.of(MEASUREMENT_TYPE_CURRENT_PRECISE, List.of(275), "current_precise_1", 275.0) ); } + @ParameterizedTest + @MethodSource + void checkPulseCounterSensors(MeasurementType minorType, List minorSampleOffsets, MeasurementType majorType, List majorSampleOffsets, + String propertyPrefix, double expectedValue) { + long tsInSec = Instant.now().getEpochSecond(); + ProtoMeasurements measurements = ProtoMeasurements.newBuilder() + .setSerialNum(integerToByteString(1234)) + .setCloudToken("test_token") + .setMeasurementPeriodBase(180) + .setMeasurementPeriodFactor(0) + .setBatteryStatus(true) + .setSignal(0) + .setNextTransmissionAt(1000) + .setTransferReason(0) + .setHash(0) + .addAllChannels(List.of(MeasurementsProtos.ProtoChannel.newBuilder() + .setType(minorType) + .setTimestamp(Math.toIntExact(tsInSec)) + .addAllSampleOffsets(minorSampleOffsets) + .build(), + MeasurementsProtos.ProtoChannel.newBuilder() + .setType(majorType) + .setTimestamp(Math.toIntExact(tsInSec)) + .addAllSampleOffsets(majorSampleOffsets) + .build())) + .build(); + List efentoMeasurements = coapEfentoTransportResource.getEfentoMeasurements(measurements, UUID.randomUUID()); + assertThat(efentoMeasurements).hasSize(1); + assertThat(efentoMeasurements.get(0).getTs()).isEqualTo(tsInSec * 1000); + assertThat(efentoMeasurements.get(0).getValues().getAsJsonObject().get(propertyPrefix + "_total_value").getAsDouble()).isEqualTo(expectedValue); + checkDefaultMeasurements(measurements, efentoMeasurements, 180, false); + } + + private static Stream checkPulseCounterSensors() { + return Stream.of( + Arguments.of(MEASUREMENT_TYPE_WATER_METER_ACC_MINOR, List.of(125), MEASUREMENT_TYPE_WATER_METER_ACC_MAJOR, + List.of(2500), "water_cnt_acc", 62520.0), + Arguments.of(MEASUREMENT_TYPE_PULSE_CNT_ACC_MINOR, List.of(180), MEASUREMENT_TYPE_PULSE_CNT_ACC_MAJOR, + List.of(1200), "pulse_cnt_acc", 300030.0), + Arguments.of(MEASUREMENT_TYPE_ELEC_METER_ACC_MINOR, List.of(550), MEASUREMENT_TYPE_ELEC_METER_ACC_MAJOR, + List.of(5500), "elec_meter_acc", 1375091.0), + Arguments.of(MEASUREMENT_TYPE_PULSE_CNT_ACC_WIDE_MINOR, List.of(230), MEASUREMENT_TYPE_PULSE_CNT_ACC_WIDE_MAJOR, + List.of(1700), "pulse_cnt_acc_wide", 425000038.0)); + } + + @Test void checkBinarySensor() { long tsInSec = Instant.now().getEpochSecond(); From 1c8018fd49374d99d18f4515d4e638457be30d69 Mon Sep 17 00:00:00 2001 From: dashevchenko Date: Tue, 1 Oct 2024 11:31:29 +0300 Subject: [PATCH 5/6] fixed percentage sensor --- .../transport/coap/efento/CoapEfentoTransportResource.java | 2 +- .../transport/coap/efento/CoapEfentoTransportResourceTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResource.java b/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResource.java index cd08897c7c..6324845fb6 100644 --- a/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResource.java +++ b/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResource.java @@ -373,7 +373,7 @@ public class CoapEfentoTransportResource extends AbstractCoapTransportResource { addPulseCounterProperties(values, "breath_voc_", channelNumber, startPoint + sampleOffset, BREATH_VOC_METADATA_FACTOR); break; case MEASUREMENT_TYPE_PERCENTAGE: - values.addProperty("percentage_" + channelNumber, startPoint + sampleOffset); + values.addProperty("percentage_" + channelNumber, (double) (startPoint + sampleOffset) / 100f); break; case MEASUREMENT_TYPE_VOLTAGE: values.addProperty("voltage_" + channelNumber, (double) (startPoint + sampleOffset)); diff --git a/common/transport/coap/src/test/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResourceTest.java b/common/transport/coap/src/test/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResourceTest.java index 29d144a78f..1c6e567b73 100644 --- a/common/transport/coap/src/test/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResourceTest.java +++ b/common/transport/coap/src/test/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResourceTest.java @@ -162,7 +162,7 @@ class CoapEfentoTransportResourceTest { Arguments.of(MEASUREMENT_TYPE_STATIC_IAQ, List.of(110), "static_iaq_1", 36), Arguments.of(MEASUREMENT_TYPE_CO2_EQUIVALENT, List.of(450), "co2_1", 150), Arguments.of(MEASUREMENT_TYPE_BREATH_VOC, List.of(220), "breath_voc_1", 73), - Arguments.of(MEASUREMENT_TYPE_PERCENTAGE, List.of(80), "percentage_1", 80), + Arguments.of(MEASUREMENT_TYPE_PERCENTAGE, List.of(80), "percentage_1", 0.8), Arguments.of(MEASUREMENT_TYPE_VOLTAGE, List.of(2400), "voltage_1", 2400.0), Arguments.of(MEASUREMENT_TYPE_CURRENT, List.of(550), "current_1", 550.0), Arguments.of(MEASUREMENT_TYPE_CURRENT_PRECISE, List.of(275), "current_precise_1", 275.0) From 5f7ce347c2e8391b3f49d4c797e2ef0aad4d6933 Mon Sep 17 00:00:00 2001 From: dashevchenko Date: Tue, 1 Oct 2024 11:43:53 +0300 Subject: [PATCH 6/6] fixed voltage and current resolution --- .../transport/coap/efento/CoapEfentoTransportResource.java | 6 +++--- .../coap/efento/CoapEfentoTransportResourceTest.java | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResource.java b/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResource.java index 6324845fb6..773e230fb1 100644 --- a/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResource.java +++ b/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResource.java @@ -376,10 +376,10 @@ public class CoapEfentoTransportResource extends AbstractCoapTransportResource { values.addProperty("percentage_" + channelNumber, (double) (startPoint + sampleOffset) / 100f); break; case MEASUREMENT_TYPE_VOLTAGE: - values.addProperty("voltage_" + channelNumber, (double) (startPoint + sampleOffset)); + values.addProperty("voltage_" + channelNumber, (double) (startPoint + sampleOffset) / 10f); break; case MEASUREMENT_TYPE_CURRENT: - values.addProperty("current_" + channelNumber, (double) (startPoint + sampleOffset)); + values.addProperty("current_" + channelNumber, (double) (startPoint + sampleOffset) / 100f); break; case MEASUREMENT_TYPE_PULSE_CNT_ACC_MINOR: addPulseCounterProperties(values, "pulse_cnt_acc_minor_", channelNumber, startPoint + sampleOffset, PULSE_CNT_ACC_MINOR_METADATA_FACTOR); @@ -400,7 +400,7 @@ public class CoapEfentoTransportResource extends AbstractCoapTransportResource { addPulseCounterProperties(values, "pulse_cnt_acc_wide_major_", channelNumber, startPoint + sampleOffset, PULSE_CNT_ACC_WIDE_MAJOR_METADATA_FACTOR); break; case MEASUREMENT_TYPE_CURRENT_PRECISE: - values.addProperty("current_precise_" + channelNumber, (double) (startPoint + sampleOffset)); + values.addProperty("current_precise_" + channelNumber, (double) (startPoint + sampleOffset) / 1000f); break; case MEASUREMENT_TYPE_NO_SENSOR: case UNRECOGNIZED: diff --git a/common/transport/coap/src/test/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResourceTest.java b/common/transport/coap/src/test/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResourceTest.java index 1c6e567b73..d61712cdf6 100644 --- a/common/transport/coap/src/test/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResourceTest.java +++ b/common/transport/coap/src/test/java/org/thingsboard/server/transport/coap/efento/CoapEfentoTransportResourceTest.java @@ -163,9 +163,9 @@ class CoapEfentoTransportResourceTest { Arguments.of(MEASUREMENT_TYPE_CO2_EQUIVALENT, List.of(450), "co2_1", 150), Arguments.of(MEASUREMENT_TYPE_BREATH_VOC, List.of(220), "breath_voc_1", 73), Arguments.of(MEASUREMENT_TYPE_PERCENTAGE, List.of(80), "percentage_1", 0.8), - Arguments.of(MEASUREMENT_TYPE_VOLTAGE, List.of(2400), "voltage_1", 2400.0), - Arguments.of(MEASUREMENT_TYPE_CURRENT, List.of(550), "current_1", 550.0), - Arguments.of(MEASUREMENT_TYPE_CURRENT_PRECISE, List.of(275), "current_precise_1", 275.0) + Arguments.of(MEASUREMENT_TYPE_VOLTAGE, List.of(2400), "voltage_1", 240.0), + Arguments.of(MEASUREMENT_TYPE_CURRENT, List.of(550), "current_1", 5.5), + Arguments.of(MEASUREMENT_TYPE_CURRENT_PRECISE, List.of(275), "current_precise_1", 0.275) ); }