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
中以不同的名称显示不同的值?
到目前为止我尝试了什么:
- 没有允许我更改显示名称的度量 属性
- 无法在运行时更改 class 名称(已编译 ^^)
- Cumulocity Java 框架不允许我直接访问 属性
我不知道我是否完全理解您要更改的测量名称,但我假设您指的是测量片段的名称。
当您在 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 的传感器创建数据点图时,您会得到:
你可以看到红色轮廓中的名字。
我想将 MeasurementValues
发送到 Cumulocity
并使用给定的工具可视化数据。我的软件发送哪些值在 JSON 中指定并且必须在编译后更改。
我的问题:
Java Cumulocity
框架不允许我指定将显示在其网站上的测量片段的名称。该名称始终是我用来创建测量的 POJO
的 class 名称。由于我想发送许多不同的变量(这些变量也会随时间变化),因此预先创建许多 POJO classes 是不可行的。
我的问题:
我如何 - 从一个 class 发送测量结果 - 使用 Java Cumulocity
框架在 Cumulocity
中以不同的名称显示不同的值?
到目前为止我尝试了什么:
- 没有允许我更改显示名称的度量 属性
- 无法在运行时更改 class 名称(已编译 ^^)
- Cumulocity Java 框架不允许我直接访问 属性
我不知道我是否完全理解您要更改的测量名称,但我假设您指的是测量片段的名称。
当您在 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 的传感器创建数据点图时,您会得到:
你可以看到红色轮廓中的名字。