inverter.cpp: avoid mess with simultaneous read/write operations#77
Open
dilyanpalauzov wants to merge 1 commit intoned-kelly:masterfrom
Open
inverter.cpp: avoid mess with simultaneous read/write operations#77dilyanpalauzov wants to merge 1 commit intoned-kelly:masterfrom
dilyanpalauzov wants to merge 1 commit intoned-kelly:masterfrom
Conversation
When many inverter_poller at the same time send commands, the result is undefined.
This locks exclusively the configuration file, while the process is running,
so that simultaneous instances have to wait until the file is released.
For some reason locking the device /dev/hidraw0 does not work for me,
I get sometimes the output from previous runs. I suspect that when
cInverter::query() does exceed the 2s timeout, it quits, and leaves the
response of its commands on the wire. For fd = /dev/hidraw0
tcflush(fd, TCOFLUSH);
has no effect.
As a matter of fact, on my system I have increased the timeout in
cInverter::query() to 15s and now it does always work correctly.
Also the program, when called with -1, could exit, while the thread
is receiving data, this leaves the next invocation with some
ready-data, which it is not expecting.
dilyanpalauzov
added a commit
to dilyanpalauzov/docker-voltronic-homeassistant
that referenced
this pull request
Apr 9, 2022
ned-kelly#77 When many inverter_poller at the same time send commands, the result is undefined. This locks exclusively the configuration file, while the process is running, so that simultaneous instances have to wait until the file is released. For some reason locking the device /dev/hidraw0 does not work for me, I get sometimes the output from previous runs. I suspect that when cInverter::query() does exceed the 2s timeout, it quits, and leaves the response of its commands on the wire. For fd = /dev/hidraw0 tcflush(fd, TCOFLUSH); has no effect. As a matter of fact, on my system I have increased the timeout in cInverter::query() to 15s and now it does always work correctly. Also the program, when called with -1, could exit, while the thread is receiving data, this leaves the next invocation with some ready-data, which it is not expecting.
Owner
|
HI @dilyanpalauzov is there any chance you could add all your fixes and improvements as one PR and i'll approve it. Unfortunately I don't have an inverter to test on anymore (Am getting another one soon - the last one died (again)) so if anyone else is also able to test that would be appreciated. Cheers, |
dilyanpalauzov
added a commit
to dilyanpalauzov/docker-voltronic-homeassistant
that referenced
this pull request
Aug 25, 2022
ned-kelly#77 When many inverter_poller at the same time send commands, the result is undefined. This locks exclusively the configuration file, while the process is running, so that simultaneous instances have to wait until the file is released. For some reason locking the device /dev/hidraw0 does not work for me, I get sometimes the output from previous runs. I suspect that when cInverter::query() does exceed the 2s timeout, it quits, and leaves the response of its commands on the wire. For fd = /dev/hidraw0 tcflush(fd, TCOFLUSH); has no effect. As a matter of fact, on my system I have increased the timeout in cInverter::query() to 15s and now it does always work correctly. Also the program, when called with -1, could exit, while the thread is receiving data, this leaves the next invocation with some ready-data, which it is not expecting.
Open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When many inverter_poller at the same time send commands, the result is undefined.
This locks exclusively the configuration file, while the process is running, so that simultaneous instances have to wait until the file is released.
For some reason locking the device /dev/hidraw0 does not work for me, I get sometimes the output from previous runs. I suspect that when
cInverter::query()does exceed the 2s timeout, it quits, and leaves theresponse of its commands on the wire. For fd = /dev/hidraw0:
tcflush(fd, TCOFLUSH);has no effect.As a matter of fact, on my system I have increased the timeout in
cInverter::query()to 15s and now it does always work correctly.Also the program, when called with -1, could exit, while the thread is receiving data, this leaves the next invocation with some ready-data, which it is not expecting.