homematicip 2.0.4.post1.dev2__tar.gz → 2.0.4.post1.dev4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/PKG-INFO +1 -1
  2. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/_version.py +2 -2
  3. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/async_home.py +5 -0
  4. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/connection/websocket_handler.py +11 -2
  5. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip.egg-info/PKG-INFO +1 -1
  6. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/.gitattributes +0 -0
  7. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/.github/copilot-instructions.md +0 -0
  8. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/.github/workflows/build-docs.yml +0 -0
  9. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/.github/workflows/codeql-analysis.yml +0 -0
  10. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/.github/workflows/publish.yml +0 -0
  11. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/.github/workflows/test-on-push.yml +0 -0
  12. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/.gitignore +0 -0
  13. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/CHANGELOG.md +0 -0
  14. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/CODE_OF_CONDUCT.md +0 -0
  15. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/LICENSE.txt +0 -0
  16. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/MANIFEST.in +0 -0
  17. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/README.md +0 -0
  18. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/codecov.yml +0 -0
  19. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/docs/Makefile +0 -0
  20. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/docs/make.bat +0 -0
  21. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/docs/modules.rst +0 -0
  22. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/docs/source/_static/.gitkeep +0 -0
  23. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/docs/source/api_introduction.rst +0 -0
  24. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/docs/source/conf.py +0 -0
  25. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/docs/source/gettingstarted.rst +0 -0
  26. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/docs/source/homematicip.aio.rst +0 -0
  27. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/docs/source/homematicip.base.rst +0 -0
  28. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/docs/source/homematicip.rst +0 -0
  29. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/docs/source/index.rst +0 -0
  30. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/docs/source/modules.rst +0 -0
  31. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/homematicip_demo/__init__.py +0 -0
  32. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/homematicip_demo/client.pem +0 -0
  33. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/homematicip_demo/fake_cloud_server.py +0 -0
  34. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/homematicip_demo/helper.py +0 -0
  35. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/homematicip_demo/json_data/home.json +0 -0
  36. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/homematicip_demo/json_data/security_journal.json +0 -0
  37. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/homematicip_demo/json_data/unknown_types.json +0 -0
  38. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/homematicip_demo/server.key +0 -0
  39. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/homematicip_demo/server.pem +0 -0
  40. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/pyproject.toml +0 -0
  41. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/readthedocs.yaml +0 -0
  42. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/requirements.txt +0 -0
  43. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/requirements_dev.txt +0 -0
  44. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/requirements_docs.txt +0 -0
  45. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/run.py +0 -0
  46. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/setup.cfg +0 -0
  47. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/setup.py +0 -0
  48. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/EventHook.py +0 -0
  49. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/HomeMaticIPObject.py +0 -0
  50. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/__init__.py +0 -0
  51. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/__main__.py +0 -0
  52. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/access_point_update_state.py +0 -0
  53. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/auth.py +0 -0
  54. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/base/__init__.py +0 -0
  55. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/base/channel_event.py +0 -0
  56. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/base/constants.py +0 -0
  57. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/base/enums.py +0 -0
  58. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/base/functionalChannels.py +0 -0
  59. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/base/helpers.py +0 -0
  60. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/base/homematicip_object.py +0 -0
  61. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/class_maps.py +0 -0
  62. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/cli/hmip_cli.py +0 -0
  63. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/cli/hmip_generate_auth_token.py +0 -0
  64. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/client.py +0 -0
  65. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/connection/__init__.py +0 -0
  66. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/connection/buckets.py +0 -0
  67. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/connection/client_characteristics_builder.py +0 -0
  68. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/connection/client_token_builder.py +0 -0
  69. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/connection/connection_context.py +0 -0
  70. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/connection/connection_factory.py +0 -0
  71. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/connection/connection_url_resolver.py +0 -0
  72. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/connection/rate_limited_rest_connection.py +0 -0
  73. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/connection/rest_connection.py +0 -0
  74. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/device.py +0 -0
  75. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/exceptions/__init__.py +0 -0
  76. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/exceptions/connection_exceptions.py +0 -0
  77. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/functionalHomes.py +0 -0
  78. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/group.py +0 -0
  79. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/home.py +0 -0
  80. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/location.py +0 -0
  81. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/oauth_otk.py +0 -0
  82. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/rule.py +0 -0
  83. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/securityEvent.py +0 -0
  84. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip/weather.py +0 -0
  85. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip.egg-info/SOURCES.txt +0 -0
  86. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip.egg-info/dependency_links.txt +0 -0
  87. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip.egg-info/entry_points.txt +0 -0
  88. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip.egg-info/requires.txt +0 -0
  89. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/src/homematicip.egg-info/top_level.txt +0 -0
  90. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/test.py +0 -0
  91. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/test_aio.py +0 -0
  92. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/tests/conftest.py +0 -0
  93. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/tests/connection/test_buckets.py +0 -0
  94. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/tests/connection/test_client_characteristics_builder.py +0 -0
  95. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/tests/connection/test_connection_context.py +0 -0
  96. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/tests/connection/test_connection_url_resolver.py +0 -0
  97. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/tests/connection/test_rate_limited_rest_connection.py +0 -0
  98. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/tests/connection/test_rest_connection.py +0 -0
  99. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/tests/fake_hmip_server.py +0 -0
  100. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/tests/test_auth.py +0 -0
  101. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/tests/test_config.py +0 -0
  102. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/tests/test_devices.py +0 -0
  103. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/tests/test_fake_cloud.py +0 -0
  104. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/tests/test_functional_channels.py +0 -0
  105. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/tests/test_groups.py +0 -0
  106. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/tests/test_hmip_cli.py +0 -0
  107. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/tests/test_home.py +0 -0
  108. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/tests/test_misc.py +0 -0
  109. {homematicip-2.0.4.post1.dev2 → homematicip-2.0.4.post1.dev4}/tests/test_websocket.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: homematicip
