New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Modbus, allow received int to be a float. #110648
Conversation
if self._precision > 0 or self._scale != int(self._scale): | ||
self._value_is_int = False |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should the default precision not be 2
if the returned value is not an int?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes and no, that is being set in line 199. The default of 2 is if the user configures e.g. "datatype: float", not what's being returned.
The user can configure "precision: 3" and "datatype: int32" then the returned value will e.g. be "1.000"
The user can configure "scale: 0.001" and "datatype:int32" then value 123 would be returned as 1.23
This is however not what is happening here, in this case user have configured e.g. "datatype: int16" and "precision: 2" or "scale: 0.001" that means that the returned value is no longer and int but a float, and hence "self._value_is_int = False" is correct.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM,
Thnx @janiversen 👍
Breaking change
Proposed change
Configuration "datatype: INT*", means the modbus integration receives an int (in 1 or multiple registers depending on type), without anymore configuration the value is passed to core as an int.
However Configuration "scale: 0,01" divides the value by 100, and turns it into a float that are send to core, likewise "precision: 2" adds 2 decimal places and turns it into a float.
This works nicely with the current version, except for virtual devices...this PR corrects that problem.
Type of change
Additional information
Checklist
ruff format homeassistant tests
)If user exposed functionality or configuration variables are added/changed:
If the code communicates with devices, web services, or third-party tools:
Updated and included derived files by running:
python3 -m script.hassfest
.requirements_all.txt
.Updated by running
python3 -m script.gen_requirements_all
..coveragerc
.To help with the load of incoming pull requests: