From 6574d1eff320fadf4690bc1f6a99b1880bd2455b Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 7 Jan 2022 12:57:17 -0700 Subject: [PATCH 1/5] docs: placeholder --- openevsehttp/__init__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/openevsehttp/__init__.py b/openevsehttp/__init__.py index 1b6b720..0281c4a 100644 --- a/openevsehttp/__init__.py +++ b/openevsehttp/__init__.py @@ -386,6 +386,10 @@ async def set_override( async def toggle_override(self) -> None: """Toggle the manual override status.""" + # TODO: Add version check + # 3.x: use RAPI commands $FE (enable) and $FS (sleep) + # 4.x: use HTTP API call + url = f"{self.url}override" _LOGGER.debug("Toggling manual override %s", url) From ec9c75a39d8779c207cfb40f5df85ac483844571 Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 7 Jan 2022 13:20:31 -0700 Subject: [PATCH 2/5] feat: add divertmode function --- openevsehttp/__init__.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/openevsehttp/__init__.py b/openevsehttp/__init__.py index 0281c4a..a7d85f3 100644 --- a/openevsehttp/__init__.py +++ b/openevsehttp/__init__.py @@ -338,6 +338,21 @@ async def set_charge_mode(self, mode: str = "fast") -> None: data = {"charge_mode": mode} + async def divert_mode(self, mode: str = "Normal") -> None: + """Set the divert mode to either Normal or Eco modes.""" + url = f"{self.url}divertmode" + + if mode != "Normal" or mode != "Eco": + _LOGGER.error("Invalid value for divertmode: %s", mode) + raise ValueError + + if mode == "Normal": + value = 1 + else: + value = 2 + + data = {"divertmode": value} + _LOGGER.debug("Setting charge mode to %s", mode) response = await self.process_request( url=url, method="post", data=data From aaa7b67386ba1b4b5410b475c8ede900a749a7bf Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 7 Jan 2022 13:52:36 -0700 Subject: [PATCH 3/5] refactor: formatting and linting --- openevsehttp/__init__.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/openevsehttp/__init__.py b/openevsehttp/__init__.py index a7d85f3..0def153 100644 --- a/openevsehttp/__init__.py +++ b/openevsehttp/__init__.py @@ -338,6 +338,14 @@ async def set_charge_mode(self, mode: str = "fast") -> None: data = {"charge_mode": mode} + _LOGGER.debug("Setting charge mode to %s", mode) + response = await self.process_request( + url=url, method="post", data=data + ) # noqa: E501 + if response["msg"] != "done": + _LOGGER.error("Problem issuing command: %s", response["msg"]) + raise UnknownError + async def divert_mode(self, mode: str = "Normal") -> None: """Set the divert mode to either Normal or Eco modes.""" url = f"{self.url}divertmode" @@ -345,13 +353,13 @@ async def divert_mode(self, mode: str = "Normal") -> None: if mode != "Normal" or mode != "Eco": _LOGGER.error("Invalid value for divertmode: %s", mode) raise ValueError - + if mode == "Normal": value = 1 else: value = 2 - data = {"divertmode": value} + data = {"divertmode": value} _LOGGER.debug("Setting charge mode to %s", mode) response = await self.process_request( From 8bd18bd9f903cc7369612433ef7efae23dfb6bbf Mon Sep 17 00:00:00 2001 From: Chris Date: Tue, 11 Jan 2022 07:16:42 -0700 Subject: [PATCH 4/5] feat: add version check to toggle_override --- openevsehttp/__init__.py | 22 +++++++++++++++++----- requirements.txt | 1 + requirements_lint.txt | 1 + requirements_test.txt | 1 + 4 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 requirements.txt diff --git a/openevsehttp/__init__.py b/openevsehttp/__init__.py index 0def153..82413a5 100644 --- a/openevsehttp/__init__.py +++ b/openevsehttp/__init__.py @@ -1,6 +1,8 @@ """Provide a package for python-openevse-http.""" from __future__ import annotations +from awesomeversion import AwesomeVersion + import asyncio import datetime import logging @@ -409,15 +411,25 @@ async def set_override( async def toggle_override(self) -> None: """Toggle the manual override status.""" - # TODO: Add version check + # TODO: Add version check (self._config["version"]) # 3.x: use RAPI commands $FE (enable) and $FS (sleep) # 4.x: use HTTP API call - url = f"{self.url}override" + cutoff = AwesomeVersion("4.0.0") + current = AwesomeVersion(self._config["version"]) - _LOGGER.debug("Toggling manual override %s", url) - response = await self.process_request(url=url, method="patch") - _LOGGER.debug("Toggle response: %s", response["msg"]) + if cutoff < current: + url = f"{self.url}override" + + _LOGGER.debug("Toggling manual override %s", url) + response = await self.process_request(url=url, method="patch") + _LOGGER.debug("Toggle response: %s", response["msg"]) + else: + # Older firmware use RAPI commands + _LOGGER.debug("Toggling manual override via RAPI") + command = "$FE" if self._config["state"] == "sleeping" else "$FS" + response = await self.send_command(command) + _LOGGER.debug("Toggle response: %s", response[1]) async def clear_override(self) -> None: """Clear the manual override status.""" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..d983863 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +AwesomeVersion \ No newline at end of file diff --git a/requirements_lint.txt b/requirements_lint.txt index 3bfa91a..89852cd 100644 --- a/requirements_lint.txt +++ b/requirements_lint.txt @@ -1,3 +1,4 @@ +-r requirements.txt black==21.7b0 flake8==3.9.2 mypy==0.910 diff --git a/requirements_test.txt b/requirements_test.txt index 1a08932..5c8fdc5 100644 --- a/requirements_test.txt +++ b/requirements_test.txt @@ -1,3 +1,4 @@ +-r requirements.txt pytest==6.2.4 pytest-cov==2.12.1 pytest-timeout==1.4.2 From a5052a70a95d6000891bb8b0678e60bead5501ae Mon Sep 17 00:00:00 2001 From: Chris Date: Tue, 11 Jan 2022 13:52:11 -0700 Subject: [PATCH 5/5] formatting and linting --- openevsehttp/__init__.py | 3 +-- requirements.txt | 2 +- tests/conftest.py | 6 +++--- tests/test_init.py | 2 ++ 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/openevsehttp/__init__.py b/openevsehttp/__init__.py index 82413a5..2045213 100644 --- a/openevsehttp/__init__.py +++ b/openevsehttp/__init__.py @@ -1,14 +1,13 @@ """Provide a package for python-openevse-http.""" from __future__ import annotations -from awesomeversion import AwesomeVersion - import asyncio import datetime import logging from typing import Any, Callable, Optional import aiohttp # type: ignore +from awesomeversion import AwesomeVersion from .const import MAX_AMPS, MIN_AMPS from .exceptions import ( diff --git a/requirements.txt b/requirements.txt index d983863..c0152f4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1 @@ -AwesomeVersion \ No newline at end of file +awesomeversion \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py index 9c08faa..1657270 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,12 +1,12 @@ """Provide common pytest fixtures.""" -import pytest import json +import pytest +from aioresponses import aioresponses + import openevsehttp from tests.common import load_fixture -from aioresponses import aioresponses - TEST_URL_STATUS = "http://openevse.test.tld/status" TEST_URL_CONFIG = "http://openevse.test.tld/config" TEST_URL_RAPI = "http://openevse.test.tld/r" diff --git a/tests/test_init.py b/tests/test_init.py index 3a303a0..6df057e 100644 --- a/tests/test_init.py +++ b/tests/test_init.py @@ -1,6 +1,8 @@ import asyncio import json + import pytest + import openevsehttp pytestmark = pytest.mark.asyncio