Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Database Plugin

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

  • Sisamiwe
    antwortet
    Zitat von gklein Beitrag anzeigen
    Kann mir bitte jemand auf die Sprünge helfen?
    Ja klar.

    Die Doku ist hier

    Du muss nur das attribute database_maxage bei den Items ergänzen. Hier ein Beispiel:
    Code:
    schwellwert_ueberschritten:
                    type: bool
                    visu_acl: rw
                    knx_dpt: 1
                    knx_cache: 2/3/10
                    database: yes
                    database_maxage: 200
    Aber Vorsicht: Wenn Du das attribut setzt, beginnt shNG bzw das Plugin die Reinigungsaktion. Das lastet die DB ziemlich aus und blockiert ein Schreiben in die DB. Die Werte werden bei shNG zwischengespeichert und dann geschrieben, wenn die DB wieder "verfügbar" ist.

    Nutzt du mysql bzw mariadb?

    Einen Kommentar schreiben:


  • gklein
    antwortet
    Hallo zusammen,

    nachdem mein Log-Table mittlerweile 2 GB erreicht hat, habe ich mich doch mal intesiver mit dem Inhalt beschäftigt und festgestellt, das viele Items kein Maxage gesetzt haben - Anzeige im WebIF. Im Feld duration gibt es einen Eintrag. Ich würde jetzt gern an Maxage setzen, damit der Cleanup-Job das regelmäßg beräumen kann.
    In der Doku habe ich bisher nichts gefunden (order nich nach dem richtigen gesucht?)
    Kann mir bitte jemand auf die Sprünge helfen?

    Danke und Grüße
    Gunnar

    Einen Kommentar schreiben:


  • greentux
    antwortet
    Ich verkriech mich gleich. Mea culpa.
    Es liefen zwei Instanzen...

    huhuuuuu...

    Einen Kommentar schreiben:


  • greentux
    antwortet
    Ich habe auf 1.8.2 geupdatet und finde jetzt sowas im Log:

    Code:
    2021-03-23 19:03:52 ERROR plugins.database.Remove old Method plugins.database.Remove old exception: local variable 'item_id' referenced before assignment
    Traceback (most recent call last):
    File "/usr/local/smarthome/plugins/database/__init__.py", line 1149, in remove_older_than_maxage
    item_id = self.id(item, create=False)
    File "/usr/local/smarthome/plugins/database/__init__.py", line 316, in id
    if id is None and create == True:
    UnboundLocalError: local variable 'id' referenced before assignment
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
    File "/usr/local/smarthome/lib/scheduler.py", line 664, in _task
    obj()
    File "/usr/local/smarthome/plugins/database/__init__.py", line 1151, in remove_older_than_maxage
    if item_id is None:
    UnboundLocalError: local variable 'item_id' referenced before assignment
    Kann ich noch etwas liefern, was hilft?

    Etwas später findet sich noch:

    Code:
    2021-03-23 19:05:23 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 [3, None, 1, None, 1, 1613844318276, 0, None, 1, None, 1, None, 1]): database is locked
    2021-03-23 19:05:23 ERROR plugins.database Database: Error for query DELETE FROM log WHERE (item_id = 3 ) AND (time = None OR 1 = 1 ) AND (time > None OR 1 = 1 ) AND (time < 1613844318276 OR 1 = 0 ) AND (changed = None OR 1 = 1 ) AND (changed > None OR 1 = 1) AND (changed < None OR 1 = 1 ); : database is locked
    2021-03-23 19:05:23 ERROR plugins.database.Remove old Method plugins.database.Remove old exception: database is locked
    Traceback (most recent call last):
    File "/usr/local/smarthome/lib/scheduler.py", line 664, in _task
    obj()
    File "/usr/local/smarthome/plugins/database/__init__.py", line 1161, in remove_older_than_maxage
    self.deleteLog(item_id, time_end=timestamp_end, with_commit=False)
    File "/usr/local/smarthome/plugins/database/__init__.py", line 624, in deleteLog
    self._execute(self._prepare("DELETE FROM {log} WHERE " + condition), params, cur=cur)
    File "/usr/local/smarthome/plugins/database/__init__.py", line 1227, in _execute
    self._query(self._db.execute, query, params, cur)
    File "/usr/local/smarthome/plugins/database/__init__.py", line 1257, in _query
    raise e
    File "/usr/local/smarthome/plugins/database/__init__.py", line 1254, in _query
    tuples = func(self._prepare(query), params, cur=cur)
    File "/usr/local/smarthome/lib/db.py", line 324, in execute
    result = c.execute(stmt, args)
    sqlite3.OperationalError: database is locked
    Danke und Gruß

    Einen Kommentar schreiben:


  • 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 [COLOR=#e74c3c]has no attribute 'partition'[/COLOR]
    > 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:

Lädt...
X