Wert in SQLite und DBLog lässt sich nicht löschen?

Begonnen von andre070, 13 September 2017, 19:57:36

Vorheriges Thema - Nächstes Thema

andre070

Hallo zusammen,

ich habe ein Quobino Einbauthermostat in Fhem eingerichtet geloggt wird mit Dblog auf SQLITE nach Anleitung des Wiki, was auch bestens funktioniert!


Leider, warum auch immer, meldet das Thermostat  2-3 mal am Tag einen fehlerhaften Eintrag für den Energieverbrauch.
Warum muss ich mal weiter erforschen.

In der Zeit hat KEIN Schaltvorgang stattgefunden, also kein Verbraucher wurde über das Thermostat eingeschaltet.


Hier ein Beispiel:


2017-09-12 04:37:43|Thermostat_HZ_Klein|ZWAVE|energy:  4.3 kWh|energy|4.3|kWh
2017-09-12 04:37:45|Thermostat_HZ_Klein|ZWAVE|energy:  13111.5 kWh|energy|13111.5|kWh
2017-09-12 04:57:34|Thermostat_HZ_Klein|ZWAVE|energy:  4.3 kWh|energy|4.3|kWh
2017-09-12 05:02:35|Thermostat_HZ_Klein|ZWAVE|energy:  4.3 kWh|energy|4.3|kWh


Im Moment dachte ich mir, bis das endgültig geklärt ist, lösche das automatisch über ein Script in SQLite einmal am Tag:

delete from HISTORY where DEVICE='Thermostat_HZ_Klein' and READING='energy' and VALUE>100;

Das geht nicht. Ich kann Werte löschen bis genau 99, ab >100 bzw. scheinbar dreistellig geht es nicht mehr, es kommt keine Fehlermeldung von SQLITE zurück.

Nach einem erneuten Select, ist der Wert immer noch vorhanden.


Ich kann diesen nur löschen mit:

delete from HISTORY where DEVICE='Thermostat_HZ_Klein' and READING='energy' and VALUE=13111.5;


Meine Vermutung ist, dass das Feld für den Wert vielleicht gar nicht so groß ist?

Ich kenne mich aber mit SQL nicht aus.


Ich wäre für einen Tipp sehr dankbar!

Aktuell wird dadurch natürlich das ganze Chart für die Auswertung "zerfetzt".


Andre


Frank_Huber

#1
Das hängt glaube ich damit zusammen wie er selektiert. Ob das als Text oder Zahl gewertet wird.
Ich muss mal suchen, hab mir das irgendwo gespeichert.
hatte das Problem vor einer Weile auch schon mal.

EDIT:
"select * from HISTORY where DEVICE like "Thermostat_HZ_Klein" and READING = "energy" and convert(NUMERIC, VALUE) >1000;"

andre070

Hallo Frank,

ok, das werde ich mal probieren. Habe gerade eben das log mit "=" bereinigt.

Werde morgen aber wieder Werte drin haben.


Habe es dennoch mal ausgeführt und bekomme das zurück:

Error: no such column: NUMERIC


Frank_Huber

#3
Hi,
Ich Kuck mir das nochmal an. Kann sein dass das NUMERIC anderst muss.
Ist schon ne Weile her dass ich das gemacht hab...

EDIT:
Ich lag etwas falsch, das convert heisst  bei SQL "CAST". so gehts:
select * from HISTORY where DEVICE like "%_rH" and READING = "rH" and cast(VALUE as Integer) >100;

also in deinem Fall:
select * from HISTORY where DEVICE = "Thermostat_HZ_Klein" and READING = "energy" and cast(VALUE as Integer) >1000;

andre070

So, heute hatte ich wieder den Fall!

Mit dem "cast" hat es hervorragend Funktioniert!

Danke :-) :-)