lifx-async 4.7.0__py3-none-any.whl → 4.7.2__py3-none-any.whl
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.
- lifx/api.py +3 -2
- lifx/devices/ceiling.py +1 -4
- lifx/devices/matrix.py +10 -2
- {lifx_async-4.7.0.dist-info → lifx_async-4.7.2.dist-info}/METADATA +1 -1
- {lifx_async-4.7.0.dist-info → lifx_async-4.7.2.dist-info}/RECORD +7 -7
- {lifx_async-4.7.0.dist-info → lifx_async-4.7.2.dist-info}/WHEEL +0 -0
- {lifx_async-4.7.0.dist-info → lifx_async-4.7.2.dist-info}/licenses/LICENSE +0 -0
lifx/api.py
CHANGED
|
@@ -126,8 +126,9 @@ class DeviceGroup:
|
|
|
126
126
|
exc_val: BaseException | None,
|
|
127
127
|
exc_tb: TracebackType | None,
|
|
128
128
|
) -> None:
|
|
129
|
-
"""Exit async context manager."""
|
|
130
|
-
|
|
129
|
+
"""Exit async context manager and close all device connections."""
|
|
130
|
+
for device in self._devices:
|
|
131
|
+
await device.connection.close()
|
|
131
132
|
|
|
132
133
|
def __iter__(
|
|
133
134
|
self,
|
lifx/devices/ceiling.py
CHANGED
|
@@ -23,16 +23,13 @@ import logging
|
|
|
23
23
|
import time
|
|
24
24
|
from dataclasses import asdict, dataclass
|
|
25
25
|
from pathlib import Path
|
|
26
|
-
from typing import
|
|
26
|
+
from typing import Any, cast
|
|
27
27
|
|
|
28
28
|
from lifx.color import HSBK
|
|
29
29
|
from lifx.devices.matrix import MatrixLight, MatrixLightState
|
|
30
30
|
from lifx.exceptions import LifxError
|
|
31
31
|
from lifx.products import get_ceiling_layout, is_ceiling_product
|
|
32
32
|
|
|
33
|
-
if TYPE_CHECKING:
|
|
34
|
-
pass
|
|
35
|
-
|
|
36
33
|
_LOGGER = logging.getLogger(__name__)
|
|
37
34
|
|
|
38
35
|
|
lifx/devices/matrix.py
CHANGED
|
@@ -699,6 +699,7 @@ class MatrixLight(Light):
|
|
|
699
699
|
source_fb: int = 1,
|
|
700
700
|
target_fb: int = 0,
|
|
701
701
|
duration: float = 0.0,
|
|
702
|
+
length: int = 1,
|
|
702
703
|
) -> None:
|
|
703
704
|
"""Copy frame buffer (for tiles with >64 zones).
|
|
704
705
|
|
|
@@ -710,6 +711,7 @@ class MatrixLight(Light):
|
|
|
710
711
|
source_fb: Source frame buffer index (usually 1)
|
|
711
712
|
target_fb: Target frame buffer index (usually 0)
|
|
712
713
|
duration: time in seconds to transition if target_fb is 0
|
|
714
|
+
length: Number of tiles to update starting from tile_index (default 1)
|
|
713
715
|
|
|
714
716
|
Example:
|
|
715
717
|
>>> # For 16x8 tile (128 zones):
|
|
@@ -739,12 +741,18 @@ class MatrixLight(Light):
|
|
|
739
741
|
>>> await matrix.copy_frame_buffer(
|
|
740
742
|
... tile_index=0, source_fb=1, target_fb=0, duration=2.0
|
|
741
743
|
... )
|
|
744
|
+
|
|
745
|
+
>>> # For a chain of 5 tiles, update all simultaneously:
|
|
746
|
+
>>> await matrix.copy_frame_buffer(
|
|
747
|
+
... tile_index=0, source_fb=1, target_fb=0, length=5
|
|
748
|
+
... )
|
|
742
749
|
"""
|
|
743
750
|
_LOGGER.debug(
|
|
744
|
-
"Copying frame buffer %d -> %d for tile %d on %s",
|
|
751
|
+
"Copying frame buffer %d -> %d for tile %d (length=%d) on %s",
|
|
745
752
|
source_fb,
|
|
746
753
|
target_fb,
|
|
747
754
|
tile_index,
|
|
755
|
+
length,
|
|
748
756
|
self.label or self.serial,
|
|
749
757
|
)
|
|
750
758
|
|
|
@@ -761,7 +769,7 @@ class MatrixLight(Light):
|
|
|
761
769
|
await self.connection.send_packet(
|
|
762
770
|
packets.Tile.CopyFrameBuffer(
|
|
763
771
|
tile_index=tile_index,
|
|
764
|
-
length=
|
|
772
|
+
length=length,
|
|
765
773
|
src_fb_index=source_fb,
|
|
766
774
|
dst_fb_index=target_fb,
|
|
767
775
|
src_x=0,
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
lifx/__init__.py,sha256=aiMLKLhmcXADJyeISNHIZ_Nuc6jEhPG8-I_R3peWpwo,2610
|
|
2
|
-
lifx/api.py,sha256=
|
|
2
|
+
lifx/api.py,sha256=XV2CJLi3N9UpbZuqVE56K-MEsSaqOte9WhcBbhkmHQM,33962
|
|
3
3
|
lifx/color.py,sha256=wcmeeiBmOAjunInERNd6rslKvBEpV4vfjwwiZ8v7H8A,17877
|
|
4
4
|
lifx/const.py,sha256=cf_O_3TqJjIBXF1tI35PkJ1JOhmy4tRt14PSa63pilA,3471
|
|
5
5
|
lifx/exceptions.py,sha256=pikAMppLn7gXyjiQVWM_tSvXKNh-g366nG_UWyqpHhc,815
|
|
6
6
|
lifx/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
7
|
lifx/devices/__init__.py,sha256=4b5QtO0EFWxIqN2lUYgM8uLjWyHI5hUcReiF9QCjCGw,1061
|
|
8
8
|
lifx/devices/base.py,sha256=0G2PCJRNeIPkMCIw68x0ijn6gUIwh2jFlex8SN4Hs1Y,63530
|
|
9
|
-
lifx/devices/ceiling.py,sha256=
|
|
9
|
+
lifx/devices/ceiling.py,sha256=3tHk-SklJNtSYJhnzqxqQKhdDEq9VWzK2mYEjf2P-Xc,33044
|
|
10
10
|
lifx/devices/hev.py,sha256=T5hvt2q_vdgPBvThx_-M7n5pZu9pL0y9Fs3Zz_KL0NM,15588
|
|
11
11
|
lifx/devices/infrared.py,sha256=ePk9qxX_s-hv5gQMvio1Vv8FYiCd68HF0ySbWgSrvuU,8130
|
|
12
12
|
lifx/devices/light.py,sha256=gk92lhViUWINGaxDWbs4qn8Stnn2fGCfRkC5Kk0Q-hI,34087
|
|
13
|
-
lifx/devices/matrix.py,sha256=
|
|
13
|
+
lifx/devices/matrix.py,sha256=TcfVvqFCIhGXjOtaQEARQCXe9XqSFDZ4wEQdRZBiQpA,42301
|
|
14
14
|
lifx/devices/multizone.py,sha256=zQj0qKxWccHAmkIpqIcGzZsKjCQL-_bAquz78o0Izng,33570
|
|
15
15
|
lifx/effects/__init__.py,sha256=4DF31yp7RJic5JoltMlz5dCtF5KQobU6NOUtLUKkVKE,1509
|
|
16
16
|
lifx/effects/base.py,sha256=YO0Hbg2VYHKPtfYnWxmrtzYoPGOi9BUXhn8HVFKv5IM,10283
|
|
@@ -42,7 +42,7 @@ lifx/theme/canvas.py,sha256=4h7lgN8iu_OdchObGDgbxTqQLCb-FRKC-M-YCWef_i4,8048
|
|
|
42
42
|
lifx/theme/generators.py,sha256=nq3Yvntq_h-eFHbmmow3LcAdA_hEbRRaP5mv9Bydrjk,6435
|
|
43
43
|
lifx/theme/library.py,sha256=tKlKZNqJp8lRGDnilWyDm_Qr1vCRGGwuvWVS82anNpQ,21326
|
|
44
44
|
lifx/theme/theme.py,sha256=qMEx_8E41C0Cc6f083XHiAXEglTv4YlXW0UFsG1rQKg,5521
|
|
45
|
-
lifx_async-4.7.
|
|
46
|
-
lifx_async-4.7.
|
|
47
|
-
lifx_async-4.7.
|
|
48
|
-
lifx_async-4.7.
|
|
45
|
+
lifx_async-4.7.2.dist-info/METADATA,sha256=wb8Qr4I_4s40AlDRnG7589cnjZ4wE8SA9orSCizjoyA,2609
|
|
46
|
+
lifx_async-4.7.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
47
|
+
lifx_async-4.7.2.dist-info/licenses/LICENSE,sha256=eBz48GRA3gSiWn3rYZAz2Ewp35snnhV9cSqkVBq7g3k,1832
|
|
48
|
+
lifx_async-4.7.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|