Influxdb falsche Werte löschen
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