Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Database Plugin

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

  • Msinn
    antwortet
    Ok, das sieht soweit gut aus. Ich fragte wegen eines häufigen Fehlers, in den connect Einträgen hinter dem Doppelpunkt ein Leerzeichen zu lassen. Das führt nämlich zu den seltsamsten Fehlern.

    Ansonsten müsste nun jemand der MySQL nutzt etwas dazu sagen. Ich selbst habe SmartHomeNG nie mit einer anderen Datenbank als Sqlite3 betrieben.

    Einen Kommentar schreiben:


  • lexxmm
    antwortet
    Zitat von Msinn Beitrag anzeigen
    Wie hast Du denn das Plugin in der plugin.yaml genau konfiguriert? Das hast Du bisher leider nicht verraten.
    wie in der Doku

    Code:
    database_mysql:
        plugin_name: database
        instance: mysqldb
        precision: 4
        driver: pymysql
        connect:
        -   host:127.0.0.1
        -   user:user
        -   passwd:pass
        -   db:smarthome_db
    
    ​
    passwd bestand vorher aus Zahlen und das führt zu dem Fehler. egal ob mit ' oder ohne '

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Wie hast Du denn das Plugin in der plugin.yaml genau konfiguriert? Das hast Du bisher leider nicht verraten.

    Einen Kommentar schreiben:


  • lexxmm
    antwortet
    Fehler gefunden!!! Entweder ist es ein Bug oder falls nicht, sollte es unbedingt mit in die Doku! Als DB Passwort dürfen KEINE reinen Zahlen verwendet werden!!! Wenn das Passwort mit einem Buchstaben beginnt, klappt es. Reine Zahlen führen zu:
    Code:
    Database: Initialization failed: object supporting the buffer API required
    Gruss,Micha

    PS: Hat mich >12Stunden und echt Nerven gekostet

    Einen Kommentar schreiben:


  • lexxmm
    antwortet
    Fehlermeldung gefunden:

    Code:
    023-09-01  08:58:30 ERROR    cherrypy.error.140388930309904 [01/Sep/2023:08:58:30] HTTP
    Traceback (most recent call last):
      File "/home/smarthome/.local/lib/python3.10/site-packages/cherrypy/_cprequest.py", line 638, in respond
        self._do_respond(path_info)
      File "/home/smarthome/.local/lib/python3.10/site-packages/cherrypy/_cprequest.py", line 697, in _do_respond
        response.body = self.handler()
      File "/home/smarthome/.local/lib/python3.10/site-packages/cherrypy/lib/encoding.py", line 223, in __call__
        self.body = self.oldhandler(*args, **kwargs)
      File "/home/smarthome/.local/lib/python3.10/site-packages/cherrypy/_cpdispatch.py", line 54, in __call__
        return self.callable(*self.args, **self.kwargs)
      File "/usr/local/smarthome/plugins/database/webif/__init__.py", line 127, in index
        return tmpl.render(p=self.plugin,
      File "/home/smarthome/.local/lib/python3.10/site-packages/jinja2/environment.py", line 1301, in render
        self.environment.handle_exception()
      File "/home/smarthome/.local/lib/python3.10/site-packages/jinja2/environment.py", line 936, in handle_exception
        raise rewrite_traceback_stack(source=source)
      File "/usr/local/smarthome/plugins/database/webif/templates/index.html", line 159, in top-level template code
        {% set tab3title = _('Verwaiste Items') %}
      File "/usr/local/smarthome/plugins/database/webif/templates/base_database.html", line 174, in top-level template code
        {% set tab2title = _('Plugin-API') %}
      File "/usr/local/smarthome/modules/http/webif/gtemplates/base_plugin.html", line 271, in top-level template code
        {% if scroll_heading is not defined %}
      File "/usr/local/smarthome/modules/http/webif/gtemplates/base.html", line 1, in top-level template code
        {% block doc -%}
      File "/usr/local/smarthome/modules/http/webif/gtemplates/base.html", line 4, in block 'doc'
        {%- block html %}
      File "/usr/local/smarthome/modules/http/webif/gtemplates/base.html", line 96, in block 'html'
        {% block body -%}
      File "/usr/local/smarthome/modules/http/webif/gtemplates/base.html", line 99, in block 'body'
        {% block content -%}
      File "/usr/local/smarthome/modules/http/webif/gtemplates/base_plugin.html", line 124, in block 'content'
        {% block headtable %}
      File "/usr/local/smarthome/plugins/database/webif/templates/base_database.html", line 160, in block 'headtable'
        <td class="py-1"><strong>{{ key }}</strong></td><td class="py-1" onclick="document.getElementById('pwd').innerHTML = '{{ value }}'"><span id="pwd" title="Click to show password">{% for letter in value %}*{% endfor %}</span></td>
    TypeError: 'int' object is not iterable
    
    ​
    Zuletzt geändert von lexxmm; 01.09.2023, 08:20.

    Einen Kommentar schreiben:


  • lexxmm
    antwortet
    Ich bin einen Schritt weiter. Bei der direkten Angabe innerhalb der db.py (Zeile 208) funktioniert die DB Anbindung:

    self._conn = self._dbapi.connect(host='localhost', user='user', password='password', db='smarthome_db')

    Jedoch kommt auf der webinterface Seite (/plugin/database_mysqldb/) einfach nur ein Error 500 The server encountered an unexpected condition which prevented it from fulfilling the request. Innerhalb der logs finde ich nichts. Wie komme ich an die Fehlermeldung?






    Einen Kommentar schreiben:


  • lexxmm
    antwortet
    Ändert leider nix. Ich habe 3.11, 3.10 und 3.9 getestet. Immer das gleiche. Auch alle DEBUG Meldungen bringen mich nicht weiter. Die Exception kommt in Zeile 208 in der db.py

    Im log gibt es nur noch:

    Code:
    Traceback (most recent call last):
      File "/usr/local/smarthome/lib/plugin.py", line 703, in run
        self.plugin.run()
      File "/usr/local/smarthome/plugins/database/__init__.py", line 180, in run
        self.build_orphanlist(True)
      File "/usr/local/smarthome/plugins/database/__init__.py", line 920, in build_orphanlist
        cur.close()
    AttributeError: 'NoneType' object has no attribute 'close'
    
    ​
    nicht hilfreich

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Welche Python Bersion nutzt Du? Mit Bookworm kommt standardmäßig Python 3.11. Das wird von SmarHomeNG noch nicht unterstützt. Mit Python 3.11 gab es auch schon andere Probleme, die mit einem Wechsel auf eine unterstützte Python Version weg waren.

    Einen Kommentar schreiben:


  • lexxmm
    antwortet
    Hallo

    ich bin am Update meines smarthome server (auf debian bookworm) und bekomme die Anbindung an mysql nicht zum laufen. Weder mit mysql noch mit mariadb. Fehler: Database [Database]: Could not connect to the database using 'pymysql': object supporting the buffer API required

    ​Gab es hier im Thread auch schon...jedoch ohne Lösung. Ich weiß das es nicht an pymysql liegt (test standalone funktioniert). Jemand eine Idee?

    Gruss, Micha

    Einen Kommentar schreiben:


  • Maexle
    antwortet
    Danke Martin,



    so bin ich vorgegangen, bestimmt nicht elegant, aber es hat funktioniert:

    Code:
    /usr/local/smarthome/var/db
    ls
    -rw-rw-r-- 1 pi pi 560M 25. Jun 04:50 smarthomeng.db
    
    
     sudo systemctl stop smarthome.service
    
    sudo chmod 760 smarthomeng.db
    
     sudo chown smarthome smarthomeng.db
    
    ls
    
    -rwxrw---- 1 smarthome pi 560M 25. Jun 04:50 smarthomeng.db*​

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Zitat von Maexle Beitrag anzeigen
    Ich denke Ihr wisst bestimmt wie das behoben werden kann, liegt es an den "Rechten der Datei"?
    Das klingt erstmal so.

    Die Datenbank Datei liegt im Verzeichnis ../var/db uns sollte dem User smarthome gehören (mit sudo chown setzen) und mindestens die Rechte für den User haben (mit chmod setzen)

    Außerdem ist wichtig, dass die Datenbank konsistent ist. Dazu MUSS SmartHomeNG beendet werden, bevor Du die Datenbankdatei kopierst.

    Einen Kommentar schreiben:


  • Maexle
    antwortet
    Nach der gestrigen Neuinstallation sieht es soweit ganz gut aus - nur die Datenbank will noch nicht.

    2023-07-11 12:19:41 ERROR lib.db Can not execute query: INSERT INTO log(item_id, time, val_str, val_num, val_bool, duration, changed) VALUES (?,?,?,?,?,?,?); (args [98, 1689070706814, None, -14195.7, 1, 30460, 1689070781185]): attempt to write a readonly database
    2023-07-11 12:19:41 ERROR plugins.database Database: Error for query INSERT INTO log(item_id, time, val_str, val_num, val_bool, duration, changed) VALUES (98,1689070706814,None,-14195.7,1,30460,1689070781185);: attempt to write a readonly database
    2023-07-11 12:19:41 WARNING plugins.database Problem dumping ITEMXYZ: attempt to write a readonly database​

    WARNING plugins.database Problem dumping ITEMXYZ: attempt to write a readonly database​

    Ich denke Ihr wisst bestimmt wie das behoben werden kann, liegt es an den "Rechten der Datei"? --> "chmod rw" oder so ähnlich?

    Danke

    Einen Kommentar schreiben:


  • Maexle
    antwortet
    Danke Martin

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Zitat von Maexle Beitrag anzeigen
    Hat dies Auswirkungen auf die "Unteritems"
    Nein

    Einen Kommentar schreiben:


  • Maexle
    antwortet
    Hallo zusammen,

    mit diesem (Ausschnitt) Item lese ich den Stromzählerstand aus. Mittlerweile ist das schon eine recht ordentliche Menge an Datensätzen.
    Mein Gedanke war den Bereich "zaehler" mit einem "database_maxage: 360 # Alter der Daten maximal 1 Jahr zu versehen. Hat dies Auswirkungen auf die "Unteritems" "stunde" und "erster" nach meinem Verständnis nicht, da diese eigenständig in die DB geschrieben werden.
    Aber bevor ich da Mist baue dachte ich mir frag lieber mal nach.

    Danke

    Code:
                zaehler:
                    name: Stromzählerstand in kWh
                    type: num
                    database: init
    
    #### hier würde ich das maxage einfügen ####
    
                    eval: round(sh.verbrauch_strom.zaehlertotal() / 1000, 2)
                    eval_trigger: verbrauch_strom.zaehlertotal
                    
                                  
                     
                stunde: # zu festgelegten Zeiten wird der aktuelle Zaehlerstand in der DB abgelegt
                    type: num
                    database: init
                    eval: round(sh.verbrauch_strom.zaehlertotal() / 1000, 2)
                    crontab: '0 */6 * * = 1' # alle 6 Stunden
                    
                erster:
                    type: num
                    database: init
                    eval: round(sh.verbrauch_strom.zaehlertotal() / 1000, 2)
                    crontab: '0 0 1 * = 1' # Monatserster um 00:00 Uhr

    Einen Kommentar schreiben:

Lädt...
X