NEWS
Modbus hängt sich komplett auf wenn ein Gerät Probleme hat
-
Hallo zusammen, oder
to whom it concerns!
ich nutze relativ gerne und intensiv den Modbus Adapter u.a. zum auslesen von mehreren Stromzählern.
Heute merkte ich, dass etwas nicht stimmte, als im Energiefluss die Werte nicht mehr aktualisiert wurden.Im Zählerschrank sah ich dass ein Zähler Probleme hatte.
Da der Modbus Adapter auf dem Slave im Keller läuft, war mitür im Log des Masters natürlich nichts aufgefallen.Das log des Slaves zeigte über Stunden
2023-10-08 15:22:27.694 - info: modbus.0 (27167) Connected to slave 2023-10-08 15:22:33.043 - warn: modbus.0 (27167) Error: undefined 2023-10-08 15:22:33.044 - error: modbus.0 (27167) Request timed out. 2023-10-08 15:22:33.044 - warn: modbus.0 (27167) Poll error count: 1 code: {"err":"timeout","timeout":5000} 2023-10-08 15:22:34.045 - info: modbus.0 (27167) Disconnected from slave 2023-10-08 15:23:34.048 - info: modbus.0 (27167) Connected to slave 2023-10-08 15:23:39.427 - warn: modbus.0 (27167) Error: undefined 2023-10-08 15:23:39.427 - error: modbus.0 (27167) Request timed out. 2023-10-08 15:23:39.428 - warn: modbus.0 (27167) Poll error count: 1 code: {"err":"timeout","timeout":5000} 2023-10-08 15:23:40.428 - info: modbus.0 (27167) Disconnected from slave 2023-10-08 15:24:40.430 - info: modbus.0 (27167) Connected to slave 2023-10-08 15:24:45.798 - warn: modbus.0 (27167) Error: undefined 2023-10-08 15:24:45.799 - error: modbus.0 (27167) Request timed out. 2023-10-08 15:24:45.799 - warn: modbus.0 (27167) Poll error count: 1 code: {"err":"timeout","timeout":5000} 2023-10-08 15:24:46.800 - info: modbus.0 (27167) Disconnected from slave 2023-10-08 15:25:46.802 - info: modbus.0 (27167) Connected to slave 2023-10-08 15:25:52.156 - warn: modbus.0 (27167) Error: undefined 2023-10-08 15:25:52.157 - error: modbus.0 (27167) Request timed out. 2023-10-08 15:25:52.157 - warn: modbus.0 (27167) Poll error count: 1 code: {"err":"timeout","timeout":5000} 2023-10-08 15:25:53.158 - info: modbus.0 (27167) Disconnected from slave 2023-10-08 15:26:53.161 - info: modbus.0 (27167) Connected to slave 2023-10-08 15:26:58.519 - warn: modbus.0 (27167) Error: undefined 2023-10-08 15:26:58.519 - error: modbus.0 (27167) Request timed out. 2023-10-08 15:26:58.520 - warn: modbus.0 (27167) Poll error count: 1 code: {"err":"timeout","timeout":5000} 2023-10-08 15:26:59.520 - info: modbus.0 (27167) Disconnected from slave 2023-10-08 15:27:59.524 - info: modbus.0 (27167) Connected to slave 2023-10-08 15:28:04.879 - warn: modbus.0 (27167) Error: undefined 2023-10-08 15:28:04.879 - error: modbus.0 (27167) Request timed out. 2023-10-08 15:28:04.880 - warn: modbus.0 (27167) Poll error count: 1 code: {"err":"timeout","timeout":5000} 2023-10-08 15:28:05.879 - info: modbus.0 (27167) Disconnected from slave 2023-10-08 15:29:05.883 - info: modbus.0 (27167) Connected to slave 2023-10-08 15:29:11.254 - warn: modbus.0 (27167) Error: undefined 2023-10-08 15:29:11.254 - error: modbus.0 (27167) Request timed out. 2023-10-08 15:29:11.255 - warn: modbus.0 (27167) Poll error count: 1 code: {"err":"timeout","timeout":5000} 2023-10-08 15:29:12.255 - info: modbus.0 (27167) Disconnected from slave 2023-10-08 15:30:12.259 - info: modbus.0 (27167) Connected to slave 2023-10-08 15:30:17.631 - warn: modbus.0 (27167) Error: undefined 2023-10-08 15:30:17.631 - error: modbus.0 (27167) Request timed out. 2023-10-08 15:30:17.632 - warn: modbus.0 (27167) Poll error count: 1 code: {"err":"timeout","timeout":5000} 2023-10-08 15:30:18.632 - info: modbus.0 (27167) Disconnected from slave 2023-10-08 15:31:18.635 - info: modbus.0 (27167) Connected to slave 2023-10-08 15:31:23.985 - warn: modbus.0 (27167) Error: undefined 2023-10-08 15:31:23.986 - error: modbus.0 (27167) Request timed out. 2023-10-08 15:31:23.986 - warn: modbus.0 (27167) Poll error count: 1 code: {"err":"timeout","timeout":5000} 2023-10-08 15:31:24.987 - info: modbus.0 (27167) Disconnected from slave
Dabei wird die Instanz andauernd gestartet und angehalten, so dass auch die anderen DeviceIDs keine Werte liefern.
Der Spuk hört erst auf, wenn sämtliche Register des betreffenden Zählers gelöscht wurden und kein Poll mehran dessen ID geschickt wird.
Hier wäre es geschickter, wenn man jede ID per checkbox (de)aktivieren könnte.
noch besser wäre es natürlich, wenn dues automatisch erfolgen würde
-
Ich hab schon mal kurz in den Code geschaut.
Wenn es nur darum geht, dass der Adapter nicht mehr durchstartet und dass man im Log auch sieht, welche deviceID betroffen ist, wären folgende Stellen im Code aus meiner Sicht relevant:function pollResult <-- hier wird der Adapter neu gestartet und ein Fehler (ohne DeviceID) gemeldet
https://github.com/ioBroker/ioBroker.modbus/blob/5c072dd9f92947179cb15f343b5bae7331e99ead/lib/master.js#L407function pollDevice <-- von hier aus wird (indirekt) pollResult aufgerufen und es ist auch die deviceID bekannt
https://github.com/ioBroker/ioBroker.modbus/blob/5c072dd9f92947179cb15f343b5bae7331e99ead/lib/master.js#L444C14-L444C24 -
@great-sun sagte in Modbus hängt sich komplett auf wenn ein Gerät Probleme hat:
Wenn es nur darum geht, dass der Adapter nicht mehr durchstartet und dass man im Log auch sieht, welche deviceID betroffen ist,
Das wäre schon ein großer Schritt!
Das "Kapseln" von Geräten (per (De)Aktivierungs-Checkbox) wäre aber z.B. auch für Wartung an Geräten hilfreich.
-
@homoran Naja, wenn man möchte, dass der Adapter hängen bleibt, weil man es sonst nicht sieht/mitbekommt, wäre das sicher der beste Weg. Aber wenn Du sonst eine Wartung durchführst, würde das betroffene Device nur im Log gemeldet werden, aber die anderen weiter abgefragt. Ganz ohne zusätzliche Arbeit
-
@homoran ich sehe im log nichts von instanz anhalten oder neu starten
-
@homoran ALso für mich sieht es eher so aus das in dem Fehlerfall irgendwie die Netzwerk connection offen bleibt und nicht neu aufgebaut wird.
-
in der pollResult ist dieser Code:
if (errorCount > 12 * deviceIds.length) { // 2 reconnects did not help, restart adapter adapter.log.error('Reconnect did not help, restart adapter'); typeof adapter.terminate === 'function' ? adapter.terminate(156) : process.exit(156);
Wenn ich mich nicht ganz irre, schießt er da den Adapter ab
-
Weil ihr so lieb bittet!
ich hab gerade wieder ein Register für den defekten Zähler eingegeben und die Fehlermeldungen kommen wieder.
Ich warte jetzt ein paar Minuten, damit genug automatische retrys vorhanden sind und starte die Instanz neu.
-
das log
2023-10-08 22:17:10.800 - info: host.tinkerboard instance system.adapter.modbus.0 started with pid 2689 2023-10-08 22:17:12.924 - info: modbus.0 (2689) starting. Version 5.0.11 in /opt/iobroker/node_modules/iobroker.modbus, node: v14.21.1, js-controller: 3.3.22 2023-10-08 22:17:13.810 - info: modbus.0 (2689) Connected to slave 2023-10-08 22:17:19.226 - warn: modbus.0 (2689) Error: undefined 2023-10-08 22:17:19.228 - error: modbus.0 (2689) Request timed out. 2023-10-08 22:17:19.230 - warn: modbus.0 (2689) Poll error count: 1 code: {"err":"timeout","timeout":5000} 2023-10-08 22:17:20.230 - info: modbus.0 (2689) Disconnected from slave 2023-10-08 22:18:20.236 - info: modbus.0 (2689) Connected to slave 2023-10-08 22:18:25.631 - warn: modbus.0 (2689) Error: undefined 2023-10-08 22:18:25.632 - error: modbus.0 (2689) Request timed out. 2023-10-08 22:18:25.633 - warn: modbus.0 (2689) Poll error count: 1 code: {"err":"timeout","timeout":5000} 2023-10-08 22:18:26.633 - info: modbus.0 (2689) Disconnected from slave 2023-10-08 22:19:26.640 - info: modbus.0 (2689) Connected to slave 2023-10-08 22:19:32.039 - warn: modbus.0 (2689) Error: undefined 2023-10-08 22:19:32.042 - error: modbus.0 (2689) Request timed out. 2023-10-08 22:19:32.043 - warn: modbus.0 (2689) Poll error count: 1 code: {"err":"timeout","timeout":5000} 2023-10-08 22:19:33.042 - info: modbus.0 (2689) Disconnected from slave 2023-10-08 22:20:33.046 - info: modbus.0 (2689) Connected to slave 2023-10-08 22:20:38.432 - warn: modbus.0 (2689) Error: undefined 2023-10-08 22:20:38.432 - error: modbus.0 (2689) Request timed out. 2023-10-08 22:20:38.433 - warn: modbus.0 (2689) Poll error count: 1 code: {"err":"timeout","timeout":5000} 2023-10-08 22:20:39.433 - info: modbus.0 (2689) Disconnected from slave 2023-10-08 22:21:39.437 - info: modbus.0 (2689) Connected to slave 2023-10-08 22:21:44.837 - warn: modbus.0 (2689) Error: undefined 2023-10-08 22:21:44.838 - error: modbus.0 (2689) Request timed out. 2023-10-08 22:21:44.839 - warn: modbus.0 (2689) Poll error count: 1 code: {"err":"timeout","timeout":5000} 2023-10-08 22:21:45.839 - info: modbus.0 (2689) Disconnected from slave 2023-10-08 22:22:45.843 - info: modbus.0 (2689) Connected to slave 2023-10-08 22:22:51.216 - warn: modbus.0 (2689) Error: undefined 2023-10-08 22:22:51.216 - error: modbus.0 (2689) Request timed out. 2023-10-08 22:22:51.217 - warn: modbus.0 (2689) Poll error count: 1 code: {"err":"timeout","timeout":5000} 2023-10-08 22:22:52.218 - info: modbus.0 (2689) Disconnected from slave 2023-10-08 22:23:07.753 - info: host.tinkerboard stopInstance system.adapter.modbus.0 (force=false, process=true) 2023-10-08 22:23:07.780 - info: modbus.0 (2689) Got terminate signal TERMINATE_YOURSELF 2023-10-08 22:23:07.784 - info: modbus.0 (2689) terminating 2023-10-08 22:23:07.788 - info: modbus.0 (2689) Terminated (ADAPTER_REQUESTED_TERMINATION): Without reason 2023-10-08 22:23:07.836 - info: host.tinkerboard stopInstance system.adapter.modbus.0 send kill signal 2023-10-08 22:23:08.572 - info: host.tinkerboard instance system.adapter.modbus.0 terminated with code 11 (ADAPTER_REQUESTED_TERMINATION) 2023-10-08 22:23:11.193 - info: host.tinkerboard instance system.adapter.modbus.0 started with pid 2887 2023-10-08 22:23:13.698 - info: modbus.0 (2887) starting. Version 5.0.11 in /opt/iobroker/node_modules/iobroker.modbus, node: v14.21.1, js-controller: 3.3.22 2023-10-08 22:23:14.515 - info: modbus.0 (2887) Connected to slave 2023-10-08 22:23:19.925 - warn: modbus.0 (2887) Error: undefined 2023-10-08 22:23:19.926 - error: modbus.0 (2887) Request timed out. 2023-10-08 22:23:19.927 - warn: modbus.0 (2887) Poll error count: 1 code: {"err":"timeout","timeout":5000} 2023-10-08 22:23:20.929 - info: modbus.0 (2887) Disconnected from slave
zwischendurch war die Instanz gelb
und für ganz ganz kurze Zeit grün
das hatte ich irrtümlich für einen Neustart gehalten.
Nach dem manuellen Neustart geht es mit den Fehlermeldungen wie gewohnt weiter
EDIT:
was mir auffällt ist dass er mit dem error count bei 1 stehen bleibtEDIT2:
erst nach löschen des Registers ist wieder Ruhe -
@homoran Hast du mal probiert, nur den Haken für die Abfrage des Registers rauszunehmen?
-
@radi sagte in Modbus hängt sich komplett auf wenn ein Gerät Probleme hat:
@homoran Hast du mal probiert, nur den Haken für die Abfrage des Registers rauszunehmen?
Nein
gibt es die etwa auch bei Eingangsregistern?
ich hab die bisher bewusst nur bei Holdingregistern gesehen. -
@homoran Okay, bei den Eingangsregistern gibt es diesen Punkt wohl nicht. 1:0 für dich. Da ich überall nur Holdingregister abfrage, hatte ich das gar nicht in Betracht gezogen.