Switchbot Cloud: Add new supported devices[Curtain4] (#178783)

This commit is contained in:
Samuel Xiao
2026-08-23 22:53:26 +02:00
committed by GitHub
parent 40ec3f7a1e
commit 027edb441b
6 changed files with 228 additions and 0 deletions
@@ -114,6 +114,7 @@ BINARY_SENSOR_DESCRIPTIONS_BY_DEVICE_TYPES = {
),
"Curtain": (CALIBRATION_DESCRIPTION,),
"Curtain3": (CALIBRATION_DESCRIPTION,),
"Curtain4": (CALIBRATION_DESCRIPTION,),
"Roller Shade": (CALIBRATION_DESCRIPTION,),
"Blind Tilt": (CALIBRATION_DESCRIPTION,),
"Garage Door Opener": (DOOR_OPEN_DESCRIPTION,),
@@ -164,6 +164,9 @@ DEVICE_SUPPORT_MAP: Final[dict[str, SwitchbotCloudDeviceConfig]] = {
"Curtain3": SwitchbotCloudDeviceConfig(
True, entity_config=(Platform.SENSOR, Platform.BINARY_SENSOR, Platform.COVER)
),
"Curtain4": SwitchbotCloudDeviceConfig(
True, entity_config=(Platform.SENSOR, Platform.BINARY_SENSOR, Platform.COVER)
),
"Roller Shade": SwitchbotCloudDeviceConfig(
True, entity_config=(Platform.SENSOR, Platform.BINARY_SENSOR, Platform.COVER)
),
@@ -258,6 +258,7 @@ SENSOR_DESCRIPTIONS_BY_DEVICE_TYPES = {
),
"Curtain": (BATTERY_DESCRIPTION,),
"Curtain3": (BATTERY_DESCRIPTION,),
"Curtain4": (BATTERY_DESCRIPTION,),
"Roller Shade": (BATTERY_DESCRIPTION,),
"Blind Tilt": (BATTERY_DESCRIPTION,),
"Hub 3": (
@@ -286,6 +286,17 @@
"version": "V6.3",
"slidePosition": 50
},
{
"deviceId": "07E6C4A290F2",
"deviceType": "Curtain4",
"hubDeviceId": "BBBBBBBBBB",
"calibrate": false,
"group": false,
"moving": false,
"battery": 100,
"version": "V6.3",
"slidePosition": 49
},
{
"deviceId": "F6D5B3A190E2",
"deviceType": "Roller Shade",
@@ -254,6 +254,57 @@
'state': 'on',
})
# ---
# name: test_coordinator_data[Curtain4][binary_sensor.test_device_name_1_calibration-entry]
EntityRegistryEntrySnapshot({
'aliases': list([
None,
]),
'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': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'binary_sensor.test_device_name_1_calibration',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Calibration',
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.PROBLEM: 'problem'>,
'original_icon': None,
'original_name': 'Calibration',
'platform': 'switchbot_cloud',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'calibration',
'unique_id': 'test-device-id-1_calibrate',
'unit_of_measurement': None,
})
# ---
# name: test_coordinator_data[Curtain4][binary_sensor.test_device_name_1_calibration-state]
StateSnapshot({
'attributes': ReadOnlyDict({
<EntityStateAttribute.DEVICE_CLASS: 'device_class'>: 'problem',
<EntityStateAttribute.FRIENDLY_NAME: 'friendly_name'>: 'test-device-name-1 Calibration',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.test_device_name_1_calibration',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'on',
})
# ---
# name: test_coordinator_data[Curtain][binary_sensor.test_device_name_1_calibration-entry]
EntityRegistryEntrySnapshot({
'aliases': list([
@@ -1886,6 +1937,57 @@
'state': 'unknown',
})
# ---
# name: test_no_coordinator_data[Curtain4][binary_sensor.test_device_name_1_calibration-entry]
EntityRegistryEntrySnapshot({
'aliases': list([
None,
]),
'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': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'binary_sensor.test_device_name_1_calibration',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Calibration',
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.PROBLEM: 'problem'>,
'original_icon': None,
'original_name': 'Calibration',
'platform': 'switchbot_cloud',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'calibration',
'unique_id': 'test-device-id-1_calibrate',
'unit_of_measurement': None,
})
# ---
# name: test_no_coordinator_data[Curtain4][binary_sensor.test_device_name_1_calibration-state]
StateSnapshot({
'attributes': ReadOnlyDict({
<EntityStateAttribute.DEVICE_CLASS: 'device_class'>: 'problem',
<EntityStateAttribute.FRIENDLY_NAME: 'friendly_name'>: 'test-device-name-1 Calibration',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.test_device_name_1_calibration',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_no_coordinator_data[Curtain][binary_sensor.test_device_name_1_calibration-entry]
EntityRegistryEntrySnapshot({
'aliases': list([
@@ -384,6 +384,61 @@
'state': '100',
})
# ---
# name: test_coordinator_data[Curtain4][sensor.test_device_name_1_battery-entry]
EntityRegistryEntrySnapshot({
'aliases': list([
None,
]),
'area_id': None,
'capabilities': dict({
<SensorEntityCapabilityAttribute.STATE_CLASS: '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.test_device_name_1_battery',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Battery',
'options': dict({
}),
'original_device_class': <SensorDeviceClass.BATTERY: 'battery'>,
'original_icon': None,
'original_name': 'Battery',
'platform': 'switchbot_cloud',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'test-device-id-1_battery',
'unit_of_measurement': <UnitOfRatio.PERCENTAGE: '%'>,
})
# ---
# name: test_coordinator_data[Curtain4][sensor.test_device_name_1_battery-state]
StateSnapshot({
'attributes': ReadOnlyDict({
<EntityStateAttribute.DEVICE_CLASS: 'device_class'>: 'battery',
<EntityStateAttribute.FRIENDLY_NAME: 'friendly_name'>: 'test-device-name-1 Battery',
<SensorEntityCapabilityAttribute.STATE_CLASS: 'state_class'>: <SensorStateClass.MEASUREMENT: 'measurement'>,
<EntityStateAttribute.UNIT_OF_MEASUREMENT: 'unit_of_measurement'>: <UnitOfRatio.PERCENTAGE: '%'>,
}),
'context': <ANY>,
'entity_id': 'sensor.test_device_name_1_battery',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '100',
})
# ---
# name: test_coordinator_data[Curtain][sensor.test_device_name_1_battery-entry]
EntityRegistryEntrySnapshot({
'aliases': list([
@@ -4097,6 +4152,61 @@
'state': 'unknown',
})
# ---
# name: test_no_coordinator_data[Curtain4][sensor.test_device_name_1_battery-entry]
EntityRegistryEntrySnapshot({
'aliases': list([
None,
]),
'area_id': None,
'capabilities': dict({
<SensorEntityCapabilityAttribute.STATE_CLASS: '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.test_device_name_1_battery',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Battery',
'options': dict({
}),
'original_device_class': <SensorDeviceClass.BATTERY: 'battery'>,
'original_icon': None,
'original_name': 'Battery',
'platform': 'switchbot_cloud',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'test-device-id-1_battery',
'unit_of_measurement': <UnitOfRatio.PERCENTAGE: '%'>,
})
# ---
# name: test_no_coordinator_data[Curtain4][sensor.test_device_name_1_battery-state]
StateSnapshot({
'attributes': ReadOnlyDict({
<EntityStateAttribute.DEVICE_CLASS: 'device_class'>: 'battery',
<EntityStateAttribute.FRIENDLY_NAME: 'friendly_name'>: 'test-device-name-1 Battery',
<SensorEntityCapabilityAttribute.STATE_CLASS: 'state_class'>: <SensorStateClass.MEASUREMENT: 'measurement'>,
<EntityStateAttribute.UNIT_OF_MEASUREMENT: 'unit_of_measurement'>: <UnitOfRatio.PERCENTAGE: '%'>,
}),
'context': <ANY>,
'entity_id': 'sensor.test_device_name_1_battery',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_no_coordinator_data[Curtain][sensor.test_device_name_1_battery-entry]
EntityRegistryEntrySnapshot({
'aliases': list([