Closed vdemidov closed 3 years ago
Please send the part of the log containing the pydmodbus connect. I would like to see if that is succesfull. Thanks in advance.
Sorry, but nothing like connect in log. Log after HA start: 2021-06-02 13:05:01 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration xiaomi_gateway3 which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant 2021-06-02 13:05:01 WARNING (SyncWorker_1) [homeassistant.loader] We found a custom integration gismeteo which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant 2021-06-02 13:05:01 WARNING (SyncWorker_1) [homeassistant.loader] We found a custom integration hacs which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant 2021-06-02 13:05:01 WARNING (SyncWorker_1) [homeassistant.loader] We found a custom integration favicon which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant 2021-06-02 13:05:09 INFO (MainThread) [homeassistant.components.device_tracker] Setting up device_tracker.luci 2021-06-02 13:05:10 INFO (MainThread) [homeassistant.components.device_tracker] Setting up device_tracker.mobile_app 2021-06-02 13:05:10 INFO (MainThread) [homeassistant.components.device_tracker] Not adding entity Viktor-N9 because it's disabled 2021-06-02 13:05:24 DEBUG (SyncWorker_1) [pymodbus.client.sync] New Transaction state 'SENDING' 2021-06-02 13:05:24 DEBUG (SyncWorker_5) [pymodbus.client.sync] New Transaction state 'SENDING' 2021-06-02 13:05:46 WARNING (MainThread) [homeassistant.helpers.template] Template variable warning: 'dict object' has no attribute 'click' when rendering '{{ value_json.click }}' 2021-06-02 13:05:53 DEBUG (SyncWorker_5) [pymodbus.client.sync] New Transaction state 'SENDING' 2021-06-02 13:05:53 DEBUG (SyncWorker_2) [pymodbus.client.sync] New Transaction state 'SENDING' 2021-06-02 13:06:21 DEBUG (SyncWorker_2) [pymodbus.client.sync] New Transaction state 'SENDING' 2021-06-02 13:06:21 DEBUG (SyncWorker_13) [pymodbus.client.sync] New Transaction state 'SENDING' 2021-06-02 13:06:50 DEBUG (SyncWorker_13) [pymodbus.client.sync] New Transaction state 'SENDING'
Logger settings:
logger:
logs:
homeassistant.components.modbus: debug
pymodbus.client: debug
Thanks and interesting, it seems pymodbus never manages to make a connection. This is something I have not seen before. You say it works if you change slave:2 and slave:3 to slave:1 ?
Could you please do that, and see if the log have a pymodbus connect message, thanks in advance.
Second test, with the configuration slave:1,2,3 (as you have it), add delay:30 to the modbus part. This gives a delay before pymodbus starts transmitting messages, and it could solve your problem.
Sorry for asking you to test, but that is the only way I can pinpoint the problem.
You say it works if you change slave:2 and slave:3 to slave:1 ?
Changed yaml:
modbus:
type: serial
delay: 30
method: rtu
port: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0
baudrate: 9600
stopbits: 1
bytesize: 8
parity: N
sensors:
- name: energy_input_f1_voltage
scan_interval: 5
unit_of_measurement: V
device_class: voltage
slave: 1
address: 0
input_type: input
scale: 0.1
offset: 0
precision: 1
- name: energy_input_f2_voltage
scan_interval: 5
unit_of_measurement: V
device_class: voltage
slave: 1
address: 0
input_type: input
scale: 0.1
offset: 0
precision: 1
- name: energy_input_f3_voltage
scan_interval: 5
unit_of_measurement: V
device_class: voltage
slave: 1
address: 0
input_type: input
scale: 0.1
offset: 0
precision: 1
Works perfect. No problem. But still any connect message from pymodbus Log:
2021-06-02 17:43:35 WARNING (SyncWorker_1) [homeassistant.loader] We found a custom integration xiaomi_gateway3 which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2021-06-02 17:43:35 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration hacs which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2021-06-02 17:43:35 WARNING (SyncWorker_1) [homeassistant.loader] We found a custom integration gismeteo which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2021-06-02 17:43:35 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration favicon which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2021-06-02 17:43:43 INFO (MainThread) [homeassistant.components.device_tracker] Setting up device_tracker.luci
2021-06-02 17:43:44 INFO (MainThread) [homeassistant.components.device_tracker] Setting up device_tracker.mobile_app
2021-06-02 17:43:44 INFO (MainThread) [homeassistant.components.device_tracker] Not adding entity Viktor-N9 because it's disabled
2021-06-02 17:44:13 DEBUG (SyncWorker_7) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:44:13 DEBUG (SyncWorker_0) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:44:13 DEBUG (SyncWorker_4) [pymodbus.client.sync] New Transaction state 'SENDING'
Second test, with the configuration slave:1,2,3 (as you have it), add delay:30 to the modbus part. This gives a delay before pymodbus starts transmitting messages, and it could solve your problem.
Problems exist. And restart takes more time. Log:
2021-06-02 17:51:01 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration xiaomi_gateway3 which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2021-06-02 17:51:01 WARNING (SyncWorker_1) [homeassistant.loader] We found a custom integration gismeteo which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2021-06-02 17:51:01 WARNING (SyncWorker_1) [homeassistant.loader] We found a custom integration hacs which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2021-06-02 17:51:01 WARNING (SyncWorker_1) [homeassistant.loader] We found a custom integration favicon which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2021-06-02 17:51:08 INFO (MainThread) [homeassistant.components.device_tracker] Setting up device_tracker.luci
2021-06-02 17:51:10 INFO (MainThread) [homeassistant.components.device_tracker] Setting up device_tracker.mobile_app
2021-06-02 17:51:10 INFO (MainThread) [homeassistant.components.device_tracker] Not adding entity Viktor-N9 because it's disabled
2021-06-02 17:51:40 DEBUG (SyncWorker_4) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:51:40 DEBUG (SyncWorker_5) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:51:48 DEBUG (SyncWorker_5) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:51:48 DEBUG (SyncWorker_1) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:51:51 WARNING (MainThread) [homeassistant.helpers.template] Template variable warning: 'dict object' has no attribute 'click' when rendering '{{ value_json.click }}'
2021-06-02 17:51:57 DEBUG (SyncWorker_1) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:51:57 DEBUG (SyncWorker_5) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:52:05 DEBUG (SyncWorker_5) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:52:05 DEBUG (SyncWorker_6) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:52:13 DEBUG (SyncWorker_6) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:52:13 DEBUG (SyncWorker_11) [pymodbus.client.sync] New Transaction state 'SENDING'
[cont-finish.d] executing container finish scripts...
[cont-finish.d] done.
[s6-finish] waiting for services.
2021-06-02 17:52:22 DEBUG (SyncWorker_11) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:52:22 DEBUG (SyncWorker_9) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:52:30 DEBUG (SyncWorker_9) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:52:30 DEBUG (SyncWorker_10) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:52:31 ERROR (MainThread) [homeassistant.components.hassio.handler] Timeout on /homeassistant/restart request
2021-06-02 17:52:39 DEBUG (SyncWorker_10) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:52:39 DEBUG (SyncWorker_12) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:52:47 DEBUG (SyncWorker_12) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:52:47 DEBUG (SyncWorker_5) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:52:55 DEBUG (SyncWorker_5) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:52:55 DEBUG (SyncWorker_2) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:53:04 DEBUG (SyncWorker_2) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:53:04 DEBUG (SyncWorker_1) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:53:12 DEBUG (SyncWorker_1) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:53:12 DEBUG (SyncWorker_6) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:53:20 DEBUG (SyncWorker_6) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:53:20 DEBUG (SyncWorker_3) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:53:29 DEBUG (SyncWorker_3) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:53:29 DEBUG (SyncWorker_9) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:53:37 DEBUG (SyncWorker_9) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:53:37 DEBUG (SyncWorker_10) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:53:46 DEBUG (SyncWorker_10) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:53:46 DEBUG (SyncWorker_7) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:53:54 DEBUG (SyncWorker_7) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:53:54 DEBUG (SyncWorker_10) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:54:00 WARNING (MainThread) [homeassistant.core] Timed out waiting for shutdown stage 1 to complete, the shutdown will continue
2021-06-02 17:54:02 DEBUG (SyncWorker_10) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:54:02 DEBUG (SyncWorker_4) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:54:11 DEBUG (SyncWorker_4) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:54:11 DEBUG (SyncWorker_5) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:54:19 DEBUG (SyncWorker_5) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:54:19 DEBUG (SyncWorker_8) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:54:27 DEBUG (SyncWorker_8) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:54:27 DEBUG (SyncWorker_9) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:54:36 DEBUG (SyncWorker_9) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:54:36 DEBUG (SyncWorker_8) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:54:44 DEBUG (SyncWorker_8) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:54:44 DEBUG (SyncWorker_4) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:54:53 DEBUG (SyncWorker_4) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:54:53 DEBUG (SyncWorker_7) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:55:00 WARNING (MainThread) [homeassistant.core] Timed out waiting for shutdown stage 2 to complete, the shutdown will continue
2021-06-02 17:55:01 DEBUG (SyncWorker_7) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:55:01 DEBUG (SyncWorker_1) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:55:09 DEBUG (SyncWorker_1) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:55:09 DEBUG (SyncWorker_3) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:55:18 DEBUG (SyncWorker_3) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:55:18 DEBUG (SyncWorker_9) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:55:26 DEBUG (SyncWorker_9) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:55:26 DEBUG (SyncWorker_10) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 17:55:30 WARNING (MainThread) [homeassistant.core] Timed out waiting for shutdown stage 3 to complete, the shutdown will continue
2021-06-02 17:55:30 WARNING (MainThread) [homeassistant.util.executor] Thread[SyncWorker_10] is still running at shutdown: File "/usr/local/lib/python3.8/threading.py", line 890, in _bootstrap
self._bootstrap_inner()
File "/usr/local/lib/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/usr/local/lib/python3.8/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python3.8/concurrent/futures/thread.py", line 80, in _worker
work_item.run()
File "/usr/local/lib/python3.8/concurrent/futures/thread.py", line 57, in run
result = self.fn(*self.args, **self.kwargs)
File "/usr/src/homeassistant/homeassistant/components/modbus/modbus.py", line 310, in _pymodbus_call
result = self._call_type[use_call][ENTRY_FUNC](address, value, **kwargs)
File "/usr/local/lib/python3.8/site-packages/pymodbus/client/common.py", line 125, in read_input_registers
return self.execute(request)
File "/usr/local/lib/python3.8/site-packages/pymodbus/client/sync.py", line 109, in execute
return self.transaction.execute(request)
File "/usr/local/lib/python3.8/site-packages/pymodbus/transaction.py", line 194, in execute
response, last_exception = self._retry_transaction(retries, "empty", request, expected_response_length, full=full)
File "/usr/local/lib/python3.8/site-packages/pymodbus/transaction.py", line 249, in _retry_transaction
self.client.connect()
File "/usr/local/lib/python3.8/site-packages/pymodbus/client/sync.py", line 652, in connect
self.socket = serial.serial_for_url(self.port,
File "/usr/local/lib/python3.8/site-packages/serial/__init__.py", line 90, in serial_for_url
instance.open()
File "/usr/local/lib/python3.8/site-packages/serial/serialposix.py", line 322, in open
self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
2021-06-02 17:55:31 WARNING (MainThread) [homeassistant.util.executor] Thread[SyncWorker_10] is still running at shutdown: File "/usr/local/lib/python3.8/threading.py", line 890, in _bootstrap
self._bootstrap_inner()
File "/usr/local/lib/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/usr/local/lib/python3.8/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python3.8/concurrent/futures/thread.py", line 80, in _worker
work_item.run()
File "/usr/local/lib/python3.8/concurrent/futures/thread.py", line 57, in run
result = self.fn(*self.args, **self.kwargs)
File "/usr/src/homeassistant/homeassistant/components/modbus/modbus.py", line 310, in _pymodbus_call
result = self._call_type[use_call][ENTRY_FUNC](address, value, **kwargs)
File "/usr/local/lib/python3.8/site-packages/pymodbus/client/common.py", line 125, in read_input_registers
return self.execute(request)
File "/usr/local/lib/python3.8/site-packages/pymodbus/client/sync.py", line 109, in execute
return self.transaction.execute(request)
File "/usr/local/lib/python3.8/site-packages/pymodbus/transaction.py", line 194, in execute
response, last_exception = self._retry_transaction(retries, "empty", request, expected_response_length, full=full)
File "/usr/local/lib/python3.8/site-packages/pymodbus/transaction.py", line 255, in _retry_transaction
return self._transact(packet, response_length, full=full)
File "/usr/local/lib/python3.8/site-packages/pymodbus/transaction.py", line 273, in _transact
size = self._send(packet)
File "/usr/local/lib/python3.8/site-packages/pymodbus/transaction.py", line 308, in _send
return self.client.framer.sendPacket(packet)
File "/usr/local/lib/python3.8/site-packages/pymodbus/framer/rtu_framer.py", line 287, in sendPacket
time.sleep(self.client.timeout)
/usr/local/lib/python3.8/asyncio/base_events.py:641: RuntimeWarning: coroutine 'Entity.async_update_ha_state' was never awaited
self._ready.clear()
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
s6-svscanctl: fatal: unable to control /var/run/s6/services: supervisor not listening
[s6-finish] sending all processes the TERM signal.
[s6-finish] sending all processes the KILL signal and exiting.
[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] udev.sh: executing...
[cont-init.d] udev.sh: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.
You say it works if you change slave:2 and slave:3 to slave:1 ?
Also it can be changed to slave:2 or slave:3 and works normally. Problem only when I have several different slave devices.
Thank you for help.
Actually this is minimal test config for reproduce. Actually working config has many sensors for every slave. There are 3 PZEM-016 devices with voltage, current, power, energy, frequency, power_factor for each. While it was alone all work perfect even with scan_interval: 1
I assumed your production configuration was bigger, but it SUPER that you have scaled it down, that makes reading the log a joy !
To be honest right now, I do not have a clue with this happens to you, BUT I have enough information to setup my simulator and find the problem.
It seems you found another problem too, I can see a stack trace in all your logs, it seems to come when you shutdown HA, can you please confirm that ?
It seems you found another problem too, I can see a stack trace in all your logs, it seems to come when you shutdown HA, can you please confirm that ?
Sorry? I don't understand. Stack trace is different from time to time. I think it's only result of other problems.
Yes it is different, but there are modules from pymodbus in all of them.
What I cannot see in the log, is that if it happens in the running system or just when you shut HA down ?
Are you sure you get something back from your device, because I would have expected something like: 2021-05-31 17:12:06 DEBUG (SyncWorker_2) [pymodbus.client.sync] Connection to Modbus server established. Socket ('192.168.2.54', 33273) 2021-05-31 17:12:27 DEBUG (SyncWorker_3) [pymodbus.transaction] Current transaction state - IDLE 2021-05-31 17:12:27 DEBUG (SyncWorker_3) [pymodbus.transaction] Running transaction 1 2021-05-31 17:12:27 DEBUG (SyncWorker_3) [pymodbus.transaction] SEND: 0x0 0x1 0x0 0x0 0x0 0x6 0x0 0x3 0x90 0xf9 0x0 0x1 2021-05-31 17:12:27 DEBUG (SyncWorker_3) [pymodbus.client.sync] New Transaction state 'SENDING' 2021-05-31 17:12:27 DEBUG (SyncWorker_3) [pymodbus.transaction] Changing transaction state from 'SENDING' to 'WAITING FOR REPLY' 2021-05-31 17:12:27 DEBUG (SyncWorker_3) [pymodbus.transaction] Changing transaction state from 'WAITING FOR REPLY' to 'PROCESSING REPLY' 2021-05-31 17:12:27 DEBUG (SyncWorker_3) [pymodbus.transaction] RECV: 0x0 0x1 0x0 0x0 0x0 0x3 0x0 0x83 0x2 This is done with:
logger:
logs:
homeassistant.components.modbus: debug
pymodbus.client: debug
So to me it seems (in all your logs) we never send to the device and therefore never receive from the device.
What I cannot see in the log, is that if it happens in the running system or just when you shut HA down ?
Only when HA shut down. In core-2021.5.5 it froze HA UI until reboot or disconnect RS485-USB from server. In beta version it works and update data of all devices but server have problem with shutdown and with start up if I set small scan_interval. But nothing in logs.
Are you sure you get something back from your device, because I would have expected something like:
I use serial connection, not TCP. logger settings same but any lines from modbus except lines like: 2021-06-02 19:16:22 DEBUG (SyncWorker_1) [pymodbus.client.sync] New Transaction state 'SENDING'
So to me it seems (in all your logs) we never send to the device and therefore never receive from the device.
No. Server receive data. And show it in ui. All works now. May be no so often as expected. I'm not sure.
I've checked update time. scan_interval: 15 but sensors updates every 2 minutes. It's strange.
Look at the log, and see if that too only sends out every 2 minutes.
Look at the log, and see if that too only sends out every 2 minutes.
But, when slave:1 everywhere, it send 3 request every 5 seconds.
That is what it should do. What I am looking is the slave:1-2-3, I question myself why 2 minutes, it is because pymodbus sends every 2 minutes (in which case pymodbus blocks) or does it still send rapidly, but you only see an update in the UI every 2 minutes.
I've read that in HA Modbus integration there is no delay between request to different slave device. This is not problem with Modbus over TCP but it's problem on serial connection. Is it true?
I have not heard that, where did you read it ?
With tcp/ip it is like you have a direct serial line to each device (all are slave 0), but with serial you have 1 line and multiple devices (slave 1, slave 2, slave 3), that is bound to be slower, but we talk about max. 1/4 second when switching between devices.
Actually it is not slower when sending, but when receiving it adds a delay to check if the device wants to send more.
I have not heard that, where did you read it ?
At russian-language telegram channel. There was said that HA team know this problem but don't wont change this behavior.
Actually it is not slower when sending, but when receiving it adds a delay to check if the device wants to send more.
But in log we always see 2 request in the same second without any delay. For example:
2021-06-02 12:32:38 DEBUG (SyncWorker_4) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-02 12:32:38 DEBUG (SyncWorker_1) [pymodbus.client.sync] New Transaction state 'SENDING'
An this looks like a problem.
At russian-language telegram channel. There was said that HA team know this problem but don't wont change this behavior.
Well you can tell on that channel, that is not HA but the library we use: pymodbus.
And please do not forget this is the first issue I have seen regarding problems with slaves, so if nobody reported it, yes then we did nothing about it.
But in log we always see 2 request in the same second without any delay. For example:
2021-06-02 12:32:38 DEBUG (SyncWorker_4) [pymodbus.client.sync] New Transaction state 'SENDING' 2021-06-02 12:32:38 DEBUG (SyncWorker_1) [pymodbus.client.sync] New Transaction state 'SENDING'
An this looks like a problem. That is one send for each sensor. The request for each sensor depends on the scan_interval, so first all sensors are requested, then each sensor sleep scan_interval seconds.
Well you can tell on that channel, that is not HA but the library we use: pymodbus.
For users this is same. But I'm sorry. I've only asked about gossips that I've read.
And please do not forget this is the first issue I have seen regarding problems with slaves, so if nobody reported it, yes then we did nothing about it.
This is the reason why I've opened this issue and make all what I can for reproduce and investigation :)
That is one send for each sensor. The request for each sensor depends on the scan_interval, so first all sensors are requested, then each sensor sleep scan_interval seconds.
Are you sure? As I can see this is different workers. And they always run one by one in same second. No delay. But scan_interval:5 and delay:1. Should be pause at least 1 second.
With scan_interval 5 and 1, you should see: second 0: sensor1, sensor2 second 1-4: sensor2 second 5: sensor1, sensor2
but in your case it is different because there are no connection and no bytes are sent or received.
What is the prblem with different workers? that is normal.
second 0: sensor1, sensor2
but this is problem. We ask two different slave without any delay. Should be second 0: sensor1 second 1: sensor2 second 2-4: pause second 5: sensor1 second 6: sensor2
but in your case it is different because there are no connection and no bytes are sent or received.
I think this is only logging problem, because data comes to server without messages about connection and receive
no that is not how scan_interval works, it works independent on each sensor, so scan_interval: 1 means send a request every second for that sensor, the other with 5 is requested every 5 seconds.Sometimes both are requested in the same second and that is not a problem.
btw within the same second does not mean at the same time, you can send/receive about 400 messages pr second with 9.600bps.
When you only see sending, without a number of hex bytes it is because the rs485 does not allow send (DTR and RTS high), when you receive something you will see hex bytes received and the transaction being ended.
Anyhow I am about to setup a test bench with 2 sensors on different slaves, after that I can show you how your log should look like.
As I understand for testing I can put modified sources of modbus integration to custom_components in config?
Fix helps. Super. Thank you very match!!!
And now log looks like I expected:
2021-06-03 23:28:40 DEBUG (SyncWorker_1) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-03 23:28:41 DEBUG (SyncWorker_0) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-03 23:28:45 DEBUG (SyncWorker_4) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-03 23:28:46 DEBUG (SyncWorker_3) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-03 23:28:50 DEBUG (SyncWorker_1) [pymodbus.client.sync] New Transaction state 'SENDING'
2021-06-03 23:28:51 DEBUG (SyncWorker_4) [pymodbus.client.sync] New Transaction state 'SENDING'
Sending fire in different seconds :)
And updates much more often. It can be seen on graph in right part.
I'm not sure about HA dev process. When does this fix can be found in release build? Should I wait or better use fixed version as custom_component in production server?
This will not be released until 2021.7 because it contains a configuration change. So I suggest to use the fixed version until then.
I've thought about your fix. About:
Some USB serial RS485 adapter needs a short delay to switch between read and write.
And I think if this is true, problem should be reproduced with many sensors of one slave device. But it happened only with two devices. IMHO something wrong in slave devices, not in adapter.
And hardcoded 30ms it's good for my config and my devices. It will cause big performance trouble for high speed devices with many sensors. This delay should be configurable as timeout for modbus hub.
The problem
When add in Modbus integration more then one slave device reboot of Home Assistant (core-2021.6.0b5) take very long time. Older version of Home Assistant (core-2021.5.5) fully stop normal working. If slave only one device in config - all work perfect. Behavior depends only on config. Physically all devices connected every time.
What is version of Home Assistant Core has the issue?
core-2021.6.0b5
What was the last working version of Home Assistant Core?
No response
What type of installation are you running?
Home Assistant Supervised
Integration causing the issue
modbus
Link to integration documentation on our website
https://www.home-assistant.io/integrations/modbus
Example YAML snippet
Anything in the logs that might be useful for us?
Additional information
System Health
Home Assistant Community Store
GitHub API | ok -- | -- Github API Calls Remaining | 5000 Installed Version | 1.12.4 Stage | running Available Repositories | 822 Installed Repositories | 5Home Assistant Cloud
logged_in | false -- | -- can_reach_cert_server | ok can_reach_cloud_auth | ok can_reach_cloud | okHome Assistant Supervisor
host_os | Debian GNU/Linux 10 (buster) -- | -- update_channel | beta supervisor_version | supervisor-2021.05.4 docker_version | 20.10.6 disk_total | 216.1 GB disk_used | 85.7 GB healthy | true supported | true supervisor_api | ok version_api | ok installed_addons | Home Assistant Google Drive Backup (0.104.3), Check Home Assistant configuration (3.7.1), Log Viewer (0.11.0), File editor (5.3.1), Mosquitto broker (6.0.1), Grafana (6.3.5), NGINX Home Assistant SSL proxy (3.0.1), Terminal & SSH (9.1.3), Visual Studio Code (3.4.1), ESPHome (1.18.0), InfluxDB (4.1.1), MariaDB (2.3.0), Duck DNS (1.12.5), Zigbee2mqtt (1.18.3-1)Lovelace
dashboards | 1 -- | -- resources | 0 views | 8 mode | storage