Hallo Alex,

Wenn Du keine Aggregation benutzt ist gegen diese Art des Aufräumens m.E. 
nichts einzuwenden. Allerdings muss ich an dieser Stelle auch nochmal 
klarstellen, dass ich keiner der VZ-Entwickler bin, sondern nur Benutzer mit 
recht guten Unix-Kenntnissen, aber eher rudimentären Datenbank- und 
Programmierkenntnissen. Also auf Deine eigene Verantwortung.

Das sowieso 😉

 

Bzgl. der Aggregation – schau doch nochmal ob eine Tabelle 
volkszaehler.aggregate existiert, und falls ja, welchen Inhalt sie hat. 

 

 

Auf dem Testsystem ist eine Datenbank aggregate vorhanden, aber leer. Muss ich 
mir im Live-System angucken und prüfen.

 

Du hattest glaube ich geschrieben, dass es um eine Handvoll Sensoren geht, die 
alle 5 Minuten loggen, oder habe ich da was falsches in Erinnerung?

Korreckt. 8 Sensoren jeweils alle 5 Minuten

 

Diese paar Einträge der letzten 24 Stunden einmal täglich auszuwerten und 
selektiv zu löschen sollte die Datenbank locker abkönnen. Wenn Du alle Anfragen 
in einem SQL-Skript zusammenfasst, werden sie ohnehin seriell abgearbeitet. 

OK Danke (seriell war ich unsicher) 

 

Mehrere Abfragen machen aber nur dann Sinn, wenn Du wie in Deinem letzten 
Beispiel unterschiedliche Grenzwerte setzen willst.

 

Mehrere gleichartige Sensoren könntest Du auch einfach mittels 

 

DELETE FROM `volkszaehler`.`data` WHERE (`channel_id` IN (x,y,z))

AND timestamp> (unix_timestamp(current_timestamp)-24*60*60)*1000

AND (VALUE <-5 or VALUE >40);

 

zusammenfassen. Das wäre dann für die DB noch weniger Last.

 

Danke Dir. Simuliere und teste die Befehle in PHPMYADMIN. Sonst kommen bei mir 
zu viele Tippfehler da rein 😊 

 

Noch ein Punkt, da ich verschiedene Antworten finde im Netz. Wo sollte ich das 
Script speichern?

Hatte an das home Verzeichnis gedacht und dort nen Ordner scripte erstellen:

 

* */1 * * * /home/scripte/sql.sh

 

Danke und Grüße,

Ralf

 

 

 

 

From: volkszaehler-users [mailto:volks 
<mailto:volkszaehler-users-boun...@demo.volkszaehler.org> 
zaehler-users-boun...@demo.volkszaehler.org] On Behalf Of Ralf Wismann
Sent: Tuesday, January 28, 2020 10:53 AM
To: 'volkszaehler.org - users'
Subject: Re: [vz-users] 1-Wire Messwerte Filtern/Löschen

 

Hallo Alex,

 

vielen Dank! Habe mir ein Testsystem aufgebaut auf Basis eines Backups. Das 
laufende System stammt aus Januar 2018.

 

Die crontabs unter dem user pi ist leer bzw. ist noch anzulegen. Entsprechend 
wird derzeit keine Aggregation durchgeführt.

 

Allgemein ist mir die Lösung per SQL schon ganz recht, da sie für mich recht 
greifbar ist da die SQL Datenbank des Volkszählers eh per Microsoft Query in 
Excel ausgelesen wird. Somit ist der Wiedereinstieg recht flott wieder 
aufgefrischt und die Handhabung „bekannter“.

 

Bzgl. der verschieden Kanäle sollten 2 oder mehr Befehle funktionieren, da 
Microsoft Query auch mehrere Anfrage absetzt….allerdings nur SELECT/lesend.

 

Was ich gerne machen würde z.B. für Innentemperatur und Heizungvorlauf:

 

