From 935ed2407b265e14cd722471f57d5dbbb53b5328 Mon Sep 17 00:00:00 2001 From: Darsh Patel <darshkpatel@gmail.com> Date: Fri, 23 Dec 2022 15:58:11 +0530 Subject: [PATCH 1/6] feat sofar-2200tl: INT parsing for SOFAR 2200TL --- omnikinverter/models.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/omnikinverter/models.py b/omnikinverter/models.py index e69a29a8..4df1d8aa 100644 --- a/omnikinverter/models.py +++ b/omnikinverter/models.py @@ -155,7 +155,8 @@ def get_value(position: int) -> Any: if matches[position] != "": if position in [4, 5, 6, 7]: if position in [4, 5]: - return int(matches[position]) + # Need to remove spaces before parsing int for SOFAR 2200TL + return int(matches[position].replace(" ", "")) if position == 6: energy_value = float(matches[position]) / 100 From 8f9f721b499f1fc2dc221c4ac92bdedefa8039a4 Mon Sep 17 00:00:00 2001 From: Darsh <darshkpatel@gmail.com> Date: Fri, 23 Dec 2022 16:23:53 +0530 Subject: [PATCH 2/6] feat sofat-2200tl: update test --- tests/fixtures/status_devicearray.js | 2 +- tests/test_models.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/fixtures/status_devicearray.js b/tests/fixtures/status_devicearray.js index 1120ef09..3a6f1e3f 100644 --- a/tests/fixtures/status_devicearray.js +++ b/tests/fixtures/status_devicearray.js @@ -1 +1 @@ -var version= "H4.01.51MW.2.01W1.0.64(2018-01-251-D)";var m2mRssi= "39%";var wanIp= "";var myDeviceArray=new Array();myDeviceArray[0]="12345678910,V4.08Build215,V4.12Build246,Omnik1500tl ,,850,232,52002,,1,"; +var version= "H4.01.51MW.2.01W1.0.64(2018-01-251-D)";var m2mRssi= "39%";var wanIp= "";var myDeviceArray=new Array();myDeviceArray[0]="12345678910,V4.08Build215,V4.12Build246,Omnik1500tl ,1 000,850,232,52002,,1,"; diff --git a/tests/test_models.py b/tests/test_models.py index cc84f9dd..f24ad87e 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -212,7 +212,7 @@ async def test_inverter_js_devicearray(aresponses: ResponsesMockServer) -> None: assert inverter.firmware == "V4.08Build215" assert inverter.firmware_slave == "V4.12Build246" assert inverter.model == "Omnik1500tl" - assert inverter.solar_rated_power is None + assert inverter.solar_rated_power == 1000 assert inverter.solar_current_power == 850 assert inverter.solar_energy_today == 2.32 assert inverter.solar_energy_total == 5200.2 From c1b1a8c3773d9e7cde34f1be208e28464818049c Mon Sep 17 00:00:00 2001 From: Darsh <darshkpatel@gmail.com> Date: Fri, 23 Dec 2022 16:25:11 +0530 Subject: [PATCH 3/6] feat sofar-2200tl: update documentation --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 81760039..97293287 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ A python package with which you can read the data from your Omnik Inverter. Keep | Bosswerk | BW-MI300 | HTML | | Bosswerk | BW-MI600 | HTML | | Sofar | 3600TLM | HTML | +| Sofar | 2200TL | JS | | Huayu | HY-600-Pro | HTML | ## Installation From b184a28585b42149c9c0cd9040e891e9a154e9e7 Mon Sep 17 00:00:00 2001 From: Darsh <darshkpatel@gmail.com> Date: Fri, 23 Dec 2022 18:37:57 +0530 Subject: [PATCH 4/6] feat sofar-220tl: refactor test --- .../fixtures/status_devicearray_sofar220tl.js | 1 + tests/test_models.py | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 tests/fixtures/status_devicearray_sofar220tl.js diff --git a/tests/fixtures/status_devicearray_sofar220tl.js b/tests/fixtures/status_devicearray_sofar220tl.js new file mode 100644 index 00000000..32927daf --- /dev/null +++ b/tests/fixtures/status_devicearray_sofar220tl.js @@ -0,0 +1 @@ +var version= "H4.01.51MW.2.01W1.0.64(2018-01-251-D)";var m2mRssi= "39%";var wanIp= "";var myDeviceArray=new Array();myDeviceArray[0]="1234567890 ,V450,,SOFAR2200TL,2 000,400,567,123070,,1,"; diff --git a/tests/test_models.py b/tests/test_models.py index f24ad87e..7a04e788 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -218,6 +218,36 @@ async def test_inverter_js_devicearray(aresponses: ResponsesMockServer) -> None: assert inverter.solar_energy_total == 5200.2 +@pytest.mark.asyncio +async def test_inverter_js_devicearray_sofar2200tl( + aresponses: ResponsesMockServer, +) -> None: + """Test request from an SOFAR 2200TL Inverter - JS DeviceArray source.""" + aresponses.add( + "example.com", + "/js/status.js", + "GET", + aresponses.Response( + status=200, + headers={"Content-Type": "application/x-javascript"}, + text=load_fixtures("status_devicearray_sofar220tl.js"), + ), + ) + + async with aiohttp.ClientSession() as session: + client = OmnikInverter(host="example.com", session=session) + inverter: Inverter = await client.inverter() + assert inverter + assert inverter.serial_number == "1234567890" + assert inverter.firmware == "V450" + assert inverter.firmware_slave is None + assert inverter.model == "SOFAR2200TL" + assert inverter.solar_rated_power == 2000 + assert inverter.solar_current_power == 400 + assert inverter.solar_energy_today == 5.67 + assert inverter.solar_energy_total == 12307.0 + + @pytest.mark.asyncio async def test_device_js_devicearray(aresponses: ResponsesMockServer) -> None: """Test request from a Device - JS DeviceArray source.""" From 61b62b12e4647816f1b7f95004be4de1ef5bbda7 Mon Sep 17 00:00:00 2001 From: Darsh <darshkpatel@gmail.com> Date: Fri, 23 Dec 2022 18:41:11 +0530 Subject: [PATCH 5/6] feat sofar-220tl: remove comment --- omnikinverter/models.py | 1 - 1 file changed, 1 deletion(-) diff --git a/omnikinverter/models.py b/omnikinverter/models.py index 4df1d8aa..af184d9a 100644 --- a/omnikinverter/models.py +++ b/omnikinverter/models.py @@ -155,7 +155,6 @@ def get_value(position: int) -> Any: if matches[position] != "": if position in [4, 5, 6, 7]: if position in [4, 5]: - # Need to remove spaces before parsing int for SOFAR 2200TL return int(matches[position].replace(" ", "")) if position == 6: From 64ccafb5bc5a68eeb9b0148e115f53afcb41f5d4 Mon Sep 17 00:00:00 2001 From: Darsh <darshkpatel@gmail.com> Date: Fri, 23 Dec 2022 18:47:34 +0530 Subject: [PATCH 6/6] feat sofar-220tl: cleanup changes to existing test --- tests/fixtures/status_devicearray.js | 2 +- tests/test_models.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/fixtures/status_devicearray.js b/tests/fixtures/status_devicearray.js index 3a6f1e3f..1120ef09 100644 --- a/tests/fixtures/status_devicearray.js +++ b/tests/fixtures/status_devicearray.js @@ -1 +1 @@ -var version= "H4.01.51MW.2.01W1.0.64(2018-01-251-D)";var m2mRssi= "39%";var wanIp= "";var myDeviceArray=new Array();myDeviceArray[0]="12345678910,V4.08Build215,V4.12Build246,Omnik1500tl ,1 000,850,232,52002,,1,"; +var version= "H4.01.51MW.2.01W1.0.64(2018-01-251-D)";var m2mRssi= "39%";var wanIp= "";var myDeviceArray=new Array();myDeviceArray[0]="12345678910,V4.08Build215,V4.12Build246,Omnik1500tl ,,850,232,52002,,1,"; diff --git a/tests/test_models.py b/tests/test_models.py index 7a04e788..6ba1b442 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -212,7 +212,7 @@ async def test_inverter_js_devicearray(aresponses: ResponsesMockServer) -> None: assert inverter.firmware == "V4.08Build215" assert inverter.firmware_slave == "V4.12Build246" assert inverter.model == "Omnik1500tl" - assert inverter.solar_rated_power == 1000 + assert inverter.solar_rated_power is None assert inverter.solar_current_power == 850 assert inverter.solar_energy_today == 2.32 assert inverter.solar_energy_total == 5200.2