From 992e315adeaba630fbf29352976ab01515f8e62d Mon Sep 17 00:00:00 2001 From: Vincent Le Bourlot Date: Wed, 1 Jul 2020 22:38:34 +0200 Subject: [PATCH 1/4] handle error not authenticated mark as logged out when receiving {"errorCode":"RESOURCE_ACCESS_DENIED","error":"Not authenticated"} --- custom_components/tahoma/tahoma_api.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/custom_components/tahoma/tahoma_api.py b/custom_components/tahoma/tahoma_api.py index 5a21a81bc..91a6fa637 100644 --- a/custom_components/tahoma/tahoma_api.py +++ b/custom_components/tahoma/tahoma_api.py @@ -117,6 +117,8 @@ def send_request( + request.text ) else: + if "Not authenticated" in request.text: + self.__logged_in = False self.send_request(method, url, headers, data, timeout, retries - 1) def get_user(self): From 4cdcd23e54b73f5199c0fa6c594fac7a6a5926ff Mon Sep 17 00:00:00 2001 From: vlebourl Date: Thu, 2 Jul 2020 10:48:32 +0200 Subject: [PATCH 2/4] [fix] Relog in when not authenticated error. Related Github issues: #86 --- custom_components/tahoma/tahoma_api.py | 66 ++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 5 deletions(-) diff --git a/custom_components/tahoma/tahoma_api.py b/custom_components/tahoma/tahoma_api.py index 91a6fa637..94cd1f9b4 100644 --- a/custom_components/tahoma/tahoma_api.py +++ b/custom_components/tahoma/tahoma_api.py @@ -39,6 +39,61 @@ def __init__(self, userName, userPassword, **kwargs): self.__setup = None self.login() + def is_authenticated(self): + """Return True if the user is authenticated.""" + request = requests.get( + BASE_URL + "authenticated", + headers={"User-Agent": "mine", "Cookie": self.__cookie}, + timeout=10, + ) + if request.status_code == 200: + try: + result = request.json() + except ValueError as error: + raise Exception("Not a valid result, protocol error: " + str(error)) + return result["authenticated"] + else: + raise Exception( + "Could not check authenticated: " + str(request.status_code) + ) + + def logout(self): + """Logout from TaHoma API.""" + if not self.__logged_in: + return True + request = requests.post( + BASE_URL + "logout", + headers={"User-Agent": "mine", "Cookie": self.__cookie}, + timeout=10, + ) + try: + result = request.json() + except ValueError as error: + raise Exception( + "Not a valid result for logout, " + + "protocol error: " + + request.status_code + + " - " + + request.reason + + "(" + + error + + ")" + ) + + if "error" in result.keys(): + raise Exception("Could not logout: " + result["error"]) + + if request.status_code != 200: + raise Exception( + "Could not login, HTTP code: " + + str(request.status_code) + + " - " + + request.reason + ) + + self.__logged_in = False + return True + def login(self): """Login to TaHoma API.""" if self.__logged_in: @@ -82,7 +137,7 @@ def login(self): raise Exception("Could not login, no cookie set") self.__cookie = cookie - self.__logged_in = True + self.__logged_in = self.is_authenticated() return self.__logged_in def send_request( @@ -98,8 +153,11 @@ def send_request( :param retries: Maximum number of retries. :return: """ - if not self.__logged_in: - self.login() + if not self.is_authenticated(): + if not self.login(): + raise Exception("Could not get authenticated") + headers["Cookie"] = self.__cookie + self.send_request(method, url, headers, data, timeout, retries) stack = pprint.pformat(traceback.extract_stack()) if "asyncio" in stack: @@ -117,8 +175,6 @@ def send_request( + request.text ) else: - if "Not authenticated" in request.text: - self.__logged_in = False self.send_request(method, url, headers, data, timeout, retries - 1) def get_user(self): From 2e540dad54df60bee7c84f8a677dbe653bcba930 Mon Sep 17 00:00:00 2001 From: vlebourl Date: Thu, 2 Jul 2020 11:13:21 +0200 Subject: [PATCH 3/4] Updated CHANGELOG.md --- CHANGELOG.md | 211 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 175 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8580cda22..b4bb1b5df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,49 +1,188 @@ # Changelog -All notable changes to this project will be documented in this file. -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.5-alpha1](https://github.com/iMicknl/ha-tahoma/tree/1.5-alpha1) (2020-07-02) -## [Unreleased] +[Full Changelog](https://github.com/iMicknl/ha-tahoma/compare/1.4.1...1.5-alpha1) -## [1.4] - 22-06-2020 +**Fixed bugs:** -### Added +- Actions are applied sequentialy [\#92](https://github.com/iMicknl/ha-tahoma/issues/92) +- Covers move step by step and can't be stopped while moving [\#90](https://github.com/iMicknl/ha-tahoma/issues/90) +- Remove the lock on apply\_action [\#93](https://github.com/iMicknl/ha-tahoma/pull/93) ([vlebourl](https://github.com/vlebourl)) -- Added support for HeatingSystem devices -- Added support for Gate devices -- Added support for AirSensor devices -- Added support for ElectricitySensor devices -- Added support for TemperatureSensor devices -- Added support for Curtain devices -- Added support for Generic devices (cover) -- Added support for SwingingShutter devices -- Added support for 'up' and 'down' commands for covers -- Added tilt_position support for covers -- Added support for 'setRGB' commands for lights +## [1.4.1](https://github.com/iMicknl/ha-tahoma/tree/1.4.1) (2020-07-01) -### Changed +[Full Changelog](https://github.com/iMicknl/ha-tahoma/compare/1.4...1.4.1) -- Removed all hardcoded device strings from the cover component -- Update state after a command has been succesfully executed +**Implemented enhancements:** -## [1.0.0] - 04-06-2020 +- Add climate platform [\#12](https://github.com/iMicknl/ha-tahoma/issues/12) +- Add active\_states to device\_state\_attributes [\#89](https://github.com/iMicknl/ha-tahoma/pull/89) ([vlebourl](https://github.com/vlebourl)) +- \[feat\] Support io:TotalElectricalEnergyConsumptionIOSystemSensor [\#81](https://github.com/iMicknl/ha-tahoma/pull/81) ([vlebourl](https://github.com/vlebourl)) -### Added +**Fixed bugs:** -- Added configuration flow -- Added support for controlling the tilt position of supported covers -- Added support for Somfy devices using the Pergola uiclass. -- Added unique id per entity, making it configurable via the front-end. -- Added support for Humidity sensors -- Added support for Light (DimmableLight) devices +- fix api for missing states at login [\#94](https://github.com/iMicknl/ha-tahoma/pull/94) ([vlebourl](https://github.com/vlebourl)) +- \[fix\] fix AttributeError: 'NoneType' object has no attribute 'state' … [\#87](https://github.com/iMicknl/ha-tahoma/pull/87) ([vlebourl](https://github.com/vlebourl)) -### Changed +**Merged pull requests:** -- Changed MotionSensor platform from sensor to binary_sensor -- Changed SmokeSensor platform from sensor to binary_sensor -- Changed ContactSensor platform from sensor to binary_sensor -- Changed GarageDoor platform from switch to cover -- Changed Light (OnOffLight) platform from switch to light -- Changed cover implementation to rely on available states and commands, instead of a hardcoded device list -- Add shared device attributes and states to TahomaDevice +- \[doc\] Add Tahoma API html doc [\#88](https://github.com/iMicknl/ha-tahoma/pull/88) ([vlebourl](https://github.com/vlebourl)) +- Update CHANGELOG.md [\#83](https://github.com/iMicknl/ha-tahoma/pull/83) ([vlebourl](https://github.com/vlebourl)) + +## [1.4](https://github.com/iMicknl/ha-tahoma/tree/1.4) (2020-06-22) + +[Full Changelog](https://github.com/iMicknl/ha-tahoma/compare/1.4-alpha3...1.4) + +**Implemented enhancements:** + +- Electricity Meter [\#80](https://github.com/iMicknl/ha-tahoma/issues/80) +- Add support for IO RGB Light \(io:DimmableRGBLightIOComponent\) [\#73](https://github.com/iMicknl/ha-tahoma/issues/73) +- Change Unsupported Tahoma device logging from `warning` to `debug` [\#32](https://github.com/iMicknl/ha-tahoma/issues/32) +- Adjust code style according to home-assistant/core [\#20](https://github.com/iMicknl/ha-tahoma/issues/20) +- Update cover & changelog [\#78](https://github.com/iMicknl/ha-tahoma/pull/78) ([iMicknl](https://github.com/iMicknl)) +- Wait for apply\_action to finish before returning. [\#76](https://github.com/iMicknl/ha-tahoma/pull/76) ([vlebourl](https://github.com/vlebourl)) +- Add support for "setRGB" command for light entity. [\#75](https://github.com/iMicknl/ha-tahoma/pull/75) ([vlebourl](https://github.com/vlebourl)) +- Add climate entity for Somfy's Smart Thermostat [\#54](https://github.com/iMicknl/ha-tahoma/pull/54) ([vlebourl](https://github.com/vlebourl)) + +**Fixed bugs:** + +- Unable to change tilt position on io:BioclimaticPergolaIOComponent [\#74](https://github.com/iMicknl/ha-tahoma/issues/74) +- Add part of fix\_44 changes already [\#82](https://github.com/iMicknl/ha-tahoma/pull/82) ([iMicknl](https://github.com/iMicknl)) +- Bugfix for unable to change tilt position on io:BioclimaticPergolaIOComponent \#74 [\#77](https://github.com/iMicknl/ha-tahoma/pull/77) ([iMicknl](https://github.com/iMicknl)) + +**Merged pull requests:** + +- Update bug\_report.md [\#79](https://github.com/iMicknl/ha-tahoma/pull/79) ([iMicknl](https://github.com/iMicknl)) + +## [1.4-alpha3](https://github.com/iMicknl/ha-tahoma/tree/1.4-alpha3) (2020-06-18) + +[Full Changelog](https://github.com/iMicknl/ha-tahoma/compare/1.4-alpha2...1.4-alpha3) + +**Fixed bugs:** + +- fixed a typo [\#72](https://github.com/iMicknl/ha-tahoma/pull/72) ([vlebourl](https://github.com/vlebourl)) + +## [1.4-alpha2](https://github.com/iMicknl/ha-tahoma/tree/1.4-alpha2) (2020-06-18) + +[Full Changelog](https://github.com/iMicknl/ha-tahoma/compare/1.4-alpha1...1.4-alpha2) + +**Implemented enhancements:** + +- Detected I/O inside the event loop. This is causing stability issues. [\#2](https://github.com/iMicknl/ha-tahoma/issues/2) +- up/down as alternatives to open/close [\#71](https://github.com/iMicknl/ha-tahoma/pull/71) ([vlebourl](https://github.com/vlebourl)) + +## [1.4-alpha1](https://github.com/iMicknl/ha-tahoma/tree/1.4-alpha1) (2020-06-17) + +[Full Changelog](https://github.com/iMicknl/ha-tahoma/compare/1.3...1.4-alpha1) + +## [1.3](https://github.com/iMicknl/ha-tahoma/tree/1.3) (2020-06-17) + +[Full Changelog](https://github.com/iMicknl/ha-tahoma/compare/1.2...1.3) + +**Implemented enhancements:** + +- Support disabling of entities, for use with Somfy integration [\#17](https://github.com/iMicknl/ha-tahoma/issues/17) +- Make assumed\_state for RTS configurable via option flow [\#9](https://github.com/iMicknl/ha-tahoma/issues/9) +- adds async\_apply\_action [\#70](https://github.com/iMicknl/ha-tahoma/pull/70) ([vlebourl](https://github.com/vlebourl)) +- Added stack trace [\#65](https://github.com/iMicknl/ha-tahoma/pull/65) ([vlebourl](https://github.com/vlebourl)) +- Change `turn\_on` and `turn\_off` to sync calls [\#64](https://github.com/iMicknl/ha-tahoma/pull/64) ([vlebourl](https://github.com/vlebourl)) +- Enable debug logging, remove warnings [\#63](https://github.com/iMicknl/ha-tahoma/pull/63) ([iMicknl](https://github.com/iMicknl)) +- Update light.py [\#60](https://github.com/iMicknl/ha-tahoma/pull/60) ([vlebourl](https://github.com/vlebourl)) +- Add new device types [\#58](https://github.com/iMicknl/ha-tahoma/pull/58) ([iMicknl](https://github.com/iMicknl)) +- Schedule devices update right after it's added [\#53](https://github.com/iMicknl/ha-tahoma/pull/53) ([vlebourl](https://github.com/vlebourl)) +- Added device\_class to sensors [\#51](https://github.com/iMicknl/ha-tahoma/pull/51) ([vlebourl](https://github.com/vlebourl)) +- Enable scenes [\#50](https://github.com/iMicknl/ha-tahoma/pull/50) ([iMicknl](https://github.com/iMicknl)) + +**Fixed bugs:** + +- Error unloading entry xxxxxx for tahoma [\#61](https://github.com/iMicknl/ha-tahoma/issues/61) +- Add support for Tahoma Scenes [\#47](https://github.com/iMicknl/ha-tahoma/issues/47) +- Fix \#61 [\#62](https://github.com/iMicknl/ha-tahoma/pull/62) ([vlebourl](https://github.com/vlebourl)) +- Tahoma seems to not send all possible keys, depending on the devices … [\#52](https://github.com/iMicknl/ha-tahoma/pull/52) ([vlebourl](https://github.com/vlebourl)) +- Fix domain [\#49](https://github.com/iMicknl/ha-tahoma/pull/49) ([iMicknl](https://github.com/iMicknl)) + +**Closed issues:** + +- Add support for OccupancySensor \(io:SomfyOccupancyIOSystemSensor\) [\#19](https://github.com/iMicknl/ha-tahoma/issues/19) + +**Merged pull requests:** + +- added isort pre-commit hook [\#69](https://github.com/iMicknl/ha-tahoma/pull/69) ([vlebourl](https://github.com/vlebourl)) +- add black check to ci cd [\#68](https://github.com/iMicknl/ha-tahoma/pull/68) ([vlebourl](https://github.com/vlebourl)) +- fixes get\_events [\#55](https://github.com/iMicknl/ha-tahoma/pull/55) ([vlebourl](https://github.com/vlebourl)) +- renamed tahoma or Tahoma to TaHoma. [\#46](https://github.com/iMicknl/ha-tahoma/pull/46) ([vlebourl](https://github.com/vlebourl)) +- Add french translation [\#45](https://github.com/iMicknl/ha-tahoma/pull/45) ([vlebourl](https://github.com/vlebourl)) + +## [1.2](https://github.com/iMicknl/ha-tahoma/tree/1.2) (2020-06-07) + +[Full Changelog](https://github.com/iMicknl/ha-tahoma/compare/1.1...1.2) + +**Implemented enhancements:** + +- Add better exception handling & retry logic for Tahoma API [\#4](https://github.com/iMicknl/ha-tahoma/issues/4) +- Refactored requests to avoid being locked out of the api. [\#24](https://github.com/iMicknl/ha-tahoma/pull/24) ([vlebourl](https://github.com/vlebourl)) + +**Fixed bugs:** + +- Position is not updated - PositionableHorizontalAwning - io:HorizontalAwningIOComponent [\#30](https://github.com/iMicknl/ha-tahoma/issues/30) +- ValueError: Config entry has already been setup! [\#16](https://github.com/iMicknl/ha-tahoma/issues/16) +- Reverse position for PositionableHorizontalAwning [\#41](https://github.com/iMicknl/ha-tahoma/pull/41) ([iMicknl](https://github.com/iMicknl)) +- Fix ValueError: Config entry has already been setup! \#16 [\#35](https://github.com/iMicknl/ha-tahoma/pull/35) ([iMicknl](https://github.com/iMicknl)) + +**Closed issues:** + +- Add support for Gate - DiscreteGateWithPedestrianPosition \(io:DiscreteGateOpenerIOComponent\) [\#18](https://github.com/iMicknl/ha-tahoma/issues/18) + +**Merged pull requests:** + +- fixed a typo [\#38](https://github.com/iMicknl/ha-tahoma/pull/38) ([vlebourl](https://github.com/vlebourl)) +- Rename to Somfy TaHoma [\#37](https://github.com/iMicknl/ha-tahoma/pull/37) ([iMicknl](https://github.com/iMicknl)) +- Rename to Somfy TaHoma [\#36](https://github.com/iMicknl/ha-tahoma/pull/36) ([iMicknl](https://github.com/iMicknl)) + +## [1.1](https://github.com/iMicknl/ha-tahoma/tree/1.1) (2020-06-07) + +[Full Changelog](https://github.com/iMicknl/ha-tahoma/compare/1.1-alpha2...1.1) + +**Implemented enhancements:** + +- Refactor cover platform, removed hardcoded references [\#8](https://github.com/iMicknl/ha-tahoma/issues/8) + +**Fixed bugs:** + +- `TahomaLight` object has no attribute `\_brightness` [\#22](https://github.com/iMicknl/ha-tahoma/issues/22) +- Fix faulty if statement [\#34](https://github.com/iMicknl/ha-tahoma/pull/34) ([iMicknl](https://github.com/iMicknl)) +- Fix TahomaLight` object has no attribute `\_brightness [\#29](https://github.com/iMicknl/ha-tahoma/pull/29) ([iMicknl](https://github.com/iMicknl)) + +## [1.1-alpha2](https://github.com/iMicknl/ha-tahoma/tree/1.1-alpha2) (2020-06-05) + +[Full Changelog](https://github.com/iMicknl/ha-tahoma/compare/1.1-alpha...1.1-alpha2) + +**Implemented enhancements:** + +- Refactor cover platform [\#13](https://github.com/iMicknl/ha-tahoma/pull/13) ([iMicknl](https://github.com/iMicknl)) + +## [1.1-alpha](https://github.com/iMicknl/ha-tahoma/tree/1.1-alpha) (2020-06-04) + +[Full Changelog](https://github.com/iMicknl/ha-tahoma/compare/1.0.0...1.1-alpha) + +**Implemented enhancements:** + +- Add support for scenes [\#10](https://github.com/iMicknl/ha-tahoma/issues/10) +- Incorporate changes from tahoma\_extended [\#5](https://github.com/iMicknl/ha-tahoma/issues/5) +- Add occupancy sensor and start fixing async [\#15](https://github.com/iMicknl/ha-tahoma/pull/15) ([iMicknl](https://github.com/iMicknl)) +- Add support for scenes [\#14](https://github.com/iMicknl/ha-tahoma/pull/14) ([iMicknl](https://github.com/iMicknl)) + +## [1.0.0](https://github.com/iMicknl/ha-tahoma/tree/1.0.0) (2020-06-04) + +[Full Changelog](https://github.com/iMicknl/ha-tahoma/compare/014ff6a7acc5ca5a88cd78f695b7505ca2f01f1e...1.0.0) + +**Implemented enhancements:** + +- Support Awning devices and update readme + changelog [\#11](https://github.com/iMicknl/ha-tahoma/pull/11) ([iMicknl](https://github.com/iMicknl)) +- Apply fixes from tahoma\_extended & sensor/binary sensor improvements [\#7](https://github.com/iMicknl/ha-tahoma/pull/7) ([iMicknl](https://github.com/iMicknl)) +- Add binary sensor and remove parts from normal sensor [\#6](https://github.com/iMicknl/ha-tahoma/pull/6) ([iMicknl](https://github.com/iMicknl)) + + + +\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)* From ecb1afe49a20c4c23ec4158b39050458955e718f Mon Sep 17 00:00:00 2001 From: vlebourl Date: Thu, 2 Jul 2020 11:18:26 +0200 Subject: [PATCH 4/4] Update .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index cb5b41f50..5a725e45b 100644 --- a/.gitignore +++ b/.gitignore @@ -133,3 +133,5 @@ dmypy.json # HA Config directory for local testing /Config/ + +**/.DS_Store