From 21c27a27b83df07229d82ad378f41b4aedf1bfae Mon Sep 17 00:00:00 2001 From: Torben Nehmer Date: Fri, 28 Apr 2023 12:24:21 +0200 Subject: [PATCH 1/8] Fix serial number detection A missing elif masked the S10E serial number detection, fixed. --- e3dc/_e3dc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e3dc/_e3dc.py b/e3dc/_e3dc.py index 3feb1e1..2eb8efb 100644 --- a/e3dc/_e3dc.py +++ b/e3dc/_e3dc.py @@ -159,7 +159,7 @@ def _set_serial(self, serial): self.pvis = self.pvis or [{"index": 0}] if not self.serialNumberPrefix: self.serialNumberPrefix = "S10-" - if self.serialNumber.startswith("74"): + elif self.serialNumber.startswith("74"): self.model = "S10E_Compact" self.powermeters = self.powermeters or [{"index": 0}] self.pvis = self.pvis or [{"index": 0}] From 0879b31fa1b7ea39abd56aff904efae183e7ec05 Mon Sep 17 00:00:00 2001 From: Torben Nehmer Date: Fri, 28 Apr 2023 12:25:28 +0200 Subject: [PATCH 2/8] Fix set_power_save return code detection We need to parse the return value and compare it to our requested value. Streamlined the code along the way. --- e3dc/_e3dc.py | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/e3dc/_e3dc.py b/e3dc/_e3dc.py index 2eb8efb..6f4c982 100644 --- a/e3dc/_e3dc.py +++ b/e3dc/_e3dc.py @@ -1984,27 +1984,26 @@ def set_powersave(self, enable, keepAlive=False): 0 if success -1 if error """ - if enable: - res = self.sendRequest( - ( - "EMS_REQ_SET_POWER_SETTINGS", - "Container", - [("EMS_POWERSAVE_ENABLED", "UChar8", 1)], - ), - keepAlive=keepAlive, - ) - else: - res = self.sendRequest( - ( - "EMS_REQ_SET_POWER_SETTINGS", - "Container", - [("EMS_POWERSAVE_ENABLED", "UChar8", 0)], - ), - keepAlive=keepAlive, - ) - - # validate return code for EMS_RES_POWERSAVE_ENABLED is 0 - if res[2][0][2] == 0: + newValue: int = (1 if enable else 0) + res = self.sendRequest( + ( + "EMS_REQ_SET_POWER_SETTINGS", + "Container", + [("EMS_POWERSAVE_ENABLED", "UChar8", newValue)], + ), + keepAlive=keepAlive, + ) + # Returns the new value of EMS_REQ_SET_POWER_SETTINGS, we need + # to validate this against the desired value, the object looks like this: + # [ "EMS_SET_POWER_SETTINGS", + # "Container", + # [ + # ["EMS_POWERSAVE_ENABLED", "Char8", 0] + # ] + # ] + + # validate new value + if rscpFindTagIndex(res, "EMS_POWERSAVE_ENABLED") == newValue: return 0 else: return -1 From be2e55c3249e14398bd7329b53d020b28188b6f8 Mon Sep 17 00:00:00 2001 From: Torben Nehmer Date: Fri, 28 Apr 2023 12:28:01 +0200 Subject: [PATCH 3/8] Add missing exports Needed for error detection --- e3dc/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/e3dc/__init__.py b/e3dc/__init__.py index 94de039..e33ac31 100644 --- a/e3dc/__init__.py +++ b/e3dc/__init__.py @@ -14,7 +14,9 @@ __all__ = [ "E3DC", "AuthenticationError", + "NotAvailableError", "PollError", + "SendError", "CommunicationError", "RSCPAuthenticationError", "RSCPKeyError", From 0fe8588a1022bde0c70638373ed308df5c08da38 Mon Sep 17 00:00:00 2001 From: Torben Nehmer Date: Fri, 28 Apr 2023 12:28:08 +0200 Subject: [PATCH 4/8] Update AUTHORS --- AUTHORS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index b912f2f..fad5e7e 100644 --- a/AUTHORS +++ b/AUTHORS @@ -10,4 +10,5 @@ * Steff @steff333 * is00709 @is00709 * Gregor Wolf @gregorwolf -* Max Dhom @mdhom \ No newline at end of file +* Max Dhom @mdhom +* Torben Nehmer @torbennehmer \ No newline at end of file From 985be5bfa87c549a212e27a85d42a2cc5099713c Mon Sep 17 00:00:00 2001 From: Torben Nehmer Date: Sun, 30 Apr 2023 13:05:16 +0200 Subject: [PATCH 5/8] Fix flake8 errors, trailing whitspace removed --- e3dc/_e3dc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/e3dc/_e3dc.py b/e3dc/_e3dc.py index 6f4c982..9c20b38 100644 --- a/e3dc/_e3dc.py +++ b/e3dc/_e3dc.py @@ -1995,8 +1995,8 @@ def set_powersave(self, enable, keepAlive=False): ) # Returns the new value of EMS_REQ_SET_POWER_SETTINGS, we need # to validate this against the desired value, the object looks like this: - # [ "EMS_SET_POWER_SETTINGS", - # "Container", + # [ "EMS_SET_POWER_SETTINGS", + # "Container", # [ # ["EMS_POWERSAVE_ENABLED", "Char8", 0] # ] From c115a64d36742e0a9a3a7e68f51fbc4162abe072 Mon Sep 17 00:00:00 2001 From: Torben Nehmer Date: Sun, 30 Apr 2023 14:10:24 +0200 Subject: [PATCH 6/8] black formatting fixes --- e3dc/_e3dc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/e3dc/_e3dc.py b/e3dc/_e3dc.py index 9c20b38..357a06f 100644 --- a/e3dc/_e3dc.py +++ b/e3dc/_e3dc.py @@ -1984,7 +1984,7 @@ def set_powersave(self, enable, keepAlive=False): 0 if success -1 if error """ - newValue: int = (1 if enable else 0) + newValue: int = 1 if enable else 0 res = self.sendRequest( ( "EMS_REQ_SET_POWER_SETTINGS", @@ -2001,7 +2001,7 @@ def set_powersave(self, enable, keepAlive=False): # ["EMS_POWERSAVE_ENABLED", "Char8", 0] # ] # ] - + # validate new value if rscpFindTagIndex(res, "EMS_POWERSAVE_ENABLED") == newValue: return 0 From 8daadb481eb2f0c4b91ce3248d0750381d63dcdb Mon Sep 17 00:00:00 2001 From: Torben Nehmer Date: Mon, 1 May 2023 08:41:19 +0200 Subject: [PATCH 7/8] Fix handling of set_powersave E3DCs do indeed return an statusflag here (misinterpretation of mine). Use int(enable) directly in this case, the intermediate is not needed. --- e3dc/_e3dc.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/e3dc/_e3dc.py b/e3dc/_e3dc.py index 357a06f..4b7011b 100644 --- a/e3dc/_e3dc.py +++ b/e3dc/_e3dc.py @@ -1984,26 +1984,26 @@ def set_powersave(self, enable, keepAlive=False): 0 if success -1 if error """ - newValue: int = 1 if enable else 0 + res = self.sendRequest( ( "EMS_REQ_SET_POWER_SETTINGS", "Container", - [("EMS_POWERSAVE_ENABLED", "UChar8", newValue)], + [("EMS_POWERSAVE_ENABLED", "UChar8", int(enable))], ), keepAlive=keepAlive, ) - # Returns the new value of EMS_REQ_SET_POWER_SETTINGS, we need - # to validate this against the desired value, the object looks like this: + + # Returns value of EMS_REQ_SET_POWER_SETTINGS, we get a success flag here, + # that we normalize and push outside. # [ "EMS_SET_POWER_SETTINGS", # "Container", # [ - # ["EMS_POWERSAVE_ENABLED", "Char8", 0] + # ["EMS_RES_POWERSAVE_ENABLED", "Char8", 0] # ] # ] - # validate new value - if rscpFindTagIndex(res, "EMS_POWERSAVE_ENABLED") == newValue: + if rscpFindTagIndex(res, "EMS_RES_POWERSAVE_ENABLED") == 0: return 0 else: return -1 From befe6f45290ddbc1db2e228383124b03f12bc2ac Mon Sep 17 00:00:00 2001 From: Torben Nehmer Date: Mon, 8 May 2023 18:34:46 +0200 Subject: [PATCH 8/8] Fix linter errors (got lost while dissecting the branch) --- e3dc/_e3dc.py | 1 - 1 file changed, 1 deletion(-) diff --git a/e3dc/_e3dc.py b/e3dc/_e3dc.py index 4b7011b..2b71676 100644 --- a/e3dc/_e3dc.py +++ b/e3dc/_e3dc.py @@ -1984,7 +1984,6 @@ def set_powersave(self, enable, keepAlive=False): 0 if success -1 if error """ - res = self.sendRequest( ( "EMS_REQ_SET_POWER_SETTINGS",