Hi Serge
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:
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
"mysql." vor errorcode schreibst:
Nochmals vielen Dank für das Plugin :-)
Viele Grüße,
Alex
Zitat von Foxi352
Beitrag anzeigen
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
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")
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")
Viele Grüße,
Alex
Kommentar