Skip to content

Commit d3e59a1

Browse files
authored
fix: trim dev from version string if detected
2 parents 14c29ca + 32ac743 commit d3e59a1

File tree

4 files changed

+129
-5
lines changed

4 files changed

+129
-5
lines changed

openevsehttp/__init__.py

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -469,10 +469,19 @@ async def toggle_override(self) -> None:
469469
# 4.x: use HTTP API call
470470

471471
cutoff = AwesomeVersion("4.0.0")
472-
current = AwesomeVersion(self._config["version"])
472+
current = ""
473473

474474
_LOGGER.debug("Detected firmware: %s", current)
475475

476+
if "dev" in self._config["version"]:
477+
value = self._config["version"]
478+
_LOGGER.debug("Stripping 'dev' from version.")
479+
value = value.split(".")
480+
value = ".".join(value[0:3])
481+
current = AwesomeVersion(value)
482+
else:
483+
current = AwesomeVersion(self._config["version"])
484+
476485
if current >= cutoff:
477486
url = f"{self.url}override"
478487

@@ -500,7 +509,18 @@ async def set_current(self, amps: int = 6) -> None:
500509
# 4.1.2: use HTTP API call
501510
amps = int(amps)
502511
cutoff = AwesomeVersion("4.1.2")
503-
current = AwesomeVersion(self._config["version"])
512+
current = ""
513+
514+
_LOGGER.debug("Detected firmware: %s", current)
515+
516+
if "dev" in self._config["version"]:
517+
value = self._config["version"]
518+
_LOGGER.debug("Stripping 'dev' from version.")
519+
value = value.split(".")
520+
value = ".".join(value[0:3])
521+
current = AwesomeVersion(value)
522+
else:
523+
current = AwesomeVersion(self._config["version"])
504524

505525
if current >= cutoff:
506526
url = f"{self.url}config"
@@ -542,7 +562,18 @@ async def firmware_check(self) -> dict | None:
542562
method = "get"
543563

544564
cutoff = AwesomeVersion("4.0.0")
545-
current = AwesomeVersion(self._config["version"])
565+
current = ""
566+
567+
_LOGGER.debug("Detected firmware: %s", current)
568+
569+
if "dev" in self._config["version"]:
570+
value = self._config["version"]
571+
_LOGGER.debug("Stripping 'dev' from version.")
572+
value = value.split(".")
573+
value = ".".join(value[0:3])
574+
current = AwesomeVersion(value)
575+
else:
576+
current = AwesomeVersion(self._config["version"])
546577

547578
if current >= cutoff:
548579
url = f"{base_url}ESP32_WiFi_V4.x/releases/latest"
@@ -642,7 +673,12 @@ def openevse_firmware(self) -> str:
642673
def wifi_firmware(self) -> str:
643674
"""Return the ESP firmware version."""
644675
assert self._config is not None
645-
return self._config["version"]
676+
value = self._config["version"]
677+
if "dev" in value:
678+
_LOGGER.debug("Stripping 'dev' from version.")
679+
value = value.split(".")
680+
value = ".".join(value[0:3])
681+
return value
646682

647683
@property
648684
def ip_address(self) -> str:

tests/conftest.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,22 @@ def test_charger(mock_aioclient):
5959
return openevsehttp.OpenEVSE(TEST_TLD)
6060

6161

62+
@pytest.fixture(name="test_charger_dev")
63+
def test_charger_dev(mock_aioclient):
64+
"""Load the charger data."""
65+
mock_aioclient.get(
66+
TEST_URL_STATUS,
67+
status=200,
68+
body=load_fixture("v4_json/status.json"),
69+
)
70+
mock_aioclient.get(
71+
TEST_URL_CONFIG,
72+
status=200,
73+
body=load_fixture("v4_json/config-dev.json"),
74+
)
75+
return openevsehttp.OpenEVSE(TEST_TLD)
76+
77+
6278
@pytest.fixture(name="test_charger_v2")
6379
def test_charger_v2(mock_aioclient):
6480
"""Load the charger data."""
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
{
2+
"firmware": "7.1.3",
3+
"protocol": "-",
4+
"espflash": 4194304,
5+
"wifi_serial": "1234567890AB",
6+
"version": "4.1.5.dev",
7+
"diodet": 0,
8+
"gfcit": 0,
9+
"groundt": 0,
10+
"relayt": 0,
11+
"ventt": 0,
12+
"tempt": 0,
13+
"service": 2,
14+
"scale": 220,
15+
"offset": 0,
16+
"max_current_soft": 48,
17+
"min_current_hard": 6,
18+
"max_current_hard": 48,
19+
"mqtt_supported_protocols": [
20+
"mqtt",
21+
"mqtts"
22+
],
23+
"http_supported_protocols": [
24+
"http",
25+
"https"
26+
],
27+
"ssid": "Datanode-IoT",
28+
"pass": "_DUMMY_PASSWORD",
29+
"www_username": "",
30+
"www_password": "",
31+
"hostname": "openevse-7b2c",
32+
"sntp_hostname": "0.us.pool.ntp.org",
33+
"time_zone": "America/Phoenix|MST7",
34+
"emoncms_server": "https://emoncms.collective.lan/",
35+
"emoncms_node": "openevse",
36+
"emoncms_apikey": "_DUMMY_PASSWORD",
37+
"emoncms_fingerprint": "",
38+
"mqtt_server": "192.168.1.198",
39+
"mqtt_port": 1883,
40+
"mqtt_topic": "openevse",
41+
"mqtt_user": "devices",
42+
"mqtt_pass": "_DUMMY_PASSWORD",
43+
"mqtt_solar": "",
44+
"mqtt_grid_ie": "home-assistant/power/watts",
45+
"mqtt_vrms": "home-assistant/solar/watts",
46+
"mqtt_announce_topic": "openevse/announce/7b2c",
47+
"ohm": "",
48+
"divert_PV_ratio": 1.1,
49+
"divert_attack_smoothing_factor": 0.4,
50+
"divert_decay_smoothing_factor": 0.05,
51+
"divert_min_charge_time": 600,
52+
"tesla_username": "",
53+
"tesla_password": "",
54+
"tesla_vehidx": -1,
55+
"led_brightness": 128,
56+
"flags": 522,
57+
"emoncms_enabled": false,
58+
"mqtt_enabled": true,
59+
"mqtt_reject_unauthorized": true,
60+
"ohm_enabled": false,
61+
"sntp_enabled": true,
62+
"tesla_enabled": false,
63+
"divert_enabled": true,
64+
"pause_uses_disabled": false,
65+
"mqtt_protocol": "mqtt",
66+
"charge_mode": "fast"
67+
}

tests/test_init.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,12 @@ async def test_get_service_level(fixture, expected, request):
221221

222222

223223
@pytest.mark.parametrize(
224-
"fixture, expected", [("test_charger", "4.1.2"), ("test_charger_v2", "2.9.1")]
224+
"fixture, expected",
225+
[
226+
("test_charger", "4.1.2"),
227+
("test_charger_v2", "2.9.1"),
228+
("test_charger_dev", "4.1.5"),
229+
],
225230
)
226231
async def test_get_wifi_firmware(fixture, expected, request):
227232
"""Test v4 Status reply."""

0 commit comments

Comments
 (0)