Es sollte auch reichen database: init statt database: yes zu verwenden. Dann wird beim Start das Item statt mit 0 mit dem letzten Wert aus der Datenbank initialisiert, Ist auch der Doku zu entnehmen.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Neues Database Plugin
Einklappen
X
-
Leider habe ich direkt die nächste Frage an die Datenbank :-(. Diese Nacht ist mir ein Wechselrichter in Störung gegangen und hat falsche Werte geliefert. Die versauen mir jetzt meine Visualisierung. Gibt es eine Möglichkeit, den Werte in der Datenbank manuell zu ändern? Es ist NUR der Wert zu ändern, Zeitpunkt und Zeitintervall sollen unverändert bleiben.
Kommentar
-
Im WebIf des database-Plugins gibt es jetzt die Möglichkeit, verwaiste Datenreihen aktuellen Items neu zuzuordnen. Bei sehr großen Datenbanken könnte das etwas dauern; da will ich später nochmal ran. Wenn ihr ansonsten noch was findet, was nicht oder nicht gut läuft, lasst es mich wissen.
- Likes 1
Kommentar
-
Gerne doch! :-) Wobei das Plugin wirklich toll ist. Ich weiß gar nicht, was ich ohne dem machen würde. Gehört ja quasi zur Grundfunktionalität von SmartHomeNG.Zitat von Morg Beitrag anzeigenWenn ihr ansonsten noch was findet, was nicht oder nicht gut läuft, lasst es mich wissen.
Mich nervt etwas, dass da 0-Werte reingeschrieben werden, wenn das Item noch nicht initialisiert ist - zumindest vermute ich das. Ich nutze bei "langsamen Items" meist database: init. Das Problem dabei ist dennoch, dass falsche 0-Werte in die DB geschrieben werden. Das hat irgendwas mit dem Neustart von SmartHomeNG zu tun. Ob das daran liegt, dass ich ggf. mehrfach neu gestartet habe und noch nicht initialisiert war, kann ich aber nicht beurteilen. Die Frage ist nur, ob man das irgendwie vermeiden kann. Gerade wenn man min/max-Werte abfragen will ist das besonders störend.
Kommentar
-
Wenn der Wert normalerweise nicht 0 wird, wäre es ganz einfach mit einem eval. ANsonsten müsstest du mal schauen, welchen Wert das Item nach dem Start von shng hat und woher der Wert kommt (init, database, ...?). Bei database: init sollten keine "falschen" 0-Werte geschrieben werden, da das Item den initialen Wert aus der db bekommt. Irgendwo müsste ja dann eine 0 herkommen. Versuche mal herauszufinden, woher...
Kommentar
-
Du könntest den "DB Browser for SQLite" verwenden.Zitat von aldaris Beitrag anzeigenLeider habe ich direkt die nächste Frage an die Datenbank :-(. Diese Nacht ist mir ein Wechselrichter in Störung gegangen und hat falsche Werte geliefert. Die versauen mir jetzt meine Visualisierung. Gibt es eine Möglichkeit, den Werte in der Datenbank manuell zu ändern? Es ist NUR der Wert zu ändern, Zeitpunkt und Zeitintervall sollen unverändert bleiben.
Siehe auch hier: https://knx-user-forum.de/forum/supp...30#post1961430
Damit habe ich einzelne Einträge ändern können. Ist m.E. aber nichts, was man häufiger manuell machen möchte ...
- Likes 1
Kommentar
-
Hallo!
Mir ist bei der Anpassung von DB-Items aufgefallen, dass das Item env.core.scheduler.active_threads in meiner Datenbank praktisch doppelt so viele Einträge hat, wie die anderen Items aus der Gruppe env.core.scheduler....
grafik.png
Ich kann nachvollziehen, dass die "env_stat"-Logik mit cycle=300 aufgerufen wird. Und, dass die active_threads mit
(Auszug aus core.yaml)
berechnet werden. D.h. die Berechnung wird scheinbar 2x getriggert; damit entstehen 2 DB-Einträge.Code:active_threads: type: num eval: sh...worker_threads() - sh...idle_threads() eval_trigger: - ..worker_threads - ..idle_threads
Ist das so gewollt?
Kommentar
-
Hi,
Ich habe eine neue VM mit 1.12 + 3.6 unter Trixie erstellt. Bevor ich sie produktiv einsetze spiele ich mit dem Gedanken meine MariaDB, die bereits als Docker läuft (benutzer + pwd), zu verwenden.
Was müßte dafür angepasst werden?
- aktuelle SQL Plugin config
In den itemsCode:database: plugin_name: database driver: sqlite3 count_logentries: true connect: - database:/usr/local/smarthome/var/db/smarthomeng.db - check_same_thread:0
mfgCode:database: 'init'
Markus
Kommentar
-
Ich habe jetzt mal etwas am Database-Plugin gearbeitet.
Wesentliche Änderungen:- unter der Haube
- einige Fehler behoben
- das Locking konsequenter umgesetzt, so dass gleichzeitige Zugriffe (auch aus verschiedenen Threads) so weit ich ich das sehen kann verhindert werden
- Timeouts und Reconnects verbessert
- in der Items-API:
- es gibt jetzt bei gesetztem database_maxage (Löschen nach x Tagen) die Möglichkeit, nicht zu löschen, sondern Dinge zu tun:
mit dem Attribut database_maxage_action kann festgelegt werden, was mit alten Daten geschehen soll. Default ist "delete" -> unverändert
Es gibt weitere Möglichkeiten, wie z.b. "sum", "avg", "max", "min", "integrate", "first", "last" - im Wesentlichen dieselben, die man über die Item-Funktionen auch nutzen kann.
Dazu gibt es noch "database_maxage_interval", per Default "1d", also ein Tag - damit wird festgelegt, in welchen Intervallen die Daten aggregiert werden.
Bei "sum" werden alle Werte eines Tage addiert und statt der einzelnen Werte nur noch ein Tageswert geschrieben. Bei "avg" gibt es den Tagedsurchschnitt, "min" und "max" sind klar, "first" und "last" (gehen z.B. auch für str-Items) belassen von allen Werten eines Tages nur den jeweils ersten oder letzten.
Das alles passiert automatisch - und Daten, die noch "alt" vorhanden sind, werden Stück für Stück im Hintergrund automatisch aggregiert.
Wenn die Datenbank wirklich schon zu groß ist, gibt es noch die Möglichkeit festzulegen, wie viele "Intervalle" (hier: Tage) am Stück verarbeitet werden. Mit 1 dauert es entsprechend länger, ist aber mit weniger Rechen- und Zugriffsaufwand verbunden und sollte daher stabiler laufen.
- es gibt jetzt bei gesetztem database_maxage (Löschen nach x Tagen) die Möglichkeit, nicht zu löschen, sondern Dinge zu tun:

Vielleicht hlift das dem Einen oder Anderen
- Likes 2
Kommentar
- unter der Haube
-
So, wichtiges Update für das Datenbank-Subsystem lib/db.py und plugins/database/:
Mit den letzten Updates im database-Plugin sind einige Fehler an die Oberfläche gespült worden, die vorher ignoriert oder still verschluckt wurden (try/except: pass). Teilweise waren Fehler im Code, die notwendige Anweisungen gar nicht erst haben ausführen lassen.
Ich habe daraufhin mehrere Code-Audits durchgeführt und einiges an Änderungen einbauen müssen.
Wichtig - die meisten Änderungen (und alle großen Fixes) beziehen sich nur auf MySQL-Datenbanken, nicht auf SQLite!
Auslöser waren wiederholte Fehler ("packet sequence number wrong", "NoneType object has no attribute", disconnect/hang errors). An mehreren Stellen im Code waren Abfolgen von Locking - Cursor - Anweisung - Commit/Rollback - Lock-Freigabe implementiert, die aber nicht einheitlich und nicht alle vollständig waren. Die unterschiedliche Behandlung von Anweisungen mit explizitem oder ohne Cursor haben sich teilweise überschnitten, und verschiedene SQL-Anweisungen sind durcheinander an die DB gegeben worden ("packet sequence number wrong").
Die hat in der Vergangenheit teilweise zu Datenverlust führen können.
Mit diesem Update werden alle Datenbankzugriffe über einen `with transaction()`-Kontextmanager geroutet. Dieser sorgt in jedem Fall dafür, dass nur ein Anweisungsblock gleichzeitig ausgeführt wird und hinterher sauber aufgeräumt - entweder ein commit() im Erfolgsfall oder ein rollback() im Fehlerfall. Die vorhandenen Logik (z.B. dump() vom buffer) sorgt jetzt schon für eine Wiederholung von fehlgeschlagenen Anweisungen, so dass keine Daten verloren gehen.
Durch den einheitlichen transaction-Manager ist das Verhalten an allen Stellen einheitlich und nachvollziehbarer geworden.
Weitere kleinere Fehler sind quasi nebenher mit behoben worden - auch einige für SQLite.
Für Anwender sind keine Änderungen der Konfiguration oder sonstige Arbeiten erforderlich. Die notwendigen Updates am DB-Schema werden automatisch eingespielt, und damit sollte das Datenbanksystem hoffentlich für eine Weile wieder fehlerfrei laufen.
Damit das funktioniert, müssen core (shng) und plugins beide auf aktuellen develop-Stand gebracht werden. Das aktuelle database-Plugin aus develop wird nicht laufen, wenn nicht auch der Core aktuell ist!
Die Updates vom PR #1052 (database: enable reversible invalidation of values) sind _nicht_ enthalten.
Aufgrund der Schwere der Fehler plane ich noch ein 1.12.3-Release, sobald dieses Update einigermaßen getestet wurde. Bei mir habe ich intensive Tests mit verschiedenen Datenbank-Containern durchgeführt (im Betrieb die DB ausschalten und solche Späße...) und umfangreiche Tests für lib.db und das database-Plugin hinzugefügt. Auf meinem "Produktionsserver" zuhause läuft das jetzt seit ca. einer Woche ohne eine einzige Warnung oder einen Fehler.
)
- Likes 1
Kommentar


Kommentar