Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Database Plugin

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

  • Onkelandy
    antwortet
    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.

    Einen Kommentar schreiben:


  • schloessl
    antwortet
    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
    Diese Datenbank läuft problemlos

    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:


  • Maexle
    antwortet
    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:


  • Msinn
    antwortet
    Zitat von Maexle Beitrag anzeigen
    gibt es eine Möglichkeit die Datenbank von 1.5.9 zu übernehmen/importieren?
    Welche Datenbank benutzt Du (SQLite3 oder MySQL)?

    Zitat von Maexle Beitrag anzeigen
    (das WebIF wird nicht geladen)
    Was meinst Du damit? Wie äussert sich das?


    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:


  • Maexle
    antwortet
    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:


  • Morg
    antwortet
    * geht in SQL so nicht,

    Code:
    UPDATE `item` SET `item` = 'duw.' + `item` where `item` LIKE 'wp.%'
    Wobei ich jetzt nicht weiß, ob Tabelle und Spalte beide `item` heißen...

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von Onkelandy Beitrag anzeigen
    Super danke! Hättest noch n Tipp, wie man die IDs automatisiert ändern kann?
    Ein "perfekten" Befehl kann ich dir nicht sagen. Es müsste aber mit
    Code:
    UPDATE `<TabellenName>` SET `<FeldName>` = <neuer Wert> WHERE <Bedingung>
    Sowas wie
    Code:
    UPDATE `item` SET `item` = duw. + 'item' WHERE 'item' = wp.*
    Du kannst das WHERE Kriterium in der Konsole von phpmyadmin mit durch SELECT probieren.

    Code:
    SELECT * FROM `item` WHERE 'item' = wp.*

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    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:


  • Sisamiwe
    antwortet
    Zitat von Onkelandy Beitrag anzeigen
    Hä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
    Selektieren der Datensätze in der Tabelle 'log', wenn es keine passende ID in der Tabelle 'item' gibt:
    Code:
    SELECT * FROM `log` WHERE item_ID NOT IN(SELECT DISTINCT id FROM `item`)
    Kopieren der Datensätz von der Tabelle 'log', wenn es keine passende ID in der Tabelle 'item' gibt, in die Tabelle log_aussortiert:
    Code:
    INSERT INTO log_aussortiert SELECT * FROM `log` WHERE item_ID NOT IN(SELECT DISTINCT id FROM `item`)
    Löschen der Datensätze in der Tabelle 'log', wenn es keine passende ID in der Tabelle 'item' gibt:
    Code:
    DELETE FROM `log` WHERE item_ID NOT IN(SELECT DISTINCT id FROM `item`)
    Daten einer Spalte anzeigen ohne Dubletten:
    Code:
    SELECT DISTINCT item_id FROM log_aussortiert
    Werte in Spalte einer Tabelle ändern:
    Code:
    UPDATE `<TabellenName>` SET `<FeldName>` = <neuer Wert> WHERE <Bedingung>
    Beispiel dazu "Ändern der item_id aller Einträge mit item_id = 50 auf 100":
    Code:
    UPDATE 'log' SET 'item_id'= 100 WHERE 'item_ID' = 50;
    Beispiel dazu "Offset von 5 auf alle Werte in val_num bei item_id = 50":
    Code:
    UPDATE 'log' SET 'val_num' = 'val_num' + 5 WHERE 'item_ID' = 50;
    Damit bin ich weit gekommen.

    Vielleicht hilft es.

    PS: Für neues Mapping kannst Du auch shNG stoppen und in der Tabelle item die id ändern.

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Sisamiwe Hättest mir den SQL Befehl noch parat?

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von Onkelandy Beitrag anzeigen
    Hast du mir vielleicht auch noch einen Tipp, wie ich Daten mergen kann?
    Du meinst mergen in der Tabelle log?
    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.

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    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)
    Deutlich praktischer wäre natürlich eine entsprechende Automatisierung mit SELECT %Like% oder so, da es doch eine Menge Items mit dem selben Muster betrifft..
    Zuletzt geändert von Onkelandy; 05.02.2021, 14:32.

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von Onkelandy Beitrag anzeigen
    Es 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
    Ich habe das so gemacht, dass ich mir einfach anschaue, wann ein Item das letzte mal in der Tabelle "item" aktualisiert wurde. Damit sollte man den Großteil finden.

    Einen Kommentar schreiben:


  • Morg
    antwortet
    Cleanup ruft die Methode cleanup() im Plugin auf:
    1. DB sperren
    2. alle Einträge löschen, für die im DB-Plugin derzeit kein Item hinterlegt ist
    3. DB freigeben
    Also so ähnlich wie die Lösung von sisamiwe, aber auf Grundlage der derzeitigen Plugin-Konfiguration, nicht der DB-Inhalte.

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    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:

Lädt...
X