大约一个月前,我开始使用Node-RED从我的智能仪表上记录数据,它看起来像这个json数据(有效负载是重要的部分):
{
"topic":"stat/smartmeter/all",
"payload":"{
\"kwh_low_tarrif\":866.696,
\"kwh_high_tarrif\":902.156,
\"current_tarrif\":1,
\"current_watt_draw\":485,
\"gas_timestamp\":1554675307000,
\"gas_total\":326.509,
\"kwh_combined\":1768.852
}",
"qos":0,
"retain":false,
"_topic":"stat/smartmeter/all",
"_msgid":"db4ebc0.72b9a48"
}这些数据的问题在于,我在Grafana仪表板中计算了电气和煤气成本:

我在InfluxDB数据选择中使用一个数学函数将成本硬编码到仪表板中:

在这里,你可以看到,我用了每kWh 0.230662欧元的旧电的价值(或者说价格)。现在,愚蠢的我从未想过要能够在价格波动的几年内进行计算,所以一旦我发现我的电力供应商的公共API端点,我就可以读出我的具体计划的价格,我把它添加到测量中,所以现在json-数据看起来是这样的:
{
"topic":"stat/smartmeter/all",
"payload":"{
\"kwh_low_tarrif\":866.696,
\"kwh_high_tarrif\":902.156,
\"kwh_low_price\":0.230662,
\"kwh_high_price\":0.230662,
\"current_tarrif\":1,
\"current_watt_draw\":485,
\"current_kwh_price\":0.230662,
\"gas_timestamp\":1554675307000,
\"gas_total\":326.509,
\"gas_price\":0.804565,
\"kwh_combined\":1768.852
}",
"qos":0,
"retain":false,
"_topic":"stat/smartmeter/all",
"_msgid":"db4ebc0.72b9a48"
}现在唯一的问题(以及我对它的主要问题)是:
1)如何编写在价格计算中使用此值的查询?我现在使用的查询(从上面的截图中)是:
SELECT distinct("kwh_combined") * 0.230662 FROM "smartmeter" WHERE $timeFilter GROUP BY time($__interval) fill(linear)2)如何回填数据?(从日志记录开始就将这些电价写入数据库,并将其添加到当时的测量中)
我更希望将先前在面板中硬编码的值设置到我已经采取的度量中,而不是在不存在度量值或“null”时编写异常。我的意思是,数据本身是静态的,因为价格没有变化,所以它不会那么难,对吗?即使它需要重建数据,我是否可以将它重新插入到一个新的数据收集中并自己添加这些字段呢?
请告诉我这对InfluxDB来说是可行的..。
我的意思是,在MySQL中,它将是一个简单的ALTER语句,其中可能包含一个对具有空值的记录的简单插入。
。。或者对我来说,要求一个时间序列日志系统能够改变它已经记录的数据的数据结构是不合理的,我是不是对InfluxDB要求太高了?
发布于 2019-04-08 09:45:48
您可以添加额外的字段(price_1、price_2、.)对现有的测量。使用完全相同的时间戳和标记值插入它们,以便扩展现有的数据记录,并准备在grafana中使用这些新的价格列:
INSERT smartmeter,tagA=tagAvalue,tagB=tagBvalue,... price1=1234,price2=4321 1549983966469023105
...另一种方法是导出现有数据,添加额外的价格列并导入回。
这两种方式看起来都不简单。使用select ... into语法似乎更容易运行(如果没有这种丑陋的0*last() + ...攻击,我无法工作):
SELECT
last(kwh_combined) as kwh_combined,
last(other_field) as other_field,
...add other fields here...
0 * last(kwh_combined) + 1234 as price1,
0 * last(kwh_combined) + 4321 as price2
INTO new_smartmeter
FROM smartmeter GROUP BY *https://stackoverflow.com/questions/55563915
复制相似问题