Add support model [relay switch 2pm] for switchbot cloud (#148381)

This commit is contained in:
Samuel Xiao
2025-09-30 17:49:32 +02:00
committed by GitHub
parent aeadc0c4b0
commit dcb8d4f702
4 changed files with 263 additions and 24 deletions
@@ -13,6 +13,7 @@ from homeassistant.const import (
SERVICE_TURN_ON,
STATE_OFF,
STATE_ON,
STATE_UNKNOWN,
)
from homeassistant.core import HomeAssistant
@@ -108,3 +109,83 @@ async def test_pressmode_bot_no_switch_entity(
entry = await configure_integration(hass)
assert entry.state is ConfigEntryState.LOADED
assert not hass.states.async_entity_ids(SWITCH_DOMAIN)
async def test_switch_relay_2pm_turn_on(
hass: HomeAssistant, mock_list_devices, mock_get_status
) -> None:
"""Test switch relay 2pm turn on."""
mock_list_devices.return_value = [
Device(
version="V1.0",
deviceId="relay-switch-id-1",
deviceName="relay-switch-1",
deviceType="Relay Switch 2PM",
hubDeviceId="test-hub-id",
),
]
mock_get_status.return_value = {"switchStatus": 0}
entry = await configure_integration(hass)
assert entry.state is ConfigEntryState.LOADED
entity_id = "switch.relay_switch_1_channel_1"
assert hass.states.get(entity_id).state == STATE_OFF
with patch.object(SwitchBotAPI, "send_command") as mock_send_command:
await hass.services.async_call(
SWITCH_DOMAIN, SERVICE_TURN_ON, {ATTR_ENTITY_ID: entity_id}, blocking=True
)
mock_send_command.assert_called_once()
async def test_switch_relay_2pm_turn_off(
hass: HomeAssistant, mock_list_devices, mock_get_status
) -> None:
"""Test switch relay 2pm turn off."""
mock_list_devices.return_value = [
Device(
version="V1.0",
deviceId="relay-switch-id-1",
deviceName="relay-switch-1",
deviceType="Relay Switch 2PM",
hubDeviceId="test-hub-id",
),
]
mock_get_status.return_value = {"switchStatus": 0}
entry = await configure_integration(hass)
assert entry.state is ConfigEntryState.LOADED
entity_id = "switch.relay_switch_1_channel_1"
assert hass.states.get(entity_id).state == STATE_OFF
with patch.object(SwitchBotAPI, "send_command") as mock_send_command:
await hass.services.async_call(
SWITCH_DOMAIN, SERVICE_TURN_OFF, {ATTR_ENTITY_ID: entity_id}, blocking=True
)
mock_send_command.assert_called_once()
async def test_switch_relay_2pm_coordination_is_none(
hass: HomeAssistant, mock_list_devices, mock_get_status
) -> None:
"""Test switch relay 2pm coordination is none."""
mock_list_devices.return_value = [
Device(
version="V1.0",
deviceId="relay-switch-id-1",
deviceName="relay-switch-1",
deviceType="Relay Switch 2PM",
hubDeviceId="test-hub-id",
),
]
mock_get_status.return_value = None
entry = await configure_integration(hass)
assert entry.state is ConfigEntryState.LOADED
entity_id = "switch.relay_switch_1_channel_1"
assert hass.states.get(entity_id).state == STATE_UNKNOWN