1

伙计们,我将通过 Telegraf 通过 MQTT 获得的温度信息存储 7 天,并将其存储到我的 RapsberyyPI InfluxDB 上的信息中。当我想象我的温度时,我看到的温度值在 -200 到 +200 之间,这似乎是随机的。所以大多数时候我确实得到了正确的价值。只是想知道是否有办法告诉 Telegraf 只接受 -30 和 +40 之间的值,这样我就可以在将这些值插入到我的 Influx DB 之前过滤这些值。有任何想法吗?数据源来自在我的 Rapsi 上运行的 RTL_433 嗅探器,并将它得到的任何内容作为 JSON 发送。看起来这些数据并不总是像我需要的那样准确。

4

2 回答 2

2

您可以尝试创建一个只接受您范围内的值的连续查询。为此,您需要在数据库中有两个测量值,我将它们称为 raw_temp 和 temp。也许是这样的:

    CREATE CONTINUOUS QUERY "temp_filter" ON "my_db"
    RESAMPLE EVERY 30s FOR 30s
    BEGIN
    SELECT "temperature" INTO "temp" from "raw_temp" where "temperature" > -40 and 
    "temperature" < 40 GROUP BY *
    END

然后创建一个连续查询,删除 raw_temp 中超过一小时的任何内容。或者你可以安装 Kapacitor,它可以很容易地进行数据操作。

于 2018-08-29T12:58:34.763 回答
1

使用 kapacitor 来解决这个问题。

首先创建一个具有短期保留策略的数据库来存储原始数据。第二步,创建tick DSL脚本以获取您想要的内容,然后将其写回新数据库,例如

batch
   |query('''
       ...
   ''')
       .period(5m)
       .every(5m)
       .groupBy(time(1m))
    |influxDBOut()
        .database('some_database')
        .retentionPolicy('autogen')
        .measurement('some_measurement')
于 2018-08-30T12:52:26.237 回答