-
Notifications
You must be signed in to change notification settings - Fork 2k
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
[HVAC] Thermostat deadband handling #35673
base: master
Are you sure you want to change the base?
[HVAC] Thermostat deadband handling #35673
Conversation
Review changes with SemanticDiff. |
PR #35673: Size comparison from afb1a33 to 8b0f0cf Increases above 0.2%:
Full report (80 builds for bl602, bl702, bl702l, cyw30739, efr32, esp32, linux, nrfconnect, nxp, psoc6, qpg, stm32, telink)
|
PR #35673: Size comparison from afb1a33 to b3bbfa2 Increases above 0.2%:
Full report (82 builds for bl602, bl702, bl702l, cyw30739, efr32, esp32, linux, nrfconnect, nxp, psoc6, qpg, stm32, telink, tizen)
|
PR #35673: Size comparison from db11057 to 6a4a0ed Increases above 0.2%:
Full report (11 builds for cc32xx, nrfconnect, nxp, stm32, tizen)
|
PR #35673: Size comparison from db11057 to 3d70846 Increases above 0.2%:
Full report (88 builds for bl602, bl702, bl702l, cc13x4_26x4, cc32xx, cyw30739, efr32, esp32, linux, nrfconnect, nxp, psoc6, qpg, stm32, telink, tizen)
|
… granbery/thermostat_deadband_fix
PR #35673: Size comparison from 55e2a3f to 6da9f85 Increases above 0.2%:
Full report (88 builds for bl602, bl702, bl702l, cc13x4_26x4, cc32xx, cyw30739, efr32, esp32, linux, nrfconnect, nxp, psoc6, qpg, stm32, telink, tizen)
|
if (OccupiedCoolingSetpoint::Get(endpoint, &setpointLimits.occupiedCoolingSetpoint) != Status::Success) | ||
{ | ||
ChipLogError(Zcl, "Error: Can not read Occupied Cooling Setpoint"); | ||
return Status::Failure; |
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.
Is there a reason we're not returning the actual status from the Get() here? Similar in various places below.
If there is a reason (e.g. we don't want to claim UnsupportedAttribute for an attribute write to some attribute that's different from the one being actually gotten here), it would be good to document that reason.
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.
In an attempt to keep the PR small, I put in a TODO down on line 829 to change the existing code to call this function, so that we wouldn't have two bits of code that fetch all the setpoints. For that to work and be consistent with the existing SDK, this function has to replicate what the existing code does.
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.
@hasty my point is that if it's important to not propagate the return value, that should be documented in the code, so someone does not "fix" it later.
if (maxValidHeatingSetpoint < minHeatingSetpoint) | ||
{ | ||
// If we need to adjust the heating setpoint to preserve the deadband, it will go below the min heat setpoint | ||
return Status::InvalidValue; |
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.
So where does the spec say to return InvalidValue in this case? Here's what I see in the spec, for example for the OccupiedCoolingSetpoint attribute:
If an attempt is made to set this attribute to a value greater than MaxCoolSetpointLimit or less than MinCoolSetpointLimit, a response with the status code CONSTRAINT_ERROR SHALL be returned.
If this attribute is set to a value that is less than (OccupiedHeatingSetpoint + MinSetpointDeadBand), the value of OccupiedHeatingSetpoint SHALL be adjusted to (OccupiedCoolingSetpoint - MinSetpointDeadBand).
That second sentence does not seem to envision what happens when the value of OccupiedHeatingSetpoint cannot thus be adjusted. But that first items seems to suggest that trying to do the adjustment should result in ConstraintError, no?
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.
We can certainly improve the spec to explain that the server won't allow you to violate the deadband.
InvalidValue is ConstraintError; I'm only using it here because all the setpoint code uses InvalidValue, and again, trying to keep the PR consistent and small.
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.
InvalidValue is the old, deprecated name... But OK, maybe a followup to switch it globally here?
Co-authored-by: Boris Zbarsky <bzbarsky@apple.com>
PR #35673: Size comparison from a854245 to e9b72fe Increases above 0.2%:
Full report (3 builds for cc32xx, stm32)
|
PR #35673: Size comparison from a854245 to 5d1c13b Increases above 0.2%:
Full report (88 builds for bl602, bl702, bl702l, cc13x4_26x4, cc32xx, cyw30739, efr32, esp32, linux, nrfconnect, nxp, psoc6, qpg, stm32, telink, tizen)
|
This syncs the deadband handling behavior in thermostat-server with the spec; instead of rejecting any setpoint writes which violate the deadband, it attempts to shift the complementary setpoint to preserve the deadband, only erroring if this violates the min/max for the setpoint.
Fixes #36191