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