DELETE FROM `volkszaehler`.`data` WHERE ((`channel_id` = 11) AND timestamp> 
(unix_timestamp(current_timestamp)-24*60*60)*1000

AND (VALUE <-5 or VALUE >40);

 

DELETE FROM `volkszaehler`.`data` WHERE ((`channel_id` = 12) AND timestamp> 
(unix_timestamp(current_timestamp)-24*60*60)*1000

AND (VALUE <15 or VALUE >60);

 

Wenn es unproblematisch ist, warum dann nicht alle 8 Temperaturen im jetzigen 
System so „bereinigen/prüfen“?

 

Danke und Viele Grüße

Ralf

 

 

 

Von: volkszaehler-users <volkszaehler-users-boun...@demo.volkszaehler.org 
<mailto:volkszaehler-users-boun...@demo.volkszaehler.org> > Im Auftrag von 
r...@nord-com.net <mailto:r...@nord-com.net> 
Gesendet: Montag, 27. Januar 2020 11:01
An: 'volkszaehler.org - users' <volkszaehler-users@demo.volkszaehler.org 
<mailto:volkszaehler-users@demo.volkszaehler.org> >
Betreff: Re: [vz-users] 1-Wire Messwerte Filtern/Löschen

 

Hallo Ralf,

 

Bzgl. Aggregation schaue mal in die crontabs… standardmässig steht in der 
crontab des Benutzers pi in etwa so etwas drin:

 

pi@avz:~:(3)> crontab -l | grep aggregate

*/10 * * * *  php /var/www/volkszaehler.org/bin/aggregate run -m delta -l 
minute >/dev/null

1 * * * *  php /var/www/volkszaehler.org/bin/aggregate run -m delta -l hour 
>/dev/null

0 1 * * *  php /var/www/volkszaehler.org/bin/aggregate run -m delta -l day 
>/dev/null

 

Dann hast Du die Aggregation aktiviert. Bzgl. mehrerer Kanäle/Sensoren – die 
kannst Du mit einem Befehl abfragen/löschen:

 

DELETE FROM `volkszaehler`.`data` WHERE ((`channel_id` = x) OR (`channel_id` = 
y))

AND timestamp> (unix_timestamp(current_timestamp)-7*24*60*60)*1000

AND (VALUE <-5 or VALUE >40);

 

Die channel_id stehen in der entities Tabelle.

 

SELECT * FROM `volkszaehler`.`entities` ;

 

Diese zeigt u.a. die Zuordnung von UUID und (channel_)id. Probiere die Abfragen 
aber auf jeden Fall aus, bevor Du ans Löschen gehst, dazu das „DELETE FROM“ 
durch ein „SELECT * FROM“ ersetzen, dann siehst Du genau die Zeilen, die Du 
ansonsten löschen würdest.

 

Diese Zuordnung hättest Du automatisch, wenn Du die Abfragen über die 
Middleware machst, ich glaube das wäre wirklich der sauberere Weg, zumal wenn 
Du Dir mit SQL nicht sicher bist.

 

Gruss,

Alex

 

 

From: volkszaehler-users 
[mailto:volkszaehler-users-boun...@demo.volkszaehler.org] On Behalf Of Ralf 
Wismann
Sent: Monday, January 27, 2020 10:18 AM
To: 'volkszaehler.org - users'
Subject: Re: [vz-users] 1-Wire Messwerte Filtern/Löschen

 

Hallo

 

vielen Dank Alex und Thomas!

 

Muss mir erst noch ein Backup/Testsystem aufsetzen und dann lass ich es mal 
laufen.

 

Bzgl. Aggregation bin ich mir unsicher. In der vzlogger.conf ist hinterlegt, 
dass die Temperaturen alle 10 Minuten gemessen werden. Eine weitere/zusätzliche 
Verdichtung der Daten ist von mir nicht aktiviert. Somit nicht vorhanden?  Du 
meinst z.B. dieses vzcompress oder so ähnlich wie es im Wiki steht?

 

Noch eine Frage vom Einsteiger dazu: Ich habe ja mehrere Temperaturen und 
darunter machen 2,3 schon mal diese Probleme. Also würde ich jetzt mehre DELETE 
Befehle in das SQL Script einfügen wollen.

Die Zeitspanne der Daten wollte ich möglichst „sinnvoll“ zum Zyklus des Crontab 
wählen, nichtsdestotrotz glaube ich, dass eine SQL-Abfrage/Befehl noch nicht 
fertig sein könnte, wenn der zweite Befehl ausgeführt wird.  Gibt das 
irgendwelche Probleme (Überlast, undefinierte Ergebnis, Verworfene 
Befehle/Daten, etc.) oder kann eine/die Datenbank das handeln?

 

Vielen Dank

Ralf

 

P.S.: Stelle mit Freude fest, dass die Wichtigkeit der Schreib/Zitierweise in 
der Mailingliste an Priorität verloren hat. Das war für mich als Outlook-Nutzer 
immer ein großer künstlicher Krampf es so hinzubiegen. Hoffe auch so können wir 
uns gut Verständigen. Danke! 

 

 

 

 

Von: volkszaehler-users <volkszaehler-users-boun...@demo.volkszaehler.org 
<mailto:volkszaehler-users-boun...@demo.volkszaehler.org> > Im Auftrag von 
r...@nord-com.net <mailto:r...@nord-com.net> 
Gesendet: Sonntag, 26. Januar 2020 22:50
An: 'volkszaehler.org - users' <volkszaehler-users@demo.volkszaehler.org 
<mailto:volkszaehler-users@demo.volkszaehler.org> >
Betreff: Re: [vz-users] 1-Wire Messwerte Filtern/Löschen

 

Hallo Ralf,

 

die Abfrage müsste so aussehen

 

DELETE FROM `volkszaehler`.`data` WHERE  channel_id = xxxxxx

AND timestamp< (unix_timestamp(current_timestamp)-7*24*60*60)*1000

AND (VALUE <-5 or VALUE >40);

 

 

Und das SQL Script darf dann nur den SQL Code enthalten aber nicht den Aufruf – 
sprich Du speicherst nur z.B. den o.g. Code in eine Datei und trägst in die 
Crontab dann folgendes ein:

 

mysql –ubenutzername -ppasswort volkszaehler < /path/to/sql.script

 

Ich würde für die DB auch nicht den Root-Account verwenden, der Standard User 
„vz“ (Password „demo“ falls es nicht geändert wurde) sollte reichen…

 

Aber: Ich sehe da ein weiteres Problem – wenn bei dem genannten Kanal die 
Datenaggregation aktiviert ist, hast Du die falschen Werte da schon mit drin 
bevor Du sie löschen kannst. Und da dabei verschiedene Werte miteinander 
verrechnet werden, lässt sich das dann auch nicht mehr so leicht per Schema 
s.o. entfernen.

 

Vielleicht kann das die Middleware-Anfrage, die Andreas empfohlen hat… ich 
weiss es nicht? Auf jeden Fall kannst Du auch Middleware Aufrufe z.B. über wget 
oder curl automatisch laufen lassen.

 

Ansonsten bliebe Dir nur – entweder die Aggregation für den betroffenen Kanal 
ausschalten oder sie nach dem Lauf des Skriptes neu aufbauen – sinnvollerweise 
nur wenn auch wirklich falsche Werte aufgetreten sind. Sprich vor dem DELETE 
nochmal einen SELECT laufen lassen und den Rückgabewert abfragen.

 

Gruss,

Alex

 

 

 

From: volkszaehler-users [ 
<mailto:volkszaehler-users-boun...@demo.volkszaehler.org> 
mailto:volkszaehler-users-boun...@demo.volkszaehler.org] On Behalf Of USER VZ
Sent: Sunday, January 26, 2020 6:40 PM
To: volkszaehler.org - users
Subject: Re: [vz-users] 1-Wire Messwerte Filtern/Löschen

 

Der SQL- Befehl wird nicht funktionieren. 

Die Abfrage nach Value muss mit ODER verknüpft werden. Z.b.:

 

DELETE FROM `volkszaehler` WHERE and channel_id = 12 AND timestamp< 
(unix_timestamp(current_timestamp)-7*24*60*60)*1000 AND (value >-5 OR value <40)

 

Ob der mysql Syntax stimmt kann ich sagen, aber die Richtung würde ich auch 
gehen.

 

Thomas 

 

Mail:  <mailto:tho...@thhoe.de> tho...@thhoe.de

 

 

Am 26.01.2020 um 16:28 schrieb Ralf Wismann < <mailto:ralf.wism...@gmx.de> 
ralf.wism...@gmx.de>:



Hallo

 

Am Sonntag, 26. Januar 2020 15:04 schrieb Anrears Götz:

„Die Middleware kann DELETE auch übers Api, dabei lässt sich auch ein 
Wertfilter angeben. Benutzung lässt sich auf der ML recherchieren. „

Danke Andreas. Schau ich mir auch gerne an. Durch den manuellen Eingriff 
scheint mir das hier weniger gut, da es nicht mein Volkszähler ist und der 
Besitzer nicht selber an der Datenbank arbeiten möchte. Ich habe / möchte auch 
nicht unbedingt manuell dort regelmäßig aktiv sein 😉

 

Am 26.01.2020 um 14:25 schrieb Rupert Schöttler < 
<mailto:rupert.schoett...@gmx.de> rupert.schoett...@gmx.de>:

 

„Dein vergleichsweise einfaches Fehlerbild, nämlich 85°C = Fehler, kann man 
einfach auf der Datenbank reparieren: 

 

DELETE FROM `data` WHERE (channel_id IN (<Kanalliste>)) AND (value = 85). 
Diesen Befehl gelegentlich in phpMyAdmin absetzen oder z.B. 1x tgl. per cron 
laufen lassen und ausgeputzt ist's. Aber Achtung mit der Syntax und den 
Kanalnummern: Was weg ist ist weg! ;-)“

 

Danke Rupert. Hatte ich vermutet, wenn es keine Standardfehlerkorrekturoption 
gibt.

Da ich so etwas noch nicht gemacht habe. Bitte um kurzen Quercheck.

 

Also ich lege ein Bash-Script an „reinigung.sh“

 

Tippe dort rein:

 

#!/bin/bash

mysql --user=root -praspberry

DELETE FROM `volkszaehler` WHERE and channel_id = 12 AND timestamp< 
(unix_timestamp(current_timestamp)-7*24*60*60)*1000 AND value >-5 AND value <40;

 

Dies zB soll Werte für eine Innenraumtemperatur (Kanal 12) kleiner -5Grad and 
Größer 40 Grad der letzten 7 Tage.

 

Dieses Bash Script lasse ich Täglich um 3h laufen mit cron:

 

00 3 * * * root /verzeichnis/script >/dev/null 2>&1

 

Geht das in die Richtung?

 

Danke und Grüße

Ralf

 

 

 

Antwort per Email an