Influxdb falsche Werte löschen

Aus Laub-Home Wiki

Möchte man in der InfluxDB falsche Werte, die zum Beispiel von einem defekten Sensor kommen löschen, dann schaut euch das untenstehende Script an. Dieses löscht alle Werte eines Measurements die ein gewünschtes Kriterium erfüllen (größer als, kleiner als oder gleich wie). Ein gutes Beispiel ist ein Feuchtigkeitssensor, bei dem man weiß, das die Werte nur von 0-100 % sein können. Also kann man, falls der Sensor falsche Werte in die Datenbank geschrieben hat, zuerst alle Werte größer 100 (> 100) und dann noch alle Werte kleiner 0 (< 0) löschen. Das Script delete-wrong-influxdb-measurements.sh verbindet sich lokal an eure InfluxDB (in meinem Beispiel eine Docker Instanz), sucht dann im gewünschten Measurement nach Einträgen die eurem gewünschten Kriterium entsprechen und schickt diese dann durch einen delete Befehl. Somit sind danach alle Einträge aus der Datenbank verschwunden.

Manuele Lösung

als erstes verbinden wir uns an die InfluxDB, bei mir ist es eine Docker Instanz, solltet ihr eine lokal installierte Version haben, dann einfach nur mit influx starten.

docker exec -ti openhab3_influxdb_1 influx

Dann schauen wir welche Datenbanken zur Verfügung stehen

SHOW DATABASES

und wählen die zu verwendende Datenbank aus

use openhab_db

Dann können wir nach den Timestamps schauen, welche unserem Kriterium entsprechen (einmal kleiner 0 und einmal größer 100)

select * from LaubRaspi2DHT22_Humidity where value < 0
select * from LaubRaspi2DHT22_Humidity where value > 100

Als Ausgabe sollte dann so etwas kommen:

name: LaubRaspi2DHT22_Humidity

time                item                     value

----                ----                     -----

1626791478394000000 LaubRaspi2DHT22_Humidity -2147483648

Nun kennen wir den Timetamp eines falschen Messwertes. Nun können wir diesen löschen:

delete from LaubRaspi2DHT22_Humidity where time = 1626791478394000000

Fertig.

delete-wrong-influxdb-measurements.sh

Legt folgendes Script einfach unter /usr/local/sbin/delete-wrong-influxdb-measurements.sh ab und konfiguriert es nach euren Wünschen unter den Variablen.

Download ist bei GitHub möglich: https://github.com/alaub81/scripts/raw/master/delete-wrong-influxdb-measurements.sh

delete-wrong-influxdb-measurements.sh

#!/bin/bash
#########################################################################
#Name: delete-wrong-influxdb-measurements.sh
#Subscription: This Script deletes measurements in influxdb which are too high or too small.
#
#by A. Laub
#andreas[-at-]laub-home.de
#
#License:
#This program is free software: you can redistribute it and/or modify it
#under the terms of the GNU General Public License as published by the
#Free Software Foundation, either version 3 of the License, or (at your option)
#any later version.
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
#or FITNESS FOR A PARTICULAR PURPOSE.
#########################################################################
#Set the language
export LANG="en_US.UTF-8"
#Load the Pathes
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

#set the variables:

# InfluxDB Command
INFLUX="docker exec -ti openhab3_influxdb_1 influx"
# InfluxDB Host
INFLUXHOST=localhost
# influxdb Database
INFLUXDB=openhab_db
# influxdb measurement
INFLUXDBMEASUREMENT=LaubRaspi2DHT22_Humidity
# influxdb wrong value (<;>;=)
INFLUXDBWRONGVALUE="< 0"
#INFLUXDBWRONGVALUE="> 100"
#INFLUXDBWRONGVALUE="= 0"

# do the stuff
for i in $($INFLUX -host $INFLUXHOST -port '8086' -database $INFLUXDB -execute "select * from $INFLUXDBMEASUREMENT where value $INFLUXDBWRONGVALUE" | grep -i ^[0-9] | cut -d' ' -f1); do
        $INFLUX -host $INFLUXHOST -port '8086' -database $INFLUXDB -execute "delete from $INFLUXDBMEASUREMENT where time = $i"
        echo "deleting $i"
done

Dann vergebt das Execute Recht und startet es einfach

chmod +x /usr/local/sbin/delete-wrong-influxdb-measurements.sh
delete-wrong-influxdb-measurements.sh