{"id":68,"date":"2017-02-21T17:27:47","date_gmt":"2017-02-21T15:27:47","guid":{"rendered":"http:\/\/it-consulting.sandland.de\/?p=68"},"modified":"2017-02-21T17:32:04","modified_gmt":"2017-02-21T15:32:04","slug":"korrektur-eine-datenwerts-in-der-influxdb","status":"publish","type":"post","link":"https:\/\/it-consulting.sandland.de\/?p=68","title":{"rendered":"Korrektur eines Datenwerts in der InfluxDB"},"content":{"rendered":"<p>Die Daten der Homeautomatisierungsl\u00f6sung <a href=\"http:\/\/www.openhab.org\">openHAB<\/a> werden bei mir mit <a href=\"https:\/\/docs.influxdata.com\/influxdb\/v1.2\/guides\/querying_data\/\">InfluxDB<\/a> persistiert (also weggeschrieben).<\/p>\n<p>Der Grund ist, dass InfluxDB sehr gut mit <a href=\"http:\/\/grafana.org\/\">Grafana<\/a> zusammen arbeitet und so sch\u00f6ne grafische Auswertungen m\u00f6glich sind.<\/p>\n<p>Nun kann es aber passieren, dass in die DB falsche Werte rein geschrieben wurden. In meinem Fall werden die Impulse das Gasz\u00e4hlers gez\u00e4hlt und in der DB gespeichert. Daraus wird t\u00e4glich der Wert <em>Gas_Last_Daily_Consumption<\/em> berechnet und auch gespeichert. Wie gesagt, mit Grafana erh\u00e4lt man so eine grafische Darstellung des Gasverbrauchs.<\/p>\n<p>Leider ist nun durch einen Z\u00e4hler\u00fcberlauf (in diesem Falle ausgel\u00f6st durch einen kurzen Spannungsausfall des KNX-Bus) der Impulsz\u00e4hler zur\u00fcck gesetzt worden. Am folgenden Tag wurde daher der t\u00e4gl. Gasverbrauch falsch berechnet und gespeichert. Es ergab sich einer hoher negativer Wert und der musste korrigiert werden.<\/p>\n<p>Leider ist das korrigieren eines Wertes in der InfluxDB nicht so einfach wie z.B. bei einer MySQL-DB.<\/p>\n<p>Die L\u00f6sung ist, den Datenpunkt mit korrektem Wert nochmal mit exakt gleichen Timestamp wie der vorhandene falsche Datenpunkt in die DB zu schreiben. Dann wird der alte Wert \u00fcberschrieben. Stimmt der Timestamp nicht, so wird ein neuer Datenpunkt angelegt.<\/p>\n<p>Das Schreiben erfolgt dann, wie in der Dokumentation der InfluxDB ausgef\u00fchrt, mit einem Befehl von der Kommandozeile aus:<\/p>\n<pre>user@homesrv:~&gt; curl -i -XPOST 'http:\/\/192.168.1.9:8086\/write?db=openhab' --data-binary 'Gas_Last_Daily_Consumption value=395 1487199600040000000' \r\nHTTP\/1.1 204 No Content \r\nContent-Type: application\/json \r\nRequest-Id: 50ef1043-f846-11e6-a31c-000000000000 \r\nX-Influxdb-Version: 1.2.0 \r\nDate: Tue, 21 Feb 2017 19:59:17 GMT\r\n<\/pre>\n<p>Die Schwierigkeit besteht darin, den Timestamp exakt zu bestimmen und diesen dann als 9-stelligen Wert (Unix Epoch Time) anzugeben.<\/p>\n<p>&nbsp;<\/p>\n<p>Dazu kann man die DB wie folgt abfragen:<\/p>\n<pre>user@homesrv:~&gt; curl -G 'http:\/\/192.168.1.9:8086\/query?pretty=true' --data-urlencode \"db=openhab\" --data-urlencode \"epoch=ns\" --data-urlencode \"q=SELECT \\\"value\\\" FROM \\\"Gas_Last_Daily_Consumption\\\" WHERE \\\"time\\\"&gt;'2017-02-14T22:59:00.118Z'\"<\/pre>\n<p>Mit dem Parameter <em>epoch=ns<\/em> wird die Zeit so ausgegeben, wie man sie beim obigen Befehl zum Aktualisieren angeben muss. So kann man den zu \u00e4ndernden Datenpunkt exakt ermitteln und die InfluxDB korrigieren.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Daten der Homeautomatisierungsl\u00f6sung openHAB werden bei mir mit InfluxDB persistiert (also weggeschrieben). Der Grund ist, dass InfluxDB sehr gut mit Grafana zusammen arbeitet und so sch\u00f6ne grafische Auswertungen m\u00f6glich sind. Nun kann es aber passieren, dass in die DB falsche Werte rein geschrieben wurden. In meinem Fall werden die Impulse das Gasz\u00e4hlers gez\u00e4hlt und [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-68","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"_links":{"self":[{"href":"https:\/\/it-consulting.sandland.de\/index.php?rest_route=\/wp\/v2\/posts\/68","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/it-consulting.sandland.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/it-consulting.sandland.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/it-consulting.sandland.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/it-consulting.sandland.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=68"}],"version-history":[{"count":2,"href":"https:\/\/it-consulting.sandland.de\/index.php?rest_route=\/wp\/v2\/posts\/68\/revisions"}],"predecessor-version":[{"id":72,"href":"https:\/\/it-consulting.sandland.de\/index.php?rest_route=\/wp\/v2\/posts\/68\/revisions\/72"}],"wp:attachment":[{"href":"https:\/\/it-consulting.sandland.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=68"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/it-consulting.sandland.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=68"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/it-consulting.sandland.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=68"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}