3
- Version: 2.0.4.post1.dev2
3
+ Version: 2.0.4.post1.dev4
4
4
  Summary: An API for the homematicip cloud
5
5
  Author-email: Thomas Hahn <homematicip-rest-api@outlook.com>
6
6
  License: GPL-3.0-or-later
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '2.0.4.post1.dev2'
21
- __version_tuple__ = version_tuple = (2, 0, 4, 'post1', 'dev2')
20
+ __version__ = version = '2.0.4.post1.dev4'
21
+ __version_tuple__ = version_tuple = (2, 0, 4, 'post1', 'dev4')
@@ -766,3 +766,8 @@ class AsyncHome(HomeMaticIPObject):
766
766
  if self._websocket_client:
767
767
  self._websocket_client.add_on_disconnected_handler(handler)
768
768
 
769
+ def set_on_reconnect_handler(self, handler: Callable):
770
+ """Sets a callback that is called when the WebSocket connection is trying to reconnect
771
+ after a disconnect."""
772
+ if self._websocket_client:
773
+ self._websocket_client.add_on_reconnect_handler(handler)
@@ -17,6 +17,7 @@ class WebsocketHandler:
17
17
  """
18
18
 
19
19
  def __init__(self):
20
+ self.INITIAL_BACKOFF = 8
20
21
  self.url = None
21
22
  self._session = None
22
23
  self._ws = None
@@ -26,6 +27,7 @@ class WebsocketHandler:
26
27
  self._on_message_handlers: List[Callable] = []
27
28
  self._on_connected_handler: List[Callable] = []
28
29
  self._on_disconnected_handler: List[Callable] = []
30
+ self._on_reconnect_handler: List[Callable] = []
29
31
 
30
32
  def add_on_connected_handler(self, handler: Callable):
31
33
  """Adds a handler that is called when the connection is established."""
@@ -35,6 +37,10 @@ class WebsocketHandler:
35
37
  """Adds a handler that is called when the connection is closed."""
36
38
  self._on_disconnected_handler.append(handler)
37
39
 
40
+ def add_on_reconnect_handler(self, handler: Callable):
41
+ """Adds a handler that is called when the connection is re-established."""
42
+ self._on_reconnect_handler.append(handler)
43
+
38
44
  def add_on_message_handler(self, handler: Callable):
39
45
  """Adds a handler for incoming messages."""
40
46
  self._on_message_handlers.append(handler)
@@ -52,7 +58,7 @@ class WebsocketHandler:
52
58
  LOGGER.error(f"Error in handler '{handler_name}': {e}", exc_info=True)
53
59
 
54
60
  async def _connect(self, context: ConnectionContext):
55
- backoff = 1
61
+ backoff = self.INITIAL_BACKOFF
56
62
  max_backoff = 1800
57
63
  while not self._stop_event.is_set():
58
64
  try:
@@ -71,9 +77,10 @@ class WebsocketHandler:
71
77
  )
72
78
  LOGGER.info(f"WebSocket connection established to {context.websocket_url}.")
73
79
  await self._call_handlers(self._on_connected_handler)
74
- backoff = 1
80
+ backoff = self.INITIAL_BACKOFF
75
81
  await self._listen()
76
82
  except Exception as e:
83
+ await self._call_handlers(self._on_reconnect_handler)
77
84
  LOGGER.warning(f"Websocket lost connection: {e}. Retry in {backoff:.1f}s.")
78
85
  await asyncio.sleep(backoff)
79
86
  backoff = min(backoff * 2, max_backoff)
@@ -99,6 +106,8 @@ class WebsocketHandler:
99
106
  await self._session.close()
100
107
  self._session = None
101
108
 
109
+ await self._call_handlers(self._on_disconnected_handler)
110
+
102
111
  async def start(self, context: ConnectionContext):
103
112
  async with self._task_lock:
104
113
  LOGGER.info("Start websocket client...")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: homematicip
3
- Version: 2.0.4.post1.dev2
3
+ Version: 2.0.4.post1.dev4
4
4
  Summary: An API for the homematicip cloud
5
5
  Author-email: Thomas Hahn <homematicip-rest-api@outlook.com>
6
6
  License: GPL-3.0-or-later