Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Database Plugin

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Die Funktion funktioniert zumindest bei mir problemlos. Die Funktion löscht im Hintergrund die Datensätze. Da ei lässt sich das Plugin bewusst Zeit, damit es die Performance der normalen Funktion (wegschreiben von Daten, Nutzung des Webinterface) nicht behindert.

    Die Hinweise, dass die Datenbank gesperrt ist, lassen darauf schließen, dass es bei Dir noch anders geartete gleichzeitige Zugriffe gibt. Das könnte aus einem sqlite3 Admin Tool kommen oder auch aus anderen SmartHomeNG Plugins welche selbst auf die Datenbank zugreifen oder Funktionen des Database Plugins nutzen, da diese in anderen Threads laufen als das database Plugin.
    Zuletzt geändert von Msinn; 22.03.2023, 10:58.
    Viele Grüße
    Martin

    There is no cloud. It's only someone else's computer.

    Kommentar


      Zitat von Msinn Beitrag anzeigen
      Die Funktion funktioniert zumindest bei mir problemlos. Die Funktion löscht im Hintergrund die Datensätze. Da ei lässt sich das Plugin bewusst Zeit, damit es die Performance der normalen Funktion (wegschreiben von Daten, Nutzung des Webinterface) nicht behindert.
      Macht Sinn (oder kurz Msinn -> jetzt weiß ich auch woher der Name kommt). ;-)

      Zitat von Msinn Beitrag anzeigen
      Die Hinweise, dass die Datenbank gesperrt ist, lassen darauf schließen, dass es bei Dir noch anders geartete gleichzeitige Zugriffe gibt. Das könnte aus einem sqlite3 Admin Tool kommen oder auch aus anderen SmartHomeNG Plugins welche selbst auf die Datenbank zugreifen oder Funktionen des Database Plugins nutzen, da diese in anderen Threads laufen als das database Plugin.
      Nur noch das db_addon. Das habe ich jetzt testhalber mal pausiert. Schauen wir mal, wie es da weiter geht. Aber der "Müll" scheint nicht zu verschwinden.

      Kommentar


        Hallo zusammen,

        nach dem Umstieg auf Database Plugin 1.6.9 gibt es bei mir im WebIF jetzt die Möglichkeit mit "Show xx Entries" die Anzahl der Einträge pro Seite darzustellen.
        (Ich weiß ehrlich gesagt nicht, ab welcher Version die Funktion drin ist ... vorher hatte ich das nicht.)
        Bei mir funktioniert das aber irgendwie nicht. Ich sehe immer nur 25 Einträge. Wenn ich im Browser zoome, sehe ich sogar weniger (aber nie mehr als 25).
        Wenn ich die Einstellung "Show xx Entries" ändere, ändert sich nichts, egal ob 25, 50, 100, alle ...
        Ist ein bisschen nervig, wenn man immer auf Seite 17 muss o.ä.. Außerdem springt er immer wieder auf die erste Seite wenn ich in einem DB Eintrag war und nicht an die Stelle zurück, wo ich war ... auch etwas unschön.
        Mach ich was falsch? Oder ist das so gewollt? Kann ich irgendwie wieder auf eine lange Liste zum Scrollen umsteigen?

        Danke und Gruß,
        Timo

        Kommentar


          Hast du die neueste shng Version im Einsatz?
          Kann das aber leider auch mit der aktuellen Version nachvollziehen - das ist ein Bug, keine Ahnung woher der kommt. Schau ich mir an.
          Dass er nach Klick auf das Lupensymbol und Zurückkehren auf "Übersicht" wieder auf Seite 1 ankommt, ist mehr oder weniger Absicht bzw. normal. Auch das muss ich mir mal ansehen, sollte lösbar sein.

          Kommentar


            Zitat von Onkelandy Beitrag anzeigen
            Hast du die neueste shng Version im Einsatz?
            ja, habe V1.9.4 am Laufen.
            Ich habe aber gerade eben zufällig festgestellt, dass es irgendwie auch vom Browser / OS abhängt.
            Unter Windows + Firefox wie oben beschrieben. Unter Android + Chrome habe ich scheinbar eher das gegenteilige Verhalten. Da zeigt es (immer) alles an.

            Nachtrag: gerade doch nochmal schnell versucht. Am PC verhält sich bei mir Firefox, Chrome und Edge gleich. Wie gesagt, auf dem Smartphone geht's - mehr oder weniger.
            Zuletzt geändert von ooUrmeloo; 26.03.2023, 20:38.

            Kommentar


              Ziehst du dir bitte mal die aktuellste develop Version von shng und probierst nochmals? Bei meinen Tests hat alles wie gewünscht/erwartet funktioniert.. Im db Plugin kommt man auch nach Öffnen eines Items und Zurückkehren zur Übersicht wieder auf die Seite, die zuvor aktiv war... und man sollte jetzt problemlos zwischen den versch. Page Lengths umschalten können. Im Übrigen kann man sowohl im http Modul als auch im Plugin mit dem Parameter webif_pagelength bestimmen, was default angezeigt werden soll. -1 wäre "alle"

              Kommentar


                bin leider jetzt erst dazu gekommen ...
                Aber danke!! Funktioniert wieder!

                Kommentar


                  Hallo,
                  melde mich mal mit einem Hilfegesuch!

                  Seit geraumer Zeit tritt bei der Anwendnung des database-Plugins in Version 1.6.9 in Verbindung mit einer MariaDB sporadisch Fehler, die dann auch zum Verlust der Datenbankanbindung führen.
                  Hier mal ein exemplarisches Log:

                  Code:
                  2023-04-12  15:13:27 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:13:27 WARNING  lib.db                                   Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:13:27 WARNING  lib.db                                   fetchone: No cursor defined for stmt SELECT 1 with params ()
                  2023-04-12  15:13:33 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  15:19:04 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:19:04 WARNING  lib.db                                   Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:19:04 WARNING  lib.db                                   fetchone: No cursor defined for stmt SELECT 1 with params ()
                  2023-04-12  15:23:36 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:23:36 WARNING  lib.db                                   Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:23:36 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): (0, '')
                  2023-04-12  15:23:36 WARNING  lib.db                                   Database [Database]: Connection error (0, '')
                  2023-04-12  15:27:12 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:27:12 WARNING  lib.db                                   Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:27:12 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): (0, '')
                  2023-04-12  15:27:12 WARNING  lib.db                                   Database [Database]: Connection error (0, '')
                  2023-04-12  15:27:19 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  15:31:43 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:31:43 WARNING  lib.db                                   Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:31:43 WARNING  lib.db                                   fetchone: No cursor defined for stmt SELECT 1 with params ()
                  2023-04-12  15:34:49 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:34:50 WARNING  lib.db                                   Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:34:50 WARNING  lib.db                                   fetchone: No cursor defined for stmt SELECT 1 with params ()
                  2023-04-12  15:37:57 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:37:57 WARNING  lib.db                                   Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:37:57 WARNING  lib.db                                   fetchone: No cursor defined for stmt SELECT 1 with params ()
                  2023-04-12  15:38:01 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  15:42:46 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:42:46 WARNING  lib.db                                   Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:42:46 WARNING  lib.db                                   fetchone: No cursor defined for stmt SELECT 1 with params ()
                  2023-04-12  15:47:04 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:47:05 WARNING  lib.db                                   Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:47:05 WARNING  lib.db                                   fetchone: No cursor defined for stmt SELECT 1 with params ()
                  2023-04-12  15:50:11 ERROR    lib.db                                   Can not execute query: SELECT id, name, time, val_str, val_num, val_bool, changed from item WHERE name = %(id)s; (args OrderedDict([('id', 'raumtemp.og.bad.luftfeuchtigkeit.taupunkt')])): Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:50:11 ERROR    plugins.database                         Database: Error for query SELECT id, name, time, val_str, val_num, val_bool, changed from item WHERE name = raumtemp.og.bad.luftfeuchtigkeit.taupunkt;: Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:50:11 WARNING  plugins.database                         id(): No id found for item raumtemp.og.bad.luftfeuchtigkeit.taupunkt - Exception Packet sequence number wrong - got 1 expected 2
                  2023-04-12  15:50:11 ERROR    lib.db                                   Can not execute query: SELECT MAX(id) FROM item; (args OrderedDict()): (0, '')
                  2023-04-12  15:50:11 ERROR    plugins.database                         Database: Error for query SELECT MAX(id) FROM item;: (0, '')
                  2023-04-12  15:50:11 WARNING  plugins.database                         Problem dumping raumtemp.og.bad.luftfeuchtigkeit.taupunkt: (0, '')
                  2023-04-12  15:50:11 WARNING  plugins.database                         Error rolling back: (0, '')
                  2023-04-12  15:50:11 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): (0, '')
                  2023-04-12  15:50:11 WARNING  lib.db                                   Database [Database]: Connection error (0, '')
                  2023-04-12  15:50:11 WARNING  lib.db                                   fetchone: No cursor defined for stmt SELECT 1 with params ()
                  2023-04-12  15:50:15 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  15:51:47 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  15:53:18 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  15:54:50 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  15:56:22 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  15:57:54 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  15:59:25 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  16:00:57 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  16:02:29 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  16:04:01 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  16:05:32 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  16:07:04 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  16:08:36 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  16:10:08 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  16:11:39 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  16:13:11 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  16:14:43 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  16:16:15 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  16:17:46 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  16:19:18 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  16:20:50 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
                  2023-04-12  16:22:22 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected​
                  Der Fehler tritt adhoc auf, zumindest konnte ich bislang keinen Zusammenhang finden. Manchmal "heilt" es sich selbst, meinst wird aber die Verbindung zu Datenbank verloren und somit werden auch keine Daten mehr geschrieben.
                  Schlussendlich muss ich shNG neu starten, damit es wieder funktioniert.

                  Meine Fragen:
                  A) Lässt sich das Plugin erweitern, so dass einer eine verlorenen/korrupten Verbindung zu Datenbank diese neu aufgebaut wird? Das Plugin "merkt" ja, dass die Datenbankverbindung nicht mehr existiert? Würde es dabei reichen, die Verbindungen zur Datenbank zu schließen "'close()" und danach "_initialize_db()" aufzurufen?

                  B) Wie ich verstanden habe, kann pro Verbindung zu DB nur ein Cursor verwendet werden. Dies ist auch der Grund dafür, dass das Plugin für die Maintenance Aufgaben eine zweite Verbindung ("_db_maint") hat. Warum wird aber "remove_older_than_maxage" die produktive Datenbankverbindung ("_db") genutzt?

                  Wer kann mir hinweise geben?

                  Vielen Dank und beste Grüße
                  Michael

                  Kommentar


                    Der Fehler mit der falschen Sequence Nummer tritt auf, wenn in einer Connection mehrere Cursors gleichzeitig aktiv sind. MySQL unterstützt nur einen Curso je Connection. Im database Plugin selbt ist sichergestellt, dass nur ein Cursor je Connection aktiv ist. Wegen dieser Beschränkung von MySQL wird von den Maintenance Routinen extra eine zweite Connection aufgemacht, damit sie nicht mit der normalen Funktion des Plugins kollidieren. Das wurde nachträglich eingebaut, denn mit SQlite3 besteht diese Einschränkung nicht.
                    Viele Grüße
                    Martin

                    There is no cloud. It's only someone else's computer.

                    Kommentar


                      Zitat von Msinn Beitrag anzeigen
                      Wegen dieser Beschränkung von MySQL wird von den Maintenance Routinen extra eine zweite Connection aufgemacht, damit sie nicht mit der normalen Funktion des Plugins kollidieren.
                      Danke dir.

                      Das hatte ich schon so verstanden, daher wundert es mich, dass die Methode "remove_older_than_maxage" nicht diese zweite Connection nutzt?

                      Kommentar


                        Wie kommst Du darauf?
                        Viele Grüße
                        Martin

                        There is no cloud. It's only someone else's computer.

                        Kommentar


                          Zitat von Msinn Beitrag anzeigen
                          Wie kommst Du darauf?
                          Zumindest lese ich das so aus dem Code aus der Methode "def remove_older_than_maxage(self):"
                          Zeile 1489:
                          Code:
                          if not self._db.connected():
                          --> das ist die "Produktivverbindung"
                          Zeile 1575:
                          Code:
                          cur = self._db.cursor()
                          --> das ist die "Produktivverbindung"

                          wohingegen die Methode "def _delete_orphan(self, item_path):"
                          Zeile 966:
                          Code:
                          cur = self._db_maint.cursor()
                          die Maintenance-Verbindung nutzt

                          Oder lese ich das falsch?

                          Kommentar


                            Hallo zusammen,

                            mit diesem (Ausschnitt) Item lese ich den Stromzählerstand aus. Mittlerweile ist das schon eine recht ordentliche Menge an Datensätzen.
                            Mein Gedanke war den Bereich "zaehler" mit einem "database_maxage: 360 # Alter der Daten maximal 1 Jahr zu versehen. Hat dies Auswirkungen auf die "Unteritems" "stunde" und "erster" nach meinem Verständnis nicht, da diese eigenständig in die DB geschrieben werden.
                            Aber bevor ich da Mist baue dachte ich mir frag lieber mal nach.

                            Danke

                            Code:
                                        zaehler:
                                            name: Stromzählerstand in kWh
                                            type: num
                                            database: init
                            
                            #### hier würde ich das maxage einfügen ####
                            
                                            eval: round(sh.verbrauch_strom.zaehlertotal() / 1000, 2)
                                            eval_trigger: verbrauch_strom.zaehlertotal
                                            
                                                          
                                             
                                        stunde: # zu festgelegten Zeiten wird der aktuelle Zaehlerstand in der DB abgelegt
                                            type: num
                                            database: init
                                            eval: round(sh.verbrauch_strom.zaehlertotal() / 1000, 2)
                                            crontab: '0 */6 * * = 1' # alle 6 Stunden
                                            
                                        erster:
                                            type: num
                                            database: init
                                            eval: round(sh.verbrauch_strom.zaehlertotal() / 1000, 2)
                                            crontab: '0 0 1 * = 1' # Monatserster um 00:00 Uhr

                            Kommentar


                              Zitat von Maexle Beitrag anzeigen
                              Hat dies Auswirkungen auf die "Unteritems"
                              Nein
                              Viele Grüße
                              Martin

                              There is no cloud. It's only someone else's computer.

                              Kommentar


                                Danke Martin

                                Kommentar

                                Lädt...
                                X