Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
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.
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:
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.
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.
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.
Ä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.
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.
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 ...
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:
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.
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 ;-) )
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.ä.
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.
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?
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.
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??
Guten Tag, leider muss ich eine Frage zum Database Plugin stellen. Ich kriege es nicht hin:
Ich habe eine Item mit Datenbank, das regelmäßig Einträge generiert. In einem zweiten Item möchte ich stündlich die Veränderung der letzten Stunde darstellen. Das zweite Item hat crontab und eval auf das erste Item. Bisher war mein Basisitem monoton steigend, eval war
Code:
sh.A.db('max', '1h') - sh.A.db('min', '1h')
Klappte.
Neue Anforderung, das Basisitem kann auch fallen, dann liefert das oben keine sinnvollen Ergebnisse mehr. Daher habe ich es mit diff probiert:
Code:
sh.A.db('diff', '1h')
Das liefert aber leider auch rein positive Ergebnisse. In meinem Beispiel, wo die Datenwerte alle negativ sind und monoton fallen (-2, -3, -12, -12, -34,..) bekomme ich trotzdem positive Ergebnisse (-2 zu -34 hätte ich gerne -32). Ist das absichtlich so und/oder wie kann ich das sonst lösen?
Danke für jeden Hinweis und frohe Festtage
Aldaris
Was willst Du denn ausrechnen? Das Delta zwischen jetzt und vor einer Stunde? Oder das Delta max in der letzten Stunde minus min in der letzten Stunde?
M.E. macht das 'diff' genau, was es soll:
### sh.item.db(function, start, end='now')
und
* `diff`: return the differences between values
Damit: Start=1h - End=now --> -2 --34 = 32
Ich benutze 'diff' nicht, aber evtl. mal anders herum probieren:
Guten Tag, leider muss ich eine Frage zum Database Plugin stellen. Ich kriege es nicht hin:
Ich habe eine Item mit Datenbank, das regelmäßig Einträge generiert. In einem zweiten Item möchte ich stündlich die Veränderung der letzten Stunde darstellen. Das zweite Item hat crontab und eval auf das erste Item. Bisher war mein Basisitem monoton steigend, eval war
Code:
sh.A.db('max', '1h') - sh.A.db('min', '1h')
Klappte.
Neue Anforderung, das Basisitem kann auch fallen, dann liefert das oben keine sinnvollen Ergebnisse mehr. Daher habe ich es mit diff probiert:
Code:
sh.A.db('diff', '1h')
Das liefert aber leider auch rein positive Ergebnisse. In meinem Beispiel, wo die Datenwerte alle negativ sind und monoton fallen (-2, -3, -12, -12, -34,..) bekomme ich trotzdem positive Ergebnisse (-2 zu -34 hätte ich gerne -32). Ist das absichtlich so und/oder wie kann ich das sonst lösen?
Danke für jeden Hinweis und frohe Festtage
Aldaris
Ich nutze mariadb. Dein Hinweis mit Fehlerhandling ist völlig richtig. Fürs Erste würde mir ausreichen, wenn die Funktion "none" zurückgibt, falls es kein Delta berechnet werden kann.
Kennst Du bei SQL die Abfrage für ein Differenzieren? Ich hatte mich mal im database plugin in der Funktion
an der function "differentiate" versucht, bin aber an dem SQL Aufruf "LAG" gescheitert. Dieser scheint nicht von allen DBs unterstützt zu werden. Kennst Du dich da aus?
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Einen Kommentar schreiben: