Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Database Plugin

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

    So, hänge mich aber auch mal mit einer Frage hier ran.
    Habe leider auch ein Problem. Habe seit kurzem folgende Einträge im Log, und habe keine Ahnung, warum. Habe eigentlich nichts geändert.

    Code:
    2024-03-28  22:05:11 ERROR    lib.db              Can not execute query: DELETE FROM log WHERE (item_id = ?                                      ) AND (time    = ?          OR 1 = ?         ) AND (time    > ?    OR 1 = ?   ) AND (time    < ?      OR 1 = ?     ) AND (changed = ?       OR 1 = ?      ) AND (changed > ? OR 1 = ?) AND (changed < ?   OR 1 = ?  );     (args [121, None, 1, None, 1, 1680040800000, 0, None, 1, None, 1, None, 1]): database disk image is malformed
    2024-03-28  22:05:11 ERROR    plugins.database    Database: Error for query DELETE FROM log WHERE (item_id = 121                                      ) AND (time    = None          OR 1 = 1         ) AND (time    > None    OR 1 = 1   ) AND (time    < 1680040800000      OR 1 = 0     ) AND (changed = None       OR 1 = 1      ) AND (changed > None OR 1 = 1) AND (changed < None   OR 1 = 1  );    : database disk image is malformed
    2024-03-28  22:05:11 ERROR    plugins.database    Exception in function deleteLog: database disk image is malformed
    Hat jemand eine Idee, woran das liegen könnte bzw. wie ich es beheben könnte??

    Kommentar


      So einfach war es leider nicht. Ich habe dann doch mal einen Blick in den Code geworfen, tatsächlich liefert diff die Differenz zwischen max und min.

      Code:
       'diff': 'MAX(val_num) - MIN(val_num)',
      Nicht das was ich suche. Ich habe es jetzt hingekriegt mit: Aktueller Wert minus Wert vor einer Stunde zu
      Code:
      sh.A.db('raw', 'now')-sh.A.db('raw', '1h', '1h')
      Doppeltes '1h' ist wichtig, da raw den ersten Wert aus dem Intervall nimmt, das sonst now wäre. Intuitiv hätte ich bei 'raw', '1h' ein Array von vor einer Stunde bis jetzt erwartet.

      ​​​​​​​Mal schauen ob ich das noch erweitere...

      Kommentar


        Zitat von ooUrmeloo Beitrag anzeigen
        Code:
        database disk image is malformed
        Sieht für mich nach angeschlagener Datenbank aus. Bist Du auf einem Pi mit SD-Karte unterwegs? Ich würde umgehend versuchen die Datenbank zu prüfen und ggf. zu retten...
        Pi mit Datenbank auf SD-Karte sehe ich seit jeher skeptisch...
        Ansonsten: Hast Du mal einen Absturz gehabt oder einen Stromausfall?

        Kommentar


          Zitat von ooUrmeloo Beitrag anzeigen
          So, hänge mich aber auch mal mit einer Frage hier ran.
          Habe leider auch ein Problem. Habe seit kurzem folgende Einträge im Log, und habe keine Ahnung, warum. Habe eigentlich nichts geändert.

          Code:
          2024-03-28 22:05:11 ERROR lib.db Can not execute query: DELETE FROM log WHERE (item_id = ? ) AND (time = ? OR 1 = ? ) AND (time > ? OR 1 = ? ) AND (time < ? OR 1 = ? ) AND (changed = ? OR 1 = ? ) AND (changed > ? OR 1 = ?) AND (changed < ? OR 1 = ? ); (args [121, None, 1, None, 1, 1680040800000, 0, None, 1, None, 1, None, 1]): database disk image is malformed
          2024-03-28 22:05:11 ERROR plugins.database Database: Error for query DELETE FROM log WHERE (item_id = 121 ) AND (time = None OR 1 = 1 ) AND (time > None OR 1 = 1 ) AND (time < 1680040800000 OR 1 = 0 ) AND (changed = None OR 1 = 1 ) AND (changed > None OR 1 = 1) AND (changed < None OR 1 = 1 ); : database disk image is malformed
          2024-03-28 22:05:11 ERROR plugins.database Exception in function deleteLog: database disk image is malformed
          Hat jemand eine Idee, woran das liegen könnte bzw. wie ich es beheben könnte??
          Der eigentliche Fehler stammt aus der Datenbank bei Ausführung der Query:
          database disk image is malformed

          Ich würde sagen, die Datenbank ist kaputt, evtl. die SD Karte oder worauf die liegt? Je nachdem wie relevant die Daten sind könntest du das Datenbankfile mal umbenennen, dann wird eine neue angelegt.

          Welche Datenbank benutzt du?

          Kommentar


            In der Tat ... Datenbank liegt lokal auf der SD Karte des Pi :-/ Das werde ich jetzt aber gleich mal ändern ... und sie auf den USB Stick schieben.
            Ich benutze sqlite3 mit dem database Plugin v1.6.12.

            Wenn ich es richtig sehe, gibt es nur einen Fehlereintrag bei Item_Id 121. Allerdings kann ich den Eintrag auch nicht manuell löschen. :-(
            Hatte keinen Stromausfall o.ä.​

            Zitat von bmx Beitrag anzeigen
            Ich würde umgehend versuchen die Datenbank zu prüfen und ggf. zu retten...
            Was kann ich da denn machen? "prüfen und ggf. retten?"

            Ist kein Beinbruch, wenn alles weg ist, schade wär's aber schon.

            Kommentar


              Da gibt es im Netz einiges zu finden, zum Beispiel auf Stackoverflow oder direkt in der Doku der SQLite3.

              Kommentar


                Danke nochmal für die Hinweise.
                Leider habe ich es nicht hinbekommen, die alte Datenbank zu retten.
                Deshalb habe ich jetzt eine neue auf meinem USB Stick (mit fstab gemountet an meinem PI3) angelegt.
                Leider habe ich dort jetzt massiv Performance Probleme. Ich bekomme ständig folgende Einträge. Wie man sieht, auch mitten in der Nacht, wo sonst nicht viel laufen sollte.

                Code:
                2024-04-04  02:13:10 NOTICE   plugins.database    Dumping buffered data from skipped dump(s).
                2024-04-04  02:13:59 NOTICE   plugins.database    Skipping dump, since an other database operation running! Data is buffered and dumped later.
                2024-04-04  02:13:59 NOTICE   plugins.database    Skipping dump, since an other database operation running! Data is buffered and dumped later.
                2024-04-04  02:14:00 NOTICE   plugins.database    Skipping dump, since an other database operation running! Data is buffered and dumped later.
                2024-04-04  02:14:00 NOTICE   plugins.database    Skipping dump, since an other database operation running! Data is buffered and dumped later.
                2024-04-04  02:14:17 NOTICE   plugins.database    Skipping dump, since an other database operation running! Data is buffered and dumped later.
                2024-04-04  02:14:20 NOTICE   plugins.database    Skipping dump, since an other database operation running! Data is buffered and dumped later.
                2024-04-04  02:14:20 NOTICE   plugins.database    Skipping dump, since an other database operation running! Data is buffered and dumped later.
                2024-04-04  02:14:20 NOTICE   plugins.database    Skipping dump, since an other database operation running! Data is buffered and dumped later.
                2024-04-04  02:14:23 NOTICE   plugins.database    Skipping dump, since an other database operation running! Data is buffered and dumped later.
                2024-04-04  02:14:38 NOTICE   plugins.database    Skipping dump, since an other database operation running! Data is buffered and dumped later.
                2024-04-04  02:14:38 NOTICE   plugins.database    Skipping dump, since an other database operation running! Data is buffered and dumped later.
                2024-04-04  02:14:39 NOTICE   plugins.database    Skipping dump, since an other database operation running! Data is buffered and dumped later.
                2024-04-04  02:14:46 NOTICE   plugins.database    Skipping dump, since an other database operation running! Data is buffered and dumped later.
                Wenn ich dann noch per Smartvisu auf die Daten zugreife (z.B. Plots), bekomme ich wieder Websocket Fehler (vglb. https://knx-user-forum.de/forum/supp...06#post1929106) und die Seite lädt ewig ... :-(

                Bei testweise Kopieren der Datenbank wieder zurück auf die SD Karte läuft alles problemlos. Die Datenbank ist auch ganz neu (d.h. klein). Daran sollte es also auch nicht liegen. Der USB Stick läuft eigentlich auch stabil. Darauf mache ich regelmäßig eine Sicherung. Woran könnte es sonst liegen? Jemand eine Idee? Performance des PI3? USB Geschwindigkeit?
                Sonst würde ich die Datenbank wohl oder übel doch wieder auf der SD Karte lassen - mit dem Risiko, dass sie wieder mal zerschossen wird.
                Oder kann man die Datenbank im laufenden Betrieb irgendwie (auf den USB Stick?) sichern? Meines Wissens nach geht das nicht so einfach, da die Datenbank ja immer in Bearbeitung ist.

                Kann es an der PI3 Performance liegen? Ich bin gerade dabei, das ganze System auf einen PI4 zu portieren. Brauche aber noch eine Weile, da man ja alles neu aufsetzen muss. (Bin für jegliche Tipps dankbar, wie man schlank von PI3 -> PI4 umziehen kann ;-) )

                Kommentar


                  Zitat von ooUrmeloo Beitrag anzeigen
                  Deshalb habe ich jetzt eine neue auf meinem USB Stick (mit fstab gemountet an meinem PI3) angelegt.
                  Leider habe ich dort jetzt massiv Performance Probleme. Ich bekomme ständig folgende Einträge. Wie man sieht, auch mitten in der Nacht, wo sonst nicht viel laufen sollte.
                  Hat keiner ein Idee, warum die Datenbank bei mir nicht sinnvoll auf USB Stick läuft?

                  Alternative Idee:
                  Ich habe gerade in der database Doku den Befehl für die plugin.yaml gefunden: 'copy_database'.
                  Verstehe ich das richtig, das SHNG bei jedem Neustart eine Kopie der Datenbank ablegt, die man dann auch wieder als Backup einlesen könnte?
                  D.h., wenn man die Datenbank regelmäßig (z.B. auf dem USB Stick) sichern möchte, könnte man 'copy_database' nutzen.
                  Man müsste nur SHNG regelmäßig neu starten?!? Z.B. mit einem cronjob für:

                  Code:
                  sudo systemctl restart smarthome.service​
                  Oder gibt es da einen "eleganteren" Weg?

                  Danke euch!

                  Kommentar


                    mmh ... bekomm' die 'copy_database' nicht zum laufen:

                    Code:
                    2024-04-14  22:08:39 WARNING  plugins.database    Starting to copy SQLite3 database file from /usr/local/smarthome/var/db/smarthomeng.db to /media/usbstick/smarthomeng_backup.db
                    2024-04-14  22:08:40 ERROR    lib.plugin          Plugin 'database' v1.6.12 from section 'database'
                    Exception: 'PluginLoggingAdapter' object has no attribute 'Error'
                    running SmartHomeNG v1.10.0-master (4b25822a0) / plugins v1.10.0-master (7e00e4ee)
                    Traceback (most recent call last):
                      File "/usr/local/smarthome/plugins/database/__init__.py", line 404, in copy_databasefile
                        shutil.copy2(database_name, self._copy_database_name)
                      File "/usr/lib/python3.9/shutil.py", line 436, in copy2
                        copystat(src, dst, follow_symlinks=follow_symlinks)
                      File "/usr/lib/python3.9/shutil.py", line 375, in copystat
                        lookup("utime")(dst, ns=(st.st_atime_ns, st.st_mtime_ns),
                    PermissionError: [Errno 1] Operation not permitted
                    
                    During handling of the above exception, another exception occurred:
                    
                    Traceback (most recent call last):
                      File "/usr/local/smarthome/lib/plugin.py", line 173, in __init__
                        plugin_thread = PluginWrapper(smarthome, plugin, classname, classpath, args, instance, self.meta, self._configfile)
                      File "/usr/local/smarthome/lib/plugin.py", line 709, in __init__
                        exec("self.plugin.__init__(smarthome{0}{1})".format("," if len(arglist) else "", argstring))
                      File "<string>", line 1, in <module>
                      File "/usr/local/smarthome/plugins/database/__init__.py", line 143, in __init__
                        self.copy_databasefile()
                      File "/usr/local/smarthome/plugins/database/__init__.py", line 407, in copy_databasefile
                        self.logger.Error( f"Error copying SQLite3 database file: {e}")
                    AttributeError: 'PluginLoggingAdapter' object has no attribute 'Error'
                    ​
                    Permission Error? Hab ich für den USB Stick nicht ausreichend Schreibrechte?
                    Könnte das evtl. auch das Performance Problem von weiter oben erklären? Aber dann könnte ich doch gar nicht schreiben ...

                    Kommentar


                      Ich nutze sqlite schon lange nicht mehr, aber hatte das auch auf nem USB Stick am Start und kann mich an keine Probleme erinnern. Hast du mal einen anderen Stick probiert?

                      Ad Umziehen von Pi3 auf Pi4.. kommt drauf an, was du alles am Start hast, aber an und für sich sollte die Backupfunktion von SHNG ausreichen oder du kopierst einfach den ganzen shng Ordner mit allen Unterordnern vom alten auf den neuen Pi. Kennst du das hier? https://github.com/smarthomeNG/raspberrypi-image bzw. evtl. auch https://github.com/smarthomeNG/ansible

                      Ad Permission Error, kann gut sein, dass was mit den Berechtigungen nicht passt. Einfach mit ls -la <Verzeichnis> checken. Aaaaber, die Zeile hier
                      "from /usr/local/smarthome/var/db/smarthomeng.db to /media/usbstick/smarthomeng_backup.db"
                      würde mich stutzig machen. Also entweder, du hast die Location vom Datenbankfile falsch angegeben oder die Funktion im Databaseplugin sucht an der falschen Stelle.

                      Was steht in deiner plugin.yaml zum database Plugin? Ist der erste Eintrag von "connect" - database: mit Verweis auf deinen USB Stick? Es muss der erste Eintrag sein.

                      Änder mal in plugins/database/__init__.py die Zeile 407 ab, so dass statt self.logger.Error klein self.logger.error steht.

                      Und könntest bitte mal Zeile 395 wie folgt ändern: database_name = next((s for s in self._connect if s.startswith("database:")), None)
                      Im aktuellen Code funktioniert der Spaß nämlich nur, wenn in der plugin.yaml unter "connect" database:... der 1. Eintrag ist. UU. ist aber der erste Eintrag zB check_same_thread:true oder so und dann würde das Kopieren des Files definitiv auch nicht klappen.
                      Zuletzt geändert von Onkelandy; 16.04.2024, 06:42.

                      Kommentar


                        Zitat von Onkelandy Beitrag anzeigen
                        Ich nutze sqlite schon lange nicht mehr, aber hatte das auch auf nem USB Stick am Start und kann mich an keine Probleme erinnern. Hast du mal einen anderen Stick probiert?
                        Warum benutzt du kein sqlite? Hat MySQL Vorteile? Ich bin da beim Default geblieben, habe mir aber ehrlich gesagt, keine Gedanken gemacht.
                        Einen anderen Stick habe ich noch nicht probiert. Er funktioniert grundsätzlich auch einwandfrei. Backup läuft regelmäßig dorthin und andere Daten kann ich dort problemlos speichern. Owner ist 'root'. Rechte sollten m.E. passen. Ich habe den Stick via fstab eingebunden:
                        Code:
                        UUID=7648BF3948BEF6C9 /media/usbstick/ ntfs utf8,auto,users,rw,nofail,umask=000,x-systemd.device-timeout=30,noatime 0
                        Könnte ntfs ein Problem machen?


                        Zitat von Onkelandy Beitrag anzeigen
                        Ad Umziehen von Pi3 auf Pi4.. kommt drauf an, was du alles am Start hast, aber an und für sich sollte die Backupfunktion von SHNG ausreichen oder du kopierst einfach den ganzen shng Ordner mit allen Unterordnern vom alten auf den neuen Pi. Kennst du das hier? https://github.com/smarthomeNG/raspberrypi-image bzw. evtl. auch https://github.com/smarthomeNG/ansible
                        ​SHNG ist nicht das Problem, eher das ganze Drumherum ... knxd zum Laufen bringen, Zigbee2MQTT, ... aber ja, schon richtig ... kein Problem, muss nur die Zeit finden, es zu tun.


                        Zitat von Onkelandy Beitrag anzeigen
                        Ad Permission Error, kann gut sein, dass was mit den Berechtigungen nicht passt. Einfach mit ls -la <Verzeichnis> checken. Aaaaber, die Zeile hier
                        "from /usr/local/smarthome/var/db/smarthomeng.db to /media/usbstick/smarthomeng_backup.db"
                        würde mich stutzig machen. Also entweder, du hast die Location vom Datenbankfile falsch angegeben oder die Funktion im Databaseplugin sucht an der falschen Stelle.

                        Was steht in deiner plugin.yaml zum database Plugin? Ist der erste Eintrag von "connect" - database: mit Verweis auf deinen USB Stick? Es muss der erste Eintrag sein.

                        Rechte:
                        Code:
                        drwxrwxrwx  1 root root 4096 Apr 15 22:44 usbstick
                        Was siehst Du als Problem bei dem Pfad? Ist eigentlich genau das, was ich eigentlich wollte.
                        Code:
                        database:
                            plugin_name: database
                            driver: sqlite3
                            connect:
                            -   database:/usr/local/smarthome/var/db/smarthomeng.db
                            -   check_same_thread:0
                            copy_database: True
                            copy_database_name: /media/usbstick/smarthomeng_backup.db
                        
                        ​
                        Die Arbeits-DB liegt unter '/usr/local/smarthome/var/db/' (per Default?) und ich möchte beim Start von SHNG eine Kopie unter '/media/usbstick' machen.
                        Wie gesagt, nur als Workaround bzw. Backup, weil die Arbeits-DB auf dem Stick nicht gut funktioniert.


                        Zitat von Onkelandy Beitrag anzeigen
                        Änder mal in plugins/database/__init__.py die Zeile 407 ab, so dass statt self.logger.Error klein self.logger.error steht.

                        Und könntest bitte mal Zeile 395 wie folgt ändern: database_name = next((s for s in self._connect if s.startswith("database:")), None)
                        Im aktuellen Code funktioniert der Spaß nämlich nur, wenn in der plugin.yaml unter "connect" database:... der 1. Eintrag ist. UU. ist aber der erste Eintrag zB check_same_thread:true oder so und dann würde das Kopieren des Files definitiv auch nicht klappen.

                        Probiere ich heute Abend mal aus.

                        Danke Dir für die Hilfe!

                        Kommentar


                          Kleine Ergänzung: 'copy_database' mit einem anderen Zielpfad funktioniert problemlos.
                          Liegt dann wohl ziemlich sicher an dem Stick oder wie er eingebunden ist.
                          Kann es daran liegen, dass 'root' der Owner ist und nicht 'smarthome'?

                          Code:
                          2024-04-16  13:08:00 WARNING  plugins.database    Starting to copy SQLite3 database file from /usr/local/smarthome/var/db/smarthomeng.db to /usr/local/smarthome/var/backup/smarthomeng_backup.db
                          2024-04-16  13:08:01 WARNING  plugins.database    Finished copying SQLite3 database file
                          
                          ​
                          Zuletzt geändert von ooUrmeloo; 16.04.2024, 12:24.

                          Kommentar


                            Zitat von Onkelandy Beitrag anzeigen
                            Änder mal in plugins/database/__init__.py die Zeile 407 ab, so dass statt self.logger.Error klein self.logger.error steht.

                            Und könntest bitte mal Zeile 395 wie folgt ändern: database_name = next((s for s in self._connect if s.startswith("database:")), None)
                            Im aktuellen Code funktioniert der Spaß nämlich nur, wenn in der plugin.yaml unter "connect" database:... der 1. Eintrag ist. UU. ist aber der erste Eintrag zB check_same_thread:true oder so und dann würde das Kopieren des Files definitiv auch nicht klappen.
                            doch schon mal probiert ...
                            Kopie auf USB klappt trotzdem nicht. Aber immerhin läuft das Plugin weiter (und stoppt nicht wie oben). Fehlermeldung:
                            Code:
                            2024-04-16  13:17:19 WARNING  plugins.database    Starting to copy SQLite3 database file from /usr/local/smarthome/var/db/smarthomeng.db to /media/usbstick/smarthomeng_backup.db
                            2024-04-16  13:17:20 ERROR    plugins.database    Error copying SQLite3 database file: [Errno 1] Operation not permitted

                            Kommentar


                              OK, ja, war eh so zu erwarten, aber zumindest ist nun der Fehler mit dem Error abgefangen, werde das entsprechend einpflegen.

                              In meine Raspi Image (Links siehe oben) hab ich auch ein Backupscript drin, das zB knxd Config und vieles weitere sichert und in ein Archiv packt: https://github.com/smarthomeNG/ansib...etup_backup.sh
                              zigbee, etc. ist da nicht dabei, aber könnte ich bei Bedarf einbinden.

                              Es wird ziemlich sicher am ntfs liegen, schau mal hier.. so out of the box geht das nicht. Würde es als ext4 formatieren und einbinden oder halt das hier machen: https://phoenixnap.com/kb/mount-ntfs-linux

                              Kommentar


                                Zitat von Onkelandy Beitrag anzeigen
                                In meine Raspi Image (Links siehe oben) hab ich auch ein Backupscript drin, das zB knxd Config und vieles weitere sichert und in ein Archiv packt: https://github.com/smarthomeNG/ansib...etup_backup.sh
                                zigbee, etc. ist da nicht dabei, aber könnte ich bei Bedarf einbinden.
                                Danke, das schau ich mir an. Bisher mach ich nur ein regelmäßiges Backup der gesamten SD Karte mit 'dd' im laufenden Betrieb. Funktioniert bisher ganz gut.

                                Zitat von Onkelandy Beitrag anzeigen
                                Es wird ziemlich sicher am ntfs liegen, schau mal hier.. so out of the box geht das nicht. Würde es als ext4 formatieren und einbinden oder halt das hier machen: https://phoenixnap.com/kb/mount-ntfs-linux
                                Genau so hab ich den Stick eingebunden. Vielleicht mach ich mir aber dann doch mal den Aufwand und versuch's mit ext4. Vielleicht funkioniert dann auch die DB direkt auf USB besser.

                                Kommentar

                                Lädt...
                                X