我正在为Thingsboard IoT-Platform创建一个小部件,并且遇到了一个我无法解决的问题:
在小部件的数据源配置中为各个实体传感器定义颜色时,只有第一个实体会获得正确的颜色。
当前,我的设置如下:
MY_DEVICE_TYPE
类型的设备MY_ALIAS
,且实体过滤器设置为Devices of type 'MY_DEVICE_TYPE'
,并且Resolve as multiple entities
的开关已激活Entity
,设置为MY_ALIAS
,并且选择了一个传感器DEVICE_SENSOR
作为数据键DEVICE_SENSOR
的数据键配置具有指定的颜色rgb(255, 0, 0)
,单位设置为TheUnit
我的窗口小部件是Latest values
-窗口小部件,除了以下代码外没有其他内容:
self.onInit = function() {
self.ctx.datasources.forEach(function(ds) {
console.log(ds.name, ds.dataKeys[0].color, ds.dataKeys[0].units);
});
};
对于与别名过滤器匹配的八个设备,我得到以下输出:
DEVICE_001 rgb(255, 0, 0) TheUnit
DEVICE_002 #4caf50 TheUnit
DEVICE_003 #f44336 TheUnit
DEVICE_004 #ffc107 TheUnit
DEVICE_005 #607d8b TheUnit
DEVICE_006 #9c27b0 TheUnit
DEVICE_007 #8bc34a TheUnit
DEVICE_008 #3f51b5 TheUnit
单位分配正确,但颜色似乎是动态分配的。它仅适用于第一个数据源。我很想获得分配给数据键的颜色。
这是一个错误吗?这是预期的行为吗?这是因为配置错误吗?
编辑
作为一种解决方法,我将第一个数据源的颜色保留在字典中,如下所示:
// A workaround to keep the sensor colors consistent.
self.colorMapping = subscription.datasources[0].dataKeys.reduce(function(acc, dataKey) {
acc[dataKey.name] = dataKey.color;
return acc;
}, {});
答案 0 :(得分:0)
我处于类似情况。创建一个时间序列图,其中别名代表多个实体。 我希望在一张图表中看到所有实体的所有温度,并且显然以不同的颜色显示。
我很生气,无法手动设置第二个实体的颜色,另外,对我来说,分配的颜色很难区分(色盲)。 因此,借助该线程,我想出了一种解决方案,为第一个实体采用手动分配的颜色,并继续为所有其他实体移动该颜色的色相
我在小部件中使用的代码:
self.onInit = function() {
var arrayLength = self.ctx.datasources.length;
for (var i = 1; i < arrayLength; i++) {
var newColor = surfacecurve.color(self.ctx.datasources[i-1].dataKeys[0].color).hue("+120").hex6();
self.ctx.datasources[i].dataKeys[0].color = newColor;
}
self.ctx.flot = new TbFlot(self.ctx);
}