多个实体数据源的颜色

时间:2018-11-30 12:35:22

标签: thingsboard

我正在为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;
}, {});

1 个答案:

答案 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);
}

它需要以下lib:https://github.com/surfacecurve/sc-color