Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 42 additions & 4 deletions openevsehttp/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from typing import Any, Callable, Optional

import aiohttp # type: ignore
from awesomeversion import AwesomeVersion

from .const import MAX_AMPS, MIN_AMPS
from .exceptions import (
Expand Down Expand Up @@ -346,6 +347,29 @@ async def set_charge_mode(self, mode: str = "fast") -> None:
_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"

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
) # noqa: E501
if response["msg"] != "done":
_LOGGER.error("Problem issuing command: %s", response["msg"])
raise UnknownError

async def get_override(self) -> None:
"""Get the manual override status."""
url = f"{self.url}override"
Expand Down Expand Up @@ -386,11 +410,25 @@ async def set_override(

async def toggle_override(self) -> None:
"""Toggle the manual override status."""
url = f"{self.url}override"
# TODO: Add version check (self._config["version"])
# 3.x: use RAPI commands $FE (enable) and $FS (sleep)
# 4.x: use HTTP API call

_LOGGER.debug("Toggling manual override %s", url)
response = await self.process_request(url=url, method="patch")
_LOGGER.debug("Toggle response: %s", response["msg"])
cutoff = AwesomeVersion("4.0.0")
current = AwesomeVersion(self._config["version"])

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."""
Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
awesomeversion
1 change: 1 addition & 0 deletions requirements_lint.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
-r requirements.txt
black==21.7b0
flake8==3.9.2
mypy==0.910
Expand Down
1 change: 1 addition & 0 deletions requirements_test.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
-r requirements.txt
pytest==6.2.4
pytest-cov==2.12.1
pytest-timeout==1.4.2
Expand Down
6 changes: 3 additions & 3 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
2 changes: 2 additions & 0 deletions tests/test_init.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import asyncio
import json

import pytest

import openevsehttp

pytestmark = pytest.mark.asyncio
Expand Down