From 1a7fcdf290d76da586d23d708301529736b0b8ed Mon Sep 17 00:00:00 2001 From: puddly <32534428+puddly@users.noreply.github.com> Date: Tue, 13 Oct 2026 20:51:36 +0000 Subject: [PATCH 1/6] Add `port_number` to `SerialPortInfo` --- serialx/common.py | 3 +++ serialx/platforms/serial_linux.py | 4 ++++ serialx/udev.py | 14 ++++++++++---- tests/test_list_serial_ports_linux.py | 20 +++++++++++++++----- tests/test_udev.py | 4 ++++ 5 files changed, 36 insertions(+), 9 deletions(-) diff --git a/serialx/common.py b/serialx/common.py index 304f069..8c653b4 100644 --- a/serialx/common.py +++ b/serialx/common.py @@ -1545,6 +1545,9 @@ class SerialPortInfo: bcd_device: int | None interface_description: str | None interface_num: int | None + # Index among the ports a vendor driver exposes on `interface_num`, which udev puts + # in the port's name. `None` under a class driver, which binds the interface itself. + port_number: int | None = None def __getitem__(self, key: int | slice) -> str | None: """Compatibility shim for `serial.tools.list_ports_common.ListPortInfo`.""" diff --git a/serialx/platforms/serial_linux.py b/serialx/platforms/serial_linux.py index e9c305f..8f08d09 100644 --- a/serialx/platforms/serial_linux.py +++ b/serialx/platforms/serial_linux.py @@ -391,6 +391,7 @@ def linux_list_serial_ports() -> list[SerialPortInfo]: interface_num = int( (usb_interface / "bInterfaceNumber").read_text(), 16 ) + port_number = int((resolved / "port_number").read_text()) except OSError: LOGGER.debug( "Serial device %r disappeared during iteration", usb_device @@ -408,6 +409,7 @@ def linux_list_serial_ports() -> list[SerialPortInfo]: bcd_device=bcd_device, interface_description=_read_optional_sysfs(usb_interface / "interface"), interface_num=interface_num, + port_number=port_number, ) elif subsystem == "usb": # CDC ACM devices @@ -436,6 +438,7 @@ def linux_list_serial_ports() -> list[SerialPortInfo]: bcd_device=bcd_device, interface_description=_read_optional_sysfs(usb_interface / "interface"), interface_num=interface_num, + port_number=None, ) elif subsystem in ("serial-base", "platform", "pnp", "amba"): # `serial-base` is the per-port subsystem introduced in Linux 6.10. @@ -465,6 +468,7 @@ def linux_list_serial_ports() -> list[SerialPortInfo]: bcd_device=None, interface_description=None, interface_num=None, + port_number=None, ) else: LOGGER.warning( diff --git a/serialx/udev.py b/serialx/udev.py index 4121e5c..a8f5f8f 100644 --- a/serialx/udev.py +++ b/serialx/udev.py @@ -78,10 +78,11 @@ def _udev_replace_chars(value: bytes) -> bytes: def udev_serial_by_id_stem(port: SerialPortInfo) -> str | None: - """Compute the `/dev/serial/by-id/` link name udev gives a USB port, without `-portN`. + """Compute the `/dev/serial/by-id/` link name udev gives a USB port. - udev appends `-port{N}` only when a `usb-serial` driver binds the port, not for CDC - ACM. Which one binds cannot be known from the port, so it is left out. + udev appends `-port{N}` only when a `usb-serial` driver binds the port, N being the + port's index within that driver. A class driver such as CDC ACM binds the interface + itself and gets no suffix. """ if port.interface_num is None: @@ -118,4 +119,9 @@ def udev_serial_by_id_stem(port: SerialPortInfo) -> str | None: id_serial += b"_" + serial # `ID_SERIAL` is built in a 256 byte buffer - return f"usb-{id_serial[:255].decode('utf-8')}-if{port.interface_num:02x}" + stem = f"usb-{id_serial[:255].decode('utf-8')}-if{port.interface_num:02x}" + + if port.port_number is not None: + stem += f"-port{port.port_number}" + + return stem diff --git a/tests/test_list_serial_ports_linux.py b/tests/test_list_serial_ports_linux.py index 4c88b7f..483148e 100644 --- a/tests/test_list_serial_ports_linux.py +++ b/tests/test_list_serial_ports_linux.py @@ -11,7 +11,6 @@ pytest.skip("Linux-only tests", allow_module_level=True) from pathlib import Path -import re import shutil from unittest.mock import patch @@ -55,6 +54,7 @@ def test_replay_debian_12_kernel_6_1( bcd_device=None, interface_description=None, interface_num=None, + port_number=None, ), ] @@ -80,6 +80,7 @@ def test_replay_debian_13_kernel_6_12( bcd_device=0x0100, interface_description="Nabu Casa ZBT-2", interface_num=0, + port_number=None, ), SerialPortInfo( device=str(dev_root / "ttyS0"), @@ -92,6 +93,7 @@ def test_replay_debian_13_kernel_6_12( bcd_device=None, interface_description=None, interface_num=None, + port_number=None, ), SerialPortInfo( device=str( @@ -107,6 +109,7 @@ def test_replay_debian_13_kernel_6_12( bcd_device=0x0100, interface_description="CP2102 USB to UART Bridge Controller", interface_num=0, + port_number=0, ), SerialPortInfo( device=str( @@ -122,6 +125,7 @@ def test_replay_debian_13_kernel_6_12( bcd_device=0x0100, interface_description=None, interface_num=0, + port_number=0, ), SerialPortInfo( device=str(by_id / "usb-FTDI_FT232R_USB_UART_A5069RR4-if00-port0"), @@ -134,6 +138,7 @@ def test_replay_debian_13_kernel_6_12( bcd_device=0x0600, interface_description="FT232R USB UART", interface_num=0, + port_number=0, ), SerialPortInfo( device=str(dev_root / "ttyUSB3"), @@ -146,6 +151,7 @@ def test_replay_debian_13_kernel_6_12( bcd_device=0x0600, interface_description="FT232R USB UART", interface_num=0, + port_number=0, ), SerialPortInfo( device=str(by_id / "usb-FTDI_FT232R_USB_UART_rutabaga-if00-port0"), @@ -158,6 +164,7 @@ def test_replay_debian_13_kernel_6_12( bcd_device=0x0600, interface_description="FT232R USB UART", interface_num=0, + port_number=0, ), SerialPortInfo( device=str( @@ -173,6 +180,7 @@ def test_replay_debian_13_kernel_6_12( bcd_device=0x0605, interface_description=None, interface_num=0, + port_number=0, ), ] @@ -198,6 +206,7 @@ def test_replay_haos_x86_kernel_6_12( bcd_device=0x0101, interface_description="Nabu Casa ZBT-2", interface_num=0, + port_number=None, ), SerialPortInfo( device=str(by_id / "usb-Nabu_Casa_ZBT-2_10B41DE58A2C-if00"), @@ -210,6 +219,7 @@ def test_replay_haos_x86_kernel_6_12( bcd_device=0x0100, interface_description="Nabu Casa ZBT-2", interface_num=0, + port_number=None, ), ] @@ -234,6 +244,7 @@ def test_replay_haos_yellow_kernel_6_6( bcd_device=None, interface_description=None, interface_num=None, + port_number=None, ) for name in ("ttyAMA0", "ttyAMA1", "ttyAMA10", "ttyAMA2") ] @@ -434,6 +445,7 @@ def test_replay_github_actions_ubuntu_24_04_kernel_6_17( bcd_device=None, interface_description=None, interface_num=None, + port_number=None, ), SerialPortInfo( device=str(dev_root / "ttyS1"), @@ -446,6 +458,7 @@ def test_replay_github_actions_ubuntu_24_04_kernel_6_17( bcd_device=None, interface_description=None, interface_num=None, + port_number=None, ), ] @@ -496,10 +509,7 @@ def test_udev_serial_by_id_stem_matches_recorded_links( links = _recorded_by_id_links(dump) for port in ports: - expected = { - re.sub(r"-port\d+$", "", link) - for link in links[Path(port.resolved_device).name] - } + expected = links[Path(port.resolved_device).name] stem = udev_serial_by_id_stem(port) assert expected == (set() if stem is None else {stem}) diff --git a/tests/test_udev.py b/tests/test_udev.py index 1041e3f..9fed6ce 100644 --- a/tests/test_udev.py +++ b/tests/test_udev.py @@ -21,6 +21,7 @@ def _usb_port(**overrides: Any) -> SerialPortInfo: "bcd_device": 0x0100, "interface_description": "Nabu Casa ZBT-2", "interface_num": 0, + "port_number": None, } fields.update(overrides) return SerialPortInfo(**fields) @@ -31,6 +32,9 @@ def _usb_port(**overrides: Any) -> SerialPortInfo: [ ({}, "usb-Nabu_Casa_ZBT-2_10B41DE589E4-if00"), ({"interface_num": 10}, "usb-Nabu_Casa_ZBT-2_10B41DE589E4-if0a"), + # A `usb-serial` driver numbers its ports, a class driver does not + ({"port_number": 0}, "usb-Nabu_Casa_ZBT-2_10B41DE589E4-if00-port0"), + ({"port_number": 3}, "usb-Nabu_Casa_ZBT-2_10B41DE589E4-if00-port3"), # Missing strings fall back to the IDs as sysfs spells them ( {"manufacturer": None, "product": None, "serial_number": None}, From b60d6ed723ae6a54b5eb34f4ba48a8c346eea257 Mon Sep 17 00:00:00 2001 From: puddly <32534428+puddly@users.noreply.github.com> Date: Tue, 13 Oct 2026 20:52:41 +0000 Subject: [PATCH 2/6] Expose on ESPHome backend (unreleased aioesphomeapi) --- pyproject.toml | 4 +-- serialx/platforms/serial_esphome.py | 6 ++++ tests/test_serial_esphome.py | 53 ++++++++++++++++++++++++++++- 3 files changed, 60 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 73d67cf..1d33c23 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ repository = "https://github.com/puddly/serialx" documentation = "https://puddly.github.io/serialx/" [project.optional-dependencies] -esphome = ["aioesphomeapi>=46.5.0; python_version >= '3.11'"] +esphome = ["aioesphomeapi>=46.11.0; python_version >= '3.11'"] [dependency-groups] dev = [ @@ -49,7 +49,7 @@ dev = [ "types-pywin32>=311.0.0.20260508", "types-setuptools>=82.0.0.20260508", "setuptools-rust>=1.7.0", - "aioesphomeapi>=46.5.0 ; python_version >= '3.11'", + "aioesphomeapi>=46.11.0 ; python_version >= '3.11'", ] docs = [ "sphinx>=7,<8.2.3; python_version < '3.11'", diff --git a/serialx/platforms/serial_esphome.py b/serialx/platforms/serial_esphome.py index e79b6da..7945658 100644 --- a/serialx/platforms/serial_esphome.py +++ b/serialx/platforms/serial_esphome.py @@ -56,6 +56,7 @@ SerialProxyParity, SerialProxyRequestResponse, SerialProxyStatus, + UsbSerialDriver, ) from typing_extensions import Buffer, Unpack @@ -158,6 +159,11 @@ def identity_port_info( bcd_device=identity.usb.bcd_device if has_usb else None, interface_description=interface_description, interface_num=identity.usb.interface_number if has_usb else None, + port_number=( + identity.usb.port_number + if has_usb and identity.usb.driver is UsbSerialDriver.VENDOR + else None + ), ) diff --git a/tests/test_serial_esphome.py b/tests/test_serial_esphome.py index a70e89d..209c28b 100644 --- a/tests/test_serial_esphome.py +++ b/tests/test_serial_esphome.py @@ -32,6 +32,7 @@ SerialProxyRequestResponse, SerialProxyStatus, UsbDeviceDescriptor, + UsbSerialDriver, ) from serialx import ( @@ -45,6 +46,7 @@ create_serial_connection, list_serial_ports, redact_uri, + udev_serial_by_id_stem, ) from serialx.platforms.serial_esphome import ( ESPHOME_DEFAULT_PORT, @@ -53,6 +55,7 @@ ESPHomeSerialTransport, InvalidSettingsError, SerialProxyModeName, + identity_port_info, ) from .common import ESPHOME_HOST_BINARY, create_esphome_pair, create_socat_pair @@ -933,13 +936,61 @@ def _identity(**overrides: object) -> SerialProxyIdentity: "product": "ZBT-2", "serial_number": "AABBCCDDEEFF", "usb": UsbDeviceDescriptor( # type:ignore[call-arg] - vendor_id=0x303A, product_id=0x4001, bcd_device=0x0101, interface_number=0 + vendor_id=0x303A, + product_id=0x4001, + bcd_device=0x0101, + interface_number=0, ), } fields.update(overrides) return SerialProxyIdentity(**fields) +@pytest.mark.parametrize( + ("driver", "port_number", "udev_id"), + [ + pytest.param( + UsbSerialDriver.CLASS, + 0, + "usb-Nabu_Casa_ZBT-2_AABBCCDDEEFF-if00", + id="class", + ), + pytest.param( + UsbSerialDriver.VENDOR, + 0, + "usb-Nabu_Casa_ZBT-2_AABBCCDDEEFF-if00-port0", + id="vendor", + ), + pytest.param( + UsbSerialDriver.VENDOR, + 2, + "usb-Nabu_Casa_ZBT-2_AABBCCDDEEFF-if00-port2", + id="vendor_multiplexed", + ), + ], +) +def test_identity_udev_id_follows_driver( + driver: UsbSerialDriver, port_number: int, udev_id: str +) -> None: + """A vendor driver's port index ends up in the name, a class driver's does not.""" + identity = _identity( + usb=UsbDeviceDescriptor( # type:ignore[call-arg] + vendor_id=0x303A, + product_id=0x4001, + bcd_device=0x0101, + interface_number=0, + driver=driver, + port_number=port_number, + ) + ) + port = identity_port_info(identity, interface_description="Zigbee") + + assert port.port_number == ( + port_number if driver is UsbSerialDriver.VENDOR else None + ) + assert udev_serial_by_id_stem(port) == udev_id + + async def test_serial_number_match_allows_connection() -> None: """A port whose device reports the expected serial number is used.""" api = mock_api_client("Zigbee") From a1bd477e4e52be132b12927f84df0234bdaca58c Mon Sep 17 00:00:00 2001 From: puddly <32534428+puddly@users.noreply.github.com> Date: Tue, 13 Oct 2026 21:22:35 +0000 Subject: [PATCH 3/6] Swap from `driver` to `interface_class` --- serialx/platforms/serial_esphome.py | 7 +++++-- tests/test_serial_esphome.py | 30 ++++++++++------------------- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/serialx/platforms/serial_esphome.py b/serialx/platforms/serial_esphome.py index 7945658..cb7fda5 100644 --- a/serialx/platforms/serial_esphome.py +++ b/serialx/platforms/serial_esphome.py @@ -56,7 +56,6 @@ SerialProxyParity, SerialProxyRequestResponse, SerialProxyStatus, - UsbSerialDriver, ) from typing_extensions import Buffer, Unpack @@ -85,6 +84,8 @@ # Set-mode arrived in API 1.17. Earlier devices never answer a set-mode request. MIN_VERSION_SERIAL_PROXY_SET_MODE = APIVersion(1, 17) +USB_CLASS_VENDOR_SPEC = 0xFF + # Identity arrived in API 1.18. Earlier devices never answer an identity request. MIN_VERSION_SERIAL_PROXY_IDENTITY = APIVersion(1, 18) @@ -159,9 +160,11 @@ def identity_port_info( bcd_device=identity.usb.bcd_device if has_usb else None, interface_description=interface_description, interface_num=identity.usb.interface_number if has_usb else None, + # A vendor-specific interface is bound through a chip driver, which numbers its + # ports; a class interface (CDC ACM) is bound by the class driver itself port_number=( identity.usb.port_number - if has_usb and identity.usb.driver is UsbSerialDriver.VENDOR + if has_usb and identity.usb.interface_class == USB_CLASS_VENDOR_SPEC else None ), ) diff --git a/tests/test_serial_esphome.py b/tests/test_serial_esphome.py index 209c28b..79f5caf 100644 --- a/tests/test_serial_esphome.py +++ b/tests/test_serial_esphome.py @@ -32,7 +32,6 @@ SerialProxyRequestResponse, SerialProxyStatus, UsbDeviceDescriptor, - UsbSerialDriver, ) from serialx import ( @@ -940,6 +939,7 @@ def _identity(**overrides: object) -> SerialProxyIdentity: product_id=0x4001, bcd_device=0x0101, interface_number=0, + interface_class=0x02, ), } fields.update(overrides) @@ -947,47 +947,37 @@ def _identity(**overrides: object) -> SerialProxyIdentity: @pytest.mark.parametrize( - ("driver", "port_number", "udev_id"), + ("interface_class", "port_number", "udev_id"), [ + pytest.param(0x02, 0, "usb-Nabu_Casa_ZBT-2_AABBCCDDEEFF-if00", id="cdc_acm"), pytest.param( - UsbSerialDriver.CLASS, - 0, - "usb-Nabu_Casa_ZBT-2_AABBCCDDEEFF-if00", - id="class", + 0xFF, 0, "usb-Nabu_Casa_ZBT-2_AABBCCDDEEFF-if00-port0", id="vendor" ), pytest.param( - UsbSerialDriver.VENDOR, - 0, - "usb-Nabu_Casa_ZBT-2_AABBCCDDEEFF-if00-port0", - id="vendor", - ), - pytest.param( - UsbSerialDriver.VENDOR, + 0xFF, 2, "usb-Nabu_Casa_ZBT-2_AABBCCDDEEFF-if00-port2", id="vendor_multiplexed", ), ], ) -def test_identity_udev_id_follows_driver( - driver: UsbSerialDriver, port_number: int, udev_id: str +def test_identity_udev_id_follows_interface_class( + interface_class: int, port_number: int, udev_id: str ) -> None: - """A vendor driver's port index ends up in the name, a class driver's does not.""" + """A chip driver's port index ends up in the name, a class driver's does not.""" identity = _identity( usb=UsbDeviceDescriptor( # type:ignore[call-arg] vendor_id=0x303A, product_id=0x4001, bcd_device=0x0101, interface_number=0, - driver=driver, + interface_class=interface_class, port_number=port_number, ) ) port = identity_port_info(identity, interface_description="Zigbee") - assert port.port_number == ( - port_number if driver is UsbSerialDriver.VENDOR else None - ) + assert port.port_number == (port_number if interface_class == 0xFF else None) assert udev_serial_by_id_stem(port) == udev_id From 253513a6c3831c08a5e00f8af7414c4f0aa10c50 Mon Sep 17 00:00:00 2001 From: puddly <32534428+puddly@users.noreply.github.com> Date: Tue, 13 Oct 2026 22:08:08 +0000 Subject: [PATCH 4/6] Add proxmox dumps with CH9102 and dual port CP210x --- tests/data/linux/debian-13-7.0.meta.txt | 12 + tests/data/linux/debian-13-7.0.umockdev | 1183 +++++++++++++++++++++++ tests/test_list_serial_ports_linux.py | 85 ++ 3 files changed, 1280 insertions(+) create mode 100644 tests/data/linux/debian-13-7.0.meta.txt create mode 100644 tests/data/linux/debian-13-7.0.umockdev diff --git a/tests/data/linux/debian-13-7.0.meta.txt b/tests/data/linux/debian-13-7.0.meta.txt new file mode 100644 index 0000000..d40ca28 --- /dev/null +++ b/tests/data/linux/debian-13-7.0.meta.txt @@ -0,0 +1,12 @@ +Linux proxmox 7.0.2-4-pve #1 SMP PREEMPT_DYNAMIC PMX 7.0.2-4 (2026-05-15T07:32Z) x86_64 GNU/Linux + +PRETTY_NAME="Debian GNU/Linux 13 (trixie)" +NAME="Debian GNU/Linux" +VERSION_ID="13" +VERSION="13 (trixie)" +VERSION_CODENAME=trixie +DEBIAN_VERSION_FULL=13.5 +ID=debian +HOME_URL="https://www.debian.org/" +SUPPORT_URL="https://www.debian.org/support" +BUG_REPORT_URL="https://bugs.debian.org/" diff --git a/tests/data/linux/debian-13-7.0.umockdev b/tests/data/linux/debian-13-7.0.umockdev new file mode 100644 index 0000000..a3cb6f3 --- /dev/null +++ b/tests/data/linux/debian-13-7.0.umockdev @@ -0,0 +1,1183 @@ +P: /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6.2/3-6.2:1.0/tty/ttyACM0 +N: ttyACM0 +S: serial/by-id/usb-1a86_USB_Single_Serial_5424007932-if00 +S: serial/by-path/pci-0000:00:14.0-usbv2-0:6.2:1.0 +S: serial/by-path/pci-0000:00:14.0-usb-0:6.2:1.0 +E: CURRENT_TAGS=:systemd: +E: DEVLINKS=/dev/serial/by-id/usb-1a86_USB_Single_Serial_5424007932-if00 /dev/serial/by-path/pci-0000:00:14.0-usbv2-0:6.2:1.0 /dev/serial/by-path/pci-0000:00:14.0-usb-0:6.2:1.0 +E: DEVNAME=/dev/ttyACM0 +E: ID_BUS=usb +E: ID_HARDWARE_WALLET=1 +E: ID_MODEL=USB_Single_Serial +E: ID_MODEL_ENC=USB\x20Single\x20Serial +E: ID_MODEL_ID=55d4 +E: ID_PATH=pci-0000:00:14.0-usb-0:6.2:1.0 +E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_6_2_1_0 +E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:6.2:1.0 +E: ID_REVISION=0443 +E: ID_SERIAL=1a86_USB_Single_Serial_5424007932 +E: ID_SERIAL_SHORT=5424007932 +E: ID_TYPE=generic +E: ID_USB_CLASS_FROM_DATABASE=Communications +E: ID_USB_DRIVER=cdc_acm +E: ID_USB_INTERFACES=:020201:0a0000: +E: ID_USB_INTERFACE_NUM=00 +E: ID_USB_MODEL=USB_Single_Serial +E: ID_USB_MODEL_ENC=USB\x20Single\x20Serial +E: ID_USB_MODEL_ID=55d4 +E: ID_USB_REVISION=0443 +E: ID_USB_SERIAL=1a86_USB_Single_Serial_5424007932 +E: ID_USB_SERIAL_SHORT=5424007932 +E: ID_USB_TYPE=generic +E: ID_USB_VENDOR=1a86 +E: ID_USB_VENDOR_ENC=1a86 +E: ID_USB_VENDOR_ID=1a86 +E: ID_VENDOR=1a86 +E: ID_VENDOR_ENC=1a86 +E: ID_VENDOR_FROM_DATABASE=QinHeng Electronics +E: ID_VENDOR_ID=1a86 +E: MAJOR=166 +E: MINOR=0 +E: SUBSYSTEM=tty +E: TAGS=:systemd: +A: dev=166:0\n +L: device=../../../3-6.2:1.0 +A: power/async=disabled\n +A: power/control=auto\n +A: power/runtime_active_kids=0\n +A: power/runtime_active_time=0\n +A: power/runtime_enabled=disabled\n +A: power/runtime_status=unsupported\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=0\n + +P: /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6.2/3-6.2:1.0 +E: DEVTYPE=usb_interface +E: DRIVER=cdc_acm +E: ID_HARDWARE_WALLET=1 +E: ID_PATH=pci-0000:00:14.0-usb-0:6.2:1.0 +E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_6_2_1_0 +E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:6.2:1.0 +E: ID_USB_CLASS_FROM_DATABASE=Communications +E: ID_VENDOR_FROM_DATABASE=QinHeng Electronics +E: INTERFACE=2/2/1 +E: MODALIAS=usb:v1A86p55D4d0443dc02dsc00dp00ic02isc02ip01in00 +E: PRODUCT=1a86/55d4/443 +E: SUBSYSTEM=usb +E: TYPE=2/0/0 +A: authorized=1\n +A: bAlternateSetting= 0\n +A: bInterfaceClass=02\n +A: bInterfaceNumber=00\n +A: bInterfaceProtocol=01\n +A: bInterfaceSubClass=02\n +A: bNumEndpoints=01\n +A: bmCapabilities=2 +L: driver=../../../../../../../bus/usb/drivers/cdc_acm +A: modalias=usb:v1A86p55D4d0443dc02dsc00dp00ic02isc02ip01in00\n +A: power/async=enabled\n +A: supports_autosuspend=1\n + +P: /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6.2 +N: bus/usb/003/065=1201100102000008861AD45543040002030109024300020100A043090400000102020100052400100105240100010424020205240600010705830310000109040100020A0000000705020220000007058202400000 +E: BUSNUM=003 +E: CURRENT_TAGS=:uaccess:seat: +E: DEVNAME=/dev/bus/usb/003/065 +E: DEVNUM=065 +E: DEVTYPE=usb_device +E: DRIVER=usb +E: ID_BUS=usb +E: ID_FOR_SEAT=usb-pci-0000_00_14_0-usb-0_6_2 +E: ID_HARDWARE_WALLET=1 +E: ID_MODEL=USB_Single_Serial +E: ID_MODEL_ENC=USB\x20Single\x20Serial +E: ID_MODEL_ID=55d4 +E: ID_PATH=pci-0000:00:14.0-usb-0:6.2 +E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_6_2 +E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:6.2 +E: ID_REVISION=0443 +E: ID_SERIAL=1a86_USB_Single_Serial_5424007932 +E: ID_SERIAL_SHORT=5424007932 +E: ID_USB_INTERFACES=:020201:0a0000: +E: ID_USB_MODEL=USB_Single_Serial +E: ID_USB_MODEL_ENC=USB\x20Single\x20Serial +E: ID_USB_MODEL_ID=55d4 +E: ID_USB_REVISION=0443 +E: ID_USB_SERIAL=1a86_USB_Single_Serial_5424007932 +E: ID_USB_SERIAL_SHORT=5424007932 +E: ID_USB_VENDOR=1a86 +E: ID_USB_VENDOR_ENC=1a86 +E: ID_USB_VENDOR_ID=1a86 +E: ID_VENDOR=1a86 +E: ID_VENDOR_ENC=1a86 +E: ID_VENDOR_FROM_DATABASE=QinHeng Electronics +E: ID_VENDOR_ID=1a86 +E: MAJOR=189 +E: MINOR=320 +E: PRODUCT=1a86/55d4/443 +E: SUBSYSTEM=usb +E: TAGS=:uaccess:seat: +E: TYPE=2/0/0 +A: authorized=1\n +A: avoid_reset_quirk=0\n +A: bConfigurationValue=1\n +A: bDeviceClass=02\n +A: bDeviceProtocol=00\n +A: bDeviceSubClass=00\n +A: bMaxPacketSize0=8\n +A: bMaxPower=134mA\n +A: bNumConfigurations=1\n +A: bNumInterfaces= 2\n +A: bcdDevice=0443\n +A: bmAttributes=a0\n +A: busnum=3\n +A: configuration= +H: descriptors=1201100102000008861AD45543040002030109024300020100A043090400000102020100052400100105240100010424020205240600010705830310000109040100020A0000000705020220000007058202400000 +A: dev=189:320\n +A: devnum=65\n +A: devpath=6.2\n +L: driver=../../../../../../bus/usb/drivers/usb +A: idProduct=55d4\n +A: idVendor=1a86\n +A: ltm_capable=no\n +A: maxchild=0\n +L: port=../3-6:1.0/3-6-port2 +A: power/active_duration=48887\n +A: power/async=enabled\n +A: power/autosuspend=2\n +A: power/autosuspend_delay_ms=2000\n +A: power/connected_duration=48887\n +A: power/control=on\n +A: power/level=on\n +A: power/persist=1\n +A: power/runtime_active_kids=0\n +A: power/runtime_active_time=48628\n +A: power/runtime_enabled=forbidden\n +A: power/runtime_status=active\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=1\n +A: power/wakeup=disabled\n +A: power/wakeup_abort_count=\n +A: power/wakeup_active=\n +A: power/wakeup_active_count=\n +A: power/wakeup_count=\n +A: power/wakeup_expire_count=\n +A: power/wakeup_last_time_ms=\n +A: power/wakeup_max_time_ms=\n +A: power/wakeup_total_time_ms=\n +A: product=USB Single Serial\n +A: quirks=0x0\n +A: removable=unknown\n +A: rx_lanes=1\n +A: serial=5424007932\n +A: speed=12\n +A: tx_lanes=1\n +A: urbnum=9\n +A: version= 1.10\n + +P: /devices/pci0000:00/0000:00:14.0/usb3/3-6 +N: bus/usb/003/063=12011002090002400921172893060102030109022900010100E0000904000001090001000705810301000C0904000101090002000705810301000C +E: BUSNUM=003 +E: CURRENT_TAGS=:seat: +E: DEVNAME=/dev/bus/usb/003/063 +E: DEVNUM=063 +E: DEVTYPE=usb_device +E: DRIVER=usb +E: ID_BUS=usb +E: ID_FOR_SEAT=usb-pci-0000_00_14_0-usb-0_6 +E: ID_MODEL=USB2.0_Hub +E: ID_MODEL_ENC=USB2.0\x20Hub\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 +E: ID_MODEL_ID=2817 +E: ID_PATH=pci-0000:00:14.0-usb-0:6 +E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_6 +E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:6 +E: ID_REVISION=0693 +E: ID_SERIAL=VIA_Labs__Inc._USB2.0_Hub_000000000 +E: ID_SERIAL_SHORT=000000000 +E: ID_USB_INTERFACES=:090001:090002: +E: ID_USB_MODEL=USB2.0_Hub +E: ID_USB_MODEL_ENC=USB2.0\x20Hub\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 +E: ID_USB_MODEL_ID=2817 +E: ID_USB_REVISION=0693 +E: ID_USB_SERIAL=VIA_Labs__Inc._USB2.0_Hub_000000000 +E: ID_USB_SERIAL_SHORT=000000000 +E: ID_USB_VENDOR=VIA_Labs__Inc. +E: ID_USB_VENDOR_ENC=VIA\x20Labs\x2c\x20Inc.\x20\x20\x20\x20\x20\x20\x20\x20\x20 +E: ID_USB_VENDOR_ID=2109 +E: ID_VENDOR=VIA_Labs__Inc. +E: ID_VENDOR_ENC=VIA\x20Labs\x2c\x20Inc.\x20\x20\x20\x20\x20\x20\x20\x20\x20 +E: ID_VENDOR_FROM_DATABASE=VIA Labs, Inc. +E: ID_VENDOR_ID=2109 +E: MAJOR=189 +E: MINOR=318 +E: PRODUCT=2109/2817/693 +E: SUBSYSTEM=usb +E: TAGS=:seat: +E: TYPE=9/0/2 +A: authorized=1\n +A: avoid_reset_quirk=0\n +A: bConfigurationValue=1\n +A: bDeviceClass=09\n +A: bDeviceProtocol=02\n +A: bDeviceSubClass=00\n +A: bMaxPacketSize0=64\n +A: bMaxPower=0mA\n +A: bNumConfigurations=1\n +A: bNumInterfaces= 1\n +A: bcdDevice=0693\n +A: bmAttributes=e0\n +H: bos_descriptors=050F2A0003071002060000000A1003000E000104E700141004004400E000800090800004309080816004 +A: busnum=3\n +A: configuration= +H: descriptors=12011002090002400921172893060102030109022900010100E0000904000001090001000705810301000C0904000101090002000705810301000C +A: dev=189:318\n +A: devnum=63\n +A: devpath=6\n +L: driver=../../../../../bus/usb/drivers/usb +L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:53/device:54/device:5b +A: idProduct=2817\n +A: idVendor=2109\n +A: ltm_capable=no\n +A: manufacturer=VIA Labs, Inc. \n +A: maxchild=4\n +A: physical_location/dock=no\n +A: physical_location/horizontal_position=left\n +A: physical_location/lid=no\n +A: physical_location/panel=top\n +A: physical_location/vertical_position=upper\n +L: port=../3-0:1.0/usb3-port6 +A: power/active_duration=49991\n +A: power/async=enabled\n +A: power/autosuspend=0\n +A: power/autosuspend_delay_ms=0\n +A: power/connected_duration=49991\n +A: power/control=auto\n +A: power/level=auto\n +A: power/runtime_active_kids=3\n +A: power/runtime_active_time=49755\n +A: power/runtime_enabled=enabled\n +A: power/runtime_status=active\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=0\n +A: power/wakeup=disabled\n +A: power/wakeup_abort_count=\n +A: power/wakeup_active=\n +A: power/wakeup_active_count=\n +A: power/wakeup_count=\n +A: power/wakeup_expire_count=\n +A: power/wakeup_last_time_ms=\n +A: power/wakeup_max_time_ms=\n +A: power/wakeup_total_time_ms=\n +A: product=USB2.0 Hub \n +A: quirks=0x0\n +A: removable=removable\n +A: rx_lanes=1\n +A: serial=000000000\n +A: speed=480\n +A: tx_lanes=1\n +A: urbnum=59\n +A: version= 2.10\n + +P: /devices/pci0000:00/0000:00:14.0/usb3 +N: bus/usb/003/001=12010002090001406B1D020000070302010109021900010100E0000904000001090000000705810304000C +E: BUSNUM=003 +E: CURRENT_TAGS=:seat: +E: DEVNAME=/dev/bus/usb/003/001 +E: DEVNUM=001 +E: DEVTYPE=usb_device +E: DRIVER=usb +E: ID_AUTOSUSPEND=1 +E: ID_BUS=usb +E: ID_FOR_SEAT=usb-pci-0000_00_14_0 +E: ID_MODEL=xHCI_Host_Controller +E: ID_MODEL_ENC=xHCI\x20Host\x20Controller +E: ID_MODEL_FROM_DATABASE=2.0 root hub +E: ID_MODEL_ID=0002 +E: ID_PATH=pci-0000:00:14.0 +E: ID_PATH_TAG=pci-0000_00_14_0 +E: ID_REVISION=0700 +E: ID_SERIAL=Linux_7.0.2-4-pve_xhci-hcd_xHCI_Host_Controller_0000:00:14.0 +E: ID_SERIAL_SHORT=0000:00:14.0 +E: ID_USB_INTERFACES=:090000: +E: ID_USB_MODEL=xHCI_Host_Controller +E: ID_USB_MODEL_ENC=xHCI\x20Host\x20Controller +E: ID_USB_MODEL_ID=0002 +E: ID_USB_REVISION=0700 +E: ID_USB_SERIAL=Linux_7.0.2-4-pve_xhci-hcd_xHCI_Host_Controller_0000:00:14.0 +E: ID_USB_SERIAL_SHORT=0000:00:14.0 +E: ID_USB_VENDOR=Linux_7.0.2-4-pve_xhci-hcd +E: ID_USB_VENDOR_ENC=Linux\x207.0.2-4-pve\x20xhci-hcd +E: ID_USB_VENDOR_ID=1d6b +E: ID_VENDOR=Linux_7.0.2-4-pve_xhci-hcd +E: ID_VENDOR_ENC=Linux\x207.0.2-4-pve\x20xhci-hcd +E: ID_VENDOR_FROM_DATABASE=Linux Foundation +E: ID_VENDOR_ID=1d6b +E: MAJOR=189 +E: MINOR=256 +E: PRODUCT=1d6b/2/700 +E: SUBSYSTEM=usb +E: TAGS=:seat: +E: TYPE=9/0/1 +A: authorized=1\n +A: authorized_default=1\n +A: avoid_reset_quirk=0\n +A: bConfigurationValue=1\n +A: bDeviceClass=09\n +A: bDeviceProtocol=01\n +A: bDeviceSubClass=00\n +A: bMaxPacketSize0=64\n +A: bMaxPower=0mA\n +A: bNumConfigurations=1\n +A: bNumInterfaces= 1\n +A: bcdDevice=0700\n +A: bmAttributes=e0\n +A: busnum=3\n +A: configuration= +H: descriptors=12010002090001406B1D020000070302010109021900010100E0000904000001090000000705810304000C +A: dev=189:256\n +A: devnum=1\n +A: devpath=0\n +L: driver=../../../../bus/usb/drivers/usb +L: firmware_node=../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:53/device:54 +A: idProduct=0002\n +A: idVendor=1d6b\n +A: interface_authorized_default=1\n +A: ltm_capable=no\n +A: manufacturer=Linux 7.0.2-4-pve xhci-hcd\n +A: maxchild=12\n +A: power/active_duration=1631529307\n +A: power/async=enabled\n +A: power/autosuspend=0\n +A: power/autosuspend_delay_ms=0\n +A: power/connected_duration=1631529307\n +A: power/control=auto\n +A: power/level=auto\n +A: power/runtime_active_kids=3\n +A: power/runtime_active_time=10221463897\n +A: power/runtime_enabled=enabled\n +A: power/runtime_status=active\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=0\n +A: power/wakeup=disabled\n +A: power/wakeup_abort_count=\n +A: power/wakeup_active=\n +A: power/wakeup_active_count=\n +A: power/wakeup_count=\n +A: power/wakeup_expire_count=\n +A: power/wakeup_last_time_ms=\n +A: power/wakeup_max_time_ms=\n +A: power/wakeup_total_time_ms=\n +A: product=xHCI Host Controller\n +A: quirks=0x0\n +A: removable=unknown\n +A: rx_lanes=1\n +A: serial=0000:00:14.0\n +A: speed=480\n +A: tx_lanes=1\n +A: urbnum=1701\n +A: version= 2.00\n + +P: /devices/pci0000:00/0000:00:14.0 +E: DRIVER=xhci_hcd +E: ID_AUTOSUSPEND=1 +E: ID_MODEL_FROM_DATABASE=Alder Lake-N PCH USB 3.2 Gen 2x1 (10 Gb/s) xHCI Host Controller +E: ID_PATH=pci-0000:00:14.0 +E: ID_PATH_TAG=pci-0000_00_14_0 +E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller +E: ID_PCI_INTERFACE_FROM_DATABASE=XHCI +E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller +E: ID_VENDOR_FROM_DATABASE=Intel Corporation +E: MODALIAS=pci:v00008086d000054EDsv00000000sd00000000bc0Csc03i30 +E: PCI_CLASS=C0330 +E: PCI_ID=8086:54ED +E: PCI_SLOT_NAME=0000:00:14.0 +E: PCI_SUBSYS_ID=0000:0000 +E: SUBSYSTEM=pci +A: ari_enabled=0\n +A: broken_parity_status=0\n +A: class=0x0c0330\n +H: config=8680ED54060490020030030C000080000400100160000000000000000000000000000000000000000000000000000000000000007000000000000000FF010000FD0134A089C27F8000000000000000003F6DD80F000000000000000000000000316000000000000000000000000000000180C2C10800000000000000000000000590B7001804E0FE000000000000000009B014F01000400100000000C10A080000080E00001800008F50020000010000090000018680C00009001014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B50F000112000000 +A: consistent_dma_mask_bits=64\n +A: d3cold_allowed=1\n +A: dbc=disabled\n +A: dbc_bInterfaceProtocol=01\n +A: dbc_bcdDevice=0010\n +A: dbc_idProduct=0010\n +A: dbc_idVendor=1d6b\n +A: dbc_manufacturer=Linux Foundation\n +A: dbc_poll_interval_ms=64\n +A: dbc_product=Linux USB Debug Target\n +A: dbc_serial=0001\n +A: device=0x54ed\n +A: dma_mask_bits=64\n +L: driver=../../../bus/pci/drivers/xhci_hcd +A: driver_override=(null)\n +A: enable=1\n +L: firmware_node=../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:53 +L: iommu=../../virtual/iommu/dmar1 +L: iommu_group=../../../kernel/iommu_groups/3 +A: irq=131\n +A: local_cpulist=0-3\n +A: local_cpus=f\n +A: modalias=pci:v00008086d000054EDsv00000000sd00000000bc0Csc03i30\n +A: msi_bus=1\n +A: msi_irqs/131=msi\n +A: msi_irqs/132=msi\n +A: msi_irqs/133=msi\n +A: msi_irqs/134=msi\n +A: msi_irqs/135=msi\n +A: numa_node=-1\n +A: pools=poolinfo - 0.1\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 0 0 128 0\nbuffer-32 0 0 32 0\nxHCI 256 port bw ctx arrays 0 0 256 0\nxHCI 1KB stream ctx arrays 0 4 1024 1\nxHCI 256 byte stream ctx arrays 0 0 256 0\nxHCI input/output contexts 28 29 2112 29\nxHCI ring segments 97 257 4096 257\nbuffer-2048 32 64 2048 32\nbuffer-512 0 0 512 0\nbuffer-128 32 96 128 3\nbuffer-32 2 128 32 1\n +A: power/async=enabled\n +A: power/control=auto\n +A: power/runtime_active_kids=2\n +A: power/runtime_active_time=10221464767\n +A: power/runtime_enabled=enabled\n +A: power/runtime_status=active\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=0\n +A: power/wakeup=enabled\n +A: power/wakeup_abort_count=0\n +A: power/wakeup_active=0\n +A: power/wakeup_active_count=0\n +A: power/wakeup_count=0\n +A: power/wakeup_expire_count=0\n +A: power/wakeup_last_time_ms=0\n +A: power/wakeup_max_time_ms=0\n +A: power/wakeup_total_time_ms=0\n +A: power_state=D0\n +A: resource=0x0000006001100000 0x000000600110ffff 0x0000000000140204\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n +A: revision=0x00\n +A: subsystem_device=0x0000\n +A: subsystem_vendor=0x0000\n +A: vendor=0x8086\n + +P: /devices/pci0000:00/0000:00:14.0/usb3/3-3/3-3.4/3-3.4:1.0/tty/ttyACM2 +N: ttyACM2 +S: serial/by-path/pci-0000:00:14.0-usb-0:3.4:1.0 +S: serial/by-id/usb-Nabu_Casa_ZBT-2_10B41DE589E4-if00 +S: serial/by-path/pci-0000:00:14.0-usbv2-0:3.4:1.0 +E: CURRENT_TAGS=:systemd: +E: DEVLINKS=/dev/serial/by-path/pci-0000:00:14.0-usb-0:3.4:1.0 /dev/serial/by-id/usb-Nabu_Casa_ZBT-2_10B41DE589E4-if00 /dev/serial/by-path/pci-0000:00:14.0-usbv2-0:3.4:1.0 +E: DEVNAME=/dev/ttyACM2 +E: ID_BUS=usb +E: ID_MODEL=ZBT-2 +E: ID_MODEL_ENC=ZBT-2 +E: ID_MODEL_ID=4001 +E: ID_PATH=pci-0000:00:14.0-usb-0:3.4:1.0 +E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_3_4_1_0 +E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:3.4:1.0 +E: ID_REVISION=0100 +E: ID_SERIAL=Nabu_Casa_ZBT-2_10B41DE589E4 +E: ID_SERIAL_SHORT=10B41DE589E4 +E: ID_TYPE=generic +E: ID_USB_CLASS_FROM_DATABASE=Miscellaneous Device +E: ID_USB_DRIVER=cdc_acm +E: ID_USB_INTERFACES=:020200:0a0000: +E: ID_USB_INTERFACE_NUM=00 +E: ID_USB_MODEL=ZBT-2 +E: ID_USB_MODEL_ENC=ZBT-2 +E: ID_USB_MODEL_ID=4001 +E: ID_USB_PROTOCOL_FROM_DATABASE=Interface Association +E: ID_USB_REVISION=0100 +E: ID_USB_SERIAL=Nabu_Casa_ZBT-2_10B41DE589E4 +E: ID_USB_SERIAL_SHORT=10B41DE589E4 +E: ID_USB_TYPE=generic +E: ID_USB_VENDOR=Nabu_Casa +E: ID_USB_VENDOR_ENC=Nabu\x20Casa +E: ID_USB_VENDOR_ID=303a +E: ID_VENDOR=Nabu_Casa +E: ID_VENDOR_ENC=Nabu\x20Casa +E: ID_VENDOR_ID=303a +E: MAJOR=166 +E: MINOR=2 +E: SUBSYSTEM=tty +E: TAGS=:systemd: +A: dev=166:2\n +L: device=../../../3-3.4:1.0 +A: power/async=disabled\n +A: power/control=auto\n +A: power/runtime_active_kids=0\n +A: power/runtime_active_time=0\n +A: power/runtime_enabled=disabled\n +A: power/runtime_status=unsupported\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=0\n + +P: /devices/pci0000:00/0000:00:14.0/usb3/3-3/3-3.4/3-3.4:1.0 +E: DEVTYPE=usb_interface +E: DRIVER=cdc_acm +E: ID_PATH=pci-0000:00:14.0-usb-0:3.4:1.0 +E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_3_4_1_0 +E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:3.4:1.0 +E: ID_USB_CLASS_FROM_DATABASE=Miscellaneous Device +E: ID_USB_PROTOCOL_FROM_DATABASE=Interface Association +E: INTERFACE=2/2/0 +E: MODALIAS=usb:v303Ap4001d0100dcEFdsc02dp01ic02isc02ip00in00 +E: PRODUCT=303a/4001/100 +E: SUBSYSTEM=usb +E: TYPE=239/2/1 +A: authorized=1\n +A: bAlternateSetting= 0\n +A: bInterfaceClass=02\n +A: bInterfaceNumber=00\n +A: bInterfaceProtocol=00\n +A: bInterfaceSubClass=02\n +A: bNumEndpoints=01\n +A: bmCapabilities=6 +L: driver=../../../../../../../bus/usb/drivers/cdc_acm +A: iad_bFirstInterface=00\n +A: iad_bFunctionClass=02\n +A: iad_bFunctionProtocol=00\n +A: iad_bFunctionSubClass=02\n +A: iad_bInterfaceCount=02\n +A: interface=Nabu Casa ZBT-2\n +A: modalias=usb:v303Ap4001d0100dcEFdsc02dp01ic02isc02ip00in00\n +A: power/async=enabled\n +A: supports_autosuspend=1\n + +P: /devices/pci0000:00/0000:00:14.0/usb3/3-3/3-3.4 +N: bus/usb/003/007=12010002EF0201403A30014000010102030109024B00020100A032080B000202020000090400000102020004052400200105240100010424020605240600010705810308001009040100020A0000000705020240000007058202400000 +E: BUSNUM=003 +E: DEVNAME=/dev/bus/usb/003/007 +E: DEVNUM=007 +E: DEVTYPE=usb_device +E: DRIVER=usb +E: ID_BUS=usb +E: ID_MODEL=ZBT-2 +E: ID_MODEL_ENC=ZBT-2 +E: ID_MODEL_ID=4001 +E: ID_PATH=pci-0000:00:14.0-usb-0:3.4 +E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_3_4 +E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:3.4 +E: ID_REVISION=0100 +E: ID_SERIAL=Nabu_Casa_ZBT-2_10B41DE589E4 +E: ID_SERIAL_SHORT=10B41DE589E4 +E: ID_USB_INTERFACES=:020200:0a0000: +E: ID_USB_MODEL=ZBT-2 +E: ID_USB_MODEL_ENC=ZBT-2 +E: ID_USB_MODEL_ID=4001 +E: ID_USB_REVISION=0100 +E: ID_USB_SERIAL=Nabu_Casa_ZBT-2_10B41DE589E4 +E: ID_USB_SERIAL_SHORT=10B41DE589E4 +E: ID_USB_VENDOR=Nabu_Casa +E: ID_USB_VENDOR_ENC=Nabu\x20Casa +E: ID_USB_VENDOR_ID=303a +E: ID_VENDOR=Nabu_Casa +E: ID_VENDOR_ENC=Nabu\x20Casa +E: ID_VENDOR_ID=303a +E: MAJOR=189 +E: MINOR=262 +E: PRODUCT=303a/4001/100 +E: SUBSYSTEM=usb +E: TYPE=239/2/1 +A: authorized=1\n +A: avoid_reset_quirk=0\n +A: bConfigurationValue=1\n +A: bDeviceClass=ef\n +A: bDeviceProtocol=01\n +A: bDeviceSubClass=02\n +A: bMaxPacketSize0=64\n +A: bMaxPower=100mA\n +A: bNumConfigurations=1\n +A: bNumInterfaces= 2\n +A: bcdDevice=0100\n +A: bmAttributes=a0\n +A: busnum=3\n +A: configuration= +H: descriptors=12010002EF0201403A30014000010102030109024B00020100A032080B000202020000090400000102020004052400200105240100010424020605240600010705810308001009040100020A0000000705020240000007058202400000 +A: dev=189:262\n +A: devnum=7\n +A: devpath=3.4\n +L: driver=../../../../../../bus/usb/drivers/usb +A: idProduct=4001\n +A: idVendor=303a\n +A: ltm_capable=no\n +A: manufacturer=Nabu Casa\n +A: maxchild=0\n +L: port=../3-3:1.0/3-3-port4 +A: power/active_duration=1631527520\n +A: power/async=enabled\n +A: power/autosuspend=2\n +A: power/autosuspend_delay_ms=2000\n +A: power/connected_duration=1631527520\n +A: power/control=on\n +A: power/level=on\n +A: power/persist=1\n +A: power/runtime_active_kids=0\n +A: power/runtime_active_time=10221461966\n +A: power/runtime_enabled=forbidden\n +A: power/runtime_status=active\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=1\n +A: power/wakeup=disabled\n +A: power/wakeup_abort_count=\n +A: power/wakeup_active=\n +A: power/wakeup_active_count=\n +A: power/wakeup_count=\n +A: power/wakeup_expire_count=\n +A: power/wakeup_last_time_ms=\n +A: power/wakeup_max_time_ms=\n +A: power/wakeup_total_time_ms=\n +A: product=ZBT-2\n +A: quirks=0x0\n +A: removable=removable\n +A: rx_lanes=1\n +A: serial=10B41DE589E4\n +A: speed=12\n +A: tx_lanes=1\n +A: urbnum=20279770\n +A: version= 2.00\n + +P: /devices/pci0000:00/0000:00:14.0/usb3/3-3 +N: bus/usb/003/002=1201100209000240E305100624920102000109022900010100E0320904000001090001000705810301000C0904000101090002000705810301000C +E: BUSNUM=003 +E: CURRENT_TAGS=:seat: +E: DEVNAME=/dev/bus/usb/003/002 +E: DEVNUM=002 +E: DEVTYPE=usb_device +E: DRIVER=usb +E: ID_AUTOSUSPEND=1 +E: ID_BUS=usb +E: ID_FOR_SEAT=usb-pci-0000_00_14_0-usb-0_3 +E: ID_MODEL=USB2.0_Hub +E: ID_MODEL_ENC=USB2.0\x20Hub +E: ID_MODEL_FROM_DATABASE=Hub +E: ID_MODEL_ID=0610 +E: ID_PATH=pci-0000:00:14.0-usb-0:3 +E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_3 +E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:3 +E: ID_REVISION=9224 +E: ID_SERIAL=GenesysLogic_USB2.0_Hub +E: ID_USB_INTERFACES=:090001:090002: +E: ID_USB_MODEL=USB2.0_Hub +E: ID_USB_MODEL_ENC=USB2.0\x20Hub +E: ID_USB_MODEL_ID=0610 +E: ID_USB_REVISION=9224 +E: ID_USB_SERIAL=GenesysLogic_USB2.0_Hub +E: ID_USB_VENDOR=GenesysLogic +E: ID_USB_VENDOR_ENC=GenesysLogic +E: ID_USB_VENDOR_ID=05e3 +E: ID_VENDOR=GenesysLogic +E: ID_VENDOR_ENC=GenesysLogic +E: ID_VENDOR_FROM_DATABASE=Genesys Logic, Inc. +E: ID_VENDOR_ID=05e3 +E: MAJOR=189 +E: MINOR=257 +E: PRODUCT=5e3/610/9224 +E: SUBSYSTEM=usb +E: TAGS=:seat: +E: TYPE=9/0/2 +A: authorized=1\n +A: avoid_reset_quirk=0\n +A: bConfigurationValue=1\n +A: bDeviceClass=09\n +A: bDeviceProtocol=02\n +A: bDeviceSubClass=00\n +A: bMaxPacketSize0=64\n +A: bMaxPower=100mA\n +A: bNumConfigurations=1\n +A: bNumInterfaces= 1\n +A: bcdDevice=9224\n +A: bmAttributes=e0\n +H: bos_descriptors=050F2A0003071002060000000A1003000E000108BE001410040083427DD632FB49C992266597DF6A9E94 +A: busnum=3\n +A: configuration= +H: descriptors=1201100209000240E305100624920102000109022900010100E0320904000001090001000705810301000C0904000101090002000705810301000C +A: dev=189:257\n +A: devnum=2\n +A: devpath=3\n +L: driver=../../../../../bus/usb/drivers/usb +L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:53/device:54/device:58 +A: idProduct=0610\n +A: idVendor=05e3\n +A: ltm_capable=no\n +A: manufacturer=GenesysLogic\n +A: maxchild=4\n +A: physical_location/dock=no\n +A: physical_location/horizontal_position=left\n +A: physical_location/lid=no\n +A: physical_location/panel=top\n +A: physical_location/vertical_position=upper\n +L: port=../3-0:1.0/usb3-port3 +A: power/active_duration=1631529197\n +A: power/async=enabled\n +A: power/autosuspend=0\n +A: power/autosuspend_delay_ms=0\n +A: power/connected_duration=1631529197\n +A: power/control=auto\n +A: power/level=auto\n +A: power/runtime_active_kids=3\n +A: power/runtime_active_time=10221463159\n +A: power/runtime_enabled=enabled\n +A: power/runtime_status=active\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=0\n +A: power/wakeup=disabled\n +A: power/wakeup_abort_count=\n +A: power/wakeup_active=\n +A: power/wakeup_active_count=\n +A: power/wakeup_count=\n +A: power/wakeup_expire_count=\n +A: power/wakeup_last_time_ms=\n +A: power/wakeup_max_time_ms=\n +A: power/wakeup_total_time_ms=\n +A: product=USB2.0 Hub\n +A: quirks=0x0\n +A: removable=removable\n +A: rx_lanes=1\n +A: speed=480\n +A: tx_lanes=1\n +A: urbnum=592\n +A: version= 2.10\n + +P: /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6.1/3-6.1:1.0/ttyUSB0/tty/ttyUSB0 +N: ttyUSB0 +S: serial/by-id/usb-Silicon_Labs_HubZ_Smart_Home_Controller_51600403-if00-port0 +S: serial/by-path/pci-0000:00:14.0-usb-0:6.1:1.0-port0 +S: serial/by-path/pci-0000:00:14.0-usbv2-0:6.1:1.0-port0 +E: CURRENT_TAGS=:systemd: +E: DEVLINKS=/dev/serial/by-id/usb-Silicon_Labs_HubZ_Smart_Home_Controller_51600403-if00-port0 /dev/serial/by-path/pci-0000:00:14.0-usb-0:6.1:1.0-port0 /dev/serial/by-path/pci-0000:00:14.0-usbv2-0:6.1:1.0-port0 +E: DEVNAME=/dev/ttyUSB0 +E: ID_BUS=usb +E: ID_MODEL=HubZ_Smart_Home_Controller +E: ID_MODEL_ENC=HubZ\x20Smart\x20Home\x20Controller +E: ID_MODEL_ID=8a2a +E: ID_PATH=pci-0000:00:14.0-usb-0:6.1:1.0 +E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_6_1_1_0 +E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:6.1:1.0 +E: ID_REVISION=0100 +E: ID_SERIAL=Silicon_Labs_HubZ_Smart_Home_Controller_51600403 +E: ID_SERIAL_SHORT=51600403 +E: ID_TYPE=generic +E: ID_USB_DRIVER=cp210x +E: ID_USB_INTERFACES=:ff0000: +E: ID_USB_INTERFACE_NUM=00 +E: ID_USB_MODEL=HubZ_Smart_Home_Controller +E: ID_USB_MODEL_ENC=HubZ\x20Smart\x20Home\x20Controller +E: ID_USB_MODEL_ID=8a2a +E: ID_USB_REVISION=0100 +E: ID_USB_SERIAL=Silicon_Labs_HubZ_Smart_Home_Controller_51600403 +E: ID_USB_SERIAL_SHORT=51600403 +E: ID_USB_TYPE=generic +E: ID_USB_VENDOR=Silicon_Labs +E: ID_USB_VENDOR_ENC=Silicon\x20Labs +E: ID_USB_VENDOR_ID=10c4 +E: ID_VENDOR=Silicon_Labs +E: ID_VENDOR_ENC=Silicon\x20Labs +E: ID_VENDOR_FROM_DATABASE=Silicon Labs +E: ID_VENDOR_ID=10c4 +E: MAJOR=188 +E: MINOR=0 +E: SUBSYSTEM=tty +E: TAGS=:systemd: +A: dev=188:0\n +L: device=../../../ttyUSB0 +A: power/async=disabled\n +A: power/control=auto\n +A: power/runtime_active_kids=0\n +A: power/runtime_active_time=0\n +A: power/runtime_enabled=disabled\n +A: power/runtime_status=unsupported\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=0\n + +P: /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6.1/3-6.1:1.0/ttyUSB0 +E: DRIVER=cp210x +E: SUBSYSTEM=usb-serial +L: driver=../../../../../../../../bus/usb-serial/drivers/cp210x +A: port_number=0\n +A: power/async=enabled\n +A: power/control=auto\n +A: power/runtime_active_kids=0\n +A: power/runtime_active_time=0\n +A: power/runtime_enabled=disabled\n +A: power/runtime_status=unsupported\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=0\n + +P: /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6.1/3-6.1:1.0 +E: DEVTYPE=usb_interface +E: DRIVER=cp210x +E: ID_PATH=pci-0000:00:14.0-usb-0:6.1:1.0 +E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_6_1_1_0 +E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:6.1:1.0 +E: ID_VENDOR_FROM_DATABASE=Silicon Labs +E: INTERFACE=255/0/0 +E: MODALIAS=usb:v10C4p8A2Ad0100dc00dsc00dp00icFFisc00ip00in00 +E: PRODUCT=10c4/8a2a/100 +E: SUBSYSTEM=usb +E: TYPE=0/0/0 +A: authorized=1\n +A: bAlternateSetting= 0\n +A: bInterfaceClass=ff\n +A: bInterfaceNumber=00\n +A: bInterfaceProtocol=00\n +A: bInterfaceSubClass=00\n +A: bNumEndpoints=02\n +L: driver=../../../../../../../bus/usb/drivers/cp210x +A: interface=HubZ Z-Wave Com Port\n +A: modalias=usb:v10C4p8A2Ad0100dc00dsc00dp00icFFisc00ip00in00\n +A: power/async=enabled\n +A: supports_autosuspend=1\n + +P: /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6.1 +N: bus/usb/003/064=1201000200000040C4102A8A0001010205010902370002010080320904000002FF00000307058102400000070501024000000904010002FF0000040705820220000007050202200000 +E: BUSNUM=003 +E: CURRENT_TAGS=:seat: +E: DEVNAME=/dev/bus/usb/003/064 +E: DEVNUM=064 +E: DEVTYPE=usb_device +E: DRIVER=usb +E: ID_BUS=usb +E: ID_FOR_SEAT=usb-pci-0000_00_14_0-usb-0_6_1 +E: ID_MODEL=HubZ_Smart_Home_Controller +E: ID_MODEL_ENC=HubZ\x20Smart\x20Home\x20Controller +E: ID_MODEL_ID=8a2a +E: ID_PATH=pci-0000:00:14.0-usb-0:6.1 +E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_6_1 +E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:6.1 +E: ID_REVISION=0100 +E: ID_SERIAL=Silicon_Labs_HubZ_Smart_Home_Controller_51600403 +E: ID_SERIAL_SHORT=51600403 +E: ID_USB_INTERFACES=:ff0000: +E: ID_USB_MODEL=HubZ_Smart_Home_Controller +E: ID_USB_MODEL_ENC=HubZ\x20Smart\x20Home\x20Controller +E: ID_USB_MODEL_ID=8a2a +E: ID_USB_REVISION=0100 +E: ID_USB_SERIAL=Silicon_Labs_HubZ_Smart_Home_Controller_51600403 +E: ID_USB_SERIAL_SHORT=51600403 +E: ID_USB_VENDOR=Silicon_Labs +E: ID_USB_VENDOR_ENC=Silicon\x20Labs +E: ID_USB_VENDOR_ID=10c4 +E: ID_VENDOR=Silicon_Labs +E: ID_VENDOR_ENC=Silicon\x20Labs +E: ID_VENDOR_FROM_DATABASE=Silicon Labs +E: ID_VENDOR_ID=10c4 +E: MAJOR=189 +E: MINOR=319 +E: PRODUCT=10c4/8a2a/100 +E: SUBSYSTEM=usb +E: TAGS=:seat: +E: TYPE=0/0/0 +A: authorized=1\n +A: avoid_reset_quirk=0\n +A: bConfigurationValue=1\n +A: bDeviceClass=00\n +A: bDeviceProtocol=00\n +A: bDeviceSubClass=00\n +A: bMaxPacketSize0=64\n +A: bMaxPower=100mA\n +A: bNumConfigurations=1\n +A: bNumInterfaces= 2\n +A: bcdDevice=0100\n +A: bmAttributes=80\n +A: busnum=3\n +A: configuration= +H: descriptors=1201000200000040C4102A8A0001010205010902370002010080320904000002FF00000307058102400000070501024000000904010002FF0000040705820220000007050202200000 +A: dev=189:319\n +A: devnum=64\n +A: devpath=6.1\n +L: driver=../../../../../../bus/usb/drivers/usb +A: idProduct=8a2a\n +A: idVendor=10c4\n +A: ltm_capable=no\n +A: manufacturer=Silicon Labs\n +A: maxchild=0\n +L: port=../3-6:1.0/3-6-port1 +A: power/active_duration=49215\n +A: power/async=enabled\n +A: power/autosuspend=2\n +A: power/autosuspend_delay_ms=2000\n +A: power/connected_duration=49215\n +A: power/control=on\n +A: power/level=on\n +A: power/persist=1\n +A: power/runtime_active_kids=0\n +A: power/runtime_active_time=48955\n +A: power/runtime_enabled=forbidden\n +A: power/runtime_status=active\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=1\n +A: product=HubZ Smart Home Controller\n +A: quirks=0x0\n +A: removable=unknown\n +A: rx_lanes=1\n +A: serial=51600403\n +A: speed=12\n +A: tx_lanes=1\n +A: urbnum=22\n +A: version= 2.00\n + +P: /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6.1/3-6.1:1.1/ttyUSB1/tty/ttyUSB1 +N: ttyUSB1 +S: serial/by-path/pci-0000:00:14.0-usbv2-0:6.1:1.1-port0 +S: serial/by-path/pci-0000:00:14.0-usb-0:6.1:1.1-port0 +S: serial/by-id/usb-Silicon_Labs_HubZ_Smart_Home_Controller_51600403-if01-port0 +E: CURRENT_TAGS=:systemd: +E: DEVLINKS=/dev/serial/by-path/pci-0000:00:14.0-usbv2-0:6.1:1.1-port0 /dev/serial/by-path/pci-0000:00:14.0-usb-0:6.1:1.1-port0 /dev/serial/by-id/usb-Silicon_Labs_HubZ_Smart_Home_Controller_51600403-if01-port0 +E: DEVNAME=/dev/ttyUSB1 +E: ID_BUS=usb +E: ID_MODEL=HubZ_Smart_Home_Controller +E: ID_MODEL_ENC=HubZ\x20Smart\x20Home\x20Controller +E: ID_MODEL_ID=8a2a +E: ID_PATH=pci-0000:00:14.0-usb-0:6.1:1.1 +E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_6_1_1_1 +E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:6.1:1.1 +E: ID_REVISION=0100 +E: ID_SERIAL=Silicon_Labs_HubZ_Smart_Home_Controller_51600403 +E: ID_SERIAL_SHORT=51600403 +E: ID_TYPE=generic +E: ID_USB_DRIVER=cp210x +E: ID_USB_INTERFACES=:ff0000: +E: ID_USB_INTERFACE_NUM=01 +E: ID_USB_MODEL=HubZ_Smart_Home_Controller +E: ID_USB_MODEL_ENC=HubZ\x20Smart\x20Home\x20Controller +E: ID_USB_MODEL_ID=8a2a +E: ID_USB_REVISION=0100 +E: ID_USB_SERIAL=Silicon_Labs_HubZ_Smart_Home_Controller_51600403 +E: ID_USB_SERIAL_SHORT=51600403 +E: ID_USB_TYPE=generic +E: ID_USB_VENDOR=Silicon_Labs +E: ID_USB_VENDOR_ENC=Silicon\x20Labs +E: ID_USB_VENDOR_ID=10c4 +E: ID_VENDOR=Silicon_Labs +E: ID_VENDOR_ENC=Silicon\x20Labs +E: ID_VENDOR_FROM_DATABASE=Silicon Labs +E: ID_VENDOR_ID=10c4 +E: MAJOR=188 +E: MINOR=1 +E: SUBSYSTEM=tty +E: TAGS=:systemd: +A: dev=188:1\n +L: device=../../../ttyUSB1 +A: power/async=disabled\n +A: power/control=auto\n +A: power/runtime_active_kids=0\n +A: power/runtime_active_time=0\n +A: power/runtime_enabled=disabled\n +A: power/runtime_status=unsupported\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=0\n + +P: /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6.1/3-6.1:1.1/ttyUSB1 +E: DRIVER=cp210x +E: SUBSYSTEM=usb-serial +L: driver=../../../../../../../../bus/usb-serial/drivers/cp210x +A: port_number=0\n +A: power/async=enabled\n +A: power/control=auto\n +A: power/runtime_active_kids=0\n +A: power/runtime_active_time=0\n +A: power/runtime_enabled=disabled\n +A: power/runtime_status=unsupported\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=0\n + +P: /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6.1/3-6.1:1.1 +E: DEVTYPE=usb_interface +E: DRIVER=cp210x +E: ID_PATH=pci-0000:00:14.0-usb-0:6.1:1.1 +E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_6_1_1_1 +E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:6.1:1.1 +E: ID_VENDOR_FROM_DATABASE=Silicon Labs +E: INTERFACE=255/0/0 +E: MODALIAS=usb:v10C4p8A2Ad0100dc00dsc00dp00icFFisc00ip00in01 +E: PRODUCT=10c4/8a2a/100 +E: SUBSYSTEM=usb +E: TYPE=0/0/0 +A: authorized=1\n +A: bAlternateSetting= 0\n +A: bInterfaceClass=ff\n +A: bInterfaceNumber=01\n +A: bInterfaceProtocol=00\n +A: bInterfaceSubClass=00\n +A: bNumEndpoints=02\n +L: driver=../../../../../../../bus/usb/drivers/cp210x +A: interface=HubZ ZigBee Com Port\n +A: modalias=usb:v10C4p8A2Ad0100dc00dsc00dp00icFFisc00ip00in01\n +A: power/async=enabled\n +A: supports_autosuspend=1\n + +P: /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6.4/3-6.4:1.0/ttyUSB2/tty/ttyUSB2 +N: ttyUSB2 +S: serial/by-path/pci-0000:00:14.0-usbv2-0:6.4:1.0-port0 +S: serial/by-path/pci-0000:00:14.0-usb-0:6.4:1.0-port0 +S: serial/by-id/usb-FTDI_ZiGate_ZIGATE+-if00-port0 +E: CURRENT_TAGS=:systemd: +E: DEVLINKS=/dev/serial/by-path/pci-0000:00:14.0-usbv2-0:6.4:1.0-port0 /dev/serial/by-path/pci-0000:00:14.0-usb-0:6.4:1.0-port0 /dev/serial/by-id/usb-FTDI_ZiGate_ZIGATE+-if00-port0 +E: DEVNAME=/dev/ttyUSB2 +E: ID_BUS=usb +E: ID_MODEL=ZiGate +E: ID_MODEL_ENC=ZiGate +E: ID_MODEL_FROM_DATABASE=Bridge(I2C/SPI/UART/FIFO) +E: ID_MODEL_ID=6015 +E: ID_PATH=pci-0000:00:14.0-usb-0:6.4:1.0 +E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_6_4_1_0 +E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:6.4:1.0 +E: ID_REVISION=1000 +E: ID_SERIAL=FTDI_ZiGate_ZIGATE+ +E: ID_SERIAL_SHORT=ZIGATE+ +E: ID_TYPE=generic +E: ID_USB_DRIVER=ftdi_sio +E: ID_USB_INTERFACES=:ffffff: +E: ID_USB_INTERFACE_NUM=00 +E: ID_USB_MODEL=ZiGate +E: ID_USB_MODEL_ENC=ZiGate +E: ID_USB_MODEL_ID=6015 +E: ID_USB_REVISION=1000 +E: ID_USB_SERIAL=FTDI_ZiGate_ZIGATE+ +E: ID_USB_SERIAL_SHORT=ZIGATE+ +E: ID_USB_TYPE=generic +E: ID_USB_VENDOR=FTDI +E: ID_USB_VENDOR_ENC=FTDI +E: ID_USB_VENDOR_ID=0403 +E: ID_VENDOR=FTDI +E: ID_VENDOR_ENC=FTDI +E: ID_VENDOR_FROM_DATABASE=Future Technology Devices International, Ltd +E: ID_VENDOR_ID=0403 +E: MAJOR=188 +E: MINOR=2 +E: SUBSYSTEM=tty +E: TAGS=:systemd: +A: dev=188:2\n +L: device=../../../ttyUSB2 +A: power/async=disabled\n +A: power/control=auto\n +A: power/runtime_active_kids=0\n +A: power/runtime_active_time=0\n +A: power/runtime_enabled=disabled\n +A: power/runtime_status=unsupported\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=0\n + +P: /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6.4/3-6.4:1.0/ttyUSB2 +E: DRIVER=ftdi_sio +E: SUBSYSTEM=usb-serial +L: driver=../../../../../../../../bus/usb-serial/drivers/ftdi_sio +A: latency_timer=16\n +A: port_number=0\n +A: power/async=enabled\n +A: power/control=auto\n +A: power/runtime_active_kids=0\n +A: power/runtime_active_time=0\n +A: power/runtime_enabled=disabled\n +A: power/runtime_status=unsupported\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=0\n + +P: /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6.4/3-6.4:1.0 +E: DEVTYPE=usb_interface +E: DRIVER=ftdi_sio +E: ID_MODEL_FROM_DATABASE=Bridge(I2C/SPI/UART/FIFO) +E: ID_PATH=pci-0000:00:14.0-usb-0:6.4:1.0 +E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_6_4_1_0 +E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:6.4:1.0 +E: ID_VENDOR_FROM_DATABASE=Future Technology Devices International, Ltd +E: INTERFACE=255/255/255 +E: MODALIAS=usb:v0403p6015d1000dc00dsc00dp00icFFiscFFipFFin00 +E: PRODUCT=403/6015/1000 +E: SUBSYSTEM=usb +E: TYPE=0/0/0 +A: authorized=1\n +A: bAlternateSetting= 0\n +A: bInterfaceClass=ff\n +A: bInterfaceNumber=00\n +A: bInterfaceProtocol=ff\n +A: bInterfaceSubClass=ff\n +A: bNumEndpoints=02\n +L: driver=../../../../../../../bus/usb/drivers/ftdi_sio +A: interface=ZiGate\n +A: modalias=usb:v0403p6015d1000dc00dsc00dp00icFFiscFFipFFin00\n +A: power/async=enabled\n +A: supports_autosuspend=1\n + +P: /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6.4 +N: bus/usb/003/066=12010002000000080304156000100102030109022000010100802D0904000002FFFFFF020705810240000007050202400000 +E: BUSNUM=003 +E: CURRENT_TAGS=:seat: +E: DEVNAME=/dev/bus/usb/003/066 +E: DEVNUM=066 +E: DEVTYPE=usb_device +E: DRIVER=usb +E: ID_BUS=usb +E: ID_FOR_SEAT=usb-pci-0000_00_14_0-usb-0_6_4 +E: ID_MODEL=ZiGate +E: ID_MODEL_ENC=ZiGate +E: ID_MODEL_FROM_DATABASE=Bridge(I2C/SPI/UART/FIFO) +E: ID_MODEL_ID=6015 +E: ID_PATH=pci-0000:00:14.0-usb-0:6.4 +E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_6_4 +E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:6.4 +E: ID_REVISION=1000 +E: ID_SERIAL=FTDI_ZiGate_ZIGATE+ +E: ID_SERIAL_SHORT=ZIGATE+ +E: ID_USB_INTERFACES=:ffffff: +E: ID_USB_MODEL=ZiGate +E: ID_USB_MODEL_ENC=ZiGate +E: ID_USB_MODEL_ID=6015 +E: ID_USB_REVISION=1000 +E: ID_USB_SERIAL=FTDI_ZiGate_ZIGATE+ +E: ID_USB_SERIAL_SHORT=ZIGATE+ +E: ID_USB_VENDOR=FTDI +E: ID_USB_VENDOR_ENC=FTDI +E: ID_USB_VENDOR_ID=0403 +E: ID_VENDOR=FTDI +E: ID_VENDOR_ENC=FTDI +E: ID_VENDOR_FROM_DATABASE=Future Technology Devices International, Ltd +E: ID_VENDOR_ID=0403 +E: MAJOR=189 +E: MINOR=321 +E: PRODUCT=403/6015/1000 +E: SUBSYSTEM=usb +E: TAGS=:seat: +E: TYPE=0/0/0 +A: authorized=1\n +A: avoid_reset_quirk=0\n +A: bConfigurationValue=1\n +A: bDeviceClass=00\n +A: bDeviceProtocol=00\n +A: bDeviceSubClass=00\n +A: bMaxPacketSize0=8\n +A: bMaxPower=90mA\n +A: bNumConfigurations=1\n +A: bNumInterfaces= 1\n +A: bcdDevice=1000\n +A: bmAttributes=80\n +A: busnum=3\n +A: configuration= +H: descriptors=12010002000000080304156000100102030109022000010100802D0904000002FFFFFF020705810240000007050202400000 +A: dev=189:321\n +A: devnum=66\n +A: devpath=6.4\n +L: driver=../../../../../../bus/usb/drivers/usb +A: idProduct=6015\n +A: idVendor=0403\n +A: ltm_capable=no\n +A: manufacturer=FTDI\n +A: maxchild=0\n +L: port=../3-6:1.0/3-6-port4 +A: power/active_duration=48699\n +A: power/async=enabled\n +A: power/autosuspend=2\n +A: power/autosuspend_delay_ms=2000\n +A: power/connected_duration=48699\n +A: power/control=on\n +A: power/level=on\n +A: power/persist=1\n +A: power/runtime_active_kids=0\n +A: power/runtime_active_time=48439\n +A: power/runtime_enabled=forbidden\n +A: power/runtime_status=active\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=1\n +A: product=ZiGate\n +A: quirks=0x0\n +A: removable=unknown\n +A: rx_lanes=1\n +A: serial=ZIGATE+\n +A: speed=12\n +A: tx_lanes=1\n +A: urbnum=17\n +A: version= 2.00\n + diff --git a/tests/test_list_serial_ports_linux.py b/tests/test_list_serial_ports_linux.py index 483148e..31628e4 100644 --- a/tests/test_list_serial_ports_linux.py +++ b/tests/test_list_serial_ports_linux.py @@ -185,6 +185,91 @@ def test_replay_debian_13_kernel_6_12( ] +def test_replay_debian_13_kernel_7_0( + tmp_path: Path, caplog: pytest.LogCaptureFixture +) -> None: + """Kernel 7.0 with a CH9102 and ZBT-2 on CDC ACM, a dual-port CP2105 and an FT-X.""" + with caplog.at_level(logging.WARNING): + dev_root, ports = _list_ports(tmp_path, "debian-13-7.0.umockdev") + assert "Unknown serial device subsystem" not in caplog.text + + by_id = dev_root / "serial/by-id" + assert ports == [ + # The CH9102 has no manufacturer string, so udev names it by vendor ID + SerialPortInfo( + device=str(by_id / "usb-1a86_USB_Single_Serial_5424007932-if00"), + resolved_device=str(dev_root / "ttyACM0"), + vid=0x1A86, + pid=0x55D4, + serial_number="5424007932", + manufacturer=None, + product="USB Single Serial", + bcd_device=0x0443, + interface_description=None, + interface_num=0, + port_number=None, + ), + SerialPortInfo( + device=str(by_id / "usb-Nabu_Casa_ZBT-2_10B41DE589E4-if00"), + resolved_device=str(dev_root / "ttyACM2"), + vid=0x303A, + pid=0x4001, + serial_number="10B41DE589E4", + manufacturer="Nabu Casa", + product="ZBT-2", + bcd_device=0x0100, + interface_description="Nabu Casa ZBT-2", + interface_num=0, + port_number=None, + ), + SerialPortInfo( + device=str( + by_id + / "usb-Silicon_Labs_HubZ_Smart_Home_Controller_51600403-if00-port0" + ), + resolved_device=str(dev_root / "ttyUSB0"), + vid=0x10C4, + pid=0x8A2A, + serial_number="51600403", + manufacturer="Silicon Labs", + product="HubZ Smart Home Controller", + bcd_device=0x0100, + interface_description="HubZ Z-Wave Com Port", + interface_num=0, + port_number=0, + ), + SerialPortInfo( + device=str( + by_id + / "usb-Silicon_Labs_HubZ_Smart_Home_Controller_51600403-if01-port0" + ), + resolved_device=str(dev_root / "ttyUSB1"), + vid=0x10C4, + pid=0x8A2A, + serial_number="51600403", + manufacturer="Silicon Labs", + product="HubZ Smart Home Controller", + bcd_device=0x0100, + interface_description="HubZ ZigBee Com Port", + interface_num=1, + port_number=0, + ), + SerialPortInfo( + device=str(by_id / "usb-FTDI_ZiGate_ZIGATE+-if00-port0"), + resolved_device=str(dev_root / "ttyUSB2"), + vid=0x0403, + pid=0x6015, + serial_number="ZIGATE+", + manufacturer="FTDI", + product="ZiGate", + bcd_device=0x1000, + interface_description="ZiGate", + interface_num=0, + port_number=0, + ), + ] + + def test_replay_haos_x86_kernel_6_12( tmp_path: Path, caplog: pytest.LogCaptureFixture ) -> None: From 3356ab2c3505e48c8b993a47b09cf6838a2dc7b1 Mon Sep 17 00:00:00 2001 From: puddly <32534428+puddly@users.noreply.github.com> Date: Wed, 14 Oct 2026 22:08:05 +0000 Subject: [PATCH 5/6] Bump ESPHome and aioesphomeapi --- .github/workflows/ci.yml | 4 +- pyproject.toml | 4 +- uv.lock | 223 +++++++++++++++++++-------------------- 3 files changed, 110 insertions(+), 121 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e92c39f..cb7655f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -179,7 +179,7 @@ jobs: - {ref: "2026.7.4", api: "1.14"} - {ref: "2026.8.2", api: "1.15"} - {ref: "2026.9.0", api: "1.16"} - - {ref: "13c27429a4d54d1b2ff9fd611f9baafdc3e5f37a", api: "1.17"} + - {ref: "dcb943ded39dc1a7ec470dbfa7f461fc5041ab65", api: "1.19"} steps: - name: Check out code from GitHub uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -410,7 +410,7 @@ jobs: - {ref: "2026.7.4", api: "1.14"} - {ref: "2026.8.2", api: "1.15"} - {ref: "2026.9.0", api: "1.16"} - - {ref: "13c27429a4d54d1b2ff9fd611f9baafdc3e5f37a", api: "1.17"} + - {ref: "dcb943ded39dc1a7ec470dbfa7f461fc5041ab65", api: "1.19"} name: Run ESPHome tests (${{ matrix.esphome.ref }}, API ${{ matrix.esphome.api }}) steps: - name: Check out code from GitHub diff --git a/pyproject.toml b/pyproject.toml index 1d33c23..b5af503 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ repository = "https://github.com/puddly/serialx" documentation = "https://puddly.github.io/serialx/" [project.optional-dependencies] -esphome = ["aioesphomeapi>=46.11.0; python_version >= '3.11'"] +esphome = ["aioesphomeapi>=46.12.0; python_version >= '3.11'"] [dependency-groups] dev = [ @@ -49,7 +49,7 @@ dev = [ "types-pywin32>=311.0.0.20260508", "types-setuptools>=82.0.0.20260508", "setuptools-rust>=1.7.0", - "aioesphomeapi>=46.11.0 ; python_version >= '3.11'", + "aioesphomeapi>=46.12.0 ; python_version >= '3.11'", ] docs = [ "sphinx>=7,<8.2.3; python_version < '3.11'", diff --git a/uv.lock b/uv.lock index 99c22de..ca0bf81 100644 --- a/uv.lock +++ b/uv.lock @@ -3,12 +3,12 @@ revision = 5 requires-python = ">=3.10" resolution-markers = [ "python_full_version >= '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.15' and platform_machine != 'x86_64') or (python_full_version >= '3.15' and sys_platform != 'darwin')", + "python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine != 'x86_64') or (python_full_version >= '3.12' and python_full_version < '3.15' and sys_platform != 'darwin')", + "python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine != 'x86_64') or (python_full_version >= '3.11.5' and python_full_version < '3.12' and sys_platform != 'darwin')", + "python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine != 'x86_64') or (python_full_version >= '3.11' and python_full_version < '3.11.5' and sys_platform != 'darwin')", "python_full_version < '3.11'", ] @@ -27,7 +27,7 @@ wheels = [ [[package]] name = "aioesphomeapi" -version = "46.10.0" +version = "46.12.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohappyeyeballs" }, @@ -41,92 +41,81 @@ dependencies = [ { name = "tzlocal" }, { name = "zeroconf" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a3/47/e546b178ba83259ea68f7ee36bd85359354521290e3c7a70cd22ea7f677a/aioesphomeapi-46.10.0.tar.gz", hash = "sha256:640ddf1e4ef64fd0ebc396079baa614e4080e6cd6fc6860c3cd3be67034cd00c", size = 276682, upload-time = "2026-10-12T02:54:22.846Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/72/ce7b3c59fad31e74f7a6e7e62b1b6db73d605e4a890894f0268871ee3d3d/aioesphomeapi-46.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9bfa1a5a9a7a502eb9cff16ede55292a3e4a88a7750360006a9846eaf5b761d0", size = 669912, upload-time = "2026-10-12T02:51:38.362Z" }, - { url = "https://files.pythonhosted.org/packages/43/a8/2b14b11567dd1005eb65c94b427cd818f485d3145219fd34c383a87031be/aioesphomeapi-46.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c2b7b0e434644d03b6277f31ec855f401fbebdf1f1014a7199c86e8348be64a5", size = 652694, upload-time = "2026-10-12T02:51:41.243Z" }, - { url = "https://files.pythonhosted.org/packages/58/38/86048677e52c726af54446e5a2557bec96e7c170cbc918f66d3d23333850/aioesphomeapi-46.10.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ec9e7bfd2ee523767bcf9c883e5decb4f06e2881613ccaf928fc26ce50974c9c", size = 823465, upload-time = "2026-10-12T02:51:42.788Z" }, - { url = "https://files.pythonhosted.org/packages/6f/00/14eb64af89c38e538e88ec6003d1ad84c3fc68aab45aa7856f4fd7481b6f/aioesphomeapi-46.10.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d83cd2edae9576ba33f45559485eb1d7744a27ed4b6781fa8dd458ca03438e10", size = 764604, upload-time = "2026-10-12T02:51:44.529Z" }, - { url = "https://files.pythonhosted.org/packages/c8/0c/88736528333091854aac4c995985a44dda2b671d31d4d552ba6b24508ac6/aioesphomeapi-46.10.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b4afdb943979f065ad135b81b2c20c29e1ca2258d65789bce32c7c385a166e08", size = 733155, upload-time = "2026-10-12T02:51:46.197Z" }, - { url = "https://files.pythonhosted.org/packages/43/47/70d8a4d7c8588484d7fd181d58490781e7e2a4f8d7b1b7b77b9e4746e15b/aioesphomeapi-46.10.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4e92733dc6227b02275dba7e24e4c4dc2a7531a6c225f3e81afc4a5b2ab0081c", size = 792373, upload-time = "2026-10-12T02:51:47.816Z" }, - { url = "https://files.pythonhosted.org/packages/83/6e/b10ee52d40144d9eafe90a48811e61169963d5d83d19311b632e6fe57e63/aioesphomeapi-46.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbea64f02d097d4127ff444ce171325d5536e8d92e52af7ff39f969204310257", size = 771909, upload-time = "2026-10-12T02:51:49.531Z" }, - { url = "https://files.pythonhosted.org/packages/c0/ca/b1b59aa98f20104f88469801c5fa24caf2b7873eff9b0dda60268f8873cb/aioesphomeapi-46.10.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e2d6cf6646c319bf2f838122e8cded9b71974663ae9548eae728fe7127b88995", size = 732575, upload-time = "2026-10-12T02:51:51.344Z" }, - { url = "https://files.pythonhosted.org/packages/bd/61/1a090c9936ca5cfa17b98965f550ddab6b077120be57384ca866815cd8eb/aioesphomeapi-46.10.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7289cd82581a7b7335751ceaa0b4447026bc9b51b6e1b3459e10362e1debabbc", size = 834210, upload-time = "2026-10-12T02:51:52.869Z" }, - { url = "https://files.pythonhosted.org/packages/be/a9/96bfb7a555277e9a507cf75de7240b1d7b417a2e612b1b393a4e2e43a248/aioesphomeapi-46.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e0100f654b52de72f6ac91412cb09b9addf4803f4f829156b41fe01df890cf70", size = 799981, upload-time = "2026-10-12T02:51:54.527Z" }, - { url = "https://files.pythonhosted.org/packages/1a/a2/90c7fe51098e7422c93e0dd46197a2449ff53fa298fc771e2073546e4f3d/aioesphomeapi-46.10.0-cp311-cp311-win32.whl", hash = "sha256:1bf13370bdac1151b77657447eab043ad721f9acb349274e3298cded6d1e526f", size = 556936, upload-time = "2026-10-12T02:51:56.071Z" }, - { url = "https://files.pythonhosted.org/packages/6b/58/f996d95153de3f79947474113c77c42a2fa66bd24561e487e0e89f217dba/aioesphomeapi-46.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:b646baaae153c3c0f517f08e1b691e22f2d321c1afaf45950a15737f8bbecbe6", size = 622047, upload-time = "2026-10-12T02:51:57.65Z" }, - { url = "https://files.pythonhosted.org/packages/27/d3/ffd0e679f2616a3a744ad598238d322ce8dbcdb8aece42ba769ac72dc6e4/aioesphomeapi-46.10.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5ebcf56a837214cf5a30c65c56fd85e136357bd65bd22c36e7e5d01b6b30006d", size = 677392, upload-time = "2026-10-12T02:51:59.174Z" }, - { url = "https://files.pythonhosted.org/packages/0c/b1/0465667d88ad1207cb9579ec5e18366c8cf223d6699a88e0be604075ed39/aioesphomeapi-46.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:882b6441822fdcee22a38ee10a922e1ec362957c62cb0e357bd1b6804fdf17ac", size = 659184, upload-time = "2026-10-12T02:52:00.837Z" }, - { url = "https://files.pythonhosted.org/packages/98/76/f946d97ff92417e72bea4756d47ced63642072bd3022d69406c265993662/aioesphomeapi-46.10.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3d99ed0921d4edf14c259ce3555dae8d141437f85bae18e8cbd7ad96bb714719", size = 798553, upload-time = "2026-10-12T02:52:02.402Z" }, - { url = "https://files.pythonhosted.org/packages/06/86/f533baf6c561a279b9a8c780fd75cebfe765e2bf88849b238d8b5577f435/aioesphomeapi-46.10.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b8f8ee8e7011a3901c20eef9ed77034aa7eb0cce0635993a7f783aeb0db65d2c", size = 738214, upload-time = "2026-10-12T02:52:03.974Z" }, - { url = "https://files.pythonhosted.org/packages/40/4f/602483c170149b509ee05dca24ef1ab54befad7dad4f4fe87ce1daaf2670/aioesphomeapi-46.10.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f5b1ddd596f9a6049b2905a2e05bc711ecdf71620f10540a324855a8b5be7246", size = 723343, upload-time = "2026-10-12T02:52:05.672Z" }, - { url = "https://files.pythonhosted.org/packages/75/4f/fffb7fb1cc22d1d95f13fc144386d29e779113160f489bf39803fc020291/aioesphomeapi-46.10.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20ddddd37f2a6d4be9b7ba7a1be932f04170054253c97c04246b54c56a7cce9c", size = 772711, upload-time = "2026-10-12T02:52:07.502Z" }, - { url = "https://files.pythonhosted.org/packages/cc/f4/25339dd95c470292d04a3ac3056dd3763e24e4b8e4e4ae6c61755d2a1d8b/aioesphomeapi-46.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:369cec390aeebe3ca4bb6d1e30a493f585795c54c119ea9089078c69f62d5635", size = 745406, upload-time = "2026-10-12T02:52:09.17Z" }, - { url = "https://files.pythonhosted.org/packages/ee/0a/84b1ef55a6644d27790fade82fa45b230664bf2899958741daca712c1ae3/aioesphomeapi-46.10.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5fdf1ab2c70593b99a167fbf37bf080a5f4b6862ce36f197fe38378dff973a4e", size = 720473, upload-time = "2026-10-12T02:52:11.087Z" }, - { url = "https://files.pythonhosted.org/packages/fc/2b/3be5c20fef04e1c1b28f607d2cbd1fef1143b19464b1775c267dbf8406d3/aioesphomeapi-46.10.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:da6fb69ee27a280ba50a19df7a22cad439b98595f2cafaed7f710f2390406e53", size = 809694, upload-time = "2026-10-12T02:52:12.7Z" }, - { url = "https://files.pythonhosted.org/packages/d0/be/e312e0aeca5f961116ba83879f8f2c16468d2f017a56f32d678dea2158a1/aioesphomeapi-46.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9b85f59cff341b3ddf7a3b733a6748f8bb7f6773cc90060fac6e3389b5519e88", size = 779406, upload-time = "2026-10-12T02:52:14.63Z" }, - { url = "https://files.pythonhosted.org/packages/0b/ef/6f644a6956273684dfc6e8ed45306f5cbcc76a0846217fda18ff556f24b4/aioesphomeapi-46.10.0-cp312-cp312-win32.whl", hash = "sha256:fabe8333564aed6002b5d6df309dfd1d978f84afc2fa86bab4302184abd46c96", size = 549797, upload-time = "2026-10-12T02:52:16.671Z" }, - { url = "https://files.pythonhosted.org/packages/b8/08/46df2928985a71ee5981d340ff92009b15de08447fa18fbbfc7780926500/aioesphomeapi-46.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:138580179c5f56b9ac71f2340fb6f20170b011a1d1c9fbdcbe523ab9e27f2147", size = 611491, upload-time = "2026-10-12T02:52:18.283Z" }, - { url = "https://files.pythonhosted.org/packages/40/81/2a454b42b4ce878ebee4c9c1477220d3552649a9842ab828b7d8f1ff7d20/aioesphomeapi-46.10.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f466c6cb9d2d53903074c3dea4d888db50366a5ec7be4bcf8c192188b31c8f05", size = 672890, upload-time = "2026-10-12T02:52:20.296Z" }, - { url = "https://files.pythonhosted.org/packages/ef/a3/4c57b004922a71f4d87635d7f2e8ef488bee069fca7583e9949de4fa3d7f/aioesphomeapi-46.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5180e58af69359355fd62831d3481d9ab0c4866fd322431d1c711e570c686a11", size = 653850, upload-time = "2026-10-12T02:52:21.928Z" }, - { url = "https://files.pythonhosted.org/packages/ae/0d/73730da4149074ed086b06e76c56003b333ff9a62aae09efa75227e6a395/aioesphomeapi-46.10.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bec85905bf4bdfbff0360118b0dc16159f7a93b5047da75ddfbd79c8e38d5768", size = 791356, upload-time = "2026-10-12T02:52:23.648Z" }, - { url = "https://files.pythonhosted.org/packages/7c/ec/6d8a73fd74a594ecad7fa0f321153a03b8a2051691969c2e8faba5231e18/aioesphomeapi-46.10.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e29afb757b76c73e0a1856ea09a20efcec3c8f1188a4a656bd32271f5f6d94ad", size = 734592, upload-time = "2026-10-12T02:52:25.59Z" }, - { url = "https://files.pythonhosted.org/packages/0b/cb/03442912373a01c0e447c79b9b6e49fa80de1e9c2c8de4aaac9554e8bfd4/aioesphomeapi-46.10.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:ba160a22f75785a7962d91a54c45ba8663b2eac68f5da0340569ec2f795f2f96", size = 716188, upload-time = "2026-10-12T02:52:27.487Z" }, - { url = "https://files.pythonhosted.org/packages/b3/cb/ceb0d192a33c48b2b622b67df4bc827ddb72963ce7bfd76b39c86f666a25/aioesphomeapi-46.10.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:28fd7c55caa0f769f1cfcf9be1a084c02561673d4f79f973b022cd1182e2a682", size = 766234, upload-time = "2026-10-12T02:52:29.395Z" }, - { url = "https://files.pythonhosted.org/packages/58/4c/43463c35985ef156b0012391d66201691d4ca5ec982194aee8d57f133aa0/aioesphomeapi-46.10.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e7e0ce9f28e468b36e0048bf15e5ff023822a790ac3ef92e7c4e6410ce4f1325", size = 742656, upload-time = "2026-10-12T02:52:31.127Z" }, - { url = "https://files.pythonhosted.org/packages/f6/34/bbc959473f63985e519c5e94ed6eb0934aeccd1e1ac157aab2c66bfdbadf/aioesphomeapi-46.10.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:5c07d7185720d5778a4cac3608f561eb154cca077310a99006d0fe910fd6758f", size = 714855, upload-time = "2026-10-12T02:52:33.327Z" }, - { url = "https://files.pythonhosted.org/packages/28/c4/9a43c726b631d8de36c38dbe4f4e3057fa707ef7e54e7d641b08ce595c87/aioesphomeapi-46.10.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:bfca6bd2600f238b9d9780509f85eac191a1efdfe5ee5bfc726c081255908ee3", size = 802242, upload-time = "2026-10-12T02:52:35.076Z" }, - { url = "https://files.pythonhosted.org/packages/e4/55/bec738c843586a436c46168e28250f900aa63300dba99e88751e3026b29b/aioesphomeapi-46.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2a765f1d75992d838c4b6d54a5a3aba908cfe7710104ee8a7370d8a08e131420", size = 774562, upload-time = "2026-10-12T02:52:36.909Z" }, - { url = "https://files.pythonhosted.org/packages/c6/dc/5edade3cd9bb523039766317c4b2ca43058bf3fa89503e79726ea620b44c/aioesphomeapi-46.10.0-cp313-cp313-win32.whl", hash = "sha256:9524706b088d7d0d395bc7756f167fe4876cdc510a194577a4ce5d6b9e01141c", size = 547446, upload-time = "2026-10-12T02:52:38.623Z" }, - { url = "https://files.pythonhosted.org/packages/2c/0d/1b1ae5b264e96713343b255e1f82d1be0c5c063d3981bd06a1b4b488da17/aioesphomeapi-46.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:7c60e78c56261589918102fb0ff1448bc33072a13d61e78ff0351f705021e87a", size = 607528, upload-time = "2026-10-12T02:52:40.412Z" }, - { url = "https://files.pythonhosted.org/packages/27/57/ee228e40f29a9079493df0a71e11e1405ba9bfe1f0e0f385f8de2ac8bde9/aioesphomeapi-46.10.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:9226e49235ea48263b6f2512cca220738f0c1d55032f86926e5599cdc8a6406d", size = 676735, upload-time = "2026-10-12T02:52:42.204Z" }, - { url = "https://files.pythonhosted.org/packages/dd/fa/ac01e07f8a3e1af73340f3646a11614d9bf1a72feca9e64587df8dcd940f/aioesphomeapi-46.10.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4f66e9b7429460cc1582614d48a4bceb0770a77a1392953327e2de4e6a8b76ed", size = 660914, upload-time = "2026-10-12T02:52:43.957Z" }, - { url = "https://files.pythonhosted.org/packages/c7/a4/e3a116754fe0f78aebcd5c4f346972db33a71e791aeefba1c5590a47e780/aioesphomeapi-46.10.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:345588b1256504ac6293d533a581a67387c694383a638bffdb8dcb2a494a23a5", size = 793459, upload-time = "2026-10-12T02:52:45.988Z" }, - { url = "https://files.pythonhosted.org/packages/e2/aa/969c628ab1d08814757b43a4c841c7d2dc4ef9d1364509c37af21e071af2/aioesphomeapi-46.10.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a9c575fc82bdacd15ff4d791ba3909f719bbbad81812919b5e15a3f9745695f", size = 744251, upload-time = "2026-10-12T02:52:48.07Z" }, - { url = "https://files.pythonhosted.org/packages/12/33/14988c64aff3e61ded05ed26864778d2b6b2bb4543d6c650eaae6a7fb483/aioesphomeapi-46.10.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:cf5aa31801a131f1e3b0802bcaead598185e415a02e8afc94cd9c3ef4d3def4c", size = 709935, upload-time = "2026-10-12T02:52:50.078Z" }, - { url = "https://files.pythonhosted.org/packages/3e/81/a653f3eab28dfc6701945bcbf03b2a0a709646ff2606886e89f318b54679/aioesphomeapi-46.10.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e9fdf65b4718358521c9415f04a0d2100a12c79c494dd35c40256a6af1212719", size = 769436, upload-time = "2026-10-12T02:52:51.799Z" }, - { url = "https://files.pythonhosted.org/packages/f0/11/348711a90221b329bc470fdf5c691887b6fac80ab3f46463b8da67d7c056/aioesphomeapi-46.10.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b07e50f81905e997c67214212458e96ec47ccaa06cf3b948521f831186930306", size = 752628, upload-time = "2026-10-12T02:52:53.607Z" }, - { url = "https://files.pythonhosted.org/packages/98/48/44eeae5737e8bc76df816101b593875e8377d9d99c136dc91157ea380ebc/aioesphomeapi-46.10.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:29c3393690bf4b667cd0b094eaec21043df254abf07af23e41c3ddc190c621e1", size = 706685, upload-time = "2026-10-12T02:52:55.501Z" }, - { url = "https://files.pythonhosted.org/packages/0d/8c/4777ee883a8ea3041c38209148cda3383ac8dbf86da7a9e500bd354b65a8/aioesphomeapi-46.10.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:5896aa4acd59537e241e00ca6a8b23d6206d36c378b1924fba45b76b5a7ed781", size = 804711, upload-time = "2026-10-12T02:52:57.457Z" }, - { url = "https://files.pythonhosted.org/packages/48/11/59b41ec77e721e06e92e8341a7add92f9b74481f9958e9ad918ac7aec022/aioesphomeapi-46.10.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2d7e6a7a350c167af6556380a49b5f9ad98b91f282bc347e30117e3648223bb9", size = 778363, upload-time = "2026-10-12T02:52:59.506Z" }, - { url = "https://files.pythonhosted.org/packages/69/31/dc1f0797669228b3e4b558fde3211b07f7fc5bcaa92102b6a5d3b3b14af5/aioesphomeapi-46.10.0-cp314-cp314-win32.whl", hash = "sha256:f9dc08d6fba0987016a6f1b5e381461f7f48a90863df8ff19b3558a06de8b8a3", size = 557709, upload-time = "2026-10-12T02:53:01.759Z" }, - { url = "https://files.pythonhosted.org/packages/a8/39/725373f7b0357107d82a8767b2d4d9d0e8c60a605ca230b66272e10f5cd4/aioesphomeapi-46.10.0-cp314-cp314-win_amd64.whl", hash = "sha256:034efa63ad04dea7714998a9cfaa3ba5d57d767fc36716825d304ea3615871c7", size = 621112, upload-time = "2026-10-12T02:53:03.61Z" }, - { url = "https://files.pythonhosted.org/packages/0d/ce/ab4cec9584338cd97030285b6c8f4334ab2796b1e3cc5f402f4053e39a55/aioesphomeapi-46.10.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:77f994d522f9c26cf7c1d5117f2d2508c42159d73fedbf2e3a1d295aef56f8c4", size = 712253, upload-time = "2026-10-12T02:53:05.515Z" }, - { url = "https://files.pythonhosted.org/packages/5f/e4/789d0016a2a8f25ff0a441a255c3716ea2a60a6b3a835bc2d277119e4ef1/aioesphomeapi-46.10.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4743cde00aeea3c92da3d3fba1a6b832c925eb266b135e5aa125b46c421584cc", size = 706618, upload-time = "2026-10-12T02:53:07.417Z" }, - { url = "https://files.pythonhosted.org/packages/ab/20/2b8623fa96e36ee45ff44123d0a1deb8333d9b7e953823983daa3aa186dd/aioesphomeapi-46.10.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bfcdf8a0ca09dd1dda0e59fa76080ee201f786c2444e064d75f865e832bdbc73", size = 796250, upload-time = "2026-10-12T02:53:09.441Z" }, - { url = "https://files.pythonhosted.org/packages/14/59/b85ca425ad94c8782389702940ae1eeedd605a156dc94ff8690415d96d5f/aioesphomeapi-46.10.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b34cf3a07c76771d1ff6b2836c97a0b3a63edf013bd1801774c1f9470bab0ac", size = 763292, upload-time = "2026-10-12T02:53:11.393Z" }, - { url = "https://files.pythonhosted.org/packages/ef/21/eeeed7d60309186935dfdda55dcfe5310e3482bc289553f8da24315606aa/aioesphomeapi-46.10.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7ca5c353054fd96f4b39deeb71915d04cd41afd78d01bb2aa20f0d8091516edc", size = 704338, upload-time = "2026-10-12T02:53:13.389Z" }, - { url = "https://files.pythonhosted.org/packages/4e/30/a11b75eba82f7f64229589026873121289b2166b2839779a79bd64b01227/aioesphomeapi-46.10.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c32eda24b704961ecaafee54f330cdda2b4997b457fb9843c6a583919dd2e248", size = 778142, upload-time = "2026-10-12T02:53:15.422Z" }, - { url = "https://files.pythonhosted.org/packages/66/6e/464a13e95564b5e10f9e0696a16e74c6ad20c23b5cce8d44f74191c33bca/aioesphomeapi-46.10.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ee4da507688f6056235e46aa86fb93374e057c203fdb1a357c5336ae34156989", size = 771983, upload-time = "2026-10-12T02:53:17.46Z" }, - { url = "https://files.pythonhosted.org/packages/1b/90/9dd2a7de79ab8a81907788de8c79e934ba5a731d76e776fec416f696abf8/aioesphomeapi-46.10.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:43834219aa69b1f70a6075e6ccf1cfe262d202deb05d311413ada52047aafc35", size = 722882, upload-time = "2026-10-12T02:53:20.087Z" }, - { url = "https://files.pythonhosted.org/packages/46/3f/5390c5105dd3b10810e1f8f408b467725d005b6a51a753297e44fab18525/aioesphomeapi-46.10.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:9c51678ae1fa323b3f2834f169a82706ed0137ab3f837ef4ecc53e0715fd668a", size = 808985, upload-time = "2026-10-12T02:53:22.104Z" }, - { url = "https://files.pythonhosted.org/packages/3f/cf/4c81b60f17026546fc185d260bab9b48611be4923f52bfb5e5ac15dda687/aioesphomeapi-46.10.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:054beac934574dcf52afd55facd1e5c268274e726f7837f7f0e20e90d45d0d4b", size = 787102, upload-time = "2026-10-12T02:53:24.028Z" }, - { url = "https://files.pythonhosted.org/packages/bd/52/4223bfe331a7444c63ba81238a7ab8d68d705c651fcb185fdf28a4014910/aioesphomeapi-46.10.0-cp314-cp314t-win32.whl", hash = "sha256:e64f2c30b5f00517cc15d0062284ade3fd2de7b2b0a3822ba30de196539dac0f", size = 602062, upload-time = "2026-10-12T02:53:25.884Z" }, - { url = "https://files.pythonhosted.org/packages/ea/5e/4a1ee818ea03e4b816ba6db58de50d917cbc0dcb0f9051e157369470da12/aioesphomeapi-46.10.0-cp314-cp314t-win_amd64.whl", hash = "sha256:e2e8ac5826509b40615f794b391fb05d043115b351c9d130bd13aa1a83f0aa3c", size = 665767, upload-time = "2026-10-12T02:53:27.904Z" }, - { url = "https://files.pythonhosted.org/packages/66/f1/60681ea9f2bc62121754aaa3b6d7ee08fa22f1deadda3eede3537105907c/aioesphomeapi-46.10.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:d6681876c717df2c9e2b98f22b1fecd91b7b69fd4e7cb96d6e5c8a2fab09ba21", size = 674637, upload-time = "2026-10-12T02:53:29.961Z" }, - { url = "https://files.pythonhosted.org/packages/b7/17/cd206a84ab091acef828534e7d3cecdc114a5f54ac07f538e8152e1b5943/aioesphomeapi-46.10.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:176a8180ef70e71198ca13a98b3619a5b7da997790e9703ec134c72cb99b044d", size = 657980, upload-time = "2026-10-12T02:53:32.038Z" }, - { url = "https://files.pythonhosted.org/packages/7d/94/fd2a88a622b50b0ff38221d85653f124fd3f6f0f287895fbaecd25627611/aioesphomeapi-46.10.0-cp315-cp315-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:77f4dc310c7b8b6cbb4e18eaf6312210259ac68c9b60306585c2fff02a3ecf7d", size = 749046, upload-time = "2026-10-12T02:53:34.25Z" }, - { url = "https://files.pythonhosted.org/packages/a7/d3/cde887da4a1d78d05c5b2bfa0fcad50022ea9b8ba10f66d5e0bb5fb709af/aioesphomeapi-46.10.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4b212266f4a22f847fb87a2cb432fdccf0f5b3f78f1fc06888d9a744a80f8545", size = 745161, upload-time = "2026-10-12T02:53:36.406Z" }, - { url = "https://files.pythonhosted.org/packages/09/c0/c94b8b6f18af90afc7c0d6e72f175856e3ee5a17a7aca6fa89521c74d71a/aioesphomeapi-46.10.0-cp315-cp315-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8d2a17d4f8a39e37a471fc0079f713583ea4961aca9c1c1d828c91abbdba0098", size = 750069, upload-time = "2026-10-12T02:53:38.574Z" }, - { url = "https://files.pythonhosted.org/packages/7c/e5/737c4febcf32e1aa8f70bdd8f01d9e017b939bd9bc0f8e968193694a4568/aioesphomeapi-46.10.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:91619af12cce4e92284756a32cec7c4518b402778e8144e8f166ad187897d14b", size = 773198, upload-time = "2026-10-12T02:53:40.586Z" }, - { url = "https://files.pythonhosted.org/packages/2a/f7/f588c5a0624d55ef77bf4b8f3a5470eaa429b443bb673291563966c4746e/aioesphomeapi-46.10.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:c872c8791a849545af8eb6eed162d24a9a39ba956f27fa8bbd7dc9a7d2542ed7", size = 753522, upload-time = "2026-10-12T02:53:42.587Z" }, - { url = "https://files.pythonhosted.org/packages/8d/f1/4a38ce779dc15ce01262fb566a1c2163f6cfefd607db9e59f856bcc40a5a/aioesphomeapi-46.10.0-cp315-cp315-musllinux_1_2_armv7l.whl", hash = "sha256:e02ac32782a3aa15cc03b5b107f1c201969b4216ae145cfe3fb5be3f580e772a", size = 743379, upload-time = "2026-10-12T02:53:44.497Z" }, - { url = "https://files.pythonhosted.org/packages/70/0e/3622fd470f04cdea0e9e68398d045c1add9e744ac931558447b54be59073/aioesphomeapi-46.10.0-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:27870e4522621437374a9d4aaf7da5738676e84a36c32bd296419204953d3a8a", size = 761013, upload-time = "2026-10-12T02:53:46.494Z" }, - { url = "https://files.pythonhosted.org/packages/fc/c4/a66c4e788dbd9c82797133cf6869580ebfe4a654c5e9ff5ed132a9bfc9cd/aioesphomeapi-46.10.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:def14cb4bc1d49d94ce46f83b7de407df94bdb1ef7eeaaa1f58b3eb1e4733eb2", size = 780564, upload-time = "2026-10-12T02:53:48.66Z" }, - { url = "https://files.pythonhosted.org/packages/d5/a9/28a0f6197a395594685a7d57e75cf08d1d198387aa232814d61b18bd51c2/aioesphomeapi-46.10.0-cp315-cp315-win32.whl", hash = "sha256:37d0bcf7a1b589657611b96aa9976f724e4cefe4d2eb755ca317051722c491d5", size = 557092, upload-time = "2026-10-12T02:53:50.759Z" }, - { url = "https://files.pythonhosted.org/packages/67/23/afbfa9bf16269234eda9900c07ed5fb1cee20b1a7756118ea643983ae610/aioesphomeapi-46.10.0-cp315-cp315-win_amd64.whl", hash = "sha256:e12a9067ea3b861126c81973fde74e140982a925b4cdde4a8002e5297b6e047d", size = 619846, upload-time = "2026-10-12T02:53:53.036Z" }, - { url = "https://files.pythonhosted.org/packages/3e/92/c4848561c52cf9ed7f5deae069ee89c800d2fff1464ff1cf7fa4fbd0943e/aioesphomeapi-46.10.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:eee326fa50f871334cdd4e17adf6061276aacec58a47823b94864811fd75354b", size = 706074, upload-time = "2026-10-12T02:53:55.063Z" }, - { url = "https://files.pythonhosted.org/packages/81/26/31df4f1d0eac8ca25bcfb14220cb25440c2600abaf84c5d624a928f7724a/aioesphomeapi-46.10.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:cf05edf87ceba89491c8f104121d41336dac0a06fb4f36c442eee2271e868b63", size = 701505, upload-time = "2026-10-12T02:53:57.049Z" }, - { url = "https://files.pythonhosted.org/packages/cc/34/589e235127c6242807f602e21aaa7c93a6ee8cf13e602d4243077618689f/aioesphomeapi-46.10.0-cp315-cp315t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9c495eefcf20a5ea53828c8f274053b166f1705c6e0c44f880d69aeec1043110", size = 755522, upload-time = "2026-10-12T02:53:59.363Z" }, - { url = "https://files.pythonhosted.org/packages/9f/a7/d5b0676f858bedc89823d25b849f58e5d725ded415ee0e163b6e0b9d9f81/aioesphomeapi-46.10.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc6bf5c3811b2a5bf3d319e77c3a9093491f4858aedf15c44aa7f26e1bab7816", size = 760185, upload-time = "2026-10-12T02:54:01.528Z" }, - { url = "https://files.pythonhosted.org/packages/b7/ed/da49d5759ecf44492d77383bd7aab566a5b42a46459cf62414e0c22f5ee8/aioesphomeapi-46.10.0-cp315-cp315t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e3ec5345e1f5fc08cb63925481478a89e18e36aee944aaa637f4735b55cbbec1", size = 736203, upload-time = "2026-10-12T02:54:03.86Z" }, - { url = "https://files.pythonhosted.org/packages/49/b2/300733226100798e4dc3dc6453d9422ea32075ded3561b0643a569b0a5ef/aioesphomeapi-46.10.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8cf8a412d8370b082f1bbe41730045bb5e5724312444d9808df63f412485cfd9", size = 776691, upload-time = "2026-10-12T02:54:06.107Z" }, - { url = "https://files.pythonhosted.org/packages/07/75/4dd15753e1e9dd67f7b80180384643676996750244f72601a4383193ba44/aioesphomeapi-46.10.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:7420f947dbf4ccb7fb331951c52cb3fdb7c564e9f39a4438988641e73f71f172", size = 769170, upload-time = "2026-10-12T02:54:08.268Z" }, - { url = "https://files.pythonhosted.org/packages/63/98/4646c66b2709cf7feec07d3c97ff1a4bde0d2a3a566ff3867bfc1309ff58/aioesphomeapi-46.10.0-cp315-cp315t-musllinux_1_2_armv7l.whl", hash = "sha256:4b834a6621aabfc7ca9242bc88bf7abd2ac5214eee353ddccdafe4f6d77b3aab", size = 756962, upload-time = "2026-10-12T02:54:10.856Z" }, - { url = "https://files.pythonhosted.org/packages/c7/7c/5910b20e3820764d8195437ce59b0d86057d45cde5025859cfe4c341c389/aioesphomeapi-46.10.0-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:679fba42bcc266c72ad09a4455f7837e1d51333a0e586f6dee97448b0202d7e1", size = 767411, upload-time = "2026-10-12T02:54:13Z" }, - { url = "https://files.pythonhosted.org/packages/99/68/c9ed9db722c18b0e59bcaf7f3cf7290fa3bc39f0673356ac5302d5be578b/aioesphomeapi-46.10.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd735106e8f9e08b8822c7bb22e2d2c545a205a5c7abf7230ff098c9e6e0873", size = 786091, upload-time = "2026-10-12T02:54:15.997Z" }, - { url = "https://files.pythonhosted.org/packages/61/1c/a5d53112809f0ce2b80d6396e81d8f792275a9d02761a3ab0531f52646e0/aioesphomeapi-46.10.0-cp315-cp315t-win32.whl", hash = "sha256:9d9d162a39313f9ec738980681c6d040b2b52cca25319b1aaa1ada697626fa6b", size = 599020, upload-time = "2026-10-12T02:54:18.353Z" }, - { url = "https://files.pythonhosted.org/packages/65/4b/5a0e18e2e5c9638a4572bf2603b63eb30e19b139439ae354d1fe669a45b5/aioesphomeapi-46.10.0-cp315-cp315t-win_amd64.whl", hash = "sha256:4b945cfaf19771a7fa3f473d9578136468653c372a1d9f13007af41a16bd8a7b", size = 660318, upload-time = "2026-10-12T02:54:20.524Z" }, +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/98/fc38096b2557fc3528eba9ec3737171a54a600ac489ab8c735314120ec28/aioesphomeapi-46.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a7c6a28a8ac8e37d60af98a3ffebb49e1317e7262451960131807ecdc4852900", size = 670096, upload-time = "2026-10-14T22:02:58.518Z" }, + { url = "https://files.pythonhosted.org/packages/e8/f2/e5dd9cc8877faa7ddf90bf78cf8da7c49e808746f8aea42d6456127c229b/aioesphomeapi-46.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8ad69744b17e92553c9921864608d89cc63404f674505ad9a41ff7e8aae54bfc", size = 652874, upload-time = "2026-10-14T22:03:01.386Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d4/c450553a4efb0fd965d90b3202b33b4c71ecac4891b85ad4ba9ea11711b3/aioesphomeapi-46.12.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4a62d7a443577bbb9d2593188f6bb11980211d97d99f61f9c4531c367a7b63cd", size = 823655, upload-time = "2026-10-14T22:03:03.591Z" }, + { url = "https://files.pythonhosted.org/packages/0b/76/a7d73d11c1b3aae929ad26bd592ef84aaa3164b4ad8804880bc8971c61fa/aioesphomeapi-46.12.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:33fc27719e7d85ae97b3be9b6049cc609f5df3ead32d164015412cfe29d96a59", size = 764794, upload-time = "2026-10-14T22:03:05.54Z" }, + { url = "https://files.pythonhosted.org/packages/c0/57/35d54d17a8c771e9cb1ba0cf7b4ed7580c3e555f803f71b7b287519b36c4/aioesphomeapi-46.12.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1e5e1483018fbb700030f34604a5ebc0026bf5ed89bc21d4fcfd6f8b7a16ae22", size = 733338, upload-time = "2026-10-14T22:03:07.221Z" }, + { url = "https://files.pythonhosted.org/packages/b8/de/52adf2fa7ed17c744ffebcd1691368545ddcf876f709a6d28c5142cb81b5/aioesphomeapi-46.12.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba4865d1035ccedd5a4fe60fcf487d98f1a53dcbc6e2fe594f6b9f2a01f08d33", size = 792562, upload-time = "2026-10-14T22:03:09.118Z" }, + { url = "https://files.pythonhosted.org/packages/d3/49/caec4bf20e00f6984cded448d1c22a1ef4eae2e158002ed9038e8373483c/aioesphomeapi-46.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e19f41740de9ad4cf9d1e24baff3d75f05ed7648212a2f1520a8b29f97bd7ba6", size = 772100, upload-time = "2026-10-14T22:03:11.084Z" }, + { url = "https://files.pythonhosted.org/packages/cb/89/7f9c346762c76f5b67a938a8acd4d521ce4a601970ce8da7ab46ac543744/aioesphomeapi-46.12.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:9d1b8e01b4853a3fa2657dcc90e7f0c540c0e5ac22e13acad318727a309220d0", size = 732764, upload-time = "2026-10-14T22:03:12.758Z" }, + { url = "https://files.pythonhosted.org/packages/58/8c/7b71a9188901ccc6856a3afa793b07621cce1b0ee450abf2ac6e45cd33a1/aioesphomeapi-46.12.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:826c36a4b89bfaa9ce43eb7c9a1f7d6e24572e477d9a436e56c2c9c094162996", size = 834399, upload-time = "2026-10-14T22:03:14.513Z" }, + { url = "https://files.pythonhosted.org/packages/c9/a0/d679d7716f7e5cc901fac22db879b5f7d3c5b9c0716356a225b9aad13334/aioesphomeapi-46.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c8329e14d58c68b4686b59ec25194f834694566bbf370e9462a173efab3df889", size = 800168, upload-time = "2026-10-14T22:03:16.63Z" }, + { url = "https://files.pythonhosted.org/packages/a0/a2/4ee653e5a8a654105b8af9d55fa4b71be830cdae7ed658a0dc622cc17c02/aioesphomeapi-46.12.0-cp311-cp311-win32.whl", hash = "sha256:75f9e3df66935c4d3644a6a9bf3ee11d55f66fa83d56f5b6c55e3faea96b83fb", size = 557124, upload-time = "2026-10-14T22:03:18.696Z" }, + { url = "https://files.pythonhosted.org/packages/5a/70/0c85f23f54152bd36004ade9e2050ade536fef179c270cd1f61d028c7c1e/aioesphomeapi-46.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:14e2a668cbb357af3fe14826a84a4679b1d890b35cd3975225569690f70f4d02", size = 622246, upload-time = "2026-10-14T22:03:20.505Z" }, + { url = "https://files.pythonhosted.org/packages/1c/1f/3ff54196458a3b3bf79cc24680328694fcd22d305a025fad4f18f95c22cf/aioesphomeapi-46.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3288ff88a5e3912a57b917eaa474290a1b1f80bb0c69d3999071c20ce6519325", size = 677574, upload-time = "2026-10-14T22:03:22.325Z" }, + { url = "https://files.pythonhosted.org/packages/81/42/8e9adc0f7d8405565d0240df13c03f58096236712c5f38bf2a5d7c0b0b18/aioesphomeapi-46.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ea8b574bad9738ee764717ce7877ed4c37856fe3e89d7b511a2a4fbe7cb96a36", size = 659370, upload-time = "2026-10-14T22:03:24.211Z" }, + { url = "https://files.pythonhosted.org/packages/fa/b8/1d06d8eaab2a8b2eab10d723bab55d53865fcf4b047d50a4cacbc8e1855e/aioesphomeapi-46.12.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:79c5162299e9c917343b45bcf317ca3543d43a9b5aef169c1949af756ee7b9d5", size = 798739, upload-time = "2026-10-14T22:03:25.985Z" }, + { url = "https://files.pythonhosted.org/packages/de/85/d0386dc9b46d227db459280cb1d23d2474b55afe94a8df86c05948143cc4/aioesphomeapi-46.12.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:76546f93d4789f1278d4fbddd0fa744ffbad129eb51d27f03a33f9d35e5c332d", size = 738400, upload-time = "2026-10-14T22:03:28.067Z" }, + { url = "https://files.pythonhosted.org/packages/06/cc/12da52878f92cae4c902f8b556d7e8f465c50424d410d8b6b94332366767/aioesphomeapi-46.12.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c32c807fb2220473ef17de48f21b0f816f1cb443d1eecad52b628ab97490692a", size = 723531, upload-time = "2026-10-14T22:03:30.09Z" }, + { url = "https://files.pythonhosted.org/packages/ae/66/e25bbf4242f0aa18b54f59a64ce7e49e030007bef820bb5a18f19af6b2d5/aioesphomeapi-46.12.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:38f9fbecc867cc8d1782130a6f3ea65b7221444abb10488e02435328e78b2533", size = 772898, upload-time = "2026-10-14T22:03:32.079Z" }, + { url = "https://files.pythonhosted.org/packages/40/51/2dc7b42595e7251997400ca2095b82e58f0d207ea5ecff6b06e727fe2647/aioesphomeapi-46.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:fc4981c30287d85a718e971661743f19c6163f2550ac3652f4bfca81356abcbc", size = 745593, upload-time = "2026-10-14T22:03:34.165Z" }, + { url = "https://files.pythonhosted.org/packages/9b/ad/38e2e7fdcf556d5626fe234c6cc14132d3bd815c600c25b8cea9975b7332/aioesphomeapi-46.12.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:61736b2fb1dfa7e3560732974369fe1b83740f4761574d6a304a3a01a2b77af6", size = 720662, upload-time = "2026-10-14T22:03:36.134Z" }, + { url = "https://files.pythonhosted.org/packages/0b/c0/5174ccaa0bd07cec54ed0defc8cff4904c6252216d127cdaf4f7c03ec446/aioesphomeapi-46.12.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76e7007bac2584b0bea441594ccd517756183133a42f7a084c18dfa01bcff0c3", size = 809884, upload-time = "2026-10-14T22:03:38.289Z" }, + { url = "https://files.pythonhosted.org/packages/3b/6a/95908b5c4a8054c7c4ead5e485e203a25743b1287b1bdfda73883a7b4e2c/aioesphomeapi-46.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8a04b72d48b401450a873e29458d7d4ecd8c3fd0d2b19aa1d993d8f56c8b23a2", size = 779592, upload-time = "2026-10-14T22:03:40.6Z" }, + { url = "https://files.pythonhosted.org/packages/6c/cb/bf2ea1a94c80168a76b2985aa6e01fbd60cc9bbfa55b093bac1e2a138562/aioesphomeapi-46.12.0-cp312-cp312-win32.whl", hash = "sha256:84ba4fb303be785e3b0705ef283f3daab0fdcbfa69ab46c3ba2fba470ed9f4e6", size = 549992, upload-time = "2026-10-14T22:03:42.544Z" }, + { url = "https://files.pythonhosted.org/packages/02/d3/58c4838d25f7babfbed61c22501fa59694e499732b4ffb3d916f9c679edb/aioesphomeapi-46.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:429a50111e9f295de6795ae10bb2c85a4aaf3b7d11fc606301814faf1d1be921", size = 611681, upload-time = "2026-10-14T22:03:44.621Z" }, + { url = "https://files.pythonhosted.org/packages/ca/74/c3e9b64cef26a440828f5244bfaa6b763947de15f8332505db7e34434b46/aioesphomeapi-46.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:23e176f5f33940d2a28a5d23da48909406e75dbd142642c204245c6912302324", size = 673072, upload-time = "2026-10-14T22:03:46.631Z" }, + { url = "https://files.pythonhosted.org/packages/dc/1e/f59651d26e9e4b2a47c42c811855ddec792e2c19c2c5945c3702bf1900b9/aioesphomeapi-46.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1ee97f36c92510fe5df82cee39bddd07900a5c5d9c6c07a93fe94ea947e1117d", size = 654033, upload-time = "2026-10-14T22:03:48.577Z" }, + { url = "https://files.pythonhosted.org/packages/d4/89/e19f9154439730ce094ec32fa91569247e35f269ab4332dff98789d8e32a/aioesphomeapi-46.12.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:27ad1aa63ea9480d5fac71cb6b47e9f185c8aabed2e9b638e794578d215addd1", size = 791542, upload-time = "2026-10-14T22:03:50.569Z" }, + { url = "https://files.pythonhosted.org/packages/0e/2f/0e27256b4e6a2f226af48da581e40895cc7290f98eb8dd5d1f1854b65d40/aioesphomeapi-46.12.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c550f6a97d7d22c647fd62de67259b10762ac8bc4435e2d234fb041d63f55990", size = 734779, upload-time = "2026-10-14T22:03:52.491Z" }, + { url = "https://files.pythonhosted.org/packages/d8/28/79a484ca613a543d17590bca209758324f6af442e6df7f61e115c06d7302/aioesphomeapi-46.12.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2a930f49c694ed4cbe9c82992aca68a1ce67de6d237cc19503ba42f6cdcc8514", size = 716373, upload-time = "2026-10-14T22:03:54.712Z" }, + { url = "https://files.pythonhosted.org/packages/90/50/f4333706ba9fbce1beed85a6befbcf3983f423e05d2b3485833e6eb40921/aioesphomeapi-46.12.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6ab0e5a33ce952db0ab7928daaca3993075fa5317fc6725f8522e26349fed337", size = 766424, upload-time = "2026-10-14T22:03:56.679Z" }, + { url = "https://files.pythonhosted.org/packages/de/30/cbb5673606faa4de7fab5ed8b014ae5d0f509bbe4d8ace6a950ac1dd5e04/aioesphomeapi-46.12.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3571778cdaa47ec7cb29f012f3c5ca92168d00e9fadc9d38393d9c2c89d7ea08", size = 742843, upload-time = "2026-10-14T22:03:58.557Z" }, + { url = "https://files.pythonhosted.org/packages/f7/77/c43f5de192c57fad5d43a99b77e9be8bd7cf981d41b4070597c31bc9f05b/aioesphomeapi-46.12.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:de4f5b3d747c69bd6e7b28618bb96e8d69f16ff1992483507c13ad42ad9df731", size = 715039, upload-time = "2026-10-14T22:04:00.787Z" }, + { url = "https://files.pythonhosted.org/packages/f3/28/ef7168015b2cc1709735f13d25ae41d7e911e3a9fcc99ee8b2d00f04f60b/aioesphomeapi-46.12.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d119d0650f43c51e5e131da5896f94113d24cd4552161f5b11909b1a536427d0", size = 802428, upload-time = "2026-10-14T22:04:03.085Z" }, + { url = "https://files.pythonhosted.org/packages/ce/46/1947f7900b1ffc5be3ba15aff361fdf72fb729948c32e9b514d841ac8f13/aioesphomeapi-46.12.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:48a59e106addd93b768b06c287997e1c5479ee7f8f9e759ed3ba9bf371504700", size = 774747, upload-time = "2026-10-14T22:04:05.365Z" }, + { url = "https://files.pythonhosted.org/packages/32/e0/01b0544633cb1476a085565a38a077b53cfe8ee4dc6fb1e11a2966e445c2/aioesphomeapi-46.12.0-cp313-cp313-win32.whl", hash = "sha256:91f7f093bcbe09040d43012c6b5afd08f3f9371e310f25e3544afdd4dab1e08d", size = 547628, upload-time = "2026-10-14T22:04:07.42Z" }, + { url = "https://files.pythonhosted.org/packages/5e/78/6eb3dd156d02f035ab4654068ac6145c39f9b7cff04638be3c2b38bf3406/aioesphomeapi-46.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:63017a95653658e617ea27069e48bcee14b541000dd21da9bd95d1b0c0c3b7bc", size = 607718, upload-time = "2026-10-14T22:04:09.762Z" }, + { url = "https://files.pythonhosted.org/packages/23/d7/3e0322c57c18ea36d982ce2eee89479d0594529c5fafa49219073414ddbe/aioesphomeapi-46.12.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:43fe983cad5a39d5df1a3e9c161ae77151213220f96516f52f39ba45acf505c9", size = 676917, upload-time = "2026-10-14T22:04:11.986Z" }, + { url = "https://files.pythonhosted.org/packages/28/f4/56a74492f7073303dcfda591ab50059984b65b86a0a59ce3bb851fc07b9c/aioesphomeapi-46.12.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d1989c2182de0ca4262a73319a5aa15b2513849942c444309ff7c70e8759edee", size = 661094, upload-time = "2026-10-14T22:04:14.613Z" }, + { url = "https://files.pythonhosted.org/packages/61/c7/6e665c1deb2a5db5e714cda8d4d2dbf51c90eedce305accf066bbc1b102d/aioesphomeapi-46.12.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0e72201fe48e628c94d6a4e9f36ab3c4a6c34ebe4f98e9f136bcc38ed887a317", size = 793646, upload-time = "2026-10-14T22:04:16.606Z" }, + { url = "https://files.pythonhosted.org/packages/2f/c2/dbd4faf86686bfeedd24fb26b60ed28306b5738d863a4671d769ca34d926/aioesphomeapi-46.12.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f4906e871339d3bb6e299bbb32161d9b795ec22d8fca52c22bd89dc4f7ba64c2", size = 744440, upload-time = "2026-10-14T22:04:18.694Z" }, + { url = "https://files.pythonhosted.org/packages/f1/a4/87ffcba2f2464b324a72fdac17d6b61532b8bf58b7c243eaafdecf06d99f/aioesphomeapi-46.12.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:42aade99687b0b7eda018e0f70db98b97c0c77fa2bd98a75c67b43e8e5b6b889", size = 710123, upload-time = "2026-10-14T22:04:20.87Z" }, + { url = "https://files.pythonhosted.org/packages/b9/17/4f178423ecb165d5d42cdfc1ef0fcbddab63570ca422405880bf3d448bed/aioesphomeapi-46.12.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8fe70ec84860bbdc5e8787377c6ba39b8181259459e25f4079501f160329d1ca", size = 769624, upload-time = "2026-10-14T22:04:23.185Z" }, + { url = "https://files.pythonhosted.org/packages/01/d2/f901878e1e1a9795994f2dbf1e6a689bc33fc99d34761612ded20a580222/aioesphomeapi-46.12.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d6cca07db9dadea8f6b91c4ccbaf14f408489af08bb0f74ec4acd22e80c7ff28", size = 752816, upload-time = "2026-10-14T22:04:25.364Z" }, + { url = "https://files.pythonhosted.org/packages/48/7b/41e049745926bce14501f27af2f519f25ee1d1f074203bedac586b0284a3/aioesphomeapi-46.12.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:77bc4dfd9afc74cbd40c6af57bb6e58dcb756fbc06750255087a2ca5526e090f", size = 706874, upload-time = "2026-10-14T22:04:27.592Z" }, + { url = "https://files.pythonhosted.org/packages/97/65/d2943dfc7e4250ef2db806467fd125dd8b9eff6a525240f93d57f6efd85c/aioesphomeapi-46.12.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:61ac42e0c6405482f183fb422382bc90714c810c289ded16d7cf953b245d96ef", size = 804899, upload-time = "2026-10-14T22:04:29.893Z" }, + { url = "https://files.pythonhosted.org/packages/09/04/8f83d4cb46b702f331594b8b1c89e5feb5b5d3e912e274f66941ad7eb859/aioesphomeapi-46.12.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f24c20c69db60123d64083436687b3c5c8bc92d561f763bbe2f584d38bbd5c76", size = 778551, upload-time = "2026-10-14T22:04:32.388Z" }, + { url = "https://files.pythonhosted.org/packages/77/4c/7804ef61912fdc30297723e49aa1964d4822aa31ecb3071b8df52bfb3892/aioesphomeapi-46.12.0-cp314-cp314-win32.whl", hash = "sha256:107366b9094753eb09b250200b6e321b8e7d3a83ce825d4a6e98691344c51263", size = 557882, upload-time = "2026-10-14T22:04:34.477Z" }, + { url = "https://files.pythonhosted.org/packages/0c/a8/b4af55415c83c166da155eb14da36501e231416f0b06870549a402d7296d/aioesphomeapi-46.12.0-cp314-cp314-win_amd64.whl", hash = "sha256:3f79adad054675e0fd46941cdd960fd6af4d73e5df91a75dba9fc76f9c412c1b", size = 621291, upload-time = "2026-10-14T22:04:36.62Z" }, + { url = "https://files.pythonhosted.org/packages/c7/10/ecf2fbd77725e2af32845552940db3c5dad7e2786fd9f69f583d385ff0f8/aioesphomeapi-46.12.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:84192fbc1163597ea8a55baabb878355a19631e699b3f923e3bf681d5d891e55", size = 712433, upload-time = "2026-10-14T22:04:38.899Z" }, + { url = "https://files.pythonhosted.org/packages/75/c3/fb1eb1ce49658f8ee4e53189369464be4ad217aef82aaeda687c67047608/aioesphomeapi-46.12.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:698c32ca46abdbe978cd4296b15dade174e89bf3aa9d322a8f2adef605c1dbe8", size = 706797, upload-time = "2026-10-14T22:04:41.168Z" }, + { url = "https://files.pythonhosted.org/packages/2b/5d/6ed26045bf83300a5f65655333946ac78b9637ba6ea40a21ab59545abdc7/aioesphomeapi-46.12.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:baabec6632afe8ab139a1ef993afad270adc30f25d98b8880d2e1ebca1dd66dc", size = 796437, upload-time = "2026-10-14T22:04:43.495Z" }, + { url = "https://files.pythonhosted.org/packages/28/18/e78f5cab3ea50200e9ded3a6b94a526227e9b5568dc6a903ff570c605cb1/aioesphomeapi-46.12.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:20ee1770cdf90ce565f79d129a3f4c7c999608f284542e01168b614587018cac", size = 763477, upload-time = "2026-10-14T22:04:46.055Z" }, + { url = "https://files.pythonhosted.org/packages/55/28/64efd33ab9fdbe4de7af71ea645b082df2c545a47d64392f2584384eba3b/aioesphomeapi-46.12.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:868aad5a43ba7984f33dfaae617a225e29a54fd39b215e331475453744e334f1", size = 704526, upload-time = "2026-10-14T22:04:48.507Z" }, + { url = "https://files.pythonhosted.org/packages/89/4a/6484670180d681dbf642567ef4712d363d255873604319911c89f8f32294/aioesphomeapi-46.12.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3eff757a4a29fd4855f41bafd9990fa91eb9dc578f27e65af5a8f8dc041420e9", size = 778327, upload-time = "2026-10-14T22:04:51.037Z" }, + { url = "https://files.pythonhosted.org/packages/76/91/8a0af3757e88bdf1cf30c53c4a5885023e610725478fbc0799e3bea82020/aioesphomeapi-46.12.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5f1e853579a960a16fd62cf217fe12d30b973870223b8a28d77ed63d32504640", size = 772172, upload-time = "2026-10-14T22:04:53.414Z" }, + { url = "https://files.pythonhosted.org/packages/2c/fb/ed5e35a909730508bf166a7fabd145124b3ba9d37628341074e77cfc0290/aioesphomeapi-46.12.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:fd3c5ca82359fc90257315b5d0acc38735e8f00fd5b5c7fbce77fcff7e43708f", size = 723067, upload-time = "2026-10-14T22:04:56.445Z" }, + { url = "https://files.pythonhosted.org/packages/9c/98/3eb9bc9d7c39e880ab1c745b3a36a21a973388badde4970ca269e3a98479/aioesphomeapi-46.12.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:131f92a5dd144c8339871e06c1e7bc6d057a4853d9d9f6d467aa39c2a9c7f266", size = 809175, upload-time = "2026-10-14T22:04:58.72Z" }, + { url = "https://files.pythonhosted.org/packages/c4/bc/6e62cb505818d8c4473b7840a649fffdf42d3a4cfc13bf0d31bb2bbe1377/aioesphomeapi-46.12.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:15910789297f400ff330557c45d065abc46aa28eb58e8f060c64ba0f7a5066bc", size = 787288, upload-time = "2026-10-14T22:05:01.011Z" }, + { url = "https://files.pythonhosted.org/packages/74/51/35c0ebc5704b9809742d02a509a246cc06fd99c7044e077726f96367aed2/aioesphomeapi-46.12.0-cp314-cp314t-win32.whl", hash = "sha256:29b9448e5932bbf002d51de6f62830a24ae702f019e8127ce9dbda9ef31f5024", size = 602239, upload-time = "2026-10-14T22:05:03.748Z" }, + { url = "https://files.pythonhosted.org/packages/7d/31/5c44bd183fa8b1694f13293d5ac9971ed63392cd72dbcb8a37b6d4f59490/aioesphomeapi-46.12.0-cp314-cp314t-win_amd64.whl", hash = "sha256:2896a71642b30286033f30515b5adb1cab8b0e3e6eb9bf91a0b935489c1089ea", size = 665947, upload-time = "2026-10-14T22:05:06.105Z" }, + { url = "https://files.pythonhosted.org/packages/d2/66/18f20a2ab84f34b4424c378828eef25127efc4403220eca93be7a04e8b8a/aioesphomeapi-46.12.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:1102724d500c77e0d79a77976ae4d8381e142e21809e20e902e8fccbe1604443", size = 674821, upload-time = "2026-10-14T22:05:08.674Z" }, + { url = "https://files.pythonhosted.org/packages/86/6d/3371473193738b4187425fb2a6990f98712b7c8ffa50161c2066a39fe2c4/aioesphomeapi-46.12.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:663b32a2a39de136f5d5af203063abf894fda6d93d19beaf374aa39fd965940a", size = 658164, upload-time = "2026-10-14T22:05:11.544Z" }, + { url = "https://files.pythonhosted.org/packages/d9/13/9af504e84b12b88d160841c7eacca659f168bf6d10dbd3858f93168f88a9/aioesphomeapi-46.12.0-cp315-cp315-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:96f786c31b735a111410da89bc476f36cc8bcfc638d95756e356bcfe6d35754a", size = 749226, upload-time = "2026-10-14T22:05:14.071Z" }, + { url = "https://files.pythonhosted.org/packages/27/93/c369ef48a887516ff705a5803739ea0602aae2c8d5b680ec8a17c6488b72/aioesphomeapi-46.12.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d46be3ef748dddac04a2fa5454b7c8b0c82393442c43586871c2880be24d21ff", size = 745352, upload-time = "2026-10-14T22:05:16.799Z" }, + { url = "https://files.pythonhosted.org/packages/a3/66/50e58ba5fa31e01b68076133b7d7ab4939ef63b8a8db007b7c1f9ed7cc89/aioesphomeapi-46.12.0-cp315-cp315-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4eaa76b96cdeb11715aba516718a4174595071be5816247d52a738d3e54bbab5", size = 750253, upload-time = "2026-10-14T22:05:19.297Z" }, + { url = "https://files.pythonhosted.org/packages/6f/1d/4ade87faf24fda61e056d27fa215cc41584e0a3ac0f248c59361ac04bf03/aioesphomeapi-46.12.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23c7a96b178ead810c893a5f80a85e4551adf686d9e935653b9e30801ad62f62", size = 773387, upload-time = "2026-10-14T22:05:21.911Z" }, + { url = "https://files.pythonhosted.org/packages/83/d9/8676e5eef69b28c01f7f71bd3db7a4c687326eafc8a81521da55103bf103/aioesphomeapi-46.12.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:214e614b8a2b3cac5552c68c6d915b3317ba61ce608d81c3e4b608bb4d4d2680", size = 753711, upload-time = "2026-10-14T22:05:24.396Z" }, + { url = "https://files.pythonhosted.org/packages/50/de/e16c3b6482da06df1982d032946114a250145cf88daf1f40b4df3b31d36d/aioesphomeapi-46.12.0-cp315-cp315-musllinux_1_2_armv7l.whl", hash = "sha256:c845de26e17ba26ddc429aa3588de808ad841dbf955592225d175183fb316e95", size = 743566, upload-time = "2026-10-14T22:05:26.889Z" }, + { url = "https://files.pythonhosted.org/packages/b9/9d/ff7364655451517675c6c1335dd17784996397206134f1af7829234c4d95/aioesphomeapi-46.12.0-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:6e718c570f09dc9a5c65f3628217eb3d2c57d6c27512d303d7b5d8ff6c3fd80f", size = 761203, upload-time = "2026-10-14T22:05:29.351Z" }, + { url = "https://files.pythonhosted.org/packages/3d/ce/d48bdc19f43d9d470fb04c53a0f59cbc92ca72fe9562b8becea561f80542/aioesphomeapi-46.12.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:5aebf0080c6de9304e1e47f29abe6a8df649600ca16dcfded289ca2c27c5ef29", size = 780754, upload-time = "2026-10-14T22:05:32.179Z" }, + { url = "https://files.pythonhosted.org/packages/26/60/c7a47888fbead784d05825d504a20cc4efd4c01ec6a4c3566f14302ad816/aioesphomeapi-46.12.0-cp315-cp315-win32.whl", hash = "sha256:f8ccd49056038b0023ef9112339c7ad2ba2773a58d4be14b28de912a6e52e700", size = 557265, upload-time = "2026-10-14T22:05:34.885Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ce/d1984b672a4aa6ae1f521db09b7afb8348268b34ee99c3002aec90c35ade/aioesphomeapi-46.12.0-cp315-cp315-win_amd64.whl", hash = "sha256:d5cc4d48583a81f02ed8f8ba2f0d6c1190fd8222bb4aebfe06cbab8a7b551a2c", size = 620023, upload-time = "2026-10-14T22:05:37.325Z" }, + { url = "https://files.pythonhosted.org/packages/50/1a/132d90287d5d56036e5673dbc7c9c8264c51a84ca7aebe0b2d1a96c03820/aioesphomeapi-46.12.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:a8aeaaa8b87d45a54465b923a234e055f5248f1d4cd17f708c9b73d1c62cc371", size = 706259, upload-time = "2026-10-14T22:05:39.837Z" }, + { url = "https://files.pythonhosted.org/packages/4d/8b/060ef4acb1eeedbc5d837a677a0eddeab7e61d7c32af2d93cf60bc893f58/aioesphomeapi-46.12.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:7060cc5222c5f33375a6305f44f08799b1d0acb2f197471c311736eaebfbc3bd", size = 701693, upload-time = "2026-10-14T22:05:42.42Z" }, ] [[package]] @@ -926,12 +915,12 @@ version = "0.22.4" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.15' and platform_machine != 'x86_64') or (python_full_version >= '3.15' and sys_platform != 'darwin')", + "python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine != 'x86_64') or (python_full_version >= '3.12' and python_full_version < '3.15' and sys_platform != 'darwin')", + "python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine != 'x86_64') or (python_full_version >= '3.11.5' and python_full_version < '3.12' and sys_platform != 'darwin')", + "python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine != 'x86_64') or (python_full_version >= '3.11' and python_full_version < '3.11.5' and sys_platform != 'darwin')", ] sdist = { url = "https://files.pythonhosted.org/packages/ae/b6/03bb70946330e88ffec97aefd3ea75ba575cb2e762061e0e62a213befee8/docutils-0.22.4.tar.gz", hash = "sha256:4db53b1fde9abecbb74d91230d32ab626d94f6badfc575d6db9194a49df29968", size = 2291750, upload-time = "2025-12-18T19:00:26.443Z" } @@ -1233,12 +1222,12 @@ version = "4.2.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.15' and platform_machine != 'x86_64') or (python_full_version >= '3.15' and sys_platform != 'darwin')", + "python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine != 'x86_64') or (python_full_version >= '3.12' and python_full_version < '3.15' and sys_platform != 'darwin')", + "python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine != 'x86_64') or (python_full_version >= '3.11.5' and python_full_version < '3.12' and sys_platform != 'darwin')", + "python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine != 'x86_64') or (python_full_version >= '3.11' and python_full_version < '3.11.5' and sys_platform != 'darwin')", ] dependencies = [ @@ -1525,12 +1514,12 @@ version = "5.1.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.15' and platform_machine != 'x86_64') or (python_full_version >= '3.15' and sys_platform != 'darwin')", + "python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine != 'x86_64') or (python_full_version >= '3.12' and python_full_version < '3.15' and sys_platform != 'darwin')", + "python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine != 'x86_64') or (python_full_version >= '3.11.5' and python_full_version < '3.12' and sys_platform != 'darwin')", + "python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine != 'x86_64') or (python_full_version >= '3.11' and python_full_version < '3.11.5' and sys_platform != 'darwin')", ] dependencies = [ @@ -1595,12 +1584,12 @@ version = "4.13.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.15' and platform_machine != 'x86_64') or (python_full_version >= '3.15' and sys_platform != 'darwin')", + "python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine != 'x86_64') or (python_full_version >= '3.12' and python_full_version < '3.15' and sys_platform != 'darwin')", + "python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine != 'x86_64') or (python_full_version >= '3.11.5' and python_full_version < '3.12' and sys_platform != 'darwin')", + "python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine != 'x86_64') or (python_full_version >= '3.11' and python_full_version < '3.11.5' and sys_platform != 'darwin')", ] sdist = { url = "https://files.pythonhosted.org/packages/80/a8/66d45abadff219e36e2a824181b8f6a67e7ed4572934d6252c71c29d5731/platformdirs-4.13.0.tar.gz", hash = "sha256:1aa0b0d3f224c1f07c295121e312a5a24a180d6ae5a8425ea1784b3e3863e9c0", size = 61094, upload-time = "2026-10-11T02:05:24.109Z" } @@ -1997,7 +1986,7 @@ docs = [ [package.metadata] requires-dist = [ - { name = "aioesphomeapi", marker = "python_full_version >= '3.11' and extra == 'esphome'", specifier = ">=46.5.0" }, + { name = "aioesphomeapi", marker = "python_full_version >= '3.11' and extra == 'esphome'", specifier = ">=46.12.0" }, { name = "async-timeout", marker = "python_full_version < '3.11'", specifier = ">=3.0.0" }, { name = "pywin32", marker = "sys_platform == 'win32'" }, { name = "typing-extensions", specifier = ">=4.13.0" }, @@ -2006,7 +1995,7 @@ provides-extras = ["esphome"] [package.metadata.requires-dev] dev = [ - { name = "aioesphomeapi", marker = "python_full_version >= '3.11'", specifier = ">=46.5.0" }, + { name = "aioesphomeapi", marker = "python_full_version >= '3.11'", specifier = ">=46.12.0" }, { name = "async-timeout", specifier = ">=5.0.1" }, { name = "codespell", specifier = ">=2.4.2" }, { name = "mypy", specifier = ">=2.1.0" }, @@ -2089,10 +2078,10 @@ version = "3.0.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.15' and platform_machine != 'x86_64') or (python_full_version >= '3.15' and sys_platform != 'darwin')", + "python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine != 'x86_64') or (python_full_version >= '3.12' and python_full_version < '3.15' and sys_platform != 'darwin')", + "python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine != 'x86_64') or (python_full_version >= '3.11.5' and python_full_version < '3.12' and sys_platform != 'darwin')", ] sdist = { url = "https://files.pythonhosted.org/packages/5e/77/2dcfa996b01702ab8fd0763d84098f6a640d6162a328f1c04c2697579a1a/soupsieve-3.0.3.tar.gz", hash = "sha256:7dcf6022eed0399eb9934a75e020148f7a2024c37b7dfcd3cf2c5505d69c364e", size = 115923, upload-time = "2026-10-12T13:21:17.696Z" } @@ -2137,8 +2126,8 @@ version = "9.0.4" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine != 'x86_64') or (python_full_version >= '3.11.5' and python_full_version < '3.12' and sys_platform != 'darwin')", + "python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine != 'x86_64') or (python_full_version >= '3.11' and python_full_version < '3.11.5' and sys_platform != 'darwin')", ] dependencies = [ @@ -2171,8 +2160,8 @@ version = "9.1.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.15' and platform_machine != 'x86_64') or (python_full_version >= '3.15' and sys_platform != 'darwin')", + "python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine != 'x86_64') or (python_full_version >= '3.12' and python_full_version < '3.15' and sys_platform != 'darwin')", ] dependencies = [ @@ -2225,12 +2214,12 @@ version = "2025.8.25" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.15' and platform_machine != 'x86_64') or (python_full_version >= '3.15' and sys_platform != 'darwin')", + "python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine != 'x86_64') or (python_full_version >= '3.12' and python_full_version < '3.15' and sys_platform != 'darwin')", + "python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine != 'x86_64') or (python_full_version >= '3.11.5' and python_full_version < '3.12' and sys_platform != 'darwin')", + "python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine != 'x86_64') or (python_full_version >= '3.11' and python_full_version < '3.11.5' and sys_platform != 'darwin')", ] dependencies = [ @@ -2282,12 +2271,12 @@ version = "0.7.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.15' and platform_machine != 'x86_64') or (python_full_version >= '3.15' and sys_platform != 'darwin')", + "python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine != 'x86_64') or (python_full_version >= '3.12' and python_full_version < '3.15' and sys_platform != 'darwin')", + "python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine != 'x86_64') or (python_full_version >= '3.11.5' and python_full_version < '3.12' and sys_platform != 'darwin')", + "python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine != 'x86_64') or (python_full_version >= '3.11' and python_full_version < '3.11.5' and sys_platform != 'darwin')", ] dependencies = [ @@ -2721,12 +2710,12 @@ version = "17.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.15' and platform_machine != 'x86_64') or (python_full_version >= '3.15' and sys_platform != 'darwin')", + "python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.12' and python_full_version < '3.15' and platform_machine != 'x86_64') or (python_full_version >= '3.12' and python_full_version < '3.15' and sys_platform != 'darwin')", + "python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.11.5' and python_full_version < '3.12' and platform_machine != 'x86_64') or (python_full_version >= '3.11.5' and python_full_version < '3.12' and sys_platform != 'darwin')", + "python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.11' and python_full_version < '3.11.5' and platform_machine != 'x86_64') or (python_full_version >= '3.11' and python_full_version < '3.11.5' and sys_platform != 'darwin')", ] sdist = { url = "https://files.pythonhosted.org/packages/01/89/3f825ab71c242fffb62ea8fe638741c290f62f8d7aadf8125ff897747af3/websockets-17.2.tar.gz", hash = "sha256:36c2fb94c990cc2545143b12690e2de6c16300f9dbe5b4f33fa300cf57dc8792", size = 188355, upload-time = "2026-10-03T14:56:53.5Z" } From 60c408434720c9f4eaee38e595acc40586c6e48c Mon Sep 17 00:00:00 2001 From: puddly <32534428+puddly@users.noreply.github.com> Date: Wed, 14 Oct 2026 22:13:16 +0000 Subject: [PATCH 6/6] Fix ESPHome host component compilation --- .../serialx_host_overrides/serialx_host_overrides.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/esphome/external_components/serialx_host_overrides/serialx_host_overrides.cpp b/tests/esphome/external_components/serialx_host_overrides/serialx_host_overrides.cpp index 02c451e..23d4245 100644 --- a/tests/esphome/external_components/serialx_host_overrides/serialx_host_overrides.cpp +++ b/tests/esphome/external_components/serialx_host_overrides/serialx_host_overrides.cpp @@ -3,6 +3,7 @@ #include "serialx_host_overrides.h" #include "esphome/components/api/api_server.h" +#include "esphome/core/alloc_helpers.h" #include "esphome/core/helpers.h" #include "esphome/core/log.h"