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:
Code:pip install pymodbus[serial]
Danach muss doch das pluggitplugin angepasst werden. In der ini muss bei:
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
-
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
-
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)
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
-
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.
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)
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.
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:
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.
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
-
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
-
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!
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
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.
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
-
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.
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
-
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:
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