Add mute switch to Tuya smoke detectors (#150469)

This commit is contained in:
epenet
2025-08-12 10:45:39 +02:00
committed by GitHub
parent f6af524ddf
commit 8f5c8caf07
6 changed files with 423 additions and 0 deletions

View File

@@ -881,6 +881,15 @@ SWITCHES: dict[str, tuple[SwitchEntityDescription, ...]] = {
entity_category=EntityCategory.CONFIG, entity_category=EntityCategory.CONFIG,
), ),
), ),
# Smoke Detector
# https://developer.tuya.com/en/docs/iot/categoryywbj?id=Kaiuz3f6sf952
"ywbj": (
SwitchEntityDescription(
key=DPCode.MUFFLING,
translation_key="mute",
entity_category=EntityCategory.CONFIG,
),
),
# Smart Electricity Meter # Smart Electricity Meter
# https://developer.tuya.com/en/docs/iot/smart-meter?id=Kaiuz4gv6ack7 # https://developer.tuya.com/en/docs/iot/smart-meter?id=Kaiuz4gv6ack7
"zndb": ( "zndb": (

View File

@@ -187,6 +187,7 @@ DEVICE_MOCKS = [
"ywbj_cjlutkuuvxnie17o", # https://github.com/home-assistant/core/issues/146164 "ywbj_cjlutkuuvxnie17o", # https://github.com/home-assistant/core/issues/146164
"ywbj_gf9dejhmzffgdyfj", # https://github.com/home-assistant/core/issues/149704 "ywbj_gf9dejhmzffgdyfj", # https://github.com/home-assistant/core/issues/149704
"ywbj_kscbebaf3s1eogvt", # https://github.com/home-assistant/core/issues/141278 "ywbj_kscbebaf3s1eogvt", # https://github.com/home-assistant/core/issues/141278
"ywbj_rccxox8p", # https://github.com/orgs/home-assistant/discussions/625
"ywcgq_h8lvyoahr6s6aybf", # https://github.com/home-assistant/core/issues/145932 "ywcgq_h8lvyoahr6s6aybf", # https://github.com/home-assistant/core/issues/145932
"ywcgq_wtzwyhkev3b4ubns", # https://github.com/home-assistant/core/issues/103818 "ywcgq_wtzwyhkev3b4ubns", # https://github.com/home-assistant/core/issues/103818
"zjq_nkkl7uzv", # https://github.com/orgs/home-assistant/discussions/482 "zjq_nkkl7uzv", # https://github.com/orgs/home-assistant/discussions/482

View File

@@ -0,0 +1,68 @@
{
"endpoint": "https://apigw.tuyaeu.com",
"mqtt_connected": true,
"disabled_by": null,
"disabled_polling": false,
"name": "Smoke Alarm",
"category": "ywbj",
"product_id": "rccxox8p",
"product_name": "Smoke Alarm",
"online": true,
"sub": true,
"time_zone": "+02:00",
"active_time": "2024-08-05T13:47:04+00:00",
"create_time": "2024-08-05T13:47:04+00:00",
"update_time": "2024-08-05T13:47:04+00:00",
"function": {
"muffling": {
"type": "Boolean",
"value": {}
}
},
"status_range": {
"smoke_sensor_status": {
"type": "Enum",
"value": {
"range": ["alarm", "normal"]
}
},
"smoke_sensor_value": {
"type": "Integer",
"value": {
"min": 0,
"max": 1000,
"scale": 1,
"step": 1
}
},
"battery_state": {
"type": "Enum",
"value": {
"range": ["low", "middle", "high"]
}
},
"battery_percentage": {
"type": "Integer",
"value": {
"unit": "%",
"min": 0,
"max": 100,
"scale": 0,
"step": 1
}
},
"muffling": {
"type": "Boolean",
"value": {}
}
},
"status": {
"smoke_sensor_status": "normal",
"smoke_sensor_value": 0,
"battery_state": "low",
"battery_percentage": 100,
"muffling": false
},
"set_up": true,
"support_local": true
}

View File

@@ -1174,6 +1174,55 @@
'state': 'off', 'state': 'off',
}) })
# --- # ---
# name: test_platform_setup_and_discovery[binary_sensor.smoke_alarm_smoke-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': None,
'entity_id': 'binary_sensor.smoke_alarm_smoke',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.SMOKE: 'smoke'>,
'original_icon': None,
'original_name': 'Smoke',
'platform': 'tuya',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'tuya.p8xoxccrjbwysmoke_sensor_status',
'unit_of_measurement': None,
})
# ---
# name: test_platform_setup_and_discovery[binary_sensor.smoke_alarm_smoke-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'smoke',
'friendly_name': 'Smoke Alarm Smoke',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.smoke_alarm_smoke',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'off',
})
# ---
# name: test_platform_setup_and_discovery[binary_sensor.smoke_detector_upstairs_smoke-entry] # name: test_platform_setup_and_discovery[binary_sensor.smoke_detector_upstairs_smoke-entry]
EntityRegistryEntrySnapshot({ EntityRegistryEntrySnapshot({
'aliases': set({ 'aliases': set({

View File

@@ -10098,6 +10098,158 @@
'state': '97.0', 'state': '97.0',
}) })
# --- # ---
# name: test_platform_setup_and_discovery[sensor.smoke_alarm_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.smoke_alarm_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.p8xoxccrjbwybattery_percentage',
'unit_of_measurement': '%',
})
# ---
# name: test_platform_setup_and_discovery[sensor.smoke_alarm_battery-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'battery',
'friendly_name': 'Smoke Alarm Battery',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '%',
}),
'context': <ANY>,
'entity_id': 'sensor.smoke_alarm_battery',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '100.0',
})
# ---
# name: test_platform_setup_and_discovery[sensor.smoke_alarm_battery_state-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'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.smoke_alarm_battery_state',
'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': 'Battery state',
'platform': 'tuya',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'battery_state',
'unique_id': 'tuya.p8xoxccrjbwybattery_state',
'unit_of_measurement': None,
})
# ---
# name: test_platform_setup_and_discovery[sensor.smoke_alarm_battery_state-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'Smoke Alarm Battery state',
}),
'context': <ANY>,
'entity_id': 'sensor.smoke_alarm_battery_state',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'low',
})
# ---
# name: test_platform_setup_and_discovery[sensor.smoke_alarm_smoke_amount-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.smoke_alarm_smoke_amount',
'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': 'Smoke amount',
'platform': 'tuya',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'smoke_amount',
'unique_id': 'tuya.p8xoxccrjbwysmoke_sensor_value',
'unit_of_measurement': None,
})
# ---
# name: test_platform_setup_and_discovery[sensor.smoke_alarm_smoke_amount-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'Smoke Alarm Smoke amount',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'context': <ANY>,
'entity_id': 'sensor.smoke_alarm_smoke_amount',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '0.0',
})
# ---
# name: test_platform_setup_and_discovery[sensor.smoke_detector_upstairs_battery-entry] # name: test_platform_setup_and_discovery[sensor.smoke_detector_upstairs_battery-entry]
EntityRegistryEntrySnapshot({ EntityRegistryEntrySnapshot({
'aliases': set({ 'aliases': set({

View File

@@ -6389,6 +6389,102 @@
'state': 'on', 'state': 'on',
}) })
# --- # ---
# name: test_platform_setup_and_discovery[switch.smoke_alarm_mute-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'switch',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'switch.smoke_alarm_mute',
'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': 'Mute',
'platform': 'tuya',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'mute',
'unique_id': 'tuya.p8xoxccrjbwymuffling',
'unit_of_measurement': None,
})
# ---
# name: test_platform_setup_and_discovery[switch.smoke_alarm_mute-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'Smoke Alarm Mute',
}),
'context': <ANY>,
'entity_id': 'switch.smoke_alarm_mute',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'off',
})
# ---
# name: test_platform_setup_and_discovery[switch.smoke_detector_upstairs_mute-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'switch',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'switch.smoke_detector_upstairs_mute',
'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': 'Mute',
'platform': 'tuya',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'mute',
'unique_id': 'tuya.jfydgffzmhjed9fgjbwymuffling',
'unit_of_measurement': None,
})
# ---
# name: test_platform_setup_and_discovery[switch.smoke_detector_upstairs_mute-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': ' Smoke detector upstairs Mute',
}),
'context': <ANY>,
'entity_id': 'switch.smoke_detector_upstairs_mute',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'off',
})
# ---
# name: test_platform_setup_and_discovery[switch.socket3_switch_1-entry] # name: test_platform_setup_and_discovery[switch.socket3_switch_1-entry]
EntityRegistryEntrySnapshot({ EntityRegistryEntrySnapshot({
'aliases': set({ 'aliases': set({
@@ -7898,6 +7994,54 @@
'state': 'off', 'state': 'off',
}) })
# --- # ---
# name: test_platform_setup_and_discovery[switch.wifi_smoke_alarm_mute-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'switch',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'switch.wifi_smoke_alarm_mute',
'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': 'Mute',
'platform': 'tuya',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'mute',
'unique_id': 'tuya.tvgoe1s3fabebcskjbwymuffling',
'unit_of_measurement': None,
})
# ---
# name: test_platform_setup_and_discovery[switch.wifi_smoke_alarm_mute-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'WIFI Smoke alarm Mute',
}),
'context': <ANY>,
'entity_id': 'switch.wifi_smoke_alarm_mute',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'off',
})
# ---
# name: test_platform_setup_and_discovery[switch.xoca_dac212xc_v2_s1_switch-entry] # name: test_platform_setup_and_discovery[switch.xoca_dac212xc_v2_s1_switch-entry]
EntityRegistryEntrySnapshot({ EntityRegistryEntrySnapshot({
'aliases': set({ 'aliases': set({