Ankündigung

Einklappen
Keine Ankündigung bisher.

Unterstützung von MySQLdb

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

    #16
    Hi Serge

    Zitat von Foxi352 Beitrag anzeigen
    Hallo,

    Aus verschiedenen Gründen hätte ich gerne meine Daten vom Raspberry auf einem externen MySQL Server und nicht in sqlite auf der SD.
    ...
    Frage ist: Besteht Interesse das Plugin reifen zu lassen und als offizielles Plugin weiterzuführen ?
    Ja, an einen MySQL-Plugin hätte ich durchaus großes Interesse.

    Daher habe ich Dein MySQL-Plugin einmal in mein - zugegebenermassen etwas verbasteltes, auf 1.0 basierendes SmartHome.py - eingebaut. Seit heute früh läuft das Plugin nun und schreibt fleissig Daten in die DB :-)

    Dafür schon einmal vielen Dank.

    Erlaube mir folgende Anmerkungen:

    (*) Das Plugin ist - so, wie ich das sehe - nur für die Entwicklungsversion von sh.py lauffähig. In sh.py 1.0 fehlt in der Item-Klasse einige Eigenschaften/Funktionen (type() und prev_change bei set()), auf die das Plugin zugreift. Das nur als Hinweis.

    (*) Mein erster Stolperstein bei der Installation auf meinem Entwicklungsrechner (das ist nicht der Rechner, auf dem MySQL läuft) war, dass ich durch die im HowTo dokumentierte "GRANT ALL PRIVILEGES ON smarthome.* TO 'smarthome'@'localhost' IDENTIFIED BY 'smarthome';" lediglich per localhost auf die DB zugreifen darf, nicht jedoch von einem anderen Rechner aus. Das ist eigentlich logisch, aber vielleicht möchtest Du das im HowTo erwähnen.

    Dann ist es so, dass wenn kein Zugriff auf die Datenbank erfolgen kann, sei es wegen fehlender Zugriffsrechte oder wegen falschen Zugangsdaten, das Plugin zwar eine Meldung ausgibt, jedoch nach meiner Einschätzung der _fdb_lock nicht freigegeben wird.

    Meiner Meinung nach müsste da noch ein _fdb_lock.release() eingefügt werden:
    Code:
            self._fdb_lock.acquire()
            self._dumpfile = dumpfile
            try:
                self._con = mysql.connect(user=self._dbuser, password=self._dbpass, host=self._dbhost, database=self._dbname)
            except mysql.Error as err:
                if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
                    logger.error("MySQL: Problem with username or password")
                elif err.errno == errorcode.ER_BAD_DB_ERROR:
                    logger.error("MySQL: Database not found")
                else:
                    logger.error("MySQL: Could not connect to the database: {}".format(err))
                self._fdb_lock.release() # !!!! HIER DEN LOCK FREIGEBEN
                return
            self.connected = True
    Tatsächlich habe ich bei nicht für Netzwerk-Zugriff freigegebener Datenbank oder bei falschen Benutzer-Daten die verschiedensten, nicht direkt in Zusammenhang mit dem MySQL-Plugin stehenden Fehlermeldungen von sh.py bekommen - auch die von JayKay oben zitierte.

    Auf die Import-Anweisung "from mysql.connector import errorcode" kannst Du m.E. verzichten, wenn Du bei folgenden Zeilen
    Code:
                if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
                    logger.error("MySQL: Problem with username or password")
                elif err.errno == errorcode.ER_BAD_DB_ERROR:
                    logger.error("MySQL: Database not found")
    "mysql." vor errorcode schreibst:
    Code:
                if err.errno == mysql.errorcode.ER_ACCESS_DENIED_ERROR:
                    logger.error("MySQL: Problem with username or password")
                elif err.errno == mysql.errorcode.ER_BAD_DB_ERROR:
                    logger.error("MySQL: Database not found")
    Nochmals vielen Dank für das Plugin :-)

    Viele Grüße,
    Alex

    Kommentar


      #17
      sh.py läuft bei Auf einem std. Debian 7. Wenn ich am Wochenende dazu komme, versuche ich das mal auf einem anderen Testsystem ob es reproduzierbar ist.
      Vielleicht beißt es sich mit einem anderen Plugin oder item.

      Danke & Gruss

      JayKay

      Kommentar


        #18
        Zitat von Alex Beitrag anzeigen
        (*) Das Plugin ist - so, wie ich das sehe - nur für die Entwicklungsversion von sh.py lauffähig. In sh.py 1.0 fehlt in der Item-Klasse einige Eigenschaften/Funktionen (type() und prev_change bei set()), auf die das Plugin zugreift. Das nur als Hinweis.
        Ok, das erklärt das Problem von JayKay. Da ich mit der develop Version arbeite, und mknx's sqlite plugin einfach umgeschrieben habe basiert es natürlich auch auf dessen dev Version. und da sind ja kürzlich ein paar Änderungen vorgenommen worden. Das heisst für alle dass das MySQL Plugin hiermit offiziell nur mit der develop Version von sh.py läufft :-)

        Zitat von Alex Beitrag anzeigen
        (*) Mein erster Stolperstein bei der Installation auf meinem Entwicklungsrechner (das ist nicht der Rechner, auf dem MySQL läuft) war, dass ich durch die im HowTo dokumentierte "GRANT ALL PRIVILEGES ON smarthome.* TO 'smarthome'@'localhost' IDENTIFIED BY 'smarthome';" lediglich per localhost auf die DB zugreifen darf, nicht jedoch von einem anderen Rechner aus.
        Stimmt natürlich, so weit hatte ich nicht gedacht.Die richtige Syntax wenn MySQL auf einem anderen Rechner läufft wäre dann
        Code:
        GRANT ALL PRIVILEGES ON smarthome.* TO 'smarthome'@'%' IDENTIFIED BY 'smarthome';
        Zitat von Alex Beitrag anzeigen
        Meiner Meinung nach müsste da noch ein _fdb_lock.release() eingefügt werden:
        Auch da hast du Recht, danke für den Hinweis. ich werde das umändern.

        Zitat von Alex Beitrag anzeigen
        Auf die Import-Anweisung "from mysql.connector import errorcode" kannst Du m.E. verzichten, wenn Du bei folgenden Zeilen
        Code:
                    if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
                        logger.error("MySQL: Problem with username or password")
                    elif err.errno == errorcode.ER_BAD_DB_ERROR:
                        logger.error("MySQL: Database not found")
        "mysql." vor errorcode schreibst:
        Ich verstehe nicht warum ich das Problem nicht habe, aber wenn es hilft und bei mir keine Probleme macht werden ich das so umändern.
        Zitat von Alex Beitrag anzeigen
        Nochmals vielen Dank für das Plugin :-)
        Gerne. Ich danke auch allen hier für sh.py und SmartVISU. Ein fantastiches Duo :-)

        Kommentar


          #19
          Neue Version im Github. Von Alex gemeldete Fehler gefixed.

          Kommentar


            #20
            Hallo Serge,

            danke erst einmal für Deinen Einsatz.

            Aus den folgenden Gründen sehe ich hier momentan ein separates Plugin.

            Das SQLite-Plugin ist für mich ein sehr zentrales/wichtiges Plugin das einfach ohne Abhängigkeiten funktioniert. Ich habe bereits darüber nachgedacht das als Plugin zu entfernen und direkt fest einzubauen.
            Weiterhin hat das Plugin noch nicht alle Features, die ich gerne hätte.

            Wenn wir das jetzt in ein DB-Plugin mergen, dann müsste ich mich auch um den MySQL kümmern und bei Erweiterungen/Änderungen den MySQL spezifischen Teil ergänzen und testen.

            Ich möchte aber nicht ausschließen das ich meine Meinung ändere, aber momentan habe ich andere Baustellen.

            Bis bald

            Marcus

            Kommentar


              #21
              Richtiger Support für mehrere Datenbanken bedeutet in der Regel das man ein ORM wie z.B. SQLAlchemy einführt. Mit RAW SQL Queries zu arbeiten ist hässlich und sorgt für mehr Wartungsaufwand bei jeder neuen Datenbank die man unterstützen möchte.

              Der Dialekt von Postgres ist übrigens größtenteils mit dem Standard konform, was man vom MySQL (oft) nicht sagen kann

              Für die Anwendung der Smarthome ist IMHO die SQLite DB vollkommen ausreichend, da wurden schon wesentlich größere Dinge mit gemacht.

              Kommentar


                #22
                Zitat von betzs Beitrag anzeigen
                Für die Anwendung der Smarthome ist IMHO die SQLite DB vollkommen ausreichend, da wurden schon wesentlich größere Dinge mit gemacht.
                Da hast du natürlich Recht dass SQLite ausreichend ist. Das ist aber nicht der Punkt. Es gibt Leute die haben Gründe die Daten auf einem Zentralen DB Server abzuspeichern. Sei es auch nur weil sie nicht wollen dass es z.B. beim rPI in einer Datei auf der SD Karte landet. Alleine schon des Backup wegens...

                Was auch immer die Beweggründe sind: Es ist nicht SO kompliziert das in sh.py unterzubringen. Marcus hat mich gestern auf einen interessanten Pull Request aufmerksam gemacht der da schon einen ausreichenden Lösungsweg aufzeigt. 95% der User können ja auch gerne bei SQLite bleiben wenn es denen ausreichend ist ...

                Kommentar


                  #23
                  Zitat von betzs Beitrag anzeigen
                  Richtiger Support für mehrere Datenbanken bedeutet in der Regel das man ein ORM wie z.B. SQLAlchemy einführt. Mit RAW SQL Queries zu arbeiten ist hässlich und sorgt für mehr Wartungsaufwand bei jeder neuen Datenbank die man unterstützen möchte.
                  Korrekt, aber einen Mapper zu verwenden kostet zusätzlich Performance, die man auf einem Pi nicht im Überschuss hat. Marcus hat am sqlite Plugin ja schon ordentlich geschraubt diesbezüglich.
                  Mit freundlichen Grüßen
                  Niko Will

                  Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
                  - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

                  Kommentar


                    #24
                    Hi,

                    wird das mysql plugin noch gepflegt und läuft gut?
                    ich bekomme demnächst mein minnowboard und da wollte ich auf mysql umsteigen da ich für meine ganzen scripte sowieso mysql verwende.

                    grüße

                    Kommentar

                    Lädt...
                    X