blueair-api 1.30.2__tar.gz → 1.31.1__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.
- {blueair_api-1.30.2 → blueair_api-1.31.1}/PKG-INFO +2 -2
- {blueair_api-1.30.2 → blueair_api-1.31.1}/pyproject.toml +1 -1
- {blueair_api-1.30.2 → blueair_api-1.31.1}/src/blueair_api/device.py +11 -6
- {blueair_api-1.30.2 → blueair_api-1.31.1}/src/blueair_api/device_aws.py +11 -10
- {blueair_api-1.30.2 → blueair_api-1.31.1}/src/blueair_api.egg-info/PKG-INFO +2 -2
- {blueair_api-1.30.2 → blueair_api-1.31.1}/LICENSE +0 -0
- {blueair_api-1.30.2 → blueair_api-1.31.1}/README.md +0 -0
- {blueair_api-1.30.2 → blueair_api-1.31.1}/setup.cfg +0 -0
- {blueair_api-1.30.2 → blueair_api-1.31.1}/src/blueair_api/__init__.py +0 -0
- {blueair_api-1.30.2 → blueair_api-1.31.1}/src/blueair_api/callbacks.py +0 -0
- {blueair_api-1.30.2 → blueair_api-1.31.1}/src/blueair_api/const.py +0 -0
- {blueair_api-1.30.2 → blueair_api-1.31.1}/src/blueair_api/errors.py +0 -0
- {blueair_api-1.30.2 → blueair_api-1.31.1}/src/blueair_api/http_aws_blueair.py +0 -0
- {blueair_api-1.30.2 → blueair_api-1.31.1}/src/blueair_api/http_blueair.py +0 -0
- {blueair_api-1.30.2 → blueair_api-1.31.1}/src/blueair_api/intermediate_representation_aws.py +0 -0
- {blueair_api-1.30.2 → blueair_api-1.31.1}/src/blueair_api/model_enum.py +0 -0
- {blueair_api-1.30.2 → blueair_api-1.31.1}/src/blueair_api/stub.py +0 -0
- {blueair_api-1.30.2 → blueair_api-1.31.1}/src/blueair_api/util.py +0 -0
- {blueair_api-1.30.2 → blueair_api-1.31.1}/src/blueair_api/util_bootstrap.py +0 -0
- {blueair_api-1.30.2 → blueair_api-1.31.1}/src/blueair_api/util_http.py +0 -0
- {blueair_api-1.30.2 → blueair_api-1.31.1}/src/blueair_api.egg-info/SOURCES.txt +0 -0
- {blueair_api-1.30.2 → blueair_api-1.31.1}/src/blueair_api.egg-info/dependency_links.txt +0 -0
- {blueair_api-1.30.2 → blueair_api-1.31.1}/src/blueair_api.egg-info/requires.txt +0 -0
- {blueair_api-1.30.2 → blueair_api-1.31.1}/src/blueair_api.egg-info/top_level.txt +0 -0
- {blueair_api-1.30.2 → blueair_api-1.31.1}/tests/test_device_aws.py +0 -0
- {blueair_api-1.30.2 → blueair_api-1.31.1}/tests/test_intermediate_representation_aws.py +0 -0
@@ -1,14 +1,13 @@
|
|
1
|
-
import dataclasses
|
2
|
-
import logging
|
3
|
-
|
4
1
|
from .callbacks import CallbacksMixin
|
5
2
|
from .http_blueair import HttpBlueair
|
6
3
|
from .util import transform_data_points, safely_get_json_value
|
4
|
+
from dataclasses import dataclass, field
|
5
|
+
from logging import getLogger
|
7
6
|
|
8
|
-
_LOGGER =
|
7
|
+
_LOGGER = getLogger(__name__)
|
9
8
|
|
10
9
|
|
11
|
-
@
|
10
|
+
@dataclass(slots=True)
|
12
11
|
class Device(CallbacksMixin):
|
13
12
|
@classmethod
|
14
13
|
async def create_device(cls, api, uuid, name, mac, refresh=False):
|
@@ -33,6 +32,8 @@ class Device(CallbacksMixin):
|
|
33
32
|
return device
|
34
33
|
|
35
34
|
api: HttpBlueair
|
35
|
+
raw_info : dict[str: any] = field(repr=False, init=False)
|
36
|
+
|
36
37
|
uuid: str | None = None
|
37
38
|
name: str | None = None
|
38
39
|
timezone: str | None = None
|
@@ -63,7 +64,9 @@ class Device(CallbacksMixin):
|
|
63
64
|
|
64
65
|
async def refresh(self):
|
65
66
|
_LOGGER.debug("Requesting current attributes...")
|
67
|
+
self.raw_info = {}
|
66
68
|
attributes = await self.api.get_attributes(self.uuid)
|
69
|
+
self.raw_info["attributes"] = attributes
|
67
70
|
_LOGGER.debug(f"result: {attributes}")
|
68
71
|
if "brightness" in attributes:
|
69
72
|
self.brightness = int(attributes["brightness"])
|
@@ -94,7 +97,9 @@ class Device(CallbacksMixin):
|
|
94
97
|
else:
|
95
98
|
self.wifi_working = False
|
96
99
|
if self.compatibility != "sense+":
|
97
|
-
|
100
|
+
datapoints = transform_data_points(await self.api.get_data_points_since(self.uuid))
|
101
|
+
self.raw_info["datapoints"] = datapoints
|
102
|
+
for data_point in datapoints:
|
98
103
|
_LOGGER.debug(data_point)
|
99
104
|
self.pm25 = safely_get_json_value(data_point, "pm25", int)
|
100
105
|
self.pm10 = safely_get_json_value(data_point, "pm10", int)
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import dataclasses
|
2
1
|
import logging
|
3
2
|
from json import dumps
|
4
3
|
|
@@ -6,12 +5,13 @@ from .callbacks import CallbacksMixin
|
|
6
5
|
from .http_aws_blueair import HttpAwsBlueair
|
7
6
|
from .model_enum import ModelEnum
|
8
7
|
from . import intermediate_representation_aws as ir
|
8
|
+
from dataclasses import dataclass, field
|
9
9
|
|
10
10
|
_LOGGER = logging.getLogger(__name__)
|
11
11
|
|
12
12
|
type AttributeType[T] = T | None
|
13
13
|
|
14
|
-
@
|
14
|
+
@dataclass(slots=True)
|
15
15
|
class DeviceAws(CallbacksMixin):
|
16
16
|
@classmethod
|
17
17
|
async def create_device(cls, api, uuid, name, mac, type_name, refresh=False):
|
@@ -29,6 +29,8 @@ class DeviceAws(CallbacksMixin):
|
|
29
29
|
return device_aws
|
30
30
|
|
31
31
|
api: HttpAwsBlueair
|
32
|
+
raw_info : dict[str: any] = field(repr=False, init=False)
|
33
|
+
|
32
34
|
uuid : str | None = None
|
33
35
|
name : str | None = None
|
34
36
|
name_api : str | None = None
|
@@ -66,14 +68,14 @@ class DeviceAws(CallbacksMixin):
|
|
66
68
|
|
67
69
|
async def refresh(self):
|
68
70
|
_LOGGER.debug(f"refreshing blueair device aws: {self}")
|
69
|
-
|
70
|
-
_LOGGER.debug(dumps(
|
71
|
+
self.raw_info = await self.api.device_info(self.name_api, self.uuid)
|
72
|
+
_LOGGER.debug(dumps(self.raw_info, indent=2))
|
71
73
|
|
72
74
|
# ir.parse_json(ir.Attribute, ir.query_json(info, "configuration.da"))
|
73
|
-
ds = ir.parse_json(ir.Sensor, ir.query_json(
|
74
|
-
dc = ir.parse_json(ir.Control, ir.query_json(
|
75
|
+
ds = ir.parse_json(ir.Sensor, ir.query_json(self.raw_info, "configuration.ds"))
|
76
|
+
dc = ir.parse_json(ir.Control, ir.query_json(self.raw_info, "configuration.dc"))
|
75
77
|
|
76
|
-
sensor_data = ir.SensorPack(
|
78
|
+
sensor_data = ir.SensorPack(self.raw_info["sensordata"]).to_latest_value()
|
77
79
|
|
78
80
|
def sensor_data_safe_get(key):
|
79
81
|
return sensor_data.get(key) if key in ds else NotImplemented
|
@@ -88,7 +90,7 @@ class DeviceAws(CallbacksMixin):
|
|
88
90
|
def info_safe_get(path):
|
89
91
|
# directly reads for the schema. If the schema field is
|
90
92
|
# undefined, it is NotImplemented, not merely unavailable.
|
91
|
-
value = ir.query_json(
|
93
|
+
value = ir.query_json(self.raw_info, path)
|
92
94
|
if value is None:
|
93
95
|
return NotImplemented
|
94
96
|
return value
|
@@ -99,7 +101,7 @@ class DeviceAws(CallbacksMixin):
|
|
99
101
|
self.serial_number = info_safe_get("configuration.di.ds")
|
100
102
|
self.sku = info_safe_get("configuration.di.sku")
|
101
103
|
|
102
|
-
states = ir.SensorPack(
|
104
|
+
states = ir.SensorPack(self.raw_info["states"]).to_latest_value()
|
103
105
|
|
104
106
|
def states_safe_get(key):
|
105
107
|
return states.get(key) if key in dc else NotImplemented
|
@@ -185,4 +187,3 @@ class DeviceAws(CallbacksMixin):
|
|
185
187
|
if self.sku == "112124":
|
186
188
|
return ModelEnum.T10I
|
187
189
|
return ModelEnum.UNKNOWN
|
188
|
-
|
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
|
{blueair_api-1.30.2 → blueair_api-1.31.1}/src/blueair_api/intermediate_representation_aws.py
RENAMED
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
|