Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 2
More 0138-related improvements#425
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
Uh oh!
There was an error while loading. Please reload this page.
Changes from all commits
5a8b92c21c8eee3a6eb942554688af69c4671c8877475d95751500152e47f197ce9acd71607f09878506c2742b905425915c2a4bf2d4361c62fdd9bFile filter
Filter by extension
Conversations
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Uh oh!
There was an error while loading. Please reload this page.
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -46,7 +46,12 @@ | ||
| EnergyCalibrationRequest, | ||
| NodeInfoRequest, | ||
| ) | ||
| from ..messages.responses import NodeInfoResponse, NodeResponseType | ||
| from ..messages.responses import ( | ||
| CircleRelayInitStateResponse, | ||
| NodeAckResponseType, | ||
| NodeInfoResponse, | ||
| NodeResponseType, | ||
| ) | ||
| from .helpers import EnergyCalibration, raise_not_loaded | ||
| from .helpers.counter import EnergyCounters | ||
| from .helpers.firmware import CIRCLE_FIRMWARE_SUPPORT | ||
| @@ -1140,28 +1145,54 @@ async def _relay_init_get(self) -> bool | None: | ||
| "Retrieval of initial state of relay is not " | ||
| + f"supported for device {self.name}" | ||
| ) | ||
| request = CircleRelayInitStateRequest( | ||
| self._send, self._mac_in_bytes, False, False | ||
| ) | ||
| if (response := await request.send()) is not None: | ||
| await self._relay_init_update_state(response.relay.value == 1) | ||
| return self._relay_config.init_state | ||
| return None | ||
| async def _relay_init_set(self, state: bool) -> bool | None: | ||
| try: | ||
| request = CircleRelayInitStateRequest( | ||
| self._send, self._mac_in_bytes, False, False | ||
| ) | ||
| except MessageError as err: | ||
| raise NodeError(f"{self._mac_in_str} error: {err}") from err | ||
| if (response := await request.send()) is None: | ||
| _LOGGER.warning( | ||
| "No response from %s to get relay init setting", self._mac_in_str | ||
| ) | ||
| return None | ||
| if isinstance(response, CircleRelayInitStateResponse): | ||
| _LOGGER.debug("Successful get of relay init state for %s", self._mac_in_str) | ||
| state = response.relay.value == 1 | ||
| await self._relay_init_update_state(state) | ||
| return state | ||
| async def _relay_init_set(self, state: bool) -> None: | ||
| """Configure relay init state.""" | ||
| if NodeFeature.RELAY_INIT not in self._features: | ||
| raise NodeError( | ||
| "Configuring of initial state of relay is not" | ||
| + f"supported for device {self.name}" | ||
| ) | ||
| request = CircleRelayInitStateRequest( | ||
| self._send, self._mac_in_bytes, True, state | ||
| ) | ||
| if (response := await request.send()) is not None: | ||
| await self._relay_init_update_state(response.relay.value == 1) | ||
| return self._relay_config.init_state | ||
| return None | ||
| try: | ||
| request = CircleRelayInitStateRequest( | ||
| self._send, self._mac_in_bytes, True, state | ||
| ) | ||
| except MessageError as err: | ||
| raise NodeError(f"{self._mac_in_str} error: {err}") from err | ||
| if (response := await request.send()) is None: | ||
| _LOGGER.warning( | ||
| "No response from %s to configure relay init setting", self._mac_in_str | ||
| ) | ||
| return None | ||
| if response.node_ack_type == NodeAckResponseType.DEFAULT_FAIL: | ||
| _LOGGER.warning("Failed to set relay init state for %s", self._mac_in_str) | ||
| return None | ||
| if response.node_ack_type == NodeAckResponseType.DEFAULT_ACK: | ||
| _LOGGER.debug("Successful set relay init state for %s", self._mac_in_str) | ||
| await self._relay_init_update_state(state) | ||
Comment on lines
+1183
to
+1195
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Propagate relay-init write failures instead of returning stale cached state. On Line 1179 and Line 1185, this helper only logs and returns. If 🐛 Proposed fix if (response := await request.send()) is None:
_LOGGER.warning(
"No response from %s to configure relay init setting", self._mac_in_str
)
- return None+ raise NodeError(+ f"No response from {self._mac_in_str} to configure relay init setting"+ )
if response.node_ack_type == NodeAckResponseType.DEFAULT_FAIL:
_LOGGER.warning("Failed to set relay init state for %s", self._mac_in_str)
- return None+ raise NodeError(f"Failed to set relay init state for {self._mac_in_str}")
if response.node_ack_type == NodeAckResponseType.DEFAULT_ACK:
_LOGGER.debug("Successful set relay init state for %s", self._mac_in_str)
await self._relay_init_update_state(state)
+ return++ raise NodeError(+ f"Unexpected ack {response.node_ack_type!r} for relay init set on {self._mac_in_str}"+ ) | ||
| async def _relay_init_load_from_cache(self) -> bool: | ||
| """Load relay init state from cache. Returns True if retrieval was successful.""" | ||
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.