NEWS
SOLVED [gelöst] Modbus Adapter UVR 16x2 CMI
-
Hallo liebe Community,
ich habe auf einem Raspberry das IO Broker Image installiert:
ioBroker-Pi
Node.js: v8.16.2
NPM: 6.4.1und den Modbus Adapter 3.0.0.
IP das Raspi: 192.168.1.172
IP der CMI: 192.168.1.88Das CMI wie folgt konfiguriert:
Modbus Adapter:
Die Instanz bleibt leider rot, das Debuglog meint:
2019-10-23 17:30:13.483 - info: modbus.0 terminating 2019-10-23 17:30:13.502 - error: Caught by controller[0]: { Error: listen EADDRNOTAVAIL 192.168.1.88:502 2019-10-23 17:30:13.503 - error: Caught by controller[0]: at Server.setupListenHandle [as _listen2] (net.js:1343:19) 2019-10-23 17:30:13.503 - error: Caught by controller[0]: at listenInCluster (net.js:1401:12) 2019-10-23 17:30:13.503 - error: Caught by controller[0]: at doListen (net.js:1510:7) 2019-10-23 17:30:13.504 - error: Caught by controller[0]: at _combinedTickCallback (internal/process/next_tick.js:142:11) 2019-10-23 17:30:13.504 - error: Caught by controller[0]: at process._tickCallback (internal/process/next_tick.js:181:9) 2019-10-23 17:30:13.504 - error: Caught by controller[0]: errno: 'EADDRNOTAVAIL', 2019-10-23 17:30:13.515 - error: Caught by controller[0]: code: 'EADDRNOTAVAIL', 2019-10-23 17:30:13.515 - error: Caught by controller[0]: syscall: 'listen', 2019-10-23 17:30:13.515 - error: Caught by controller[0]: address: '192.168.1.88', 2019-10-23 17:30:13.516 - error: Caught by controller[0]: port: 502 } 2019-10-23 17:30:13.516 - error: host.ioBroker-Pi instance system.adapter.modbus.0 terminated with code 0 (OK) 2019-10-23 17:30:13.516 - info: host.ioBroker-Pi Restart adapter system.adapter.modbus.0 because enabled 2019-10-23 17:30:43.535 - info: host.ioBroker-Pi instance system.adapter.modbus.0 started with pid 871 2019-10-23 17:30:44.541 - debug: modbus.0 objectDB connected 2019-10-23 17:30:44.609 - debug: modbus.0 statesDB connected 2019-10-23 17:30:44.730 - info: modbus.0 starting. Version 3.0.0 in /opt/iobroker/node_modules/iobroker.modbus, node: v8.16.2 2019-10-23 17:30:44.967 - debug: modbus.0 Slave ready to start 2019-10-23 17:30:45.112 - debug: modbus.0 server is listening on port 2019-10-23 17:30:45.114 - debug: modbus.0 initiating read coils request handler. 2019-10-23 17:30:45.115 - debug: modbus.0 setting request handler 2019-10-23 17:30:45.116 - debug: modbus.0 initiating read discrete inputs request handler. 2019-10-23 17:30:45.116 - debug: modbus.0 setting request handler 2019-10-23 17:30:45.117 - debug: modbus.0 initiating read holding registers request handler. 2019-10-23 17:30:45.117 - debug: modbus.0 setting request handler 2019-10-23 17:30:45.118 - debug: modbus.0 initiating read input registers request handler. 2019-10-23 17:30:45.118 - debug: modbus.0 setting request handler 2019-10-23 17:30:45.119 - debug: modbus.0 initiating write multiple coils request handler. 2019-10-23 17:30:45.119 - debug: modbus.0 setting request handler 2019-10-23 17:30:45.120 - debug: modbus.0 initiating write multiple registers request handler. 2019-10-23 17:30:45.120 - debug: modbus.0 setting request handler 2019-10-23 17:30:45.121 - debug: modbus.0 initiating write single coil request handler. 2019-10-23 17:30:45.122 - debug: modbus.0 setting request handler 2019-10-23 17:30:45.122 - debug: modbus.0 initiating write single register request handler. 2019-10-23 17:30:45.123 - debug: modbus.0 setting request handler 2019-10-23 17:30:45.146 - error: modbus.0 uncaught exception: listen EADDRNOTAVAIL 192.168.1.88:502 2019-10-23 17:30:45.146 - error: modbus.0 Error: listen EADDRNOTAVAIL 192.168.1.88:502
Mit Ananas64 als Server liefert das CMI korrekte Daten. Ebenfalls konnt ich mit Ananas64 den IO Broker ansprechen. Hat jemand eine Idee, warum CMI und IO Broker nicht wollen?
lg Frank
-
Gelöst: Es ware ein Rechte Problem. Nach dem Durchlaufen des Installation-Fixer wurde die Modbusinstanz grün und im entsprechenden modbus Objekt erschien dann auch sofort der Wert. Der Port 502 hat nun auch im System den LISTEN Status.
Vielen Dank für Eure Hilfe,
Frank -
Probier mal beim Modbus-Adapter 0.0.0.0 als Partner IP Adresse.
Ich konnte erst dann von der CMI Daten auslesen, als ich die 0.0.0.0 eingegeben hatte, und den Typ auf Slave gestellt hatte.
Dann habe ich unter Holding Registers die auszulesenden Adressen eingegeben. -
Hat leider nix gebracht:
host.ioBroker-Pi 2019-10-24 07:51:34.400 info Restart adapter system.adapter.modbus.0 because enabled host.ioBroker-Pi 2019-10-24 07:51:34.400 error instance system.adapter.modbus.0 terminated with code 0 (OK) host.ioBroker-Pi 2019-10-24 07:51:34.399 error Caught by controller[0]: port: 502 } host.ioBroker-Pi 2019-10-24 07:51:34.399 error Caught by controller[0]: address: '0.0.0.0', host.ioBroker-Pi 2019-10-24 07:51:34.399 error Caught by controller[0]: syscall: 'listen', host.ioBroker-Pi 2019-10-24 07:51:34.399 error Caught by controller[0]: code: 'EACCES', host.ioBroker-Pi 2019-10-24 07:51:34.399 error Caught by controller[0]: errno: 'EACCES', host.ioBroker-Pi 2019-10-24 07:51:34.399 error Caught by controller[0]: at process._tickCallback (internal/process/next_tick.js:181:9) host.ioBroker-Pi 2019-10-24 07:51:34.399 error Caught by controller[0]: at _combinedTickCallback (internal/process/next_tick.js:142:11) host.ioBroker-Pi 2019-10-24 07:51:34.399 error Caught by controller[0]: at doListen (net.js:1510:7) host.ioBroker-Pi 2019-10-24 07:51:34.398 error Caught by controller[0]: at listenInCluster (net.js:1401:12) host.ioBroker-Pi 2019-10-24 07:51:34.398 error Caught by controller[0]: at Server.setupListenHandle [as _listen2] (net.js:1343:19) host.ioBroker-Pi 2019-10-24 07:51:34.398 error Caught by controller[0]: { Error: listen EACCES 0.0.0.0:502 modbus.0 2019-10-24 07:51:34.377 error Error: listen EACCES 0.0.0.0:502 at Server.setupListenHandle [as _listen2] (net.js:1343:19) at listenInCluster (net.js:1401:12) at doListen (net.js:1510:7) at _combinedTickCallback (in modbus.0 2019-10-24 07:51:34.376 error uncaught exception: listen EACCES 0.0.0.0:502 modbus.0 2019-10-24 07:51:34.104 info starting. Version 3.0.0 in /opt/iobroker/node_modules/iobroker.modbus, node: v8.16.2 host.ioBroker-Pi 2019-10-24 07:51:32.765 info instance system.adapter.modbus.0 started with pid 4300
Im holding Register wird 0 für dern Wert 1 ausgegeben, kann ja leider auch nichts da sein, wenn die Verbindung nicht zu Stande kommt.
Der Fehler uncaught exception: listen EACCES 0.0.0.0:502 bedeutet, dass der Port 502 bereits belegt ist, was er aber nicht ist:
pi@ioBroker-Pi:~ $ sudo netstat -tulpn Aktive Internetverbindungen (Nur Server) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 525/iobroker.js-con tcp 0 0 127.0.0.1:9001 0.0.0.0:* LISTEN 525/iobroker.js-con tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 542/sshd tcp6 0 0 :::8081 :::* LISTEN 556/io.admin.0 tcp6 0 0 :::22 :::* LISTEN 542/sshd udp 0 0 0.0.0.0:68 0.0.0.0:* 524/dhcpcd udp 0 0 0.0.0.0:5353 0.0.0.0:* 348/avahi-daemon: r udp 0 0 0.0.0.0:39221 0.0.0.0:* 348/avahi-daemon: r udp6 0 0 :::47714 :::* 348/avahi-daemon: r udp6 0 0 :::5353 :::* 348/avahi-daemon: r -
Firewall ist auch aus. Wenn die Modbus Instanz laufen würde, müßte sie ja einen offenen Port bereitstellen, welcher nicht da ist.
Das CMI baut aber einen Verbindung auf, die dann leider mangels nicht verfügbaren Prozess zurück gesetzt wird:pi@ioBroker-Pi:~ $ sudo tcpdump host 192.168.1.88 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 08:19:06.020504 IP 192.168.1.88.57001 > 192.168.1.172.502: Flags [S], seq 680458444, win 4320, options [mss 1440], length 0 08:19:06.020632 IP 192.168.1.172.502 > 192.168.1.88.57001: Flags [R.], seq 0, ack 680458445, win 0, length 0 08:19:47.020721 IP 192.168.1.88.57002 > 192.168.1.172.502: Flags [S], seq 1094048092, win 4320, options [mss 1440], length 0 08:19:47.020829 IP 192.168.1.172.502 > 192.168.1.88.57002: Flags [R.], seq 0, ack 1094048093, win 0, length 0
-
Wenn Du satt 0.0.0.0 die ip-Adresse des ioBroker-Servers nimmst, ändert sich dann etwas?
-
leider nicht:
host.ioBroker-Pi 2019-10-26 16:31:35.339 error instance system.adapter.modbus.0 terminated with code 0 (OK) Caught 2019-10-26 16:31:35.338 error by controller[0]: port: 502 } Caught 2019-10-26 16:31:35.338 error by controller[0]: address: '192.168.1.172', Caught 2019-10-26 16:31:35.338 error by controller[0]: syscall: 'listen', Caught 2019-10-26 16:31:35.338 error by controller[0]: code: 'EACCES', Caught 2019-10-26 16:31:35.338 error by controller[0]: errno: 'EACCES', Caught 2019-10-26 16:31:35.338 error by controller[0]: at process._tickCallback (internal/process/next_tick.js:181:9) Caught 2019-10-26 16:31:35.338 error by controller[0]: at _combinedTickCallback (internal/process/next_tick.js:142:11) Caught 2019-10-26 16:31:35.338 error by controller[0]: at doListen (net.js:1510:7) Caught 2019-10-26 16:31:35.338 error by controller[0]: at listenInCluster (net.js:1401:12) Caught 2019-10-26 16:31:35.338 error by controller[0]: at Server.setupListenHandle [as _listen2] (net.js:1343:19) Caught 2019-10-26 16:31:35.337 error by controller[0]: { Error: listen EACCES 192.168.1.172:502 modbus.0 2019-10-26 16:31:35.322 info terminating modbus.0 2019-10-26 16:31:35.308 error at process._tickCallback (internal/process/next_tick.js:181:9) modbus.0 2019-10-26 16:31:35.308 error at _combinedTickCallback (internal/process/next_tick.js:142:11) modbus.0 2019-10-26 16:31:35.308 error at doListen (net.js:1510:7) modbus.0 2019-10-26 16:31:35.308 error at listenInCluster (net.js:1401:12) modbus.0 2019-10-26 16:31:35.308 error at Server.setupListenHandle [as _listen2] (net.js:1343:19) modbus.0 2019-10-26 16:31:35.308 error Error: listen EACCES 192.168.1.172:502 modbus.0 2019-10-26 16:31:35.307 error uncaught exception: listen EACCES 192.168.1.172:502 modbus.0 2019-10-26 16:31:34.912 info starting. Version 3.0.0 in /opt/iobroker/node_modules/iobroker.modbus, node: v8.16.2 host.ioBroker-Pi 2019-10-26 16:31:33.736 info instance system.adapter.modbus.0 started with pid 10028 host.ioBroker-Pi 2019-10-26 16:31:33.705 info object change system.adapter.modbus.0 host.ioBroker-Pi 2019-10-26 16:31:05.694 info Restart adapter system.adapter.modbus.0 because enabled
Ich habe mal mit Netcat den Port 502 auf dem Raspberry aufgemacht:
sudo netcat -l 502
Das CMI sendet etwas. Der Port ließ sich auch ohne Probleme öffnen und ist dann auch auf:
pi@ioBroker-Pi:~ $ sudo netstat -tulpn Aktive Internetverbindungen (Nur Server) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 525/iobroker.js-con tcp 0 0 127.0.0.1:9001 0.0.0.0:* LISTEN 525/iobroker.js-con tcp 0 0 0.0.0.0:502 0.0.0.0:* LISTEN 10246/netcat tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 542/sshd tcp6 0 0 :::8081 :::* LISTEN 556/io.admin.0 tcp6 0 0 :::22 :::* LISTEN 542/sshd udp 0 0 0.0.0.0:68 0.0.0.0:* 524/dhcpcd udp 0 0 0.0.0.0:5353 0.0.0.0:* 348/avahi-daemon: r udp 0 0 0.0.0.0:39221 0.0.0.0:* 348/avahi-daemon: r udp6 0 0 :::47714 :::* 348/avahi-daemon: r udp6 0 0 :::5353 :::* 348/avahi-daemon: r
Wenn ich IO Broker die Modbusinstanz öffne, sollte die als Slave ja auch auf dem Port lauschen? Wie sieht bei Euch die Ausgabe sudo netstat -tulpn aus?
Kann es ein, dass die Modbus Instanz keine Rechte hat, einen Port also Socket zu öffnen?
Präziser: Port 502 liegt im Bereich der privilligierten Ports (1-1024) - liegt das das Problem? -
Lass doch mal den Installation-Fixer laufen. Der repariert u.a. bei den Berechtigungen auch was für priviligierte Ports.
Oder wenn nicht:
sudo setcap cap_net_bind_service=+eip $(eval readlink -f `which node`)
-
Gelöst: Es ware ein Rechte Problem. Nach dem Durchlaufen des Installation-Fixer wurde die Modbusinstanz grün und im entsprechenden modbus Objekt erschien dann auch sofort der Wert. Der Port 502 hat nun auch im System den LISTEN Status.
Vielen Dank für Eure Hilfe,
Frank