Zitat von Onkelandy
Beitrag anzeigen
Ankündigung
Einklappen
Keine Ankündigung bisher.
Python 3.8 bzw. 3.9.: SmartHomeNG startet nicht
Einklappen
X
-
So Problem ist gelöst. Ich habe mir mal die requirements des pymodbus angeschaut und auch noch mal in den Quellcode reingeschaut. Die Installation von pymodbus muss entweder so erfolgen:
oder pyserial und pyserial-async müssen manuell nachinstalliert werden.Code:pip install pymodbus[serial]
Danach muss doch das pluggitplugin angepasst werden. In der ini muss bei:
das ".sync" entfernt werden. Inwiefern das dann noch mit einer alten Version von pymodbus läuft, weiß ich allerdings nicht.Code:from pymodbus.client.sync import ModbusTcpClient
Kommentar
-
Dann müssten also pymodbus, pyserial und pyserial-async ins requirements.txt File rein?
Was passiert denn beim import von pymodbus.client.sync - gibt es da einen Fehler? Dann könnte man das ja in einem try except abfangen und die Kompatibilität zu älteren Versionen wäre immer noch gewährleistet oder?
Ich hab das zB im xiamo_vac Plugin so gelöst:
Code: try: self.vakuum = Vacuum(self._ip, self._token, 0, 0) except Exception: self.vakuum = RoborockVacuum(self._ip, self._token, 0, 0)
Kommentar
-
Ich bin mir nicht sicher. Zum einen brauche ich eigentlich im pluggit die serial-Sachen nicht. Ich muss noch mal schauen, dass ich morgen mal den import ändere, dann klärt sich das vielleicht anders.Zitat von Onkelandy Beitrag anzeigenDann müssten also pymodbus, pyserial und pyserial-async ins requirements.txt File rein?
Das mit dem try ist eine gute Idee, werde ich auch so umsetzen. Morgen gibt es dann mehr Infos.
Kommentar
-
So für die Pluggit gibt es jetzt ein Update. Es ist sowohl mit Python 3.7.9 und pymodbus 2.4.0 als auch mit Python 3.9.15 und pymodbus 3.0.0 getestet. Ich habs jetzt hier aktualisiert.
Msinn: Ich stelle mich mit Github noch etwas doof an. Landet es bei dir irgendwie im Develop von SmartHomeNG? Sprich, habe ich das richtig "verlinkt".
Dann noch ein paar Anmerkungen zu den requirements. Sowohl pyserial, als auch pyserial-asyncio sind erforderlich, dass das pluggit-Plugin läuft, obwohl beides nicht benötigt wird. Das lässt sich aber nicht vermeiden und hängt vermutlich mit irgendwelchen Querverweisen im Code des pymodbus zusammen. Dennoch würde ich mich schwertun, das in die requirements mit rein zu tun, weil hoffentlich mit einem späteren Release von pymodbus diese "Probleme" behoben werden. Ich bin da aber offen und passe mich an. Wie sehen die "Chefentwickler" das?
Kommentar
-
Normalerweise landen Plugins im zentralen Repo, wenn jemand einen Pull Request gegen den develop Branch dieses Repos stellt. Falls DU Dich mit PRs schwer tust, sag bescheid, dann kann ich es aufnehmen.Zitat von Cannon Beitrag anzeigenLandet es bei dir irgendwie im Develop von SmartHomeNG? Sprich, habe ich das richtig "verlinkt".
Ist das Plugin ein 1-zu-1 Ersatz für das bestehende Plugin (selbe Parameter und Attribute) oder ist es ein "breaking Change" zu dem bisherigen Plugin? In diesem Fall sollte Dein Plugin den Namen pluggit2 tragen. (Es sei denn, das bisherige Plugin ist nicht mehr nutzbar und kann/sollte entsorgt werden)
Da sind wohl die Requirements innerhalb des pymodbus Packages nicht vollständig.Zitat von Cannon Beitrag anzeigenDas lässt sich aber nicht vermeiden und hängt vermutlich mit irgendwelchen Querverweisen im Code des pymodbus zusammen. Dennoch würde ich mich schwertun, das in die requirements mit rein zu tun, weil hoffentlich mit einem späteren Release von pymodbus diese "Probleme" behoben werden.
Ich wäre dafür die Requirements beim PlugIt Plugin erstmal mit aufzunehmen und in der requirements.txt einen Kommentar einzufügen, dass dieses Requirement nur da ist, weil pymodbus Version x.y.z dieses Package braucht, es selber aber nicht in seinen Requirements hat.
Viele Grüße
Martin
There is no cloud. It's only someone else's computer.
Kommentar
-
Könntest du das prüfen, ob ich das richtig gemacht habe?Zitat von Msinn Beitrag anzeigenNormalerweise landen Plugins im zentralen Repo, wenn jemand einen Pull Request gegen den develop Branch dieses Repos stellt. Falls DU Dich mit PRs schwer tust, sag bescheid, dann kann ich es aufnehmen.
Wenn du so fragst, ist das schon sehr geändert. Die ganzen Attribute und Items passen ja gar nicht mehr. Dann muss ich das noch mal ändern ... auf pluggit2 .... blöd nur, dass ich das ja Jahre schon so nutze.Zitat von Msinn Beitrag anzeigenIst das Plugin ein 1-zu-1 Ersatz für das bestehende Plugin (selbe Parameter und Attribute) oder ist es ein "breaking Change" zu dem bisherigen Plugin? In diesem Fall sollte Dein Plugin den Namen pluggit2 tragen. (Es sei denn, das bisherige Plugin ist nicht mehr nutzbar und kann/sollte entsorgt werden)
Es ist schon in den requirements "optional" mit drin. Aber ohne beide optionalen Pakete funktioniert das nicht. Der Fehler ist irgendwo im Code von modbus selbst. Hier mal ein Auszug der requirements.Zitat von Msinn Beitrag anzeigenDa sind wohl die Requirements innerhalb des pymodbus Packages nicht vollständig.
Ich wäre dafür die Requirements beim PlugIt Plugin erstmal mit aufzunehmen und in der requirements.txt einen Kommentar einzufügen, dass dieses Requirement nur da ist, weil pymodbus Version x.y.z dieses Package braucht, es selber aber nicht in seinen Requirements hat.
Das Problem die entsprechenden requirements dann in das plugin einzupacken: Ich weiß nicht mal welche Version. Klar weiß ich das bei der 3.0.0. Aber jede Version bis runter zu 1.4.0 abzuprüfen. wäre ja echt müssig. Zumal das dann auch nicht getestet werden kann. Darüber hinaus hat jede pymodbus-Version in den requirements eine bestimmte pyserial-Version.Code:# ------------------------------------------------------------------- # Python packages used by pymodbus. # ------------------------------------------------------------------- # This file installs all requirements used by pymodbus, and are # intended for developers who have cloned the repository. # # pymodbus is only being tested on python version 3.8, 3.9 and 3.10 # depending on the usage profile it might work on other versions. python_version>="3.8" # ------------------------------------------------------------------- # Required packages. # ------------------------------------------------------------------- # install:required # ------------------------------------------------------------------- # optional packages. # ------------------------------------------------------------------- # These packages are optional for the runtime, but demanded for # document generation, development and test. # # these packages can be installed like: # pip install pymodbus[serial] # install:repl aiohttp>=3.8.1 typer[all]>=0.6.1 prompt-toolkit==3.0.8 # install:serial pyserial>=3.5 pyserial-asyncio==0.6 # install:datastore redis>=2.10.6 sqlalchemy>=1.1.15
Kommentar
-
Ich hatte neulich schon irgendwo anders gelesen (wo, weiss ich nicht mehr), dass an pymodbus in der aktuellen Version strukturelle Änderungen vorgenommen wurden.
Im Trovis-Plugin verwende ich sowohl pymodbus als auch serial:
Im Helios-Plugin wird von den beiden nur serial genutzt.Code:import serial [...] from pymodbus.client.sync import ModbusSerialClient as ModbusClient
Nach Deinen jetzt gemachten Erfahrungen - muss ich da beigehen, oder sollte das 'as is' laufen? Danke im Voraus für die Rückmeldung!
Edit: Hab's gefunden, hier im Gitter war's.
/tomZuletzt geändert von Tom Bombadil; 26.10.2022, 12:34.
Kommentar
-
Idealerweise sollten alle Plugins die pymodbus nutzen gleichzeitig umgestellt werden. Sonst ist das Chaos beim nächsten Update perfekt wenn jemand ein angepasstes und ein älteres Plugin mit pymodbus nutzt.
In Frage kämen da z.B.
wobei ich jetzt noch nicht geschaut habe ob es dort Plugins mit deprecated gibt.Code:Search "pymodbus" .\plugins\sma_mb\__init__.py (3 hits) .\plugins\trovis557x\tools\coil_sniffer.py (1 hit) .\plugins\trovis557x\tools\register_sniffer.py (1 hit) .\plugins\trovis557x\__init__.py (1 hit) .\plugins\helios_tcp\__init__.py (1 hit) .\plugins\modbus_tcp\__init__.py (4 hits) .\plugins\kostalmodbus\inverter.py (4 hits) .\plugins\pluggit\__init__.py (6 hits) .\plugins\ksemmodbus\ksem.py (4 hits)
Kommentar
-
Augenscheinlich nicht. Im SmarthomeNG/plugins Repo gibt es zu dem Plugin keinen PR:Zitat von Cannon Beitrag anzeigenKönntest du das prüfen, ob ich das richtig gemacht habe?
Capto_Capture 2022-10-26_01-56-14_PM.jpgViele Grüße
Martin
There is no cloud. It's only someone else's computer.
Kommentar
-
pymodbus.client.sync gibt es bei der neuen Version nicht mehr. Standardmäßig ist aber die 3.0.0 automatisch installiert, wenn man den Raspberry PI auf Bullseye bringt. Ich habs so gelöst, wie von OnkelAndy empfohlen:Zitat von Tom Bombadil Beitrag anzeigenNach Deinen jetzt gemachten Erfahrungen - muss ich da beigehen, oder sollte das 'as is' laufen? Danke im Voraus für die Rückmeldung!
In deinem Fall sollte das für die neue Version in from pymodbus.client.serial umgebaut werden, damit das mit modbus 3.0.0 lauffähig ist. Zumindest bis hierher, was es noch an Änderungen gibt, sehe ich erst einmal nicht.Code:try: # for newer versions of pymodbus from pymodbus.client.tcp import ModbusTcpClient except: # for older versions of pymodbus from pymodbus.client.sync import ModbusTcpClient
Was die requirements betrifft, soll das Problem mit pymodbus 3.0.1 (in ca. 1-2 Wochen) behoben werden. Damit wird sich die gesamte Problematik damit auch auflösen, denke ich. Mehr infos hier: https://github.com/riptideio/pymodbus/issues/1144
Es ist schwierig abzuschätzen, welche Änderungen sich weiter auf die anderen Plugins auswirken. Zumindest schaue ich mir die Tage mal alles an, was das "pymodbus.client.sync" betrifft. Das lässt sich ja leicht heraus finden und dann ggf. fixen. Generell halte ich es für sinnvoll die plugins alle kompatibel zu machen, statt einfach das requirement hochzusetzen. Bei der Neuaufsetzung von SmartHomNG trifft das eigentlich alle, die modbus nutzen. Denn nach einer Neuinstallation ist erst einmal das neueste drauf und man müsste dann downgraden, was ich persönlich nicht ganz optimal finde. Aber ich schaue mir das die Tage noch mal an.Zitat von bmx Beitrag anzeigenIdealerweise sollten alle Plugins die pymodbus nutzen gleichzeitig umgestellt werden. Sonst ist das Chaos beim nächsten Update perfekt wenn jemand ein angepasstes und ein älteres Plugin mit pymodbus nutzt.
Dann habe ich das falsch gemacht. Auch hier schaue ich mal, und passe das pluggit-Plugin dann entsprechend so an, dass es dann pluggit2 heißt.Zitat von Msinn Beitrag anzeigenAugenscheinlich nicht. Im SmarthomeNG/plugins Repo gibt es zu dem Plugin keinen PR:
Kommentar
-
Danke - ich werde aber aus dem verlinkten git issue nicht schlau.
Für mich liest sich das so: Es wird bestätigt, dass 'from pymodbus.client.tcp import ModbusTcpClient' aufgrund eines Bugs Fehler produziert und diese in 1-2 Wochen behoben sein werden. Konkret kommen Fehlermeldungen, die Module serial und serial_asyncio wären nicht bekannt.
Aber: Wird der genannte Bugfix auch die hier besprochenen Probleme beheben (=kein Handlungsbedarf), oder alles 'works as intended' und die hier genannten Änderungen sind trotzdem erforderlich, weil sie mit dem Issue nichts zu tun haben?
/tom
Kommentar
-
Das Problem ist, dass für pymodbus.client.tcp weder serial noch serial_asyncio benötigt werden sollten, diese aber dennoch in der init importiert werden. Sprich man muss diese unter 3.0.0 installieren, damit client.tcp funktioniert. Das sollte bei dir keine Rolle spielen. Das wird dann gefixt werden bzw. ist es schon im dev-branch.Zitat von Tom Bombadil Beitrag anzeigenmich liest sich das so: Es wird bestätigt, dass 'from pymodbus.client.tcp import ModbusTcpClient' aufgrund eines Bugs Fehler produziert und diese in 1-2 Wochen behoben sein werden. Konkret kommen Fehlermeldungen, die Module serial und serial_asyncio wären nicht bekannt.
Die Änderungen des import werden dennoch nötig sein, weil pymodbus.client.sync nicht mehr existiert.Zitat von Tom Bombadil Beitrag anzeigenAber: Wird der genannte Bugfix auch die hier besprochenen Probleme beheben (=kein Handlungsbedarf), oder alles 'works as intended' und die hier genannten Änderungen sind trotzdem erforderlich, weil sie mit dem Issue nichts zu tun haben?
Kommentar
-
Danke, alles klar - Frage beantwortet. Das war das hüpfende Komma ...Zitat von Cannon Beitrag anzeigenweil pymodbus.client.sync nicht mehr existiert.
/tom
Kommentar
-
Hinweis zur Modbus-Umstellung (der Vollständigkeit halber): Raider heißt jetzt Twix, sonst ändert sich nix.
Und unit heißt jetzt slave. Funktionieren tut die alte Variante zwar noch, erzeugt aber Fehler im Log. Deshalb:
ändern zu:Code:werte = self._modbus.read_holding_registers(_bereich[0], _bereich[1]-_bereich[0]+1, unit = self._modbus_trovis_address) werte = self._modbus.read_coils(_bereich[0], _bereich[1]-_bereich[0]+1, unit = self._modbus_trovis_address)
Code:werte = self._modbus.read_holding_registers(_bereich[0], _bereich[1]-_bereich[0]+1, slave = self._modbus_trovis_address) werte = self._modbus.read_coils(_bereich[0], _bereich[1]-_bereich[0]+1, slave = self._modbus_trovis_address)
Vielleicht kann es ja noch jemand brauchen ...
/tomZuletzt geändert von Tom Bombadil; 13.11.2022, 14:06.
Kommentar


Kommentar