mirror of
https://github.com/home-assistant/core.git
synced 2025-07-18 02:37:08 +00:00
Handle invalid device type in onewire (#116153)
* Make device type optional in onewire * Add comment
This commit is contained in:
parent
97d151d1c6
commit
c1572d9600
@ -117,7 +117,7 @@ def get_entities(onewire_hub: OneWireHub) -> list[OneWireBinarySensor]:
|
|||||||
device_type = device.type
|
device_type = device.type
|
||||||
device_info = device.device_info
|
device_info = device.device_info
|
||||||
device_sub_type = "std"
|
device_sub_type = "std"
|
||||||
if "EF" in family:
|
if device_type and "EF" in family:
|
||||||
device_sub_type = "HobbyBoard"
|
device_sub_type = "HobbyBoard"
|
||||||
family = device_type
|
family = device_type
|
||||||
|
|
||||||
|
@ -16,4 +16,4 @@ class OWDeviceDescription:
|
|||||||
family: str
|
family: str
|
||||||
id: str
|
id: str
|
||||||
path: str
|
path: str
|
||||||
type: str
|
type: str | None
|
||||||
|
@ -45,7 +45,7 @@ DEVICE_MANUFACTURER = {
|
|||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def _is_known_device(device_family: str, device_type: str) -> bool:
|
def _is_known_device(device_family: str, device_type: str | None) -> bool:
|
||||||
"""Check if device family/type is known to the library."""
|
"""Check if device family/type is known to the library."""
|
||||||
if device_family in ("7E", "EF"): # EDS or HobbyBoard
|
if device_family in ("7E", "EF"): # EDS or HobbyBoard
|
||||||
return device_type in DEVICE_SUPPORT[device_family]
|
return device_type in DEVICE_SUPPORT[device_family]
|
||||||
@ -144,11 +144,15 @@ class OneWireHub:
|
|||||||
|
|
||||||
return devices
|
return devices
|
||||||
|
|
||||||
def _get_device_type(self, device_path: str) -> str:
|
def _get_device_type(self, device_path: str) -> str | None:
|
||||||
"""Get device model."""
|
"""Get device model."""
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
assert self.owproxy
|
assert self.owproxy
|
||||||
device_type = self.owproxy.read(f"{device_path}type").decode()
|
try:
|
||||||
|
device_type = self.owproxy.read(f"{device_path}type").decode()
|
||||||
|
except protocol.ProtocolError as exc:
|
||||||
|
_LOGGER.debug("Unable to read `%stype`: %s", device_path, exc)
|
||||||
|
return None
|
||||||
_LOGGER.debug("read `%stype`: %s", device_path, device_type)
|
_LOGGER.debug("read `%stype`: %s", device_path, device_type)
|
||||||
if device_type == "EDS":
|
if device_type == "EDS":
|
||||||
device_type = self.owproxy.read(f"{device_path}device_type").decode()
|
device_type = self.owproxy.read(f"{device_path}device_type").decode()
|
||||||
|
@ -377,10 +377,10 @@ def get_entities(
|
|||||||
device_info = device.device_info
|
device_info = device.device_info
|
||||||
device_sub_type = "std"
|
device_sub_type = "std"
|
||||||
device_path = device.path
|
device_path = device.path
|
||||||
if "EF" in family:
|
if device_type and "EF" in family:
|
||||||
device_sub_type = "HobbyBoard"
|
device_sub_type = "HobbyBoard"
|
||||||
family = device_type
|
family = device_type
|
||||||
elif "7E" in family:
|
elif device_type and "7E" in family:
|
||||||
device_sub_type = "EDS"
|
device_sub_type = "EDS"
|
||||||
family = device_type
|
family = device_type
|
||||||
elif "A6" in family:
|
elif "A6" in family:
|
||||||
|
@ -178,7 +178,7 @@ def get_entities(onewire_hub: OneWireHub) -> list[OneWireSwitch]:
|
|||||||
device_id = device.id
|
device_id = device.id
|
||||||
device_info = device.device_info
|
device_info = device.device_info
|
||||||
device_sub_type = "std"
|
device_sub_type = "std"
|
||||||
if "EF" in family:
|
if device_type and "EF" in family:
|
||||||
device_sub_type = "HobbyBoard"
|
device_sub_type = "HobbyBoard"
|
||||||
family = device_type
|
family = device_type
|
||||||
elif "A6" in family:
|
elif "A6" in family:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
"""Constants for 1-Wire integration."""
|
"""Constants for 1-Wire integration."""
|
||||||
|
|
||||||
from pyownet.protocol import Error as ProtocolError
|
from pyownet.protocol import ProtocolError
|
||||||
|
|
||||||
from homeassistant.components.onewire.const import Platform
|
from homeassistant.components.onewire.const import Platform
|
||||||
|
|
||||||
@ -58,6 +58,12 @@ MOCK_OWPROXY_DEVICES = {
|
|||||||
{ATTR_INJECT_READS: b" 248125"},
|
{ATTR_INJECT_READS: b" 248125"},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
"16.111111111111": {
|
||||||
|
# Test case for issue #115984, where the device type cannot be read
|
||||||
|
ATTR_INJECT_READS: [
|
||||||
|
ProtocolError(), # read device type
|
||||||
|
],
|
||||||
|
},
|
||||||
"1F.111111111111": {
|
"1F.111111111111": {
|
||||||
ATTR_INJECT_READS: [
|
ATTR_INJECT_READS: [
|
||||||
b"DS2409", # read device type
|
b"DS2409", # read device type
|
||||||
|
@ -219,6 +219,18 @@
|
|||||||
}),
|
}),
|
||||||
])
|
])
|
||||||
# ---
|
# ---
|
||||||
|
# name: test_binary_sensors[16.111111111111]
|
||||||
|
list([
|
||||||
|
])
|
||||||
|
# ---
|
||||||
|
# name: test_binary_sensors[16.111111111111].1
|
||||||
|
list([
|
||||||
|
])
|
||||||
|
# ---
|
||||||
|
# name: test_binary_sensors[16.111111111111].2
|
||||||
|
list([
|
||||||
|
])
|
||||||
|
# ---
|
||||||
# name: test_binary_sensors[1D.111111111111]
|
# name: test_binary_sensors[1D.111111111111]
|
||||||
list([
|
list([
|
||||||
DeviceRegistryEntrySnapshot({
|
DeviceRegistryEntrySnapshot({
|
||||||
|
@ -278,6 +278,18 @@
|
|||||||
}),
|
}),
|
||||||
])
|
])
|
||||||
# ---
|
# ---
|
||||||
|
# name: test_sensors[16.111111111111]
|
||||||
|
list([
|
||||||
|
])
|
||||||
|
# ---
|
||||||
|
# name: test_sensors[16.111111111111].1
|
||||||
|
list([
|
||||||
|
])
|
||||||
|
# ---
|
||||||
|
# name: test_sensors[16.111111111111].2
|
||||||
|
list([
|
||||||
|
])
|
||||||
|
# ---
|
||||||
# name: test_sensors[1D.111111111111]
|
# name: test_sensors[1D.111111111111]
|
||||||
list([
|
list([
|
||||||
DeviceRegistryEntrySnapshot({
|
DeviceRegistryEntrySnapshot({
|
||||||
|
@ -351,6 +351,18 @@
|
|||||||
}),
|
}),
|
||||||
])
|
])
|
||||||
# ---
|
# ---
|
||||||
|
# name: test_switches[16.111111111111]
|
||||||
|
list([
|
||||||
|
])
|
||||||
|
# ---
|
||||||
|
# name: test_switches[16.111111111111].1
|
||||||
|
list([
|
||||||
|
])
|
||||||
|
# ---
|
||||||
|
# name: test_switches[16.111111111111].2
|
||||||
|
list([
|
||||||
|
])
|
||||||
|
# ---
|
||||||
# name: test_switches[1D.111111111111]
|
# name: test_switches[1D.111111111111]
|
||||||
list([
|
list([
|
||||||
DeviceRegistryEntrySnapshot({
|
DeviceRegistryEntrySnapshot({
|
||||||
|
Loading…
x
Reference in New Issue
Block a user