NEWS
Modbus Master und Slave
-
sind das nicht einfach Teilnehmer am Bus wobei jeder eine eigene ID hat.
Jeder kann senden oder empfangen ? -
Das Problem ist, das ich in keiner Anleitung lesen kann wie sich die Geräte verhalten.
In den Spezifikationen vom Modbus TCP steht, dass mehrere Master im Bus sein können.
Der iobroker Modbus Adapter läuft auf: TCP, Master und als Partner ID ist der WR (Solaredge) eingegeben.
Ich vermute der Solaredge ist ein Slave.
Ich vermute der Solarlog ist ein Master.Sobald der Solarlog und iobroker "an" sind, erhält der Solarlog Daten aber der iobroker rennt in einen Timeout ...
-
-
@ralla66 sagte in Modbus Master und Slave:
sind das nicht einfach Teilnehmer am Bus wobei jeder eine eigene ID hat.
frag mich nicht.
Soweit ich das verstanden habe fordert ein Master die clients auf Daten zu schicken (poll) oder schreibt Daten auf/in den Clients.
Die Clients z.B. Stromzähler bleiben immer passiv. -
@bitwicht sagte in Modbus Master und Slave:
Sobald der Solarlog und iobroker "an" sind, erhält der Solarlog Daten aber der iobroker rennt in einen Timeout ...
Richtig ... denn Solaredge über TCP läßt nur eine Verbindung zu .
So habe ich es :
Per TCP auf den SolarEdge:
damit ich per Modbus ioBroker es auslesen kann
Dann per Modbus TCP IP Adapter auf den Bus RS485 vom SolareEdge
habe ich EVCC daran angebunden
Deine Lösung wäre :
Per Modbus Proxy
https://forum.iobroker.net/post/1099145
Also Proxy Modbus auf die SolarEdge
dann Solarlog und ioBroker nehmen dann den Modbus Proxy
-
Danke für die Antwort.
So ganz habe ich es noch nicht verstanden.Ich habe zwei SE WR und kann daher die RS485 nicht verwenden da bei einem WR beide RS485 belegt sind und ich somit nur einen anbinden könnte.
Der Solarlog ist ja hard-coded auf Port 502 eingestellt.
Heißt der Modbus-Proxy müsste die SE WR zb: auf Port 1502 abfragen und die Daten auf Port 502 für Solarlog und 503 für iobroker bereitstellen?lg Bit
-
@bitwicht sagte in Modbus Master und Slave:
Heißt der Modbus-Proxy müsste die SE WR zb: auf Port 1502 abfragen und die Daten auf Port 502 für Solarlog und 503 für iobroker bereitstellen?
Fast richtig
... der Modbus Proxy fragt den WR auf Port 1502 ab ,
dann Solarlog und ioBroker auf die Modbus Proxy IP und 1502 einstellen , dieser läßt dann auch mehere Clients zu . -
Ich habe das kurz getestet aber bekomme einen Fehler wenn ich den Port auf 502 öffnen möchte (mit Port 9000 würde es gehen). Hast du eine Idee?
pi@raspberrypi:~/.local/bin $ ./modbus-proxy -b tcp://192.168.0.11:502 --modbus tcp://192.168.0.123:1502 2024-01-01 15:24:41,936 INFO modbus-proxy: Starting... Traceback (most recent call last): File "/home/pi/.local/bin/./modbus-proxy", line 8, in <module> sys.exit(main()) File "/home/pi/.local/lib/python3.9/site-packages/modbus_proxy.py", line 343, in main asyncio.run(run()) File "/usr/lib/python3.9/asyncio/runners.py", line 44, in run return loop.run_until_complete(main) File "/usr/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete return future.result() File "/home/pi/.local/lib/python3.9/site-packages/modbus_proxy.py", line 338, in run await run_bridges(bridges, ready=ready) File "/home/pi/.local/lib/python3.9/site-packages/modbus_proxy.py", line 327, in run_bridges await start_bridges(bridges) File "/home/pi/.local/lib/python3.9/site-packages/modbus_proxy.py", line 320, in start_bridges await asyncio.gather(*coros) File "/home/pi/.local/lib/python3.9/site-packages/modbus_proxy.py", line 188, in start self.server = await asyncio.start_server( File "/usr/lib/python3.9/asyncio/streams.py", line 94, in start_server return await loop.create_server(factory, host, port, **kwds) File "/usr/lib/python3.9/asyncio/base_events.py", line 1494, in create_server raise OSError(err.errno, 'error while attempting ' PermissionError: [Errno 13] error while attempting to bind on address ('192.168.0.11', 502): permission denied
-
Ich habe es so ... hinbekommen
Docker holt die Daten von Port 4196 von meinem Master
(Waveshare Industrial Serial Server RS485 to RJ45 Ethernet TCP/IP to Serial )
wo ich zwei Modbus Zähler angeschlossen habe .Einstellung yml Datei
devices: - modbus: url: 192.168.178.41:4196 listen: bind: 0:4196
so in ioBroker :
und so in EVCC
# - name: my_charger_meter type: template template: eastron usage: charge # RS485 via TCP/IP (Modbus RTU) modbus: tcpip id: 2 host: 192.168.178.11 # Hostname port: 5020 # Port
-
Der Port 4196 oder 9000 würde sich starten lassen
pi@raspberrypi:~/.local/bin $ ./modbus-proxy -b tcp://0:4196 --modbus tcp://192.168.0.123:1502 2024-01-01 15:42:06,788 INFO modbus-proxy: Starting... 2024-01-01 15:42:06,796 INFO modbus-proxy.ModBus(192.168.0.123:1502): Ready to accept requests on 0:4196
Problem ist, das der Solarlog "hart" auf 502 hört und man den Portnicht ändern kann.
Ich muss als den Proxy unter 502 starten wo er den Fehler schmeißt
-
Das Problem ist ...
ich kenne es von meiner Wetterstation die ich auch eingebunden habe auf Port 9999
, da <1025 die Ports Rechte brauchen -
mit sudo könnte ich es auch testen, aber bekomme ich wieder einen Fehler:
Mache ich da mit sudo was falsch?
pi@raspberrypi:~/.local/bin $ sudo ./modbus-proxy -b tcp://192.168.0.11:502 --modbus tcp://192.168.0.123:1502
Traceback (most recent call last):
File "/home/pi/.local/bin/./modbus-proxy", line 5, in <module>
from modbus_proxy import main
ModuleNotFoundError: No module named 'modbus_proxy' -
Es liegt an den Ports , nicht an dem Sudo Befehl zum ausführen .
Suche gerade im INet ... aber wie du schon schreibts hart auf Port 502 eingestellt
-
ah, ich dachte vielleicht darf nur sudo den Port nutzen.
Anscheinend sind im Script oder woher auch immer einige Ports ausgeschlossen.Muss ich einen anderen Weg suchen.
Ich wollte in erster Linie den Solarlog FTP Export nutzen.Da ich die Daten eigentlich im iobroker habe, müsste ich die FTP Daten mit dem iobroker zusammenbauen (wenn ich wüsste wie das geht).