mirror of
https://github.com/home-assistant/core.git
synced 2026-08-24 02:24:51 -05:00
Bump py-opendisplay to 7.15.0 (#177405)
This commit is contained in:
@@ -142,7 +142,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: OpenDisplayConfigEntry)
|
||||
connections={(CONNECTION_BLUETOOTH, address)},
|
||||
manufacturer=manufacturer.manufacturer_name,
|
||||
model=f"{size} {color_scheme}",
|
||||
sw_version=f"{fw['major']}.{fw['minor']}",
|
||||
sw_version=f"{fw['major']}.{fw['minor']}.{fw['patch']}",
|
||||
hw_version=(
|
||||
f"{manufacturer.board_type_name or manufacturer.board_type}"
|
||||
f" rev. {manufacturer.board_revision}"
|
||||
|
||||
@@ -8,7 +8,19 @@ from homeassistant.core import HomeAssistant
|
||||
|
||||
from . import OpenDisplayConfigEntry
|
||||
|
||||
TO_REDACT = {"ssid", "password", "server_url"}
|
||||
TO_REDACT = {
|
||||
"ssid",
|
||||
"password",
|
||||
"server_url",
|
||||
"serial_number",
|
||||
"friendly_name",
|
||||
"device_location",
|
||||
"device_id",
|
||||
"custom_string_1",
|
||||
"custom_string_2",
|
||||
"custom_string_3",
|
||||
"encryption_key",
|
||||
}
|
||||
|
||||
|
||||
def _asdict(obj: Any) -> Any:
|
||||
@@ -33,6 +45,7 @@ async def async_get_config_entry_diagnostics(
|
||||
"firmware": {
|
||||
"major": fw["major"],
|
||||
"minor": fw["minor"],
|
||||
"patch": fw["patch"],
|
||||
"sha": fw["sha"],
|
||||
},
|
||||
"is_flex": runtime.is_flex,
|
||||
|
||||
@@ -15,5 +15,5 @@
|
||||
"iot_class": "local_push",
|
||||
"loggers": ["opendisplay"],
|
||||
"quality_scale": "silver",
|
||||
"requirements": ["py-opendisplay==7.2.3"]
|
||||
"requirements": ["py-opendisplay==7.15.0"]
|
||||
}
|
||||
|
||||
Generated
+1
-1
@@ -1956,7 +1956,7 @@ py-nightscout==1.2.2
|
||||
py-nymta==0.4.0
|
||||
|
||||
# homeassistant.components.opendisplay
|
||||
py-opendisplay==7.2.3
|
||||
py-opendisplay==7.15.0
|
||||
|
||||
# homeassistant.components.schluter
|
||||
py-schluter==0.1.7
|
||||
|
||||
@@ -7,10 +7,12 @@ from opendisplay import (
|
||||
BinaryInputs,
|
||||
BoardManufacturer,
|
||||
ColorScheme,
|
||||
DataExtended,
|
||||
DisplayConfig,
|
||||
GlobalConfig,
|
||||
ManufacturerData,
|
||||
PowerOption,
|
||||
SecurityConfig,
|
||||
SystemConfig,
|
||||
)
|
||||
|
||||
@@ -28,8 +30,8 @@ TEST_ADDRESS = "AA:BB:CC:DD:EE:FF"
|
||||
TEST_TITLE = "OpenDisplay 1234"
|
||||
ENCRYPTION_KEY = "aabbccddee112233aabbccddee112233" # 32 hex chars = 16 bytes
|
||||
|
||||
# Firmware version response: major=1, minor=2, sha="abc123"
|
||||
FIRMWARE_VERSION = {"major": 1, "minor": 2, "sha": "abc123"}
|
||||
# Firmware version response: major=1, minor=2, patch=3, sha="abc123"
|
||||
FIRMWARE_VERSION = {"major": 1, "minor": 2, "patch": 3, "sha": "abc123"}
|
||||
|
||||
DEVICE_CONFIG = GlobalConfig(
|
||||
system=SystemConfig(
|
||||
@@ -43,7 +45,7 @@ DEVICE_CONFIG = GlobalConfig(
|
||||
manufacturer_id=BoardManufacturer.SEEED,
|
||||
board_type=1,
|
||||
board_revision=0,
|
||||
reserved=b"\x00" * 18,
|
||||
reserved=b"\x00" * 6,
|
||||
),
|
||||
power=PowerOption(
|
||||
power_mode=0,
|
||||
@@ -58,7 +60,12 @@ DEVICE_CONFIG = GlobalConfig(
|
||||
voltage_scaling_factor=0,
|
||||
deep_sleep_current_ua=0,
|
||||
deep_sleep_time_seconds=0,
|
||||
reserved=b"\x00" * 12,
|
||||
charge_enable_pin=0xFF,
|
||||
charge_state_pin=0xFF,
|
||||
charger_flags=0,
|
||||
min_wake_time_seconds=0,
|
||||
screen_timeout_seconds=0,
|
||||
reserved=b"\x00" * 4,
|
||||
),
|
||||
displays=[
|
||||
DisplayConfig(
|
||||
@@ -85,6 +92,25 @@ DEVICE_CONFIG = GlobalConfig(
|
||||
reserved=b"\x00" * 33,
|
||||
)
|
||||
],
|
||||
security_config=SecurityConfig(
|
||||
encryption_enabled=1,
|
||||
encryption_key=bytes.fromhex(ENCRYPTION_KEY),
|
||||
session_timeout_seconds=0,
|
||||
flags=0,
|
||||
reset_pin=0xFF,
|
||||
reserved=b"\x00" * 43,
|
||||
),
|
||||
data_extended=DataExtended.from_strings(
|
||||
manufacturer_name="Seeed Studio",
|
||||
model_name="XIAO EN04(NRF52840)",
|
||||
serial_number="SN-0123456789",
|
||||
friendly_name="Living Room Tag",
|
||||
device_location="Living Room",
|
||||
device_id="device-1234",
|
||||
custom_string_1="custom one",
|
||||
custom_string_2="custom two",
|
||||
custom_string_3="custom three",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -8,6 +8,17 @@
|
||||
]),
|
||||
'data_buses': list([
|
||||
]),
|
||||
'data_extended': dict({
|
||||
'custom_string_1': '**REDACTED**',
|
||||
'custom_string_2': '**REDACTED**',
|
||||
'custom_string_3': '**REDACTED**',
|
||||
'device_id': '**REDACTED**',
|
||||
'device_location': '**REDACTED**',
|
||||
'friendly_name': '**REDACTED**',
|
||||
'manufacturer_name': '53656565642053747564696f0000000000000000000000000000000000000000',
|
||||
'model_name': '5849414f20454e3034284e524635323834302900000000000000000000000000',
|
||||
'serial_number': '**REDACTED**',
|
||||
}),
|
||||
'displays': list([
|
||||
dict({
|
||||
'active_height_mm': 29,
|
||||
@@ -33,6 +44,8 @@
|
||||
'transmission_modes': 1,
|
||||
}),
|
||||
]),
|
||||
'flash_configs': list([
|
||||
]),
|
||||
'leds': list([
|
||||
]),
|
||||
'loaded': False,
|
||||
@@ -40,25 +53,43 @@
|
||||
'board_revision': 0,
|
||||
'board_type': 1,
|
||||
'manufacturer_id': 1,
|
||||
'reserved': '000000000000000000000000000000000000',
|
||||
'reserved': '000000000000',
|
||||
'simple_config_configured_at': 0,
|
||||
'simple_config_display_index': 0,
|
||||
'simple_config_driver_index': 0,
|
||||
'simple_config_power_index': 0,
|
||||
}),
|
||||
'minor_version': 0,
|
||||
'nfc_configs': list([
|
||||
]),
|
||||
'power': dict({
|
||||
'battery_capacity_mah': '000000',
|
||||
'battery_sense_enable_pin': 255,
|
||||
'battery_sense_flags': 0,
|
||||
'battery_sense_pin': 255,
|
||||
'capacity_estimator': 0,
|
||||
'charge_enable_pin': 255,
|
||||
'charge_state_pin': 255,
|
||||
'charger_flags': 0,
|
||||
'deep_sleep_current_ua': 0,
|
||||
'deep_sleep_time_seconds': 0,
|
||||
'min_wake_time_seconds': 0,
|
||||
'power_mode': 0,
|
||||
'reserved': '000000000000000000000000',
|
||||
'reserved': '00000000',
|
||||
'screen_timeout_seconds': 0,
|
||||
'sleep_flags': 0,
|
||||
'sleep_timeout_ms': 0,
|
||||
'tx_power': 0,
|
||||
'voltage_scaling_factor': 0,
|
||||
}),
|
||||
'security_config': None,
|
||||
'security_config': dict({
|
||||
'encryption_enabled': 1,
|
||||
'encryption_key': '**REDACTED**',
|
||||
'flags': 0,
|
||||
'reserved': '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
|
||||
'reset_pin': 255,
|
||||
'session_timeout_seconds': 0,
|
||||
}),
|
||||
'sensors': list([
|
||||
]),
|
||||
'system': dict({
|
||||
@@ -78,6 +109,7 @@
|
||||
'firmware': dict({
|
||||
'major': 1,
|
||||
'minor': 2,
|
||||
'patch': 3,
|
||||
'sha': 'abc123',
|
||||
}),
|
||||
'is_flex': True,
|
||||
|
||||
@@ -145,6 +145,7 @@ async def test_setup_device_registry_fields(
|
||||
)
|
||||
assert len(devices) == 1
|
||||
device = devices[0]
|
||||
assert device.sw_version == "1.2.3"
|
||||
assert (device.hw_version is not None) == expect_hw_version
|
||||
assert (device.configuration_url is not None) == expect_config_url
|
||||
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
|
||||
from collections.abc import Awaitable, Callable
|
||||
from copy import deepcopy
|
||||
from dataclasses import replace
|
||||
from datetime import timedelta
|
||||
import time
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
from habluetooth import CONNECTABLE_FALLBACK_MAXIMUM_STALE_ADVERTISEMENT_SECONDS
|
||||
from opendisplay import voltage_to_percent
|
||||
from opendisplay.models.config import PowerOption
|
||||
from opendisplay.models.enums import CapacityEstimator, PowerMode
|
||||
import pytest
|
||||
from syrupy.assertion import SnapshotAssertion
|
||||
@@ -78,21 +78,10 @@ async def test_sensor_entities_battery_device(
|
||||
) -> None:
|
||||
"""Test sensor entities for a battery-powered Flex device with LI_ION chemistry."""
|
||||
device_config = deepcopy(DEVICE_CONFIG)
|
||||
power = device_config.power
|
||||
device_config.power = PowerOption(
|
||||
device_config.power = replace(
|
||||
device_config.power,
|
||||
power_mode=PowerMode.BATTERY,
|
||||
battery_capacity_mah=power.battery_capacity_mah,
|
||||
sleep_timeout_ms=power.sleep_timeout_ms,
|
||||
tx_power=power.tx_power,
|
||||
sleep_flags=power.sleep_flags,
|
||||
battery_sense_pin=power.battery_sense_pin,
|
||||
battery_sense_enable_pin=power.battery_sense_enable_pin,
|
||||
battery_sense_flags=power.battery_sense_flags,
|
||||
capacity_estimator=1, # LI_ION
|
||||
voltage_scaling_factor=power.voltage_scaling_factor,
|
||||
deep_sleep_current_ua=power.deep_sleep_current_ua,
|
||||
deep_sleep_time_seconds=power.deep_sleep_time_seconds,
|
||||
reserved=power.reserved,
|
||||
)
|
||||
mock_opendisplay_device.config = device_config
|
||||
|
||||
@@ -199,21 +188,10 @@ async def test_battery_sensor_defaults_to_liion_when_capacity_estimator_unset(
|
||||
) -> None:
|
||||
"""Test battery % uses LI_ION when capacity_estimator is 0."""
|
||||
device_config = deepcopy(DEVICE_CONFIG)
|
||||
power = device_config.power
|
||||
device_config.power = PowerOption(
|
||||
device_config.power = replace(
|
||||
device_config.power,
|
||||
power_mode=PowerMode.BATTERY,
|
||||
battery_capacity_mah=power.battery_capacity_mah,
|
||||
sleep_timeout_ms=power.sleep_timeout_ms,
|
||||
tx_power=power.tx_power,
|
||||
sleep_flags=power.sleep_flags,
|
||||
battery_sense_pin=power.battery_sense_pin,
|
||||
battery_sense_enable_pin=power.battery_sense_enable_pin,
|
||||
battery_sense_flags=power.battery_sense_flags,
|
||||
capacity_estimator=0, # not configured — defaults to LI_ION in sensor.py
|
||||
voltage_scaling_factor=power.voltage_scaling_factor,
|
||||
deep_sleep_current_ua=power.deep_sleep_current_ua,
|
||||
deep_sleep_time_seconds=power.deep_sleep_time_seconds,
|
||||
reserved=power.reserved,
|
||||
)
|
||||
mock_opendisplay_device.config = device_config
|
||||
|
||||
|
||||
Reference in New Issue
Block a user