|
50 | 50 | CACHE_NODE_TYPE = "node_type" |
51 | 51 | CACHE_HARDWARE = "hardware" |
52 | 52 | CACHE_NODE_INFO_TIMESTAMP = "node_info_timestamp" |
| 53 | +CACHE_RELAY = "relay" |
53 | 54 |
|
54 | 55 | class PlugwiseBaseNode(FeaturePublisher, ABC): |
55 | 56 | """Abstract Base Class for a Plugwise node.""" |
@@ -459,44 +460,50 @@ async def node_info_update( |
459 | 460 | _LOGGER.debug("No response for node_info_update() for %s", self.mac) |
460 | 461 | await self._available_update_state(False) |
461 | 462 | return self._node_info |
| 463 | + |
462 | 464 | await self._available_update_state(True, node_info.timestamp) |
463 | 465 | await self.update_node_details( |
464 | 466 | firmware=node_info.firmware, |
465 | | - node_type=node_info.node_type, |
466 | 467 | hardware=node_info.hardware, |
467 | | - timestamp=node_info.timestamp, |
468 | | - relay_state=node_info.relay_state, |
469 | 468 | logaddress_pointer=node_info.current_logaddress_pointer, |
| 469 | + node_type=node_info.node_type, |
| 470 | + relay_state=node_info.relay_state, |
| 471 | + timestamp=node_info.timestamp, |
470 | 472 | ) |
471 | 473 | return self._node_info |
472 | 474 |
|
473 | 475 | async def _node_info_load_from_cache(self) -> bool: |
474 | 476 | """Load node info settings from cache.""" |
| 477 | + if self._available: |
| 478 | + # Skip loading this data from cache when the Node is available |
| 479 | + return True |
| 480 | + |
475 | 481 | firmware = self._get_cache_as_datetime(CACHE_FIRMWARE) |
476 | 482 | hardware = self._get_cache(CACHE_HARDWARE) |
477 | | - timestamp = self._get_cache_as_datetime(CACHE_NODE_INFO_TIMESTAMP) |
478 | 483 | node_type: NodeType | None = None |
479 | 484 | if (node_type_str := self._get_cache(CACHE_NODE_TYPE)) is not None: |
480 | 485 | node_type = NodeType(int(node_type_str)) |
481 | 486 |
|
| 487 | + relay_state = self._get_cache(CACHE_RELAY) |
| 488 | + timestamp = self._get_cache_as_datetime(CACHE_NODE_INFO_TIMESTAMP) |
482 | 489 | return await self.update_node_details( |
483 | 490 | firmware=firmware, |
484 | 491 | hardware=hardware, |
| 492 | + logaddress_pointer=None, |
485 | 493 | node_type=node_type, |
| 494 | + relay_state=relay_state, |
486 | 495 | timestamp=timestamp, |
487 | | - relay_state=None, |
488 | | - logaddress_pointer=None, |
489 | 496 | ) |
490 | 497 |
|
491 | 498 | # pylint: disable=too-many-arguments |
492 | 499 | async def update_node_details( |
493 | 500 | self, |
494 | 501 | firmware: datetime | None, |
495 | 502 | hardware: str | None, |
| 503 | + logaddress_pointer: int | None, |
496 | 504 | node_type: NodeType | None, |
497 | | - timestamp: datetime | None, |
498 | 505 | relay_state: bool | None, |
499 | | - logaddress_pointer: int | None, |
| 506 | + timestamp: datetime | None, |
500 | 507 | ) -> bool: |
501 | 508 | """Process new node info and return true if all fields are updated.""" |
502 | 509 | _LOGGER.debug( |
|
0 commit comments