Фильтруйте данные InfluxDB до их поступления
Люди, я храню в течение 7 дней температурные сообщения, которые я получаю через MQTT через Telegraf в сообщениях на моем RapsberyyPI InfluxDB. то, что я вижу, когда я визуализирую свою температуру, получаю значения температуры в диапазоне от -200 до +200, что кажется случайным. Поэтому большую часть времени я получаю правильное значение. Просто подумайте, есть ли способ сообщить телеграфу, что он принимает значения только в диапазоне от -30 до +40, чтобы я мог отфильтровать эти значения, прежде чем вставить их в свою базу данных Influx. Есть идеи? Источник данных взят из сниффера aRTL_433, работающего на моем Rapsi и отправляющего все, что он получил, в виде JSON. Похоже, эти данные не всегда настолько точны, насколько мне это нужно.
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, который позволяет довольно легко манипулировать данными.
Используйте kapacitor, чтобы решить эту проблему.
Сначала создайте базу данных с короткой политикой хранения для хранения необработанных данных. второй шаг, создайте тиковый скрипт DSL, чтобы получить то, что вы хотите, а затем запишите его обратно в новую базу данных, как
batch
|query('''
...
''')
.period(5m)
.every(5m)
.groupBy(time(1m))
|influxDBOut()
.database('some_database')
.retentionPolicy('autogen')
.measurement('some_measurement')