NEWS
SQL speichert bei hoher Entprellzeit nicht ab
-
Dort habe ich bisher bereits alles eingestellt. Auch die hier genannte Entprellzeit. Wäre klasse, wenn du da mal nachsehen könntest. `
Sorry, da hatte ich andere Einstellmöglichkeiten im Kopf, als es wirklich gibt.Aber vielleicht kann man da tricksen:
Wenn man bei (1) den gewünschten Zeitabstand in Sekunden einstellt und bei (2) einen Delta-Wert, der "eigentlich" nicht so schnell überschritten wird, müsste es klappen.Gruß
Rainer
-
Was mich ja ein wenig stutzig macht, bei manchen Datenpunkten hat die Entprellzeit von 30.000ms einwandfrei funktioniert, bei anderen wiederrum nicht.
Jetzt habe ich überall eine Entprellzeit von 1000ms stehen und es wird alle 1min geloggt. (Nur Änderungen aufzeichnen steht auf NEIN)
Er müsste doch rein logisch bei einer Entprellzeit von 30.000ms auch 30min warten und dann wieder den neuen Wert prüfen. Könnte es sein, dass evtl. ioBroker mit einem solch hohen wert nicht klar kommt? (Laufzeit oder sonstiges).
-
Die Entprellung funktioniert so:
-
Ein Wert kommt
-
Ein Zähler startet der "Entprellzeit" wartet
Wenn jetzt bis zum Ablauf des Zählers KEIN neuer Wert kommt wird nach Ablauf der Entprellzeit geloggt.
Wenn innerhalb der Entprellzeit ein neuer Wert kommt, gilt der letzte Wert als "Nicht stabil" und die Entprellzeit wird für den neuen Wert neugestartet.
Wenn also bei 30 Sekunden Entprellzeit die Werte in Abständen von weniger als 30 Sekunden kommen würde nie was geloggt weil kein Wert in bezug auf "Entprellung" als Stabil gilt
-
-
Das erklärt auch, wieso es nicht klappt. Oh man ja richtig. Ich habe falsch rum gedacht.
Die Daten kommen alle Minute zyklisch neu. Bei denen, wo es funktionierte, sind die Daten recht stabil, deshalb hat es auch funktioniert.
-
Prellen (im ursprünglichen Sinne) erfolgt nur unmittelbar nach einer Kontaktbetätigung bis nach einigen ms der Kontaktwiderstand (geschlossen oder offen) stabil ist. Deshalb erfolgt das Entprellen normalerweise so:
-
Wert kommt und Entprellzeit ist nicht aktiv, dann Wert loggen und Entprellzeit starten
-
Wert kommt und Entprellzeit ist aktiv, dann Wert ignorieren
-
-
Da gab es in einem anderes Thread (http://forum.iobroker.net/viewtopic.php?f=36&t=5519 / http://forum.iobroker.net/viewtopic.php?p=57214#p57214) eine interessante Diskussion dazu …
Am Ende ist es eine Mischform geworden ...
Man kann das Thema gern nochmal aufmachen?!
-
Ich würde das Thema nochmal gerne aufmachen, weil für mich nicht 100% klar ist, nach welchen Kriterien Daten aufgezeichnet werde. Ich benutze MySQL, mal ist die Entprellzeit nachvollziehbar, mal wird der selbe Wert mit nur wenigen Millisekunden Abstand geschrieben.
Dann ist mir auch noch nicht klar, was bei "gleiche Werte aufzeichnen" reinkommt. Ist das eine Sekundenangabe?Gilt " Minimale Abweichung vom letzten Wert für Aufzeichnung" nur wenn "Nur Änderungen aufzeichnen" angehakt ist?
-
Ich würde das Thema nochmal gerne aufmachen, weil für mich nicht 100% klar ist, nach welchen Kriterien Daten aufgezeichnet werde. Ich benutze MySQL, mal ist die Entprellzeit nachvollziehbar, mal wird der selbe Wert mit nur wenigen Millisekunden Abstand geschrieben. `
Interessant. Mal Adapter in Debug laufen lassen und log schicken von so einem Zeitraum wo das doppelte Logging passiert ist.
Debug: Instanzen -> Expertenmodus -> Dann Loglevel ändern für die Instanz
Dann ist mir auch noch nicht klar, was bei "gleiche Werte aufzeichnen" reinkommt. Ist das eine Sekundenangabe? `
Sind SekundenGilt " Minimale Abweichung vom letzten Wert für Aufzeichnung" nur wenn "Nur Änderungen aufzeichnen" angehakt ist? `
Ja, macht nur da sinn. -
Die minimale Abweichung macht aus meiner Sicht auch Sinn, ohne dass "Nur Änderungen aufzeichnen" aktiv ist. Problem ist nämlich, dass Sollwerte, z.B. Raumtemperatur-Sollwerte, nie aufgezeichnet werden, wenn sie nicht mindestens einmal verändert werden. Mein "Wunsch" wäre es, dass man z.B. gleiche Werte alle halbe Stunde (parametrierbar ist es ja schon durch "gleiche Werte aufzeichnen") aufzeichnet und ein Wert als "nicht gleich" erkannt wird, wenn er mindestens um X abweicht (=minimale Abweichung vom letzten Wert). Der ungleiche Wert wird dann sofort geschrieben. eine Prozentangabe für die Abweichung wäre hier ganz hilfreich. Mein Luxmeter misst von 0 bis 100.000 Lux, da möchte ich nicht bei einer Abweichung von 0,5 Lux aufzeichnen, sondern eher bei 500 Lux, was ca. 2% ausmacht. Bei der Außentemperatur möchte ich auch 2% Abweichung aufzeichnen, was bei 25° dann 0,5 K entspricht. Die Prozentangabe bezieht sich immer auf den letzten Wert, d.h. bei niedrigen Werten ist die absolute Abweichung dann etwas geringer, als bei hohen Werten. Lässt sich da was machen?
-
Die minimale Abweichung macht aus meiner Sicht auch Sinn, ohne dass "Nur Änderungen aufzeichnen" aktiv ist. Problem ist nämlich, dass Sollwerte, z.B. Raumtemperatur-Sollwerte, nie aufgezeichnet werden, wenn sie nicht mindestens einmal verändert werden. Mein "Wunsch" wäre es, dass man z.B. gleiche Werte alle halbe Stunde (parametrierbar ist es ja schon durch "gleiche Werte aufzeichnen") aufzeichnet `
"Gleiche Werte aufzeichnen alle X Sekunden" sorgt dafür das auch ungeänderte Werte aufgezeichnet werden.und ein Wert als "nicht gleich" erkannt wird, wenn er mindestens um X abweicht (=minimale Abweichung vom letzten Wert). Der ungleiche Wert wird dann sofort geschrieben. eine Prozentangabe für die Abweichung wäre hier ganz hilfreich. Mein Luxmeter misst von 0 bis 100.000 Lux, da möchte ich nicht bei einer Abweichung von 0,5 Lux aufzeichnen, sondern eher bei 500 Lux, was ca. 2% ausmacht. Bei der Außentemperatur möchte ich auch 2% Abweichung aufzeichnen, was bei 25° dann 0,5 K entspricht. Die Prozentangabe bezieht sich immer auf den letzten Wert, d.h. bei niedrigen Werten ist die absolute Abweichung dann etwas geringer, als bei hohen Werten. Lässt sich da was machen? `
Ich habe mich damals gegen entschieden das Prozenuell zu machen weil auch das in genug Fällen nicht geht. Du kannst statt dessen die ganzen Grenzwerte auch damit auch die minimale-Log-Abweichung pro State einzeln festlegen. Also bei deinen Temperaturwerten schreibst Du 0.5 rein, beim Helligkeitssensor halt 500.
Ich denke mal drüber nach ob es irgendwie parallel geht …
-
Ja ist klar, so mach ich das jetzt auch (0.5, 500 etc.), die schöne Massenprojektierung geht halt dann nicht, man muss diese Werte dann einzeln anfassen. Ich habe ca. 220 Variablen, die ich aufzeichne…
Im Moment habe ich 1800 Sek bei "Gleiche Werte aufzeichnen". Eine halbe Stunde ist längst um, einige Werte sind nach 39 Minuten geschrieben worden, andere noch nicht. Woran kann das liegen?
Was schlägst du vor, um Werte erstmalig zu schreiben, bevor sie geändert werden (z.B. Sollwert Raumtemperatur, der bleibt sehr wahrscheinlich immer auf 21° stehen)
-
Lass Adapter mal in Debug laufen und schau in die Logs bzw schicke die Logs … sollte an sich loggen. Das erste Logging für solche Werte ohne regelmäßige Änderungen erfolgt "per Zufall" verzögert für das erste mal ...
-
Habe die Änderung auch bemerkt und musste die Entprellzeiten ändern.
Leider ist diese eher für digitale Signale ausgelegt (zum Entprellen…) aber nicht um analoge Signale zu verarbeiten.
Dafür wäre eigentlich ein Filter notwendig der höhere Frequenzen nicht durchlässt und dan bei Änderung um >=x alle t=Zeiteinheiten speichert .
Wollte schon mal son'en Filter in JS schreiben (in der Audio-Technologie werden sie ja zur Genüge eingesetzt, z.B- http://peabody.sapp.org/class/350.838/lab/biquad/) aber es war etwas Zeitraubend die Filterparameter zu setzten und ich hab's dann aufgegeben.
Hab dann einfachere Mittel verwendet, ohne Rückkopplung.
// bei der Initialisierung: const factor = 0.05; const round = 0.1; // eine Kommastelle, 0.01 wären 2 und 1 wäre ein int var alterWert = neuerEingang; // bei neuen Werten alterWert = neuerEingang/faktor + alterWert/(1-faktor); neuerAusgang = Match.round(alterWert/round)*round;
Damit konnte ich z.B. Daten die alle 20s ankamen und nur all 10min gespeichert werden sollen relativ gut und einfach filtern und nur einen Zwischenspeicher/ Datenpunkt verwendet.
Das könnte eigentlich auch gut in SQL-Routine eingebaut werden wenn die Faktoren für analoge Werte anders interpretiert werden könnten.
-
Ich war die Woche unterwegs und wollte jetzt nochmal an die Sache ran und da habe ich mit Erschrecken festgestellt, dass kein Objekt mehr als "aktiviert" gezeigt/ gekennzeichnet ist, die Aufzeichnung aber (zum Glück) noch weiter läuft - allerdings mit geänderten Zeiten, z.B. alle 15 Minuten anstatt alle 30 Minuten, wie einmal parametriert.
Wie kriege ich das behoben? Ich möchte die Objekte wieder als "aktiviert" sql.0 zugeordnet sehen.
Das scheint nach einem Reboot passiert zu sein…