|
40 | 40 | ERROR_UNKNOWN = "Unknown" |
41 | 41 | ERROR_TIMEOUT = "Timeout while updating " |
42 | 42 |
|
43 | | -LOOP_INFO = "Event loop already running, not creating new one." |
| 43 | +INFO_LOOP_RUNNING = "Event loop already running, not creating new one." |
44 | 44 |
|
45 | 45 | MAX_FAILED_ATTEMPTS = 5 |
46 | 46 |
|
@@ -275,26 +275,26 @@ def _start_listening(self): |
275 | 275 | try: |
276 | 276 | self._loop.run_until_complete(asyncio.gather(*pending)) |
277 | 277 | except RuntimeError: |
278 | | - _LOGGER.info(LOOP_INFO) |
| 278 | + _LOGGER.info(INFO_LOOP_RUNNING) |
279 | 279 |
|
280 | 280 | def _update_status(self, msgtype, data, error): |
281 | 281 | """Update data from websocket listener.""" |
282 | 282 | if msgtype == SIGNAL_CONNECTION_STATE: |
283 | 283 | if data == STATE_CONNECTED: |
284 | | - _LOGGER.debug("Websocket to %s successful", self.url) |
| 284 | + _LOGGER.debug("Websocket to %s successful", self.websocket.uri) |
285 | 285 | self._ws_listening = True |
286 | 286 | elif data == STATE_DISCONNECTED: |
287 | 287 | _LOGGER.debug( |
288 | 288 | "Websocket to %s disconnected, retrying", |
289 | | - self.url, |
| 289 | + self.websocket.uri, |
290 | 290 | ) |
291 | 291 | self._ws_listening = False |
292 | 292 | # Stopped websockets without errors are expected during shutdown |
293 | 293 | # and ignored |
294 | 294 | elif data == STATE_STOPPED and error: |
295 | 295 | _LOGGER.error( |
296 | 296 | "Websocket to %s failed, aborting [Error: %s]", |
297 | | - self.url, |
| 297 | + self.websocket.uri, |
298 | 298 | error, |
299 | 299 | ) |
300 | 300 | self._ws_listening = False |
@@ -643,6 +643,45 @@ def ota_update(self) -> str: |
643 | 643 | assert self._status is not None |
644 | 644 | return self._status["ota_update"] |
645 | 645 |
|
| 646 | + @property |
| 647 | + def manual_override(self) -> str: |
| 648 | + """Return if Manual Override is set.""" |
| 649 | + assert self._status is not None |
| 650 | + return self._status["manual_override"] |
| 651 | + |
| 652 | + @property |
| 653 | + def divertmode(self) -> str: |
| 654 | + """Return the divert mode.""" |
| 655 | + assert self._status is not None |
| 656 | + mode = self._status["divertmode"] |
| 657 | + if mode == 1: |
| 658 | + return "normal" |
| 659 | + return "eco" |
| 660 | + |
| 661 | + @property |
| 662 | + def available_current(self) -> float: |
| 663 | + """Return the computed available current for divert.""" |
| 664 | + assert self._status is not None |
| 665 | + return self._status["available_current"] |
| 666 | + |
| 667 | + @property |
| 668 | + def smoothed_available_current(self) -> float: |
| 669 | + """Return the computed smoothed available current for divert.""" |
| 670 | + assert self._status is not None |
| 671 | + return self._status["smoothed_available_current"] |
| 672 | + |
| 673 | + @property |
| 674 | + def charge_rate(self) -> float: |
| 675 | + """Return the divert charge rate.""" |
| 676 | + assert self._status is not None |
| 677 | + return self._status["charge_rate"] |
| 678 | + |
| 679 | + @property |
| 680 | + def divert_active(self) -> bool: |
| 681 | + """Return if divert is active.""" |
| 682 | + assert self._status is not None |
| 683 | + return self._status["divert_active"] |
| 684 | + |
646 | 685 | # There is currently no min/max amps JSON data |
647 | 686 | # available via HTTP API methods |
648 | 687 | @property |
|
0 commit comments