aioWiserHeatAPI 1.5.17__tar.gz → 1.5.19__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.
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/PKG-INFO +12 -3
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/README.md +10 -1
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/__init__.py +1 -1
- aiowiserheatapi-1.5.19/aioWiserHeatAPI/button_panel.py +43 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/const.py +1 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/devices.py +15 -16
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/rest_controller.py +28 -14
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI.egg-info/PKG-INFO +12 -3
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI.egg-info/SOURCES.txt +1 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/setup.py +1 -1
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/LICENSE +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/automation.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/binary_sensor.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/boiler_interface.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/cli.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/discovery.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/exceptions.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/heating.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/heating_actuator.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/helpers/__init__.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/helpers/automations.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/helpers/battery.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/helpers/capabilities.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/helpers/cloud.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/helpers/device.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/helpers/equipment.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/helpers/extra_config.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/helpers/firmware.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/helpers/gps.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/helpers/misc.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/helpers/network.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/helpers/opentherm.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/helpers/signal.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/helpers/special_times.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/helpers/status.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/helpers/temp.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/helpers/version.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/helpers/zigbee.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/hot_water.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/light.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/moments.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/pte.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/room.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/roomstat.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/schedule.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/shutter.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/smartplug.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/smartvalve.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/smokealarm.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/system.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/ufh.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI/wiserhub.py +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI.egg-info/dependency_links.txt +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI.egg-info/entry_points.txt +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI.egg-info/requires.txt +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI.egg-info/top_level.txt +0 -0
- {aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: aioWiserHeatAPI
|
|
3
|
-
Version: 1.5.
|
|
3
|
+
Version: 1.5.19
|
|
4
4
|
Summary: An AsyncIO API for controlling the Drayton Wiser Heating system
|
|
5
5
|
Home-page: https://github.com/msp1974/aioWiserHeatAPI
|
|
6
6
|
Author: Mark Parker
|
|
@@ -10,7 +10,7 @@ Classifier: Intended Audience :: Developers
|
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.11
|
|
11
11
|
Classifier: License :: OSI Approved :: MIT License
|
|
12
12
|
Classifier: Operating System :: OS Independent
|
|
13
|
-
Requires-Python: >=3.
|
|
13
|
+
Requires-Python: >=3.12
|
|
14
14
|
Description-Content-Type: text/markdown
|
|
15
15
|
License-File: LICENSE
|
|
16
16
|
Requires-Dist: zeroconf>=0.131.0
|
|
@@ -18,7 +18,7 @@ Requires-Dist: aiohttp>=3.9.3
|
|
|
18
18
|
Requires-Dist: aiofiles>=23.2.1
|
|
19
19
|
Requires-Dist: pyyaml>=6.0.1
|
|
20
20
|
|
|
21
|
-
# Drayton Wiser Hub API Async v1.5.
|
|
21
|
+
# Drayton Wiser Hub API Async v1.5.19
|
|
22
22
|
|
|
23
23
|
This repository contains a simple API which queries the Drayton Wiser Heating sysystem used in the UK.
|
|
24
24
|
|
|
@@ -72,6 +72,15 @@ Documentation available in [info.md](https://github.com/msp1974/wiserHeatAPIv2/b
|
|
|
72
72
|
|
|
73
73
|
## Changelog
|
|
74
74
|
|
|
75
|
+
### v1.5.19
|
|
76
|
+
* Fixed error when BoilerInterface does not provide DeviceId field
|
|
77
|
+
* Fixed not supporting non ascii characters in schedule names
|
|
78
|
+
* Added ButtonPanel device support
|
|
79
|
+
|
|
80
|
+
### v1.5.18
|
|
81
|
+
|
|
82
|
+
* Better handle client response exeption and fit into retry routing
|
|
83
|
+
|
|
75
84
|
### v1.5.17
|
|
76
85
|
|
|
77
86
|
* Fixed error setting opentherm endpoint for fw above 4.32.46
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Drayton Wiser Hub API Async v1.5.
|
|
1
|
+
# Drayton Wiser Hub API Async v1.5.19
|
|
2
2
|
|
|
3
3
|
This repository contains a simple API which queries the Drayton Wiser Heating sysystem used in the UK.
|
|
4
4
|
|
|
@@ -52,6 +52,15 @@ Documentation available in [info.md](https://github.com/msp1974/wiserHeatAPIv2/b
|
|
|
52
52
|
|
|
53
53
|
## Changelog
|
|
54
54
|
|
|
55
|
+
### v1.5.19
|
|
56
|
+
* Fixed error when BoilerInterface does not provide DeviceId field
|
|
57
|
+
* Fixed not supporting non ascii characters in schedule names
|
|
58
|
+
* Added ButtonPanel device support
|
|
59
|
+
|
|
60
|
+
### v1.5.18
|
|
61
|
+
|
|
62
|
+
* Better handle client response exeption and fit into retry routing
|
|
63
|
+
|
|
55
64
|
### v1.5.17
|
|
56
65
|
|
|
57
66
|
* Fixed error setting opentherm endpoint for fw above 4.32.46
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
from .helpers.device import _WiserDevice
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class _WiserButtonPanel(_WiserDevice):
|
|
7
|
+
"""Class representing a Wiser Button Panel"""
|
|
8
|
+
|
|
9
|
+
@property
|
|
10
|
+
def number_of_gangs(self) -> list[int]:
|
|
11
|
+
"""Number of gangs."""
|
|
12
|
+
return self._device_type_data.get("NumberOfGangs")
|
|
13
|
+
|
|
14
|
+
@property
|
|
15
|
+
def events(self) -> list[dict[str, Any]]:
|
|
16
|
+
"""Events info."""
|
|
17
|
+
return self._device_type_data.get("Events")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class _WiserButtonPanelCollection:
|
|
21
|
+
"""Class holding all Wiser Button Panels"""
|
|
22
|
+
|
|
23
|
+
def __init__(self):
|
|
24
|
+
self._items = []
|
|
25
|
+
|
|
26
|
+
@property
|
|
27
|
+
def all(self) -> list[_WiserButtonPanel]:
|
|
28
|
+
return list(self._items)
|
|
29
|
+
|
|
30
|
+
@property
|
|
31
|
+
def count(self) -> int:
|
|
32
|
+
return len(self.all)
|
|
33
|
+
|
|
34
|
+
def get_by_id(self, id: int) -> _WiserButtonPanel:
|
|
35
|
+
"""
|
|
36
|
+
Gets a button panel object from the sensor id
|
|
37
|
+
param id: id of button panel
|
|
38
|
+
return: _WiserButtonPanel object
|
|
39
|
+
"""
|
|
40
|
+
try:
|
|
41
|
+
return [buttonpanel for buttonpanel in self.all if buttonpanel.id == id][0]
|
|
42
|
+
except IndexError:
|
|
43
|
+
return None
|
|
@@ -4,15 +4,14 @@ Module to manage all devices
|
|
|
4
4
|
|
|
5
5
|
import enum
|
|
6
6
|
|
|
7
|
-
from .binary_sensor import
|
|
8
|
-
_WiserBinarySensorCollection,
|
|
9
|
-
_WiserWindowDoorSensor,
|
|
10
|
-
)
|
|
7
|
+
from .binary_sensor import _WiserBinarySensorCollection, _WiserWindowDoorSensor
|
|
11
8
|
from .boiler_interface import _WiserBoilerInterface, _WiserBoilerInterfaceCollection
|
|
9
|
+
from .button_panel import _WiserButtonPanel, _WiserButtonPanelCollection
|
|
12
10
|
from .const import (
|
|
13
11
|
TEXT_UNKNOWN,
|
|
14
12
|
WISERBINARYSENSOR,
|
|
15
13
|
WISERBOILERINTERFACE,
|
|
14
|
+
WISERBUTTONPANEL,
|
|
16
15
|
WISERHEATINGACTUATOR,
|
|
17
16
|
WISERLIGHT,
|
|
18
17
|
WISERPOWERTAGENERGY,
|
|
@@ -23,10 +22,7 @@ from .const import (
|
|
|
23
22
|
WISERSMOKEALARM,
|
|
24
23
|
WISERUFHCONTROLLER,
|
|
25
24
|
)
|
|
26
|
-
from .heating_actuator import
|
|
27
|
-
_WiserHeatingActuator,
|
|
28
|
-
_WiserHeatingActuatorCollection,
|
|
29
|
-
)
|
|
25
|
+
from .heating_actuator import _WiserHeatingActuator, _WiserHeatingActuatorCollection
|
|
30
26
|
from .helpers.device import _WiserDevice
|
|
31
27
|
from .light import _WiserDimmableLight, _WiserLight, _WiserLightCollection
|
|
32
28
|
from .pte import _WiserPowerTagEnergy, _WiserPowerTagEnergyCollection
|
|
@@ -54,6 +50,7 @@ class _WiserDeviceTypeEnum(enum.Enum):
|
|
|
54
50
|
WindowDoorSensor = "BinarySensor"
|
|
55
51
|
BoilerInterface = "BoilerInterface"
|
|
56
52
|
CFMT = "HeatingActuator"
|
|
53
|
+
ButtonPanel = "ButtonPanel"
|
|
57
54
|
|
|
58
55
|
|
|
59
56
|
PRODUCT_TYPE_CONFIG = {
|
|
@@ -93,47 +90,40 @@ PRODUCT_TYPE_CONFIG = {
|
|
|
93
90
|
"class": _WiserShutter,
|
|
94
91
|
"collection": _WiserShutterCollection,
|
|
95
92
|
"endpoint": WISERSHUTTER,
|
|
96
|
-
"device_id_field": "DeviceId",
|
|
97
93
|
"schedule_type": WiserScheduleTypeEnum.level,
|
|
98
94
|
},
|
|
99
95
|
"OnOffLight": {
|
|
100
96
|
"class": _WiserLight,
|
|
101
97
|
"collection": _WiserLightCollection,
|
|
102
98
|
"endpoint": WISERLIGHT,
|
|
103
|
-
"device_id_field": "DeviceId",
|
|
104
99
|
"schedule_type": WiserScheduleTypeEnum.level,
|
|
105
100
|
},
|
|
106
101
|
"DimmableLight": {
|
|
107
102
|
"class": _WiserDimmableLight,
|
|
108
103
|
"collection": _WiserLightCollection,
|
|
109
104
|
"endpoint": WISERLIGHT,
|
|
110
|
-
"device_id_field": "DeviceId",
|
|
111
105
|
"schedule_type": WiserScheduleTypeEnum.level,
|
|
112
106
|
},
|
|
113
107
|
"PowerTagE": {
|
|
114
108
|
"class": _WiserPowerTagEnergy,
|
|
115
109
|
"collection": _WiserPowerTagEnergyCollection,
|
|
116
110
|
"endpoint": WISERPOWERTAGENERGY,
|
|
117
|
-
"device_id_field": "DeviceId",
|
|
118
111
|
"has_v2_equipment": True,
|
|
119
112
|
},
|
|
120
113
|
"SmokeAlarmDevice": {
|
|
121
114
|
"class": _WiserSmokeAlarm,
|
|
122
115
|
"collection": _WiserSmokeAlarmCollection,
|
|
123
116
|
"endpoint": WISERSMOKEALARM,
|
|
124
|
-
"device_id_field": "DeviceId",
|
|
125
117
|
},
|
|
126
118
|
"WindowDoorSensor": {
|
|
127
119
|
"class": _WiserWindowDoorSensor,
|
|
128
120
|
"collection": _WiserBinarySensorCollection,
|
|
129
121
|
"endpoint": WISERBINARYSENSOR,
|
|
130
|
-
"device_id_field": "DeviceId",
|
|
131
122
|
},
|
|
132
123
|
"BoilerInterface": {
|
|
133
124
|
"class": _WiserBoilerInterface,
|
|
134
125
|
"collection": _WiserBoilerInterfaceCollection,
|
|
135
126
|
"endpoint": WISERBOILERINTERFACE,
|
|
136
|
-
"device_id_field": "DeviceId",
|
|
137
127
|
},
|
|
138
128
|
"CFMT": {
|
|
139
129
|
"class": _WiserHeatingActuator,
|
|
@@ -142,6 +132,11 @@ PRODUCT_TYPE_CONFIG = {
|
|
|
142
132
|
"heating": True,
|
|
143
133
|
"has_v2_equipment": True,
|
|
144
134
|
},
|
|
135
|
+
"ButtonPanel": {
|
|
136
|
+
"class": _WiserButtonPanel,
|
|
137
|
+
"collection": _WiserButtonPanelCollection,
|
|
138
|
+
"endpoint": WISERBUTTONPANEL,
|
|
139
|
+
},
|
|
145
140
|
}
|
|
146
141
|
|
|
147
142
|
|
|
@@ -196,10 +191,14 @@ class _WiserDeviceCollection:
|
|
|
196
191
|
for device_info in self._domain_data.get(
|
|
197
192
|
_WiserDeviceTypeEnum[device_type].value
|
|
198
193
|
)
|
|
199
|
-
if device_info.get(
|
|
194
|
+
if device_info.get("DeviceId", device_info.get("id"))
|
|
200
195
|
== device.get("id")
|
|
201
196
|
]
|
|
202
197
|
|
|
198
|
+
# Safety net to prevent error if device info not found
|
|
199
|
+
if not device_info:
|
|
200
|
+
continue
|
|
201
|
+
|
|
203
202
|
# Get class to create and collection to append for device
|
|
204
203
|
device_class = PRODUCT_TYPE_CONFIG[device_type].get("class")
|
|
205
204
|
|
|
@@ -9,6 +9,7 @@ from datetime import datetime
|
|
|
9
9
|
from typing import Optional
|
|
10
10
|
|
|
11
11
|
import aiohttp
|
|
12
|
+
import aiohttp.client_exceptions
|
|
12
13
|
import aiohttp.http_exceptions
|
|
13
14
|
|
|
14
15
|
from . import _LOGGER
|
|
@@ -95,7 +96,7 @@ class _WiserRestController(object):
|
|
|
95
96
|
http_version = aiohttp.HttpVersion11
|
|
96
97
|
self._last_exception = None
|
|
97
98
|
|
|
98
|
-
for i in range(
|
|
99
|
+
for i in range(5):
|
|
99
100
|
if i > 0:
|
|
100
101
|
await asyncio.sleep(REST_RETRY_BACKOFF[i])
|
|
101
102
|
try:
|
|
@@ -120,7 +121,7 @@ class _WiserRestController(object):
|
|
|
120
121
|
"Request successful and took %ss",
|
|
121
122
|
(datetime.now() - start_time).total_seconds(),
|
|
122
123
|
)
|
|
123
|
-
|
|
124
|
+
|
|
124
125
|
except WiserHubRESTError as ex:
|
|
125
126
|
# if json error try http1.1
|
|
126
127
|
_LOGGER.debug("%s. Retrying in %.1fs", ex, REST_RETRY_BACKOFF[i])
|
|
@@ -135,19 +136,25 @@ class _WiserRestController(object):
|
|
|
135
136
|
# Connection timed out or failed. Try it again
|
|
136
137
|
_LOGGER.debug("%s. Retrying in %.1fs", ex, REST_RETRY_BACKOFF[i])
|
|
137
138
|
self._last_exception = ex
|
|
139
|
+
except Exception as ex:
|
|
140
|
+
# Unknown error
|
|
141
|
+
_LOGGER.debug("%s. Retrying in %.1fs", ex, REST_RETRY_BACKOFF[i])
|
|
142
|
+
self._last_exception = ex
|
|
143
|
+
else:
|
|
144
|
+
return response
|
|
138
145
|
|
|
139
146
|
raise WiserHubConnectionError(self._last_exception)
|
|
140
147
|
|
|
141
|
-
async def _execute_request(
|
|
148
|
+
async def _execute_request(
|
|
142
149
|
self,
|
|
143
150
|
action: WiserRestActionEnum,
|
|
144
151
|
url: str,
|
|
145
|
-
data: dict = None,
|
|
152
|
+
data: dict | None = None,
|
|
146
153
|
raise_for_endpoint_error: bool = True,
|
|
147
154
|
http_version=aiohttp.HttpVersion11,
|
|
148
155
|
):
|
|
149
|
-
"""
|
|
150
|
-
|
|
156
|
+
"""Send request to hub and raise errors if fails.
|
|
157
|
+
|
|
151
158
|
param url: url of hub rest api endpoint
|
|
152
159
|
param patchData: json object containing command and values to set
|
|
153
160
|
return: boolean
|
|
@@ -168,10 +175,10 @@ class _WiserRestController(object):
|
|
|
168
175
|
|
|
169
176
|
# if data is not None:
|
|
170
177
|
if data:
|
|
171
|
-
kwargs["
|
|
178
|
+
kwargs["data"] = json.dumps(data, ensure_ascii=False).encode("utf8")
|
|
172
179
|
kwargs["headers"].update(
|
|
173
180
|
{
|
|
174
|
-
"Content-Type": "application/json
|
|
181
|
+
"Content-Type": "application/json",
|
|
175
182
|
}
|
|
176
183
|
)
|
|
177
184
|
if self._timeout is not None:
|
|
@@ -224,7 +231,10 @@ class _WiserRestController(object):
|
|
|
224
231
|
f"Connection error trying to communicate with Wiser Hub "
|
|
225
232
|
f"{self._wiser_connection_info.host} for url {url}. Error is {ex}"
|
|
226
233
|
) from ex
|
|
227
|
-
except
|
|
234
|
+
except (
|
|
235
|
+
aiohttp.client_exceptions.ClientPayloadError,
|
|
236
|
+
aiohttp.http_exceptions.TransferEncodingError,
|
|
237
|
+
) as ex:
|
|
228
238
|
raise WiserHubConnectionError(
|
|
229
239
|
f"Response payload incomplete error trying to communicate with Wiser Hub "
|
|
230
240
|
f"{self._wiser_connection_info.host} for url {url}. Error is {ex}"
|
|
@@ -237,19 +247,21 @@ class _WiserRestController(object):
|
|
|
237
247
|
data: dict,
|
|
238
248
|
raise_for_endpoint_error: bool = True,
|
|
239
249
|
):
|
|
240
|
-
|
|
250
|
+
status = response.status
|
|
251
|
+
|
|
252
|
+
if status == 400:
|
|
241
253
|
_LOGGER.debug("400 error")
|
|
242
|
-
if
|
|
254
|
+
if status == 401:
|
|
243
255
|
raise WiserHubAuthenticationError(
|
|
244
256
|
f"Error authenticating to Wiser Hub "
|
|
245
257
|
f"{self._wiser_connection_info.host}. Check your secret key"
|
|
246
258
|
)
|
|
247
|
-
elif
|
|
259
|
+
elif status == 404 and raise_for_endpoint_error:
|
|
248
260
|
raise WiserHubRESTError(
|
|
249
261
|
f"Rest endpoint not found on Wiser Hub "
|
|
250
262
|
f"{self._wiser_connection_info.host} for url {url}"
|
|
251
263
|
)
|
|
252
|
-
elif
|
|
264
|
+
elif status == 408:
|
|
253
265
|
raise WiserHubConnectionError(
|
|
254
266
|
f"Connection timed out trying to communicate with Wiser Hub "
|
|
255
267
|
f"{self._wiser_connection_info.host} for url {url}"
|
|
@@ -258,7 +270,7 @@ class _WiserRestController(object):
|
|
|
258
270
|
raise WiserHubRESTError(
|
|
259
271
|
f"Unknown error communicating with Wiser Hub "
|
|
260
272
|
f"{self._wiser_connection_info.host} for url {url} with data {data}. "
|
|
261
|
-
f"Error code is: {
|
|
273
|
+
f"Error code is: {status}"
|
|
262
274
|
)
|
|
263
275
|
|
|
264
276
|
async def get_hub_data(self, url: str, raise_for_endpoint_error: bool = True):
|
|
@@ -363,4 +375,6 @@ class _WiserRestController(object):
|
|
|
363
375
|
f"{schedule_type}/{schedule_id}",
|
|
364
376
|
schedule_data,
|
|
365
377
|
)
|
|
378
|
+
else:
|
|
379
|
+
result = None
|
|
366
380
|
return result
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: aioWiserHeatAPI
|
|
3
|
-
Version: 1.5.
|
|
3
|
+
Version: 1.5.19
|
|
4
4
|
Summary: An AsyncIO API for controlling the Drayton Wiser Heating system
|
|
5
5
|
Home-page: https://github.com/msp1974/aioWiserHeatAPI
|
|
6
6
|
Author: Mark Parker
|
|
@@ -10,7 +10,7 @@ Classifier: Intended Audience :: Developers
|
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.11
|
|
11
11
|
Classifier: License :: OSI Approved :: MIT License
|
|
12
12
|
Classifier: Operating System :: OS Independent
|
|
13
|
-
Requires-Python: >=3.
|
|
13
|
+
Requires-Python: >=3.12
|
|
14
14
|
Description-Content-Type: text/markdown
|
|
15
15
|
License-File: LICENSE
|
|
16
16
|
Requires-Dist: zeroconf>=0.131.0
|
|
@@ -18,7 +18,7 @@ Requires-Dist: aiohttp>=3.9.3
|
|
|
18
18
|
Requires-Dist: aiofiles>=23.2.1
|
|
19
19
|
Requires-Dist: pyyaml>=6.0.1
|
|
20
20
|
|
|
21
|
-
# Drayton Wiser Hub API Async v1.5.
|
|
21
|
+
# Drayton Wiser Hub API Async v1.5.19
|
|
22
22
|
|
|
23
23
|
This repository contains a simple API which queries the Drayton Wiser Heating sysystem used in the UK.
|
|
24
24
|
|
|
@@ -72,6 +72,15 @@ Documentation available in [info.md](https://github.com/msp1974/wiserHeatAPIv2/b
|
|
|
72
72
|
|
|
73
73
|
## Changelog
|
|
74
74
|
|
|
75
|
+
### v1.5.19
|
|
76
|
+
* Fixed error when BoilerInterface does not provide DeviceId field
|
|
77
|
+
* Fixed not supporting non ascii characters in schedule names
|
|
78
|
+
* Added ButtonPanel device support
|
|
79
|
+
|
|
80
|
+
### v1.5.18
|
|
81
|
+
|
|
82
|
+
* Better handle client response exeption and fit into retry routing
|
|
83
|
+
|
|
75
84
|
### v1.5.17
|
|
76
85
|
|
|
77
86
|
* Fixed error setting opentherm endpoint for fw above 4.32.46
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{aiowiserheatapi-1.5.17 → aiowiserheatapi-1.5.19}/aioWiserHeatAPI.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|