mirror of
https://github.com/home-assistant/core.git
synced 2025-07-15 09:17:10 +00:00
Add switch platform to Nice G.O. (#124237)
* Add switch platform to Nice G.O. * Replace cover with switch in switch.py * Use icon translations * Fix tests * Use constants in test_switch.py * Use ATTR_ENTITY_ID
This commit is contained in:
parent
69652ca2ca
commit
20f7af25e9
@ -11,7 +11,7 @@ from homeassistant.core import HomeAssistant
|
|||||||
from .coordinator import NiceGOUpdateCoordinator
|
from .coordinator import NiceGOUpdateCoordinator
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
PLATFORMS: list[Platform] = [Platform.COVER, Platform.LIGHT]
|
PLATFORMS: list[Platform] = [Platform.COVER, Platform.LIGHT, Platform.SWITCH]
|
||||||
|
|
||||||
type NiceGOConfigEntry = ConfigEntry[NiceGOUpdateCoordinator]
|
type NiceGOConfigEntry = ConfigEntry[NiceGOUpdateCoordinator]
|
||||||
|
|
||||||
|
@ -46,6 +46,7 @@ class NiceGODevice:
|
|||||||
light_status: bool
|
light_status: bool
|
||||||
fw_version: str
|
fw_version: str
|
||||||
connected: bool
|
connected: bool
|
||||||
|
vacation_mode: bool
|
||||||
|
|
||||||
|
|
||||||
class NiceGOUpdateCoordinator(DataUpdateCoordinator[dict[str, NiceGODevice]]):
|
class NiceGOUpdateCoordinator(DataUpdateCoordinator[dict[str, NiceGODevice]]):
|
||||||
@ -105,6 +106,7 @@ class NiceGOUpdateCoordinator(DataUpdateCoordinator[dict[str, NiceGODevice]]):
|
|||||||
connected = barrier_state.connectionState.connected
|
connected = barrier_state.connectionState.connected
|
||||||
else:
|
else:
|
||||||
connected = False
|
connected = False
|
||||||
|
vacation_mode = barrier_state.reported["vcnMode"]
|
||||||
|
|
||||||
return NiceGODevice(
|
return NiceGODevice(
|
||||||
id=device_id,
|
id=device_id,
|
||||||
@ -113,6 +115,7 @@ class NiceGOUpdateCoordinator(DataUpdateCoordinator[dict[str, NiceGODevice]]):
|
|||||||
light_status=light_status,
|
light_status=light_status,
|
||||||
fw_version=fw_version,
|
fw_version=fw_version,
|
||||||
connected=connected,
|
connected=connected,
|
||||||
|
vacation_mode=vacation_mode,
|
||||||
)
|
)
|
||||||
|
|
||||||
async def _async_update_data(self) -> dict[str, NiceGODevice]:
|
async def _async_update_data(self) -> dict[str, NiceGODevice]:
|
||||||
|
9
homeassistant/components/nice_go/icons.json
Normal file
9
homeassistant/components/nice_go/icons.json
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"entity": {
|
||||||
|
"switch": {
|
||||||
|
"vacation_mode": {
|
||||||
|
"default": "mdi:beach"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -22,6 +22,11 @@
|
|||||||
"light": {
|
"light": {
|
||||||
"name": "[%key:component::light::title%]"
|
"name": "[%key:component::light::title%]"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"switch": {
|
||||||
|
"vacation_mode": {
|
||||||
|
"name": "Vacation mode"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"issues": {
|
"issues": {
|
||||||
|
49
homeassistant/components/nice_go/switch.py
Normal file
49
homeassistant/components/nice_go/switch.py
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
"""Nice G.O. switch platform."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import logging
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from homeassistant.components.switch import SwitchDeviceClass, SwitchEntity
|
||||||
|
from homeassistant.core import HomeAssistant
|
||||||
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
|
from . import NiceGOConfigEntry
|
||||||
|
from .entity import NiceGOEntity
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
async def async_setup_entry(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
config_entry: NiceGOConfigEntry,
|
||||||
|
async_add_entities: AddEntitiesCallback,
|
||||||
|
) -> None:
|
||||||
|
"""Set up Nice G.O. switch."""
|
||||||
|
coordinator = config_entry.runtime_data
|
||||||
|
|
||||||
|
async_add_entities(
|
||||||
|
NiceGOSwitchEntity(coordinator, device_id, device_data.name, "switch")
|
||||||
|
for device_id, device_data in coordinator.data.items()
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class NiceGOSwitchEntity(NiceGOEntity, SwitchEntity):
|
||||||
|
"""Representation of a Nice G.O. switch."""
|
||||||
|
|
||||||
|
_attr_device_class = SwitchDeviceClass.SWITCH
|
||||||
|
_attr_translation_key = "vacation_mode"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_on(self) -> bool:
|
||||||
|
"""Return if switch is on."""
|
||||||
|
return self.data.vacation_mode
|
||||||
|
|
||||||
|
async def async_turn_on(self, **kwargs: Any) -> None:
|
||||||
|
"""Turn the switch on."""
|
||||||
|
await self.coordinator.api.vacation_mode_on(self.data.id)
|
||||||
|
|
||||||
|
async def async_turn_off(self, **kwargs: Any) -> None:
|
||||||
|
"""Turn the switch off."""
|
||||||
|
await self.coordinator.api.vacation_mode_off(self.data.id)
|
@ -49,7 +49,7 @@
|
|||||||
"migrationStatus": "DONE",
|
"migrationStatus": "DONE",
|
||||||
"deviceId": "2",
|
"deviceId": "2",
|
||||||
"lightStatus": "0,100",
|
"lightStatus": "0,100",
|
||||||
"vcnMode": false,
|
"vcnMode": true,
|
||||||
"deviceFwVersion": "1.2.3.4.5.6",
|
"deviceFwVersion": "1.2.3.4.5.6",
|
||||||
"barrierStatus": "1,100,0,0,-1,0,3,0"
|
"barrierStatus": "1,100,0,0,-1,0,3,0"
|
||||||
},
|
},
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
'id': '1',
|
'id': '1',
|
||||||
'light_status': True,
|
'light_status': True,
|
||||||
'name': 'Test Garage 1',
|
'name': 'Test Garage 1',
|
||||||
|
'vacation_mode': False,
|
||||||
}),
|
}),
|
||||||
'2': dict({
|
'2': dict({
|
||||||
'barrier_status': 'open',
|
'barrier_status': 'open',
|
||||||
@ -17,6 +18,7 @@
|
|||||||
'id': '2',
|
'id': '2',
|
||||||
'light_status': False,
|
'light_status': False,
|
||||||
'name': 'Test Garage 2',
|
'name': 'Test Garage 2',
|
||||||
|
'vacation_mode': True,
|
||||||
}),
|
}),
|
||||||
}),
|
}),
|
||||||
'entry': dict({
|
'entry': dict({
|
||||||
|
@ -275,7 +275,7 @@ async def test_no_connection_state(
|
|||||||
"item": {
|
"item": {
|
||||||
"deviceId": "1",
|
"deviceId": "1",
|
||||||
"desired": '{"key": "value"}',
|
"desired": '{"key": "value"}',
|
||||||
"reported": '{"displayName":"Test Garage 1", "migrationStatus":"DONE", "barrierStatus": "1,100,0", "deviceFwVersion": "1.0.0", "lightStatus": "1,100"}',
|
"reported": '{"displayName":"Test Garage 1", "migrationStatus":"DONE", "barrierStatus": "1,100,0", "deviceFwVersion": "1.0.0", "lightStatus": "1,100", "vcnMode": false}',
|
||||||
"connectionState": None,
|
"connectionState": None,
|
||||||
"version": None,
|
"version": None,
|
||||||
"timestamp": None,
|
"timestamp": None,
|
||||||
|
43
tests/components/nice_go/test_switch.py
Normal file
43
tests/components/nice_go/test_switch.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
"""Nice G.O. switch tests."""
|
||||||
|
|
||||||
|
from unittest.mock import AsyncMock
|
||||||
|
|
||||||
|
from homeassistant.components.switch import (
|
||||||
|
DOMAIN as SWITCH_DOMAIN,
|
||||||
|
SERVICE_TURN_OFF,
|
||||||
|
SERVICE_TURN_ON,
|
||||||
|
)
|
||||||
|
from homeassistant.const import ATTR_ENTITY_ID, Platform
|
||||||
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
|
from . import setup_integration
|
||||||
|
|
||||||
|
from tests.common import MockConfigEntry
|
||||||
|
|
||||||
|
|
||||||
|
async def test_turn_on(
|
||||||
|
hass: HomeAssistant, mock_nice_go: AsyncMock, mock_config_entry: MockConfigEntry
|
||||||
|
) -> None:
|
||||||
|
"""Test turn on switch."""
|
||||||
|
await setup_integration(hass, mock_config_entry, [Platform.SWITCH])
|
||||||
|
await hass.services.async_call(
|
||||||
|
SWITCH_DOMAIN,
|
||||||
|
SERVICE_TURN_ON,
|
||||||
|
{ATTR_ENTITY_ID: "switch.test_garage_1_vacation_mode"},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
mock_nice_go.vacation_mode_on.assert_called_once_with("1")
|
||||||
|
|
||||||
|
|
||||||
|
async def test_turn_off(
|
||||||
|
hass: HomeAssistant, mock_nice_go: AsyncMock, mock_config_entry: MockConfigEntry
|
||||||
|
) -> None:
|
||||||
|
"""Test turn off switch."""
|
||||||
|
await setup_integration(hass, mock_config_entry, [Platform.SWITCH])
|
||||||
|
await hass.services.async_call(
|
||||||
|
SWITCH_DOMAIN,
|
||||||
|
SERVICE_TURN_OFF,
|
||||||
|
{ATTR_ENTITY_ID: "switch.test_garage_2_vacation_mode"},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
mock_nice_go.vacation_mode_off.assert_called_once_with("2")
|
Loading…
x
Reference in New Issue
Block a user