mirror of
https://github.com/home-assistant/core.git
synced 2026-05-06 08:36:42 +02:00
Add support for Tuya swtz category (cooking thermometer) (#152022)
This commit is contained in:
@@ -169,6 +169,7 @@ class DPCode(StrEnum):
|
||||
CONTROL_BACK = "control_back"
|
||||
CONTROL_BACK_MODE = "control_back_mode"
|
||||
COOK_TEMPERATURE = "cook_temperature"
|
||||
COOK_TEMPERATURE_2 = "cook_temperature_2"
|
||||
COOK_TIME = "cook_time"
|
||||
COUNTDOWN = "countdown" # Countdown
|
||||
COUNTDOWN_1 = "countdown_1"
|
||||
@@ -388,6 +389,7 @@ class DPCode(StrEnum):
|
||||
TEMP_CONTROLLER = "temp_controller"
|
||||
TEMP_CORRECTION = "temp_correction"
|
||||
TEMP_CURRENT = "temp_current" # Current temperature in °C
|
||||
TEMP_CURRENT_2 = "temp_current_2"
|
||||
TEMP_CURRENT_EXTERNAL = (
|
||||
"temp_current_external" # Current external temperature in Celsius
|
||||
)
|
||||
|
||||
@@ -215,6 +215,20 @@ NUMBERS: dict[str, tuple[NumberEntityDescription, ...]] = {
|
||||
entity_category=EntityCategory.CONFIG,
|
||||
),
|
||||
),
|
||||
# Cooking thermometer
|
||||
"swtz": (
|
||||
NumberEntityDescription(
|
||||
key=DPCode.COOK_TEMPERATURE,
|
||||
translation_key="cook_temperature",
|
||||
entity_category=EntityCategory.CONFIG,
|
||||
),
|
||||
NumberEntityDescription(
|
||||
key=DPCode.COOK_TEMPERATURE_2,
|
||||
translation_key="indexed_cook_temperature",
|
||||
translation_placeholders={"index": "2"},
|
||||
entity_category=EntityCategory.CONFIG,
|
||||
),
|
||||
),
|
||||
# Robot Vacuum
|
||||
# https://developer.tuya.com/en/docs/iot/fsd?id=K9gf487ck1tlo
|
||||
"sd": (
|
||||
|
||||
@@ -1118,6 +1118,23 @@ SENSORS: dict[str, tuple[TuyaSensorEntityDescription, ...]] = {
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
),
|
||||
),
|
||||
# Cooking thermometer
|
||||
"swtz": (
|
||||
TuyaSensorEntityDescription(
|
||||
key=DPCode.TEMP_CURRENT,
|
||||
translation_key="temperature",
|
||||
device_class=SensorDeviceClass.TEMPERATURE,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
),
|
||||
TuyaSensorEntityDescription(
|
||||
key=DPCode.TEMP_CURRENT_2,
|
||||
translation_key="indexed_temperature",
|
||||
translation_placeholders={"index": "2"},
|
||||
device_class=SensorDeviceClass.TEMPERATURE,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
),
|
||||
*BATTERY_SENSORS,
|
||||
),
|
||||
# Smart Gardening system
|
||||
# https://developer.tuya.com/en/docs/iot/categorysz?id=Kaiuz4e6h7up0
|
||||
"sz": (
|
||||
|
||||
@@ -139,6 +139,9 @@
|
||||
"temperature": {
|
||||
"name": "[%key:component::sensor::entity_component::temperature::name%]"
|
||||
},
|
||||
"indexed_temperature": {
|
||||
"name": "Temperature {index}"
|
||||
},
|
||||
"time": {
|
||||
"name": "Time"
|
||||
},
|
||||
@@ -176,10 +179,13 @@
|
||||
"name": "Powder"
|
||||
},
|
||||
"cook_temperature": {
|
||||
"name": "Cook temperature"
|
||||
"name": "Cooking temperature"
|
||||
},
|
||||
"indexed_cook_temperature": {
|
||||
"name": "Cooking temperature {index}"
|
||||
},
|
||||
"cook_time": {
|
||||
"name": "Cook time"
|
||||
"name": "Cooking time"
|
||||
},
|
||||
"cloud_recipe": {
|
||||
"name": "Cloud recipe"
|
||||
|
||||
@@ -7181,7 +7181,7 @@
|
||||
'labels': set({
|
||||
}),
|
||||
'manufacturer': 'Tuya',
|
||||
'model': 'Cooking Thermometer (unsupported)',
|
||||
'model': 'Cooking Thermometer',
|
||||
'model_id': '3rzngbyy',
|
||||
'name': 'Grillhőmérő',
|
||||
'name_by_user': None,
|
||||
|
||||
@@ -465,6 +465,122 @@
|
||||
'state': '1.0',
|
||||
})
|
||||
# ---
|
||||
# name: test_platform_setup_and_discovery[number.grillhomero_cooking_temperature-entry]
|
||||
EntityRegistryEntrySnapshot({
|
||||
'aliases': set({
|
||||
}),
|
||||
'area_id': None,
|
||||
'capabilities': dict({
|
||||
'max': 300.0,
|
||||
'min': -30.0,
|
||||
'mode': <NumberMode.AUTO: 'auto'>,
|
||||
'step': 0.1,
|
||||
}),
|
||||
'config_entry_id': <ANY>,
|
||||
'config_subentry_id': <ANY>,
|
||||
'device_class': None,
|
||||
'device_id': <ANY>,
|
||||
'disabled_by': None,
|
||||
'domain': 'number',
|
||||
'entity_category': <EntityCategory.CONFIG: 'config'>,
|
||||
'entity_id': 'number.grillhomero_cooking_temperature',
|
||||
'has_entity_name': True,
|
||||
'hidden_by': None,
|
||||
'icon': None,
|
||||
'id': <ANY>,
|
||||
'labels': set({
|
||||
}),
|
||||
'name': None,
|
||||
'options': dict({
|
||||
}),
|
||||
'original_device_class': None,
|
||||
'original_icon': None,
|
||||
'original_name': 'Cooking temperature',
|
||||
'platform': 'tuya',
|
||||
'previous_unique_id': None,
|
||||
'suggested_object_id': None,
|
||||
'supported_features': 0,
|
||||
'translation_key': 'cook_temperature',
|
||||
'unique_id': 'tuya.yybgnzr3ztwscook_temperature',
|
||||
'unit_of_measurement': '℃',
|
||||
})
|
||||
# ---
|
||||
# name: test_platform_setup_and_discovery[number.grillhomero_cooking_temperature-state]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'friendly_name': 'Grillhőmérő Cooking temperature',
|
||||
'max': 300.0,
|
||||
'min': -30.0,
|
||||
'mode': <NumberMode.AUTO: 'auto'>,
|
||||
'step': 0.1,
|
||||
'unit_of_measurement': '℃',
|
||||
}),
|
||||
'context': <ANY>,
|
||||
'entity_id': 'number.grillhomero_cooking_temperature',
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': 'unavailable',
|
||||
})
|
||||
# ---
|
||||
# name: test_platform_setup_and_discovery[number.grillhomero_cooking_temperature_2-entry]
|
||||
EntityRegistryEntrySnapshot({
|
||||
'aliases': set({
|
||||
}),
|
||||
'area_id': None,
|
||||
'capabilities': dict({
|
||||
'max': 300.0,
|
||||
'min': -30.0,
|
||||
'mode': <NumberMode.AUTO: 'auto'>,
|
||||
'step': 0.1,
|
||||
}),
|
||||
'config_entry_id': <ANY>,
|
||||
'config_subentry_id': <ANY>,
|
||||
'device_class': None,
|
||||
'device_id': <ANY>,
|
||||
'disabled_by': None,
|
||||
'domain': 'number',
|
||||
'entity_category': <EntityCategory.CONFIG: 'config'>,
|
||||
'entity_id': 'number.grillhomero_cooking_temperature_2',
|
||||
'has_entity_name': True,
|
||||
'hidden_by': None,
|
||||
'icon': None,
|
||||
'id': <ANY>,
|
||||
'labels': set({
|
||||
}),
|
||||
'name': None,
|
||||
'options': dict({
|
||||
}),
|
||||
'original_device_class': None,
|
||||
'original_icon': None,
|
||||
'original_name': 'Cooking temperature 2',
|
||||
'platform': 'tuya',
|
||||
'previous_unique_id': None,
|
||||
'suggested_object_id': None,
|
||||
'supported_features': 0,
|
||||
'translation_key': 'indexed_cook_temperature',
|
||||
'unique_id': 'tuya.yybgnzr3ztwscook_temperature_2',
|
||||
'unit_of_measurement': '℃',
|
||||
})
|
||||
# ---
|
||||
# name: test_platform_setup_and_discovery[number.grillhomero_cooking_temperature_2-state]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'friendly_name': 'Grillhőmérő Cooking temperature 2',
|
||||
'max': 300.0,
|
||||
'min': -30.0,
|
||||
'mode': <NumberMode.AUTO: 'auto'>,
|
||||
'step': 0.1,
|
||||
'unit_of_measurement': '℃',
|
||||
}),
|
||||
'context': <ANY>,
|
||||
'entity_id': 'number.grillhomero_cooking_temperature_2',
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': 'unavailable',
|
||||
})
|
||||
# ---
|
||||
# name: test_platform_setup_and_discovery[number.hot_water_heat_pump_temperature-entry]
|
||||
EntityRegistryEntrySnapshot({
|
||||
'aliases': set({
|
||||
@@ -2107,7 +2223,7 @@
|
||||
'state': '-2.0',
|
||||
})
|
||||
# ---
|
||||
# name: test_platform_setup_and_discovery[number.sous_vide_cook_temperature-entry]
|
||||
# name: test_platform_setup_and_discovery[number.sous_vide_cooking_temperature-entry]
|
||||
EntityRegistryEntrySnapshot({
|
||||
'aliases': set({
|
||||
}),
|
||||
@@ -2125,7 +2241,7 @@
|
||||
'disabled_by': None,
|
||||
'domain': 'number',
|
||||
'entity_category': <EntityCategory.CONFIG: 'config'>,
|
||||
'entity_id': 'number.sous_vide_cook_temperature',
|
||||
'entity_id': 'number.sous_vide_cooking_temperature',
|
||||
'has_entity_name': True,
|
||||
'hidden_by': None,
|
||||
'icon': None,
|
||||
@@ -2137,7 +2253,7 @@
|
||||
}),
|
||||
'original_device_class': None,
|
||||
'original_icon': None,
|
||||
'original_name': 'Cook temperature',
|
||||
'original_name': 'Cooking temperature',
|
||||
'platform': 'tuya',
|
||||
'previous_unique_id': None,
|
||||
'suggested_object_id': None,
|
||||
@@ -2147,10 +2263,10 @@
|
||||
'unit_of_measurement': '℃',
|
||||
})
|
||||
# ---
|
||||
# name: test_platform_setup_and_discovery[number.sous_vide_cook_temperature-state]
|
||||
# name: test_platform_setup_and_discovery[number.sous_vide_cooking_temperature-state]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'friendly_name': 'Sous Vide Cook temperature',
|
||||
'friendly_name': 'Sous Vide Cooking temperature',
|
||||
'max': 92.5,
|
||||
'min': 25.0,
|
||||
'mode': <NumberMode.AUTO: 'auto'>,
|
||||
@@ -2158,14 +2274,14 @@
|
||||
'unit_of_measurement': '℃',
|
||||
}),
|
||||
'context': <ANY>,
|
||||
'entity_id': 'number.sous_vide_cook_temperature',
|
||||
'entity_id': 'number.sous_vide_cooking_temperature',
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': 'unavailable',
|
||||
})
|
||||
# ---
|
||||
# name: test_platform_setup_and_discovery[number.sous_vide_cook_time-entry]
|
||||
# name: test_platform_setup_and_discovery[number.sous_vide_cooking_time-entry]
|
||||
EntityRegistryEntrySnapshot({
|
||||
'aliases': set({
|
||||
}),
|
||||
@@ -2183,7 +2299,7 @@
|
||||
'disabled_by': None,
|
||||
'domain': 'number',
|
||||
'entity_category': <EntityCategory.CONFIG: 'config'>,
|
||||
'entity_id': 'number.sous_vide_cook_time',
|
||||
'entity_id': 'number.sous_vide_cooking_time',
|
||||
'has_entity_name': True,
|
||||
'hidden_by': None,
|
||||
'icon': None,
|
||||
@@ -2195,7 +2311,7 @@
|
||||
}),
|
||||
'original_device_class': None,
|
||||
'original_icon': None,
|
||||
'original_name': 'Cook time',
|
||||
'original_name': 'Cooking time',
|
||||
'platform': 'tuya',
|
||||
'previous_unique_id': None,
|
||||
'suggested_object_id': None,
|
||||
@@ -2205,10 +2321,10 @@
|
||||
'unit_of_measurement': <UnitOfTime.MINUTES: 'min'>,
|
||||
})
|
||||
# ---
|
||||
# name: test_platform_setup_and_discovery[number.sous_vide_cook_time-state]
|
||||
# name: test_platform_setup_and_discovery[number.sous_vide_cooking_time-state]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'friendly_name': 'Sous Vide Cook time',
|
||||
'friendly_name': 'Sous Vide Cooking time',
|
||||
'max': 5999.0,
|
||||
'min': 1.0,
|
||||
'mode': <NumberMode.AUTO: 'auto'>,
|
||||
@@ -2216,7 +2332,7 @@
|
||||
'unit_of_measurement': <UnitOfTime.MINUTES: 'min'>,
|
||||
}),
|
||||
'context': <ANY>,
|
||||
'entity_id': 'number.sous_vide_cook_time',
|
||||
'entity_id': 'number.sous_vide_cooking_time',
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
|
||||
@@ -6623,6 +6623,171 @@
|
||||
'state': '32.2',
|
||||
})
|
||||
# ---
|
||||
# name: test_platform_setup_and_discovery[sensor.grillhomero_battery-entry]
|
||||
EntityRegistryEntrySnapshot({
|
||||
'aliases': set({
|
||||
}),
|
||||
'area_id': None,
|
||||
'capabilities': dict({
|
||||
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
|
||||
}),
|
||||
'config_entry_id': <ANY>,
|
||||
'config_subentry_id': <ANY>,
|
||||
'device_class': None,
|
||||
'device_id': <ANY>,
|
||||
'disabled_by': None,
|
||||
'domain': 'sensor',
|
||||
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
|
||||
'entity_id': 'sensor.grillhomero_battery',
|
||||
'has_entity_name': True,
|
||||
'hidden_by': None,
|
||||
'icon': None,
|
||||
'id': <ANY>,
|
||||
'labels': set({
|
||||
}),
|
||||
'name': None,
|
||||
'options': dict({
|
||||
}),
|
||||
'original_device_class': <SensorDeviceClass.BATTERY: 'battery'>,
|
||||
'original_icon': None,
|
||||
'original_name': 'Battery',
|
||||
'platform': 'tuya',
|
||||
'previous_unique_id': None,
|
||||
'suggested_object_id': None,
|
||||
'supported_features': 0,
|
||||
'translation_key': 'battery',
|
||||
'unique_id': 'tuya.yybgnzr3ztwsbattery_percentage',
|
||||
'unit_of_measurement': '%',
|
||||
})
|
||||
# ---
|
||||
# name: test_platform_setup_and_discovery[sensor.grillhomero_battery-state]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'device_class': 'battery',
|
||||
'friendly_name': 'Grillhőmérő Battery',
|
||||
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
|
||||
'unit_of_measurement': '%',
|
||||
}),
|
||||
'context': <ANY>,
|
||||
'entity_id': 'sensor.grillhomero_battery',
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': 'unavailable',
|
||||
})
|
||||
# ---
|
||||
# name: test_platform_setup_and_discovery[sensor.grillhomero_temperature-entry]
|
||||
EntityRegistryEntrySnapshot({
|
||||
'aliases': set({
|
||||
}),
|
||||
'area_id': None,
|
||||
'capabilities': dict({
|
||||
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
|
||||
}),
|
||||
'config_entry_id': <ANY>,
|
||||
'config_subentry_id': <ANY>,
|
||||
'device_class': None,
|
||||
'device_id': <ANY>,
|
||||
'disabled_by': None,
|
||||
'domain': 'sensor',
|
||||
'entity_category': None,
|
||||
'entity_id': 'sensor.grillhomero_temperature',
|
||||
'has_entity_name': True,
|
||||
'hidden_by': None,
|
||||
'icon': None,
|
||||
'id': <ANY>,
|
||||
'labels': set({
|
||||
}),
|
||||
'name': None,
|
||||
'options': dict({
|
||||
'sensor': dict({
|
||||
'suggested_display_precision': 1,
|
||||
}),
|
||||
}),
|
||||
'original_device_class': <SensorDeviceClass.TEMPERATURE: 'temperature'>,
|
||||
'original_icon': None,
|
||||
'original_name': 'Temperature',
|
||||
'platform': 'tuya',
|
||||
'previous_unique_id': None,
|
||||
'suggested_object_id': None,
|
||||
'supported_features': 0,
|
||||
'translation_key': 'temperature',
|
||||
'unique_id': 'tuya.yybgnzr3ztwstemp_current',
|
||||
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
|
||||
})
|
||||
# ---
|
||||
# name: test_platform_setup_and_discovery[sensor.grillhomero_temperature-state]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'device_class': 'temperature',
|
||||
'friendly_name': 'Grillhőmérő Temperature',
|
||||
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
|
||||
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
|
||||
}),
|
||||
'context': <ANY>,
|
||||
'entity_id': 'sensor.grillhomero_temperature',
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': 'unavailable',
|
||||
})
|
||||
# ---
|
||||
# name: test_platform_setup_and_discovery[sensor.grillhomero_temperature_2-entry]
|
||||
EntityRegistryEntrySnapshot({
|
||||
'aliases': set({
|
||||
}),
|
||||
'area_id': None,
|
||||
'capabilities': dict({
|
||||
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
|
||||
}),
|
||||
'config_entry_id': <ANY>,
|
||||
'config_subentry_id': <ANY>,
|
||||
'device_class': None,
|
||||
'device_id': <ANY>,
|
||||
'disabled_by': None,
|
||||
'domain': 'sensor',
|
||||
'entity_category': None,
|
||||
'entity_id': 'sensor.grillhomero_temperature_2',
|
||||
'has_entity_name': True,
|
||||
'hidden_by': None,
|
||||
'icon': None,
|
||||
'id': <ANY>,
|
||||
'labels': set({
|
||||
}),
|
||||
'name': None,
|
||||
'options': dict({
|
||||
'sensor': dict({
|
||||
'suggested_display_precision': 1,
|
||||
}),
|
||||
}),
|
||||
'original_device_class': <SensorDeviceClass.TEMPERATURE: 'temperature'>,
|
||||
'original_icon': None,
|
||||
'original_name': 'Temperature',
|
||||
'platform': 'tuya',
|
||||
'previous_unique_id': None,
|
||||
'suggested_object_id': None,
|
||||
'supported_features': 0,
|
||||
'translation_key': 'indexed_temperature',
|
||||
'unique_id': 'tuya.yybgnzr3ztwstemp_current_2',
|
||||
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
|
||||
})
|
||||
# ---
|
||||
# name: test_platform_setup_and_discovery[sensor.grillhomero_temperature_2-state]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'device_class': 'temperature',
|
||||
'friendly_name': 'Grillhőmérő Temperature',
|
||||
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
|
||||
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
|
||||
}),
|
||||
'context': <ANY>,
|
||||
'entity_id': 'sensor.grillhomero_temperature_2',
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': 'unavailable',
|
||||
})
|
||||
# ---
|
||||
# name: test_platform_setup_and_discovery[sensor.hl400_pm2_5-entry]
|
||||
EntityRegistryEntrySnapshot({
|
||||
'aliases': set({
|
||||
|
||||
Reference in New Issue
Block a user