Du darfst bei der Konfiguration der Datenbank kein Leerzeichen hinter dem Doppelpunkt haben!
Außerdem passt was bei deinem eigenen Plugin offensichtlich mit den Einrückungen in Zeile 308 nicht.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Neues Database Plugin
Einklappen
X
-
Ich hatte mir in den letzten Versionen eine eigene Datenbank in MYSQL angelegt und die mit Daten gefüttert und dargestellt.
Seit dem Umstieg auf 1.8.1 gelingt mir der Zugriff nicht mehr, irgendeine "partition" wird verlangt.
Was mache ich falsch?
Code:database_mysql: plugin_name: Database # instance: nas precision: 2 driver: pymysql connect: - host: localhost - user: smarthome - passwd: smarthome - db: smarthome - port: 3306
das ist meine Problem-DB
Code:wp: plugin_name: aaeigwp2 instance: mydb precision: 4 driver: pymysql connect: - host: localhost - user: root - passwd: smarthome - db: solar - port: 3306
Code:2021-02-19 10:53:36 WARNING lib.smarthome.main -------------------- Init SmartHomeNG 1.8.1.master (84873f74) -------------------- 2021-02-19 10:53:36 WARNING lib.smarthome.main Running in Python interpreter 'v3.8.6 final', from directory /usr/local/smarthome 2021-02-19 10:53:36 WARNING lib.smarthome.main - on Linux-5.10.11-v7l+-armv7l-with-glibc2.28 (pid=31361) 2021-02-19 10:53:36 WARNING lib.smarthome.main - Nutze Feiertage für Land 'DE', Provinz 'BY', 3 benutzerdefinierte(r) Feiertag(e) definiert 2021-02-19 10:53:43 ERROR lib.plugin Plugin 'database' from section 'database_mysql' exception: 'collections.OrderedDict' object has no attribute 'partition' > Traceback (most recent call last): > File "/usr/local/smarthome/lib/plugin.py", line 162, in __init__ > plugin_thread = PluginWrapper(smarthome, plugin, classname, classpath, args, instance, self.meta, self._configfile) > File "/usr/local/smarthome/lib/plugin.py", line 629, 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 118, in __init__ > self._db = lib.db.Database(("" if self._prefix == "" else self._prefix.capitalize()) + "Database", self.driver, self._connect) > File "/usr/local/smarthome/lib/db.py", line 176, in __init__ > key, sep, value = arg.partition(':') > AttributeError: 'collections.OrderedDict' object has no attribute 'partition' 2021-02-19 10:53:43 ERROR lib.plugin Plugin 'wp' exception during import of __init__.py: unindent does not match any outer indentation level (__init__.py, line 308) > Traceback (most recent call last): > File "/usr/local/smarthome/lib/plugin.py", line 548, in __init__ > exec("import {0}".format(classpath)) > File "<string>", line 1, in <module> > File "/usr/local/smarthome/plugins/aaeigwp2/__init__.py", line 308 > cur = self._db.cursor() > ^ > IndentationError: unindent does not match any outer indentation level
Zuletzt geändert von schloessl; 19.02.2021, 11:27.
Einen Kommentar schreiben:
-
Hallo Martin,
Zuerst der Tipp mit beenden hat funktioniert ( "sudo systemctl stop smarthome.service" --> kopieren --> "sudo systemctl start smarthome.service")
Danke dafür
SQLite3 (RasPi Image von Onkelandy)
WebIF --> eine ewig laufende Sanduhr (bzw. Punkt der hin- und her springt --> Zeichen das der Browser lädt)
OffTopic:
Kennt jemand eine Möglichkeit die Datenbank zu exportieren und z.B. mit Excel/LibreCalc zu öffnen?
Einen Kommentar schreiben:
-
Zitat von Maexle Beitrag anzeigengibt es eine Möglichkeit die Datenbank von 1.5.9 zu übernehmen/importieren?
Zitat von Maexle Beitrag anzeigen(das WebIF wird nicht geladen)
Bei SQLite3: Vor dem kopieren unbedingt SmartHomeNG beenden. Anschließend den Inhalt des Verzeichnisses ../var/db aus der alten Installation in das Verzeichnis ../var/db der neuen Installation kopieren. Sicherstellen, dass die Item Definitionen der neuen Installation dazu passen (also der alten Installation entsprechen) und dann die neue Installation von SmartHomeNG starten.
Einen Kommentar schreiben:
-
Hallo zusammen,
bisher nutze ich SHNG mit 1.7.2.master --- database 1.5.9
auf dem Testsystem läuft SHNG 1.8.1.master --- database 1.5.15
gibt es eine Möglichkeit die Datenbank von 1.5.9 zu übernehmen/importieren? Ich habe versucht die Datei von einem System auf das andere zu kopieren --> der Kopiervorgang hat funktioniert, aber die Datenbank wird nicht erkannt (das WebIF wird nicht geladen).
Danke euch
Einen Kommentar schreiben:
-
* geht in SQL so nicht,
Code:UPDATE `item` SET `item` = 'duw.' + `item` where `item` LIKE 'wp.%'
- 1 Likes
Einen Kommentar schreiben:
-
Zitat von Onkelandy Beitrag anzeigenSuper danke! Hättest noch n Tipp, wie man die IDs automatisiert ändern kann?
Code:UPDATE `<TabellenName>` SET `<FeldName>` = <neuer Wert> WHERE <Bedingung>
Code:UPDATE `item` SET `item` = duw. + 'item' WHERE 'item' = wp.*
Code:SELECT * FROM `item` WHERE 'item' = wp.*
- 1 Likes
Einen Kommentar schreiben:
-
Super danke! Hättest noch n Tipp, wie man die IDs automatisiert ändern kann?
Also zB für alle Items die mit wp. starteten sollen jetzt die ID von den entsprechenden duw.wp. erhalten..?
Einen Kommentar schreiben:
-
Zitat von Onkelandy Beitrag anzeigenHättest mir den SQL Befehl noch parat?
Ja klar. Hier mal meine Befehle für mySQL DB Pflege:
Löschen von Einträgen mit der Dauer NULL:
Code:DELETE FROM `log` WHERE `duration` IS NULL
Code:SELECT * FROM `log` WHERE item_ID NOT IN(SELECT DISTINCT id FROM `item`)
Code:INSERT INTO log_aussortiert SELECT * FROM `log` WHERE item_ID NOT IN(SELECT DISTINCT id FROM `item`)
Code:DELETE FROM `log` WHERE item_ID NOT IN(SELECT DISTINCT id FROM `item`)
Code:SELECT DISTINCT item_id FROM log_aussortiert
Code:UPDATE `<TabellenName>` SET `<FeldName>` = <neuer Wert> WHERE <Bedingung>
Code:UPDATE 'log' SET 'item_id'= 100 WHERE 'item_ID' = 50;
Code:UPDATE 'log' SET 'val_num' = 'val_num' + 5 WHERE 'item_ID' = 50;
Vielleicht hilft es.
PS: Für neues Mapping kannst Du auch shNG stoppen und in der Tabelle item die id ändern.
- 1 Likes
Einen Kommentar schreiben:
-
Zitat von Onkelandy Beitrag anzeigenHast du mir vielleicht auch noch einen Tipp, wie ich Daten mergen kann?
Ich habe dann einfach in der Tabelle Log die ItemID geändert. Also wenn bspw. das Item wp.leistung die Item_ID 50 hatte und das Item heizung.wp.leistung die Item_ID 100, dann habe ich im der Tabelle log bei allen Einträgen mit Item_ID von 50 auf diese auf 100 geändert.
mysql Befehl kann ich heute abend mal raussuchen.
- 1 Likes
Einen Kommentar schreiben:
-
Perfekt, so werde ich das machen.
Hast du mir vielleicht auch noch einen Tipp, wie ich Daten mergen kann?
Wenn ich also die Hierarchie geändert habe, z.B. früher hieß ein Item wp.leistung und jetzt heißt es heizung.wp.leistung.
Gibt's da n schönen SQL Befehl dazu? Würde das natürlich für jedes Item einzeln machen.
Müsste das so in die Richtung klappen?
Code:MERGE log t USING log s ON (t.item_id = <neu> AND s.item_id = <alt>) INSERT (time, item_id, duration, val_str, val_num, val_bool, changed) VALUES (s.time, s.item_id, s.duration, s.val_str, s.val_num, s.val_bool, s.changed)
Zuletzt geändert von Onkelandy; 05.02.2021, 14:32.
Einen Kommentar schreiben:
-
Zitat von Onkelandy Beitrag anzeigenEs ist ein guter Start. Zuerst muss ich natürlich in der item Tabelle auch die Einträge raus löschen, die ich nicht mehr haben will
- 1 Likes
Einen Kommentar schreiben:
-
Cleanup ruft die Methode cleanup() im Plugin auf:- DB sperren
- alle Einträge löschen, für die im DB-Plugin derzeit kein Item hinterlegt ist
- DB freigeben
Einen Kommentar schreiben:
-
Ah okay.. im WebIF gibt es oben zwei Buttons und einer ist eben dazu da, die Datenbank aufzuräumen. Was da 100% genau gemacht wird, ist mir nicht klar, aber ich gehe mal davon aus, dass es so ist wie oben beschrieben.
Einen Kommentar schreiben:
Einen Kommentar schreiben: