Фильтруйте данные InfluxDB до их прибытия

Ребята, я храню в течение 7 дней температурные сообщения, которые я получаю через MQTT через Telegraf в сообщениях на моем RapsberyyPI InfluxDB. то, что я вижу, когда визуализирую свою температуру, я получаю значения температуры от -200 до +200, что кажется случайным. Так что в большинстве случаев я получаю правильное значение. Просто задайтесь вопросом, есть ли способ сказать, что телеграф принимает значения только между -30 и +40, чтобы я мог фильтровать эти значения, прежде чем вставлять их в свою базу данных Influx. Любые идеи? Источником данных является сниффер aRTL_433, запущенный на моем Rapsi и отправляющий все, что он получил, как JSON. Похоже, эти данные не всегда так точны, как мне нужно.


person Juergen Schubert    schedule 27.08.2018    source источник


Ответы (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, который упрощает манипулирование данными.

person Patrick More    schedule 29.08.2018

используйте конденсатор, чтобы решить эту проблему.

сначала создайте базу данных с короткой политикой хранения для хранения необработанных данных. На втором этапе создайте сценарий tick DSL, чтобы получить то, что вы хотите, а затем запишите его обратно в новую базу данных, например

batch
   |query('''
       ...
   ''')
       .period(5m)
       .every(5m)
       .groupBy(time(1m))
    |influxDBOut()
        .database('some_database')
        .retentionPolicy('autogen')
        .measurement('some_measurement')
person R wang    schedule 30.08.2018