Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Database Plugin

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

  • Msinn
    antwortet
    Das wird bewusst in kleineren Häppchen gemacht. Kleine Häppchen sind wichtig, wenn die max_age Attribute bzw. Parameter neu gesetzt wurden und viele zu löschende Daten vorhanden sind, damit die normale Nutzung der Datenbank nicht behindert wird. (Sonst könnte sich z.B. der Aufbau der Plots in de Visu velangsamen.

    Im Normalfall (wenn die mengen alter Daten gelöscht sind), kannst Du durch Ändern des Parameters removeold_cycle das Interval hochsetzen. Standardmäßig steht der auf 91 Sekunden. Den Wert kannst Du je nach Wunsch auf mehrere Stunden erhöhen.

    Einen Kommentar schreiben:


  • wvhn
    antwortet
    Moin,

    Ich habe alle 1-2 Minuten einen Logeintrag des database-Plugins „remove_older_than_maxage“. Wird das Löschen alter Daten zwingend bei jedem item-update gemacht, oder kann man das auch bündeln? Also zum Beispiel einmal am Tag eine Bereinigung?

    Den Logeintrag kann ich natürlich unterdrücken. Aber was ist hinsichtlich Belastung der Datenbank bzw. Systemlast günstiger?

    Gruß
    Wolfram

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Sisamiwe Bei Dir muss noch irgendwas anders sein als bei psilo und Onkelandy . Bei den beiden trat das nur nach dem Start auf, bei Dir (wie Du sagst) aber auch später zur Laufzeit

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Doch, vor einigen Versionen sind Maintenance Routinen hinzugekommen. Früher wuchs die Datenbank einfach ins unermessliche.

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von Msinn Beitrag anzeigen
    Die Ursache dürfte darin liegen, dass pymysql nur einen Cursor je connection unterstützt und das database Plugin aus mehreren Threads zur gleichen Zeit unterschiedliche Cursors nutzt.
    Aber geändert hat sich doch nicht, oder?
    Das mehrere Threads auf die DB zugreifen war doch schon immer so, oder?
    Warum tritt der Fehler jetzt auf?

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Die Ursache dürfte darin liegen, dass pymysql nur einen Cursor je connection unterstützt und das database Plugin aus mehreren Threads zur gleichen Zeit unterschiedliche Cursors nutzt.

    z.B.
    • normales lesen/schreiben von Daten und zeitgleich (per scheduler gestartet, also in einem anderen Thread) eine Routine, die Daten-Maintenance macht
    • normales lesen/schreiben von Daten und zeitgleich aus einem anderen Plugin (also auch aus einem anderen Thread) ein Abruf von Daten (über die db() Funktion des database Plugins)
    • normales lesen/schreiben von Daten und zeitgleich aus dem websocket Modul oder dem alten visu_websocket Plugin (also auch aus einem anderen Thread) ein Abruf von Daten für Plots in der Visu
    • ...
    Für einen Teil des ersten Falles hatte ich im Plugin in der letzten Änderung eine zweite Verbindung für Teile der Maintenance aufgemacht. Das war noch nicht als vollständige Lösung gedacht, sondern um festzustellen ob sich die Meldungshäufigkeit ändert (zumal die bisherigen Änderungen sich nur auf den Startzeitraum bezogen).

    Zuletzt geändert von Msinn; 13.01.2023, 15:53.

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von Msinn Beitrag anzeigen
    Ok, dann werde ich mal weiter im Nebel stochern...
    Ich konnte bislang keinen Auslöser feststellen. Aber, es scheint das der RPI nach einer gewissen Menge der Fehler auf Volllast läuft. Zumindest beginnt das Viessmann Plugin beim Lesen der seriellen Inputs Fehler zu erkennen. Das passiert immer dann, wenn der RPI längere Zeit auf Volllast läuft.

    Edit:
    Auf meinem TestRPI tritt der Fehler nicht auf. Dort ist die DB kleiner und wird weniger genutzt.

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Ok, dann werde ich mal weiter im Nebel stochern...

    Was bei Dir aber neu ist, sind die letzten WARNINGS.

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Msinn
    Ich habe gestern nochmal auf den aktuellen develop hochgezogen.

    Der Fehler tritt (zumindest bei mir) weiterhin und auch im Betrieb auf.

    Code:
    2023-01-13  10:07:00 ERROR    lib.db                                   Can not execute query: SELECT id, name, time, val_str, val_num, val_bool, changed from item WHERE name = %(id)s; (args OrderedDict([('id', 'wetter.darksky.hourly.hour3.windSpeed')])): Packet sequence number wrong - got 1 expected 2
    2023-01-13  10:07:00 ERROR    plugins.database                         Database: Error for query SELECT id, name, time, val_str, val_num, val_bool, changed from item WHERE name = wetter.darksky.hourly.hour3.windSpeed;: Packet sequence number wrong - got 1 expected 2
    2023-01-13  10:07:00 WARNING  plugins.database                         id(): No id found for item wetter.darksky.hourly.hour3.windSpeed - Exception Packet sequence number wrong - got 1 expected 2
    2023-01-13  10:07:00 ERROR    lib.db                                   Can not execute query: SELECT MAX(id) FROM item; (args OrderedDict()): (0, '')
    2023-01-13  10:07:00 ERROR    plugins.database                         Database: Error for query SELECT MAX(id) FROM item;: (0, '')
    2023-01-13  10:07:00 WARNING  plugins.database                         Problem dumping wetter.darksky.hourly.hour3.windSpeed: (0, '')
    2023-01-13  10:07:00 WARNING  plugins.database                         Error rolling back: (0, '')
    2023-01-13  10:07:00 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): (0, '')
    2023-01-13  10:07:00 WARNING  lib.db                                   Database [Database]: Connection error (0, '')
    2023-01-13  10:07:00 WARNING  lib.db                                   fetchone: No cursor defined for stmt SELECT 1 with params ()
    2023-01-13  10:08:24 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
    2023-01-13  10:09:56 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
    2023-01-13  10:11:27 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
    2023-01-13  10:12:59 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
    2023-01-13  10:14:31 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
    2023-01-13  10:16:03 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected​

    Einen Kommentar schreiben:


  • psilo
    antwortet
    Msinn bei mir kommt mglw dazu, dass ich die 8 GB DB gecleared hatte. Ich glaube das Volumen hat den Fehler wahrscheinlicher gemacht.

    Nachdem auch mit neuem Datenbestand der Fehler am Dez. 20 2022 11:15 wieder da war, ist er allerdings nicht mehr aufgetreten - Du hattest da noch was gefixt. Ich habe seitdem aber auch seltener neu gestartet.

    PS: Der Fehler kam bisher auch immer nur beim Neustart, nicht im Betrieb. Der Betrieb inkl erfassen und auslesen von Daten lief trotzdem immer augenscheinlich einwandfrei.

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von Msinn Beitrag anzeigen
    Du nutzt mysql?
    Korrekt.

    Zitat von Msinn Beitrag anzeigen
    Welche Version des database Plugins nutzt Du?
    Vorletzte develop-Version. (Ich bekomm Scipy nicht aktualisiert, so dass bei jedem Update das UZSU-Plugin "Pflege" darf.)
    Dann mach ich mal wieder ein Update

    Danke.

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Ja, den Fehler hatten psilo und Onkelandy auch. Der tritt bisher nur mit mysql auf, nicht mit sqlite3. Daraus schließe ich: Du nutzt mysql?

    Welche Version des database Plugins nutzt Du?

    Seit meinen letzten Änderungen ist der Fehler bei den beiden (soweit ich weiss) nicht mehr aufgetreten.
    Das Problem liegt in pymysql (oder mysql selbst) welches nur einen aktiven Cursor je connection unterstützt.

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Hallo,

    seit ein paar Tagen bekomme ich sporadisch folgenden Fehler:
    Code:
    2023-01-12  03:16:10 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2
    2023-01-12  03:16:10 WARNING  lib.db                                   Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2
    2023-01-12  03:16:10 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): (0, '')
    2023-01-12  03:16:10 WARNING  lib.db                                   Database [Database]: Connection error (0, '')
    2023-01-12  03:21:48 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2
    2023-01-12  03:21:48 WARNING  lib.db                                   Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2
    2023-01-12  03:21:48 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): (0, '')
    2023-01-12  03:21:48 WARNING  lib.db                                   Database [Database]: Connection error (0, '')​
    Manchmal gibt es Folgefehler:
    Code:
    2023-01-12  03:25:29 ERROR    lib.db                                   Can not execute query: DELETE FROM log WHERE item_id = %(id)s ORDER BY time ASC LIMIT %(maxrecords)s; (args OrderedDict([('id', 301), ('maxrecords', 20000)])): 'NoneType' object has no attribute 'read'
    2023-01-12  03:25:29 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 78 expected 2
    2023-01-12  03:25:29 ERROR    plugins.database                         Database: Error for query DELETE FROM log WHERE item_id = 301 ORDER BY time ASC LIMIT 20000;: 'NoneType' object has no attribute 'read'
    2023-01-12  03:25:29 WARNING  lib.db                                   Database [Database]: Connection error Packet sequence number wrong - got 78 expected 2
    2023-01-12  03:25:29 ERROR    plugins.database.Remove old              Method plugins.database.Remove old exception: 'NoneType' object has no attribute 'read'
    Traceback (most recent call last):
      File "/usr/local/smarthome/lib/scheduler.py", line 678, in _task
        obj()
      File "/usr/local/smarthome/plugins/database/__init__.py", line 1558, in remove_older_than_maxage
        self._execute(self._prepare("DELETE FROM {log} WHERE item_id = :id ORDER BY time ASC LIMIT :maxrecords;"), {'id': item_id, 'maxrecords': self.max_delete_logentries}, cur=cur)
      File "/usr/local/smarthome/plugins/database/__init__.py", line 1660, in _execute
        self._query(self._db.execute, query, params, cur)
      File "/usr/local/smarthome/plugins/database/__init__.py", line 1690, in _query
        raise e
      File "/usr/local/smarthome/plugins/database/__init__.py", line 1687, in _query
        tuples = func(self._prepare(query), params, cur=cur)
      File "/usr/local/smarthome/lib/db.py", line 332, in execute
        result = cur.execute(stmt, args)
      File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/cursors.py", line 148, in execute
        result = self._query(query)
      File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/cursors.py", line 310, in _query
        conn.query(q)
      File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/connections.py", line 548, in query
        self._affected_rows = self._read_query_result(unbuffered=unbuffered)
      File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/connections.py", line 775, in _read_query_result
        result.read()
      File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/connections.py", line 1156, in read
        first_packet = self.connection._read_packet()
      File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/connections.py", line 711, in _read_packet
        recv_data = self._read_bytes(bytes_to_read)
      File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/connections.py", line 732, in _read_bytes
        data = self._rfile.read(num_bytes)
    AttributeError: 'NoneType' object has no attribute 'read'
    2023-01-12  03:31:09 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2
    2023-01-12  03:31:09 WARNING  lib.db                                   Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2
    2023-01-12  03:31:09 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): (0, '')
    2023-01-12  03:31:09 WARNING  lib.db                                   Database [Database]: Connection error (0, '')
    2023-01-12  03:37:10 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2
    2023-01-12  03:37:10 WARNING  lib.db                                   Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2
    2023-01-12  03:37:10 WARNING  lib.db                                   fetchone: No cursor defined for stmt SELECT 1 with params ()
    2023-01-12  03:41:56 ERROR    lib.db                                   Can not execute query: SELECT id, name, time, val_str, val_num, val_bool, changed from item WHERE name = %(id)s; (args OrderedDict([('id', 'wetter.darksky.currently.cloudCover')])): Packet sequence number wrong - got 1 expected 2
    2023-01-12  03:41:56 ERROR    plugins.database                         Database: Error for query SELECT id, name, time, val_str, val_num, val_bool, changed from item WHERE name = wetter.darksky.currently.cloudCover;: Packet sequence number wrong - got 1 expected 2
    2023-01-12  03:41:56 WARNING  plugins.database                         id(): No id found for item wetter.darksky.currently.cloudCover - Exception Packet sequence number wrong - got 1 expected 2
    2023-01-12  03:41:56 ERROR    lib.db                                   Can not execute query: SELECT MAX(id) FROM item; (args OrderedDict()): (0, '')
    2023-01-12  03:41:56 ERROR    plugins.database                         Database: Error for query SELECT MAX(id) FROM item;: (0, '')
    2023-01-12  03:41:56 WARNING  plugins.database                         Problem dumping wetter.darksky.currently.cloudCover: (0, '')
    2023-01-12  03:41:56 WARNING  plugins.database                         Error rolling back: (0, '')
    2023-01-12  03:41:56 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): (0, '')
    2023-01-12  03:41:56 WARNING  lib.db                                   Database [Database]: Connection error (0, '')
    2023-01-12  03:41:56 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): (0, '')
    2023-01-12  03:41:56 WARNING  lib.db                                   Database [Database]: Connection error (0, '')
    2023-01-12  03:41:56 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
    2023-01-12  03:47:52 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2
    2023-01-12  03:47:52 WARNING  lib.db                                   Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2
    2023-01-12  03:47:52 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): (0, '')
    2023-01-12  03:47:52 WARNING  lib.db                                   Database [Database]: Connection error (0, '')
    2023-01-12  03:54:02 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2
    2023-01-12  03:54:02 WARNING  lib.db                                   Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2
    2023-01-12  03:54:02 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): (0, '')
    2023-01-12  03:54:02 WARNING  lib.db                                   Database [Database]: Connection error (0, '')
    2023-01-12  04:00:17 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2
    2023-01-12  04:00:17 WARNING  lib.db                                   Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2
    2023-01-12  04:00:17 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): (0, '')
    2023-01-12  04:00:17 WARNING  lib.db                                   Database [Database]: Connection error (0, '')
    2023-01-12  04:00:17 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
    2023-01-12  04:06:16 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2
    2023-01-12  04:06:16 WARNING  lib.db                                   Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2
    2023-01-12  04:06:16 WARNING  lib.db                                   fetchone: No cursor defined for stmt SELECT 1 with params ()
    2023-01-12  04:11:06 ERROR    lib.db                                   Can not execute query: SELECT id, name, time, val_str, val_num, val_bool, changed from item WHERE name = %(id)s; (args OrderedDict([('id', 'wetter.darksky.hourly.hour6.windGust')])): Packet sequence number wrong - got 1 expected 2
    2023-01-12  04:11:06 ERROR    plugins.database                         Database: Error for query SELECT id, name, time, val_str, val_num, val_bool, changed from item WHERE name = wetter.darksky.hourly.hour6.windGust;: Packet sequence number wrong - got 1 expected 2
    2023-01-12  04:11:06 WARNING  plugins.database                         id(): No id found for item wetter.darksky.hourly.hour6.windGust - Exception Packet sequence number wrong - got 1 expected 2​

    Sagt Euch das was?
    Vielen Dank und beste Grüße

    Einen Kommentar schreiben:


  • TCr82
    antwortet
    Wegen dem Kopieren der Werte für ein Item... denke das einfachste wäre das über MySQL SuperPower zu tun:
    https://www.w3schools.com/sql/sql_in...nto_select.asp

    Also in etwa so:

    INSERT INTO log​ (time, item_id, duration, val_str, val_num​, val_bool, changed)
    SELECT time,
    23 as item_id, duration,val_str, val_num, val_bool, changed FROM log WHERE item_id=1;

    Ist natürlich ungetestet (backup vorher erstellen). Du musst die Item IDs aus der DB besorgen (Tabelle item).
    23 wäre die neue ItemID, 1 das von dem kopiert wird.


    Zuletzt geändert von TCr82; 21.12.2022, 21:38.

    Einen Kommentar schreiben:


  • fuxl66
    antwortet
    Hi,

    Ich habe noch eine Frage.
    Kann man ein Item aus der DB inkl. aller Werte mit einem neuen Namen duplizieren?

    Hintergrund:
    aktuell habe ich ein "TotalErtrag" item meiner PV das vom Wechselrichter gefüttert wird. Nun bekomme ich eine zweite Anlage. "TotalErtrag" sollte dann aus der Summe zweier Anlagen errechnet werden. Das kopierte item wird dann weiter mit der bestehenden Anlage versorgt. Ich mag einfach meine erstellten Diagramme/Tabellen weiterführen.

    Einen Kommentar schreiben:

Lädt...
X