Add logging to Tuya for devices that cannot be supported (#149192)

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
epenet 2025-07-23 15:07:37 +02:00 committed by GitHub
parent 9a9f65dc36
commit 4730c5b831
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 123 additions and 0 deletions

View File

@ -153,6 +153,17 @@ async def async_setup_entry(hass: HomeAssistant, entry: TuyaConfigEntry) -> bool
# Register known device IDs # Register known device IDs
device_registry = dr.async_get(hass) device_registry = dr.async_get(hass)
for device in manager.device_map.values(): for device in manager.device_map.values():
if not device.status and not device.status_range and not device.function:
# If the device has no status, status_range or function,
# it cannot be supported
LOGGER.info(
"Device %s (%s) has been ignored as it does not provide any"
" standard instructions (status, status_range and function are"
" all empty) - see %s",
device.product_name,
device.id,
"https://github.com/tuya/tuya-device-sharing-sdk/issues/11",
)
device_registry.async_get_or_create( device_registry.async_get_or_create(
config_entry_id=entry.entry_id, config_entry_id=entry.entry_id,
identifiers={(DOMAIN, device.id)}, identifiers={(DOMAIN, device.id)},

View File

@ -148,6 +148,10 @@ DEVICE_MOCKS = {
Platform.SELECT, Platform.SELECT,
Platform.SWITCH, Platform.SWITCH,
], ],
"ydkt_dolceclima_unsupported": [
# https://github.com/orgs/home-assistant/discussions/288
# unsupported device - no platforms
],
"wk_wifi_smart_gas_boiler_thermostat": [ "wk_wifi_smart_gas_boiler_thermostat": [
# https://github.com/orgs/home-assistant/discussions/243 # https://github.com/orgs/home-assistant/discussions/243
Platform.CLIMATE, Platform.CLIMATE,

View File

@ -0,0 +1,23 @@
{
"endpoint": "https://apigw.tuyaeu.com",
"terminal_id": "mock_terminal_id",
"mqtt_connected": true,
"disabled_by": null,
"disabled_polling": false,
"id": "mock_device_id",
"name": "DOLCECLIMA 10 HP WIFI",
"category": "ydkt",
"product_id": "jevroj5aguwdbs2e",
"product_name": "DOLCECLIMA 10 HP WIFI",
"online": true,
"sub": false,
"time_zone": "+02:00",
"active_time": "2025-07-09T18:39:25+00:00",
"create_time": "2025-07-09T18:39:25+00:00",
"update_time": "2025-07-09T18:39:25+00:00",
"function": {},
"status_range": {},
"status": {},
"set_up": false,
"support_local": true
}

View File

@ -0,0 +1,36 @@
# serializer version: 1
# name: test_unsupported_device[ydkt_dolceclima_unsupported]
list([
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'config_entries_subentries': <ANY>,
'configuration_url': None,
'connections': set({
}),
'disabled_by': None,
'entry_type': None,
'hw_version': None,
'id': <ANY>,
'identifiers': set({
tuple(
'tuya',
'mock_device_id',
),
}),
'is_new': False,
'labels': set({
}),
'manufacturer': 'Tuya',
'model': 'DOLCECLIMA 10 HP WIFI (unsupported)',
'model_id': 'jevroj5aguwdbs2e',
'name': 'DOLCECLIMA 10 HP WIFI',
'name_by_user': None,
'primary_config_entry': <ANY>,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
}),
])
# ---

View File

@ -0,0 +1,49 @@
"""Test Tuya initialization."""
from __future__ import annotations
import pytest
from syrupy.assertion import SnapshotAssertion
from tuya_sharing import CustomerDevice
from homeassistant.components.tuya import ManagerCompat
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr, entity_registry as er
from . import initialize_entry
from tests.common import MockConfigEntry
@pytest.mark.parametrize("mock_device_code", ["ydkt_dolceclima_unsupported"])
async def test_unsupported_device(
hass: HomeAssistant,
mock_manager: ManagerCompat,
mock_config_entry: MockConfigEntry,
mock_device: CustomerDevice,
device_registry: dr.DeviceRegistry,
entity_registry: er.EntityRegistry,
snapshot: SnapshotAssertion,
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test unsupported device."""
await initialize_entry(hass, mock_manager, mock_config_entry, mock_device)
# Device is registered
assert (
dr.async_entries_for_config_entry(device_registry, mock_config_entry.entry_id)
== snapshot
)
# No entities registered
assert not er.async_entries_for_config_entry(
entity_registry, mock_config_entry.entry_id
)
# Information log entry added
assert (
"Device DOLCECLIMA 10 HP WIFI (mock_device_id) has been ignored"
" as it does not provide any standard instructions (status, status_range"
" and function are all empty) - see "
"https://github.com/tuya/tuya-device-sharing-sdk/issues/11" in caplog.text
)