Cumulocity/Java如何直接设置测量的显示名称

How can the display name of measurements be directly set in Cumulocity/Java

我想将 MeasurementValues 发送到 Cumulocity 并使用给定的工具可视化数据。我的软件发送哪些值在 JSON 中指定并且必须在编译后更改。

我的问题:

Java Cumulocity 框架不允许我指定将显示在其网站上的测量片段的名称。该名称始终是我用来创建测量的 POJO 的 class 名称。由于我想发送许多不同的变量(这些变量也会随时间变化),因此预先创建许多 POJO classes 是不可行的。

我的问题:

我如何 - 从一个 class 发送测量结果 - 使用 Java Cumulocity 框架在 Cumulocity 中以不同的名称显示不同的值?

到目前为止我尝试了什么:

我不知道我是否完全理解您要更改的测量名称,但我假设您指的是测量片段的名称。

当您在 Java 项目中创建自定义测量时,您可以使用 @Alias 对其进行注释提供您的自定义名称

package c8y.tinkerforge.measurements;

import java.math.BigDecimal;

import org.svenson.AbstractDynamicProperties;
import org.svenson.JSONProperty;

import com.cumulocity.model.measurement.MeasurementValue;
import com.cumulocity.model.util.Alias;

@Alias("c8y_Acceleration")
public class AccelerationCombinedMeasurement extends AbstractDynamicProperties {

    private static final long serialVersionUID = -2491579656609755745L;

    public static final String DEFAULT_UNIT = "g";

    private final String unit;

    private MeasurementValue accelerationX;

    private MeasurementValue accelerationY;

    private MeasurementValue accelerationZ;

    public AccelerationCombinedMeasurement(double accelerationX, double accelerationY, double accelerationZ,
            final String unit) {
        this.unit = unit;
        this.accelerationX = new MeasurementValue(new BigDecimal(accelerationX), unit);
        this.accelerationY = new MeasurementValue(new BigDecimal(accelerationY), unit);
        this.accelerationZ = new MeasurementValue(new BigDecimal(accelerationZ), unit);
    }

    @JSONProperty("accelerationX")
    public MeasurementValue getAccelerationX() {
        return accelerationX;
    }

    public void setAccelerationX(double accelerationX) {
        this.accelerationX = new MeasurementValue(new BigDecimal(accelerationX), unit);
    }

    @JSONProperty("accelerationY")
    public MeasurementValue getAccelerationY() {
        return accelerationY;
    }

    public void setAccelerationY(double accelerationY) {
        this.accelerationY = new MeasurementValue(new BigDecimal(accelerationY), unit);
    }

    @JSONProperty("accelerationZ")
    public MeasurementValue getAccelerationZ() {
        return accelerationZ;
    }

    public void setAccelerationZ(double accelerationZ) {
        this.accelerationZ = new MeasurementValue(new BigDecimal(accelerationZ), unit);
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((accelerationX == null) ? 0 : accelerationX.hashCode());
        result = prime * result + ((accelerationY == null) ? 0 : accelerationY.hashCode());
        result = prime * result + ((accelerationZ == null) ? 0 : accelerationZ.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        AccelerationCombinedMeasurement other = (AccelerationCombinedMeasurement) obj;
        if (accelerationX == null) {
            if (other.accelerationX != null)
                return false;
        } else if (!accelerationX.equals(other.accelerationX))
            return false;
        if (accelerationY == null) {
            if (other.accelerationY != null)
                return false;
        } else if (!accelerationY.equals(other.accelerationY))
            return false;
        if (accelerationZ == null) {
            if (other.accelerationZ != null)
                return false;
        } else if (!accelerationZ.equals(other.accelerationZ))
            return false;
        return true;
    }

    @Override
    public String toString() {
        return "AccelerationCombinedMeasurement [accelerationX=" + accelerationX + ", accelerationY=" + accelerationY
                + ", accelerationZ=" + accelerationZ + "]";
    }

}

在这种情况下,它应该使用名称 c8y_Acceleration。当我为使用此测量 class 的传感器创建数据点图时,您会得到:

你可以看到红色轮廓中的名